diff options
| author | Akshay Nair <phenax5@gmail.com> | 2023-08-18 11:02:34 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2023-08-18 11:04:04 +0530 |
| commit | 18a60b5f53cdff3f2b9c8cecd3f34cadc6f08865 (patch) | |
| tree | 95d4d306f45f201492d07ac9621b7d05ac185593 /examples/todo-list | |
| parent | c8cdbd8d6669b1eb1a5d2389893c2460bef73d76 (diff) | |
| download | css-everything-18a60b5f53cdff3f2b9c8cecd3f34cadc6f08865.tar.gz css-everything-18a60b5f53cdff3f2b9c8cecd3f34cadc6f08865.zip | |
feat: call arbitrary method on node + added :parent selector
Diffstat (limited to 'examples/todo-list')
| -rw-r--r-- | examples/todo-list/style.css | 80 |
1 files changed, 68 insertions, 12 deletions
diff --git a/examples/todo-list/style.css b/examples/todo-list/style.css index d4cd391..35e44fd 100644 --- a/examples/todo-list/style.css +++ b/examples/todo-list/style.css @@ -3,6 +3,7 @@ --color-accent: #5180e9; font-size: 16px; + font-family: sans-serif; color: #555; --cssx-children: main#container; @@ -80,47 +81,102 @@ body * { box-sizing: border-box; } [data-instance=task-item] { --text: "default text"; --done: "false"; + --is-editing: "false"; padding: 1rem; - cursor: pointer; display: flex; width: 100%; align-items: center; --cssx-on-mount: update(--task-item-id, attr(data-element)); - --cssx-on-click: update(--done, if(get-var(--done), "false", "true")); - --cssx-on-update: update(":scope [data-element=checkbox]", --checked, if(get-var(--done), true, false)); + --cssx-on-update: + update( + ':scope [data-element=edit-task-form]', + display, + if(get-var(--is-editing), 'block', 'none') + ) + update( + ':scope [data-element=task-text]', + display, + if(get-var(--is-editing), 'none', 'block') + ) + if(get-var(--is-editing), + set-attr(':scope [data-element=edit-task-input]', value, get-var(--text)), + "") + if(get-var(--is-editing), + call(':scope [data-element=edit-task-input]', focus), + "") + ; + + --cssx-children: + div#checkbox + div#task-text + form#edit-task-form + button#delete-task + ; +} - --cssx-children: div#checkbox div#task-text button#delete-task; +[data-instance=task-item]:not(:first-child) { + content: ""; + border-top: 1px solid var(--color-gray); } -[data-instance=task-item] [data-element=task-text] { +[data-element=task-text] { flex: 2; + + --cssx-on-click: update(get-var(--task-item-id), --is-editing, "true"); } -[data-instance=task-item] [data-element=task-text]::after { +[data-element=task-text]::after { content: var(--text); padding-left: 0.8rem; } -[data-instance=task-item]:not(:first-child) { - content: ""; - border-top: 1px solid var(--color-gray); +[data-element=edit-task-form] { + display: none; + width: 100%; + padding: 0 .8rem; + + --cssx-children: input#edit-task-input; + --cssx-on-submit: + prevent-default() + update( + get-var(--task-item-id), + --text, + attr(':scope [data-element=edit-task-input]', value) + ) + update(get-var(--task-item-id), --is-editing, "false") + ; +} +[data-element=edit-task-input] { + display: block; + width: 100%; + border: none; + border-bottom: 1px solid gray; + font-size: 1rem; +} +[data-element=edit-task-input]:focus { + outline: 1px solid #aaa; } -[data-instance=task-item] [data-element=checkbox] { +[data-element=checkbox] { --checked: false; width: 18px; height: 18px; border: 2px solid gray; background-color: transparent; + cursor: pointer; + + --cssx-on-click: update(--checked, if(get-var(--checked), false, true)); --cssx-on-update: - update(background-color, if(get-var(--checked), get-var(--color-accent), transparent)); + update(get-var(--task-item-id), --done, get-var(--checked)) + update(background-color, if(get-var(--checked), get-var(--color-accent), transparent)) + ; } -[data-instance=task-item] [data-element=delete-task] { +[data-element=delete-task] { --cssx-text: 'Delete'; --cssx-on-click: remove-element(get-var(--task-item-id)); } |
