use custom elements throughout

This commit is contained in:
nate smith 2024-02-12 23:47:18 -08:00
parent 6d517b1c5c
commit b2a7e31eb9
2 changed files with 45 additions and 20 deletions

View File

@ -1,12 +1,33 @@
class LineRemover extends HTMLButtonElement {
constructor() {
super();
this.container = this.closest("div.linecontainer").parentElement;
this.addEventListener("click", (e) => {
this.container.remove();
});
}
}
customElements.define("line-remover", LineRemover, { extends: "button" });
class LineAdder extends HTMLButtonElement {
constructor() {
super();
this.addEventListener("click", (e) => {
document.querySelector("div[is=lines-div]").add()
});
}
}
customElements.define("line-adder", LineAdder, { extends: "button" });
class PoemLine extends HTMLDivElement { class PoemLine extends HTMLDivElement {
constructor() { constructor() {
super(); super();
const ltp = document.querySelector("#linetmpl"); const ltp = document.querySelector("#linetmpl");
var l = ltp.content.cloneNode(true); var l = ltp.content.cloneNode(true);
this.appendChild(l); this.appendChild(l);
this.addEventListener("regen", function() { this.addEventListener("regen", this.regen); // TODO will this be bound?
console.log("poot");
});
} }
regen() { regen() {
@ -23,18 +44,22 @@ class PoemLine extends HTMLDivElement {
} }
customElements.define("poem-line", PoemLine, { extends: "div" }); customElements.define("poem-line", PoemLine, { extends: "div" });
const regen = new Event("regen"); const regen = new Event("regen");
function addLine() { class Lines extends HTMLDivElement {
var ld = document.createElement("div", { is: "poem-line" }); constructor() {
document.querySelector("#lines").append(ld); super();
ld.regen(); for (var i = 0; i < 10; i++) {
} this.add();
}
}
function main() { add() {
for (var i = 0; i < 10; i++) { var ld = document.createElement("div", { is: "poem-line" });
addLine(); this.append(ld);
ld.regen();
} }
} }
main(); customElements.define("lines-div", Lines, { extends: "div" });

View File

@ -12,16 +12,17 @@
<template id="linetmpl"> <template id="linetmpl">
<div class="linecontainer unpinned" hx-trigger="regen from:body" hx-swap="outerHTML" hx-get="/line"> <div class="linecontainer unpinned" hx-trigger="regen from:body" hx-swap="outerHTML" hx-get="/line">
<span class="linecontrols"> <span class="linecontrols">
<button class="pin">pin</button> <button >pin</button>
<button class"edit">edit</button> <button >edit</button>
<button class="moveup">up</button> <button >up</button>
<button class="movedown">down</button> <button >down</button>
<button class="remove">remove</button> <button is="line-remover">remove</button>
</span> </span>
<span class="linetext"></span> <span class="linetext"></span>
</div> </div>
</template> </template>
<h1>Trunkless</h1> <h1>Trunkless</h1>
<script src="/main.js"></script>
<div id="pagecontrols"> <div id="pagecontrols">
<a href="/about">about</a> <a href="/about">about</a>
<a id="togglescheme" href="/#togglescheme">light|dark</a> <a id="togglescheme" href="/#togglescheme">light|dark</a>
@ -34,11 +35,10 @@
<p id="dna"> <p id="dna">
todo, dna display todo, dna display
</p> </p>
<div id="lines"></div> <div is="lines-div"></div>
<div> <div>
<button>add</button> <button is="line-adder">add</button>
</div> </div>
<script src="/main.js"></script>
</body> </body>
</html> </html>