UNPKG

1.69 kBJavaScriptView Raw
1import { addNS } from "./h";
2import { vnode } from "./vnode";
3import { htmlDomApi } from "./htmldomapi";
4export function toVNode(node, domApi) {
5 const api = domApi !== undefined ? domApi : htmlDomApi;
6 let text;
7 if (api.isElement(node)) {
8 const id = node.id ? "#" + node.id : "";
9 const cn = node.getAttribute("class");
10 const c = cn ? "." + cn.split(" ").join(".") : "";
11 const sel = api.tagName(node).toLowerCase() + id + c;
12 const attrs = {};
13 const children = [];
14 let name;
15 let i, n;
16 const elmAttrs = node.attributes;
17 const elmChildren = node.childNodes;
18 for (i = 0, n = elmAttrs.length; i < n; i++) {
19 name = elmAttrs[i].nodeName;
20 if (name !== "id" && name !== "class") {
21 attrs[name] = elmAttrs[i].nodeValue;
22 }
23 }
24 for (i = 0, n = elmChildren.length; i < n; i++) {
25 children.push(toVNode(elmChildren[i], domApi));
26 }
27 const data = { attrs };
28 if (sel[0] === "s" &&
29 sel[1] === "v" &&
30 sel[2] === "g" &&
31 (sel.length === 3 || sel[3] === "." || sel[3] === "#")) {
32 addNS(data, children, sel);
33 }
34 return vnode(sel, data, children, undefined, node);
35 }
36 else if (api.isText(node)) {
37 text = api.getTextContent(node);
38 return vnode(undefined, undefined, undefined, text, node);
39 }
40 else if (api.isComment(node)) {
41 text = api.getTextContent(node);
42 return vnode("!", {}, [], text, node);
43 }
44 else {
45 return vnode("", {}, [], undefined, node);
46 }
47}
48//# sourceMappingURL=tovnode.js.map
\No newline at end of file