UNPKG

declarative-element

Version:

Lightweight, simple and reliable boilerplate wrapper for DOM-elements creation

2 lines (1 loc) 1.55 kB
var i=t=>{if(t===null)return!1;switch(typeof t){case"function":case"object":return!0;default:return!1}};var s=t=>{if(!i(t))return!1;let e="children";return e in t&&Array.isArray(t[e])};var p=t=>{if(!i(t))return!1;let e="innerText";return e in t&&typeof t[e]=="string"};var f=t=>{if(!i(t))return!1;let e="tagName";return e in t&&typeof t[e]=="string"};var a=t=>t instanceof HTMLElement;var T=t=>{if(!i(t))return!1;let e="attributes";return e in t&&i(t[e])};var c=({element:t,node:e})=>{a(t)&&T(e)&&Object.entries(e.attributes).forEach(([r,n])=>{t.setAttribute(r,n)})};function o(t){return f(t)?document.createElement(t.tagName):document.createTextNode("")}var d=(t,e)=>{let r="parent",n={value:e,writable:!1,enumerable:!0,configurable:!1};return Object.create(t,{[r]:n})};var h=({element:t,node:e})=>{e.parent!==null&&e.parent.appendChild(t)};var l=({element:t,node:e})=>{if(!p(e))return;let{innerText:r}=e;if(a(t)){t.innerHTML=r;return}t.nodeValue=r};var u=t=>{let e=t.unprocessedNodes[0];e!==void 0&&(t.node=e,t.element=o(e))};var y=(t,e)=>s(t)?t.children.map(r=>d(r,e)):[];var x=({element:t,node:e,unprocessedNodes:r})=>{let n=a(t)?y(e,t):[];r.splice(0,1,...n)};var N=t=>{let e=o(t),r=d(t,null),n=[r],m={unprocessedNodes:n,node:r,element:e};do c(m),l(m),x(m),h(m),u(m);while(n.length!==0);return e};function W(t){if(p(t))return g(t);if(s(t))return N(t);if(f(t))return E(t);throw new Error("Unsupported root node type")}var g=t=>{let e=o(t);return l({element:e,node:t}),e},E=t=>{let e=o(t);return c({element:e,node:t}),e};export{W as getElement};