joicomponents
Version:
Design patterns to build native web components
55 lines (51 loc) • 1.14 kB
HTML
<script type="module" src="TreeNode.js"></script>
<style>
tree-node {
display: block;
padding-left: 10px;
}
tree-node[open] {
color: green;
}
tree-node[_empty] {
color: black;
}
tree-node[selected] {
font-style: italic;
}
tree-node:not([selected]) {
font-style: normal;
}
tree-node:not([open]):not([_empty]) {
color: red;
}
tree-node:not([open]) > tree-node {
display: none;
}
tree-node > tree-node {
--tree-node-prefix: "×";
}
</style>
<tree-node id="root">book
<tree-node>
chapter 1
<tree-node selectable selected>
chapter 1.1
<tree-node open>chapter 1.1.1</tree-node>
<tree-node>chapter 1.1.2</tree-node>
</tree-node>
<tree-node id="a">chapter 1.2</tree-node>
</tree-node>
<tree-node>
chapter 2
<tree-node open>chapter 2.1</tree-node>
<tree-node>chapter 2.2</tree-node>
</tree-node>
</tree-node>
<script>
const clone = document.querySelector("tree-node").cloneNode(true);
clone.id = undefined;
setTimeout(function () {
document.querySelector("tree-node#a").appendChild(clone);
}, 3000);
</script>