import { addNS } from "./h.js"; import { vnode } from "./vnode.js"; import { htmlDomApi } from "./htmldomapi.js"; /** * Transforms the given attribute name into a valid dataset property key * according to https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset#name_conversion * * @param attributeName data- attribute name, must start with data- */ function datasetKey(attributeName) { return attributeName .slice(5) .replace(/-([a-z])/g, (_, ch) => ch.toUpperCase()); } export function toVNode(node, domApi) { var _a; const api = domApi !== undefined ? domApi : htmlDomApi; let text; if (api.isElement(node)) { const id = node.id ? "#" + node.id : ""; const cn = (_a = node.getAttribute("class")) === null || _a === void 0 ? void 0 : _a.match(/[^\t\r\n\f ]+/g); const c = cn ? "." + cn.join(".") : ""; const sel = api.tagName(node).toLowerCase() + id + c; const attrs = {}; const dataset = {}; const data = {}; const children = []; let name; let i, n; const elmAttrs = node.attributes; const elmChildren = node.childNodes; for (i = 0, n = elmAttrs.length; i < n; i++) { name = elmAttrs[i].nodeName; if (name.startsWith("data-")) { dataset[datasetKey(name)] = elmAttrs[i].nodeValue || ""; } else if (name !== "id" && name !== "class") { attrs[name] = elmAttrs[i].nodeValue; } } for (i = 0, n = elmChildren.length; i < n; i++) { children.push(toVNode(elmChildren[i], domApi)); } if (Object.keys(attrs).length > 0) data.attrs = attrs; if (Object.keys(dataset).length > 0) data.dataset = dataset; if (sel.startsWith("svg") && (sel.length === 3 || sel[3] === "." || sel[3] === "#")) { addNS(data, children, sel); } return vnode(sel, data, children, undefined, node); } else if (api.isText(node)) { text = api.getTextContent(node); return vnode(undefined, undefined, undefined, text, node); } else if (api.isComment(node)) { text = api.getTextContent(node); return vnode("!", {}, [], text, node); } else { return vnode("", {}, [], undefined, node); } } //# sourceMappingURL=tovnode.js.map