/**@jsx h */ function h(type, props, ...children) { return { type, props: props || {}, children }; } function setBoolean($target, name, value) { if (value) { $target.setAttribute(name, value); $target[name] = true; } else { $target[name] = false; } } function isCustomProp(name) { return false; } function setProp($target, name, value) { if (isCustomProp(name)) { return; } else if (name === "className") { $target.setAttribute("class", value); } else if (typeof value === "boolean") { setBoolean($target, name, value); } else { $target.setAttribute(name, value); } } function setProps($target, props) { Object.keys(props).forEach((name) => { setProp($target, name, props[name]); }); } function createElement(node) { if (typeof node === "string") { return document.createTextNode(node); } const $el = document.createElement(node.type); setProps($el, node.props); node.children.map(createElement).forEach($el.appendChild.bind($el)); return $el; } const f = ( ); const $root = document.getElementById("root"); $root.appendChild(createElement(f)); function removeBooleanProp($target, name) { $target.removeAttribute(name); $target[name] = false; } function removeProp($target, name, value) { if (isCustomProp(name)) { return; } else if (name === "className") { $target.removeAttribute("class"); } else if (typeof value === "boolean") { removeBooleanProp($target, name); } }