mirror of
https://github.com/jaandrle/deka-dom-el
synced 2025-04-02 20:15:53 +02:00
* 🔤 ⚡ T now uses DocumentFragment * 🔤 * 🔤 ⚡ * 🐛 lint * ⚡ cleanup * ⚡ 🔤 lib download * ⚡ 🔤 ui * ⚡ reorganize files * ⚡ on.host * 🐛 on.* types * ⚡ 🔤 cdn * 🔤 converter * 🐛 signal.set(value, force) * ⚡ 🔤 * 🔤 ⚡ converter - convert also comments * ⚡ bs/build * 🔤 ui p14 * 🔤 * 🔤 Examples * 🔤 * 🐛 now only el(..., string|number) * 🐛 fixes #38 * 🔤 * ⚡ on.host → on.defer * 🔤 * 📺
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
import { S } from "deka-dom-el/signals";
|
||
const todos= S([], {
|
||
push(item){
|
||
this.value.push(S(item));
|
||
},
|
||
pop(){
|
||
const removed= this.value.pop();
|
||
if(removed) S.clear(removed);
|
||
},
|
||
[S.symbols.onclear](){ // this covers `S.clear(todos)`
|
||
S.clear(...this.value);
|
||
}
|
||
});
|
||
|
||
import { el, on } from "deka-dom-el";
|
||
/** @type {ddeElementAddon<HTMLFormElement>} */
|
||
const onsubmit= on("submit", function(event){
|
||
event.preventDefault();
|
||
const data= new FormData(this);
|
||
switch (data.get("op")){
|
||
case "A"/*dd*/:
|
||
S.action(todos, "push", data.get("todo"));
|
||
break;
|
||
case "E"/*dit*/: {
|
||
const last= todos.get().at(-1);
|
||
if(!last) break;
|
||
last.set(data.get("todo"));
|
||
break;
|
||
}
|
||
case "R"/*emove*/:
|
||
S.action(todos, "pop");
|
||
break;
|
||
}
|
||
});
|
||
document.body.append(
|
||
el("ul").append(
|
||
S.el(todos, todos=>
|
||
todos.map(textContent=> el("li", textContent)))
|
||
),
|
||
el("form", null, onsubmit).append(
|
||
el("input", { type: "text", name: "todo", placeholder: "Todo’s text" }),
|
||
el(radio, { textContent: "Add", checked: true }),
|
||
el(radio, { textContent: "Edit last" }),
|
||
el(radio, { textContent: "Remove" }),
|
||
el("button", "Submit")
|
||
)
|
||
);
|
||
document.head.append(
|
||
el("style", "form{ display: flex; flex-flow: column nowrap; }")
|
||
);
|
||
function radio({ textContent, checked= false }){
|
||
return el("label").append(
|
||
el("input", { type: "radio", name: "op", value: textContent[0], checked }),
|
||
" ",textContent
|
||
)
|
||
}
|