import XNode from "@web-atoms/core/dist/core/XNode"; import StyleHelper from "./dom/StyleHelper"; export default function DomToString(node: XNode) { const div = document.createElement("div"); render(div,
{ node }
); return div.innerHTML; } function render(div: HTMLDivElement, node: XNode) { while(typeof node.name === "function") { node = node.name(node.attributes, ... node.children); } const a = node.attributes; if (a) { for (const key in a) { if (Object.prototype.hasOwnProperty.call(a, key)) { let element = a[key]; if (element === null || element === void 0) { continue; } if (typeof element === "object" && key === "style") { element = StyleHelper.styleToString(element); } else { element = element.toString(); } if(!element) { continue; } if (key === "text") { div.textContent = element; continue; } if (key.startsWith("style") && key.length > 5) { div.style[key.substring(5)] = element; continue; } if(key.startsWith("data") && key.length > 4) { if (key.indexOf("-") !== -1) { div.setAttribute(key, element); continue; } div.dataset[key.substring(4)] = element; continue; } // div[key] = element; div.setAttribute(key, element); } } } if (!node.children?.length) { return; } for (let iterator of node.children) { if(iterator === false || iterator === void 0 || iterator === null) { continue; } if (typeof iterator !== "object") { div.appendChild(document.createTextNode(iterator.toString())); continue; } while (typeof iterator.name === "function") { iterator = iterator.name(iterator.attributes, ... iterator.children); } const child = document.createElement(iterator.name); div.appendChild(child); render(child, iterator); } }