this repo has no description
at cactus 66 lines 1.6 kB view raw
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}