tiny-dream
Version:
A tiny Incremental DOM implementation for modern browsers.
6 lines • 4.29 kB
JavaScript
/*!
* Tiny Dream v0.5.3
* (c) 2018 Yoshihide Shiono
* Released under the MIT License.
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.TinyDream={})}(this,function(t){"use strict";function e(){}e.prototype=Object.create(null);var n=function(){return new e},r=Object.prototype.hasOwnProperty,o=function(t,e){return r.call(t,e)},i=function(t){var e=function(){for(var t=void 0,e=t;t;)e=t,t=t.parentNode;return e}.call(t);return e===document?e.activeElement:null},u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a=function t(e,r,o){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.attributes=[],this.attributesApplied=!1,this.key=r,this.keyMap=n(),this.focused=!1,this.nameOrCtor=e,this.text=null,this.typeId=o},f=function(t,e,n,r){var o=new a(e,n,r);return t.__TinyDreamDOMData=o,o},l=function t(e){if(!e.__TinyDreamDOMData){var n=function(t){try{return t instanceof HTMLElement}catch(e){return"object"===(void 0===t?"undefined":u(t))&&1===t.nodeType&&"object"===u(t.style)&&"object"===u(t.ownerDocument)}}(e),r=n?e.localName:e.nodeName,o=n?e.getAttribute("key"):null,i=e.typeId,a=f(e,r,o,i);if(o&&(c(e.parentNode).keyMap[o]=e),n)for(var l=e.attributes,s=a.attributes,p=0;p<l.length;p+=1){var d=l[p],y=d.name,v=d.value;s.push(y),s.push(v)}for(var m=e.firstChild;m;m=m.nextSibling)t(m)}},c=function(t){return l(t),t.__TinyDreamDOMData},s=function(t,e,n,r,o){var i,u=void 0;if("function"==typeof n)u=new n;else{var a=(i=e,"svg"===n?"http://www.w3.org/2000/svg":"foreignObject"===c(i).nameOrCtor?null:i.namespaceURI);u=a?t.createElementNS(a,n):t.createElement(n)}return f(u,n,r,o),u},p=null,d=null,y=null,v=function(t,e){for(var n=0;n<t.length;n+=1)c(t[n]).focused=e},m=function(t,e,n,r){var o=c(t);return e===o.nameOrCtor&&r===o.typeId&&n==o.key},b=function(t,e,n){if(!d||!m(d,t,e,n)){var r,o=c(y),i=o&&o.keyMap,u=void 0;if(e){var a=i[e];a&&(m(a,t,e,n)?u=a:c(a).key=null)}u||("#text"===t?(r=p.createTextNode(""),f(r,"#text",null),u=r):u=s(p,y,t,e,n),e&&(i[e]=u)),c(u).focused?function(t,e,n){for(var r=e.nextSibling,o=n;o!==e;){var i=o.nextSibling;t.insertBefore(o,r),o=i}}(y,u,d):y.insertBefore(u,d),d=u}},h=function(){y=d,d=null},x=function(){return d?d.nextSibling:y.firstChild},g=function(){d=x()},w=function(){!function(t,e,n){for(var r=c(t).keyMap,o=e;o!==n;){var i=o.nextSibling,u=c(o).key;t.removeChild(o),u&&delete r[u],o=i}}(y,x(),null),d=y,y=y.parentNode},_=function(t,e,n){var r=p,o=d,u=y;p=t&&t.ownerDocument||document,y=t&&t.parentNode;var a,f,l,c=(f=y,(l=i(a=t))&&a.contains(l)?function(t,e){for(var n=[],r=t;r!==e;)n.push(r),r=r.parentNode;return n}(l,f):[]);return v(c,!0),d=t,h(),e(n),w(),v(c,!1),p=r,d=o,y=u,t},D=n();D.__TinyDream__=function(t,e,n){var r,o=void 0===n?"undefined":u(n);"object"===o||"function"===o?(r=n,t[e]=r):function(t,e,n){if(null!==n){var r,o=0===(r=e).lastIndexOf("xml:",0)?"http://www.w3.org/XML/1998/namespace":0===r.lastIndexOf("xlink:",0)?"http://www.w3.org/1999/xlink":void 0;o?t.setAttributeNS(o,e,n):t.setAttribute(e,n)}else t.removeAttribute(e)}(t,e,n)},D.style=function(t,e,n){var r,i,u;if("string"!=typeof n)for(var a in n)o(n,a)&&(r=t.style,i=a,u=n[a],-1<i.indexOf("-")?r.setProperty(i,u):r[i]=u);else t.style.cssText=n};var O=function(t,e,n){(D[e]||D.__TinyDream__)(t,e,n)},S=function(t,e,n){var r,o,i,u=(r=t,o=n,g(),b(r,o,i),h(),y);if(e){var a=c(u);if(!a.attributesApplied){for(var f=0;f<e.length;f+=2){var l=e[f],s=e[f+1];O(u,l,s)}a.attributesApplied=!0}for(var p=a.attributes,d=!p.length,v=0;v<e.length;v+=2){var m=e[v];d&&(p[v]=m);var x=e[v+1];(d||p[v+1]!==x)&&(p[v+1]=x,O(u,m,x))}return u}},T=function(t){return w(),d},k=void 0,M=void 0;t.TinyDream=function(t,e){k=document.getElementById(t),M=e},t.tagOpen=S,t.tagClose=T,t.tagVoid=function(t,e,n){return S(t,e,n),T()},t.text=function(t,e){var n=(g(),b("#text",null),d),r=c(n);return r.text!==t&&(r.text=t,n.data=t),n},t.component=function(t,e){o(t,"render")&&t.render.apply(null,[e])},t.patch=function(t){_(k,M.render,t)},Object.defineProperty(t,"__esModule",{value:!0})});