this repo has no description
1let temp = document.createElement('template')
2function 𐀶([html]) {
3 temp.innerHTML = html.replace(/\s*?\n\s*/g, "")
4 let node = temp.content
5 if (node.childNodes.length==1)
6 node = node.firstChild
7 return document.importNode.bind(document, node, true)
8}
9
10let CREATE = {
11 node: function(node) {
12 if ('string'==typeof node)
13 return CREATE.text(node)
14 if (node.content)
15 return CREATE.branch(node)
16 return CREATE.leaf(node)
17 },
18
19 branch: function(node) {
20 let e = this()
21 let [type, args] = e.firstChild.childNodes
22 let content = e.lastChild
23 type.textContent = node.type
24 if (node.args)
25 args.textContent = JSON.stringify(node.args)
26 else
27 args.remove()
28 // if (node.content.length == 1)
29 // e.classList.add('one')
30 if (node.content.every(x=>'string'==typeof x || !x.content || !x.content.length))
31 e.classList.add('one')
32 return content
33 }.bind(𐀶`
34<tree-node class='branch'>
35 <div><span class='type'></span><span class='args'></span></div>
36 <node-content>
37`),
38
39 leaf: function(node) {
40 let e = this()
41 let [type, args] = e.firstChild.childNodes
42 type.textContent = node.type
43 if (node.args)
44 args.textContent = JSON.stringify(node.args)
45 else
46 args.remove()
47 return e
48 }.bind(𐀶`
49<tree-node class='leaf'>
50 <div><span class='type'></span><span class='args'></span></div>
51`),
52
53 text: function(node) {
54 let e = this()
55 e.textContent = JSON.stringify(node)
56 return e
57 }.bind(𐀶`<tree-node class='text'>`),
58}
59
60function draw_tree(node) {
61 let elem = CREATE.node(node)
62 if (node.content)
63 for (let n of node.content)
64 elem.append(draw_tree(n))
65 return elem.getRootNode()
66}