-
Notifications
You must be signed in to change notification settings - Fork 0
/
framework.react.js
39 lines (36 loc) · 1.21 KB
/
framework.react.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function react_template(React) {
var clearseam = $clearseam.react(React)
return function(name, directives){
var tmpltag = fromDOM(React.createElement, document.querySelector("template[name='"+name+"']").content)
return clearseam(tmpltag, directives)
}
}
function fromDOM(h, dom) {
if(dom.nodeName === "#text") return dom.textContent
if(dom.nodeName === "#cdata-section") return dom.textContent
if(dom.nodeName === "#comment") return []
var res = {}
if(dom.tagName !== undefined) res.tag = dom.tagName
if(dom.attributes) {
var len = dom.attributes.length
var attrs = {}
for(var i = 0; i < len; i++) {
var attr = dom.attributes[i]
attrs[attr.name] = attr.value
}
if(len > 0) res.attrs = attrs
}
if(dom.childNodes){
var children = []
var len = dom.childNodes.length
for(var i = 0; i < len; i++){
var child = dom.childNodes[i]
children.push(fromDOM(h, child))
}
if(len > 0) res.children = children
}
res = h(res.tag, res.attrs, res.children)
if(dom instanceof DocumentFragment) res = res.children
//console.log("%o -> %o", dom, res)
return res
}