teddytags
Version:
The superfast way to custom elements.
2 lines (1 loc) • 7.73 kB
JavaScript
function e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function n(n){for(var o=1;o<arguments.length;o++){var r=null!=arguments[o]?arguments[o]:{};o%2?t(Object(r),!0).forEach((function(t){e(n,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}))}return n}"NodeList"in window&&!NodeList.prototype.forEach&&(console.info("Loaded NodeList.prototype.forEach Polyfill"),NodeList.prototype.forEach=function(e,t){t=t||window;for(var n=0;n<this.length;n++)e.call(t,this[n],n,this)});var o=function(e,t){t=t||{};for(var o=arguments.length,r=new Array(o>2?o-2:0),i=2;i<o;i++)r[i-2]=arguments[i];if(e.prototype&&e.prototype.isClassComponent){var a=[e,n({},t,{children:r})];return a}if("function"==typeof e){var c=e(n({},t,{children:r}));return c}var d={type:e,props:n({},t,{children:r})};return d},r=function(e){return e.children.unshift("__FRAGMENT__"),e.children};function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var a=function(e,t){if(e&&t){var n="";Array.prototype.slice.call(e).map((function(e){n+=e.toString()}));var o="";return Array.prototype.slice.call(t).map((function(e){o+=e.toString()})),n===o}},c=function(e,t,n){3===e.nodeType&&e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue);e:if(e.nodeName===t.nodeName&&a(e.attributes,t.attributes)&&1===e.nodeType)for(var o=0;o<e.childNodes.length;o++){var r=t.childNodes[o],i=e.childNodes[o];if(e.childNodes.length<t.childNodes.length){for(var c=e.childNodes.length;c<t.childNodes.length;c++)e.appendChild(t.childNodes[c]);break e}if(e.childNodes.length>t.childNodes.length){if(n)break e;e.parentElement.replaceChild(t,e);break e}r.firstChild&&i.firstChild?r.firstChild.nodeValue!==i.firstChild.nodeValue&&(i.firstChild.nodeValue=r.firstChild.nodeValue):r.nodeValue!==i.nodeValue&&(i.nodeValue=r.nodeValue)}if(e.nodeName===t.nodeName&&!a(e.attributes,t.attributes)&&1===e.nodeType){for(;e.attributes.length>0;)e.removeAttribute(e.attributes[0].name);Array.prototype.slice.call(t.attributes).forEach((function(t){e.setAttribute(t.name,t.value)}))}},d=function(e,t,n,o){if("UPDATE"===n){var r,i=s(t,void 0,!1);if(Array.isArray(i)&&(r=!!e.__tdNode__&&e.__tdNode__.toString()===i[1].toString(),i=i[0]),1===e.childElementCount)e.childNodes.forEach((function(e){e.nodeName===i.nodeName&&e.innerHTML!==i.innerHTML&&c(e,i,r)}));else if(e.childElementCount>1&&"#document-fragment"===i.nodeName)e.childNodes.forEach((function(e,t){var n=i.childNodes[t];c(e,n,r)})),t.dom=e;else{e.childNodes.forEach((function(e,n){e.nodeName===i.nodeName&&e.innerHTML!==i.innerHTML&&(c(e,i,r),t.dom=e)}))}return e}if("PLACEMENT"===n){var a=s(t,e,!0),d=Array.isArray(a)?a[0]:a,u=a[1];return Array.isArray(d)&&(u=(d=d[0])[1]),e.__tdNode__=t,a[1]&&(e.__tdNode__=a[1]),u&&u.componentWillMount&&o&&u.componentWillMount(d),e.appendChild(d),u&&u.componentDidMount&&o&&u.componentDidMount(d),d}},u=function(e,t){d(t,e,"PLACEMENT",!0)},l=function(e,t){d(t,e,"PLACEMENT",!1)},s=function e(t,n,o){var r=["string","number","boolean"];if(r.indexOf(i(t))>-1)return document.createTextNode(t);if(Array.isArray(t)){if("__FRAGMENT__"===t[0]){var a=document.createDocumentFragment();return t.shift(),t.forEach((function(e){o?u(e,a):l(e,a)})),a}var c=new(0,t[0])(t[1]);c.node=c.render(),c.base=n;var d=e(c.node,void 0,!0);return c.dom=d,[d,c]}var s=document.createElement(t.type);return function(e,t){var n=Object.keys(e),o=function(e){return"ref"===e},r=function(e){return["innerHTML","className","style"].indexOf(e)>-1},i=function(e){return 0===e.indexOf("on")};n.filter(o).forEach((function(n){e[n].element=t})),n.filter(i).forEach((function(n){var o=n.substring(2).toLowerCase();t.addEventListener(o,e[n])})),n.filter((function(e){return"children"!==e&&!i(e)&&!r(e)&&!o(e)})).map((function(n){t.setAttribute(n,e[n].toString())})),n.filter(r).map((function(n){"style"===n?"string"==typeof e[n]?t.style.cssText=e[n]:function(e,t){for(var n in t)e.style[n]=t[n]}(t,e[n]):t[n]=e[n]}))}(t.props,s),t.props.children.forEach((function(e){r.indexOf(i(e))>-1?s.appendChild(document.createTextNode(e)):o?u(e,s):l(e,s)})),t.dom=s,t.base=n,s},f=function(e,t){t.__tdNode__?d(t,e,"UPDATE",!0):d(t,e,"PLACEMENT",!0)},p=function(e){return e.dom},m=function(e){var t=e.__tdNode__;return!!t&&(t.base.removeChild(t.dom),e.__tdNode__=void 0,t.componentDidUnmount&&t.componentDidUnmount(),!0)},y=function(){return{element:null}};function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}var b=function(){function e(t){h(this,e),this.props=t}var t,n,o;return t=e,(n=[{key:"setState",value:function(e){this.state=Object.create(e),function(e){if(e.base&&e.dom){var t=e.render(),n=[];n.push(e.base.innerHTML);var o=e.dom;e.base=d(e.base,t,"UPDATE",!1),n.push(e.base.innerHTML),n[0]!==n[1]&&e.componentDidUpdate(o,e.dom)}}(this)}},{key:"render",value:function(){}},{key:"componentDidMount",value:function(e){}},{key:"componentDidUnmount",value:function(){}},{key:"componentDidUpdate",value:function(e,t){}},{key:"componentWillMount",value:function(e){}}])&&v(t.prototype,n),o&&v(t,o),e}();b.prototype.isClassComponent=!0;var g=function(e){return window.TagRegistry.elements[e]};window.TagRegistry={elements:{},getEntry:g,getNodes:function(e){return g(e).nodes}};var N=function(e,t){window.TagRegistry.elements[e]=t},w=function(e,t){var n=window.TagRegistry.getNodes(e),o=t.nodes.splice(n.length-1);window.TagRegistry.elements[e].nodes=window.TagRegistry.getNodes(e).concat(o)},_=function(e,t){var n={from:t,nodes:[]};return document.querySelectorAll(e).forEach((function(o){var r=document.createElement(t);r.tag={originalName:e,from:t},Array.prototype.slice.call(o.attributes).forEach((function(e){r.setAttribute(e.name,e.value)})),r.nodeValue=o.nodeValue,o.parentElement.replaceChild(r,o),n.nodes.push(r)})),n},E=function(e,t){var n=_(e,"div");return n.from=t,n.nodes.forEach((function(n){n.tag.from=t;n.setAttribute("data-component",t.name||e);var r={};Array.prototype.slice.call(n.attributes).forEach((function(e){r[e.name]=e.value})),f(o(t,r),n)})),n},T=function(){var e=document.body;new(window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver)((function(e){e.forEach((function(e){"childList"===e.type&&e.addedNodes.forEach((function(e){var t=Object.keys(window.TagRegistry.elements);1===e.nodeType&&t.forEach((function(t){t.toUpperCase(),e.nodeName&&function(e,t){if("string"==typeof t){var n=_(e,t);window.TagRegistry.elements[e]&&w(e,n)}else{var o=E(e,t);window.TagRegistry.elements[e]&&w(e,o)}}(t,window.TagRegistry.elements[t].from)}))}))}))})).observe(e,{childList:!0,subtree:!0}),window.__TD_DOM_OBSERVER__=!0},O=function e(t){if(h(this,e),this.originalName=t.name,this.current=t.to,"string"==typeof t.to){var n=_(t.name,t.to);N(t.name,n)}else{var o=E(t.name,t.to);N(t.name,o)}this.DOMList=window.TagRegistry.getNodes(this.originalName),!0!==window.__TD_DOM_OBSERVER__&&T()};export{b as Component,r as Fragment,O as Tag,y as createRef,p as getDOMNode,o as h,f as render,m as unmountComponent};