1 | import { addNS } from "./h";
|
2 | import { vnode } from "./vnode";
|
3 | import { htmlDomApi } from "./htmldomapi";
|
4 | export 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 |
|
\ | No newline at end of file |