UNPKG

dom-class

Version:

A lightweight, cross browser, simplification of WebComponents

3 lines 6.8 kB
/*! (C) Andrea Giammarchi - @WebReflection - Mit Style License */ Object.defineProperty(DOMClass,"data",{enumerable:!0,value:{data:function(t,n){"use strict";var r,i="data-dom-class-"+String(t).replace(/([a-z])([A-Z])/g,function(e,t,n){return t+"-"+n.toLowerCase()}).toLowerCase();if(arguments.length!==2)return r=this.getAttribute(i),r==null?r:JSON.parse(r);n==null?this.removeAttribute(i):this.setAttribute(i,JSON.stringify(n))}}}); Object.defineProperty(DOMClass,"bindings",{enumerable:!0,value:function(e){"use strict";function j(e,t,n,r,i){var s,o=T.call(e,t)&&d(e,t).set;return h(e,t,A(function(){return s},function(a){n.nodeValue=s=a,r&&i(t),o&&o.call(e,a)})),n}function F(e,t,n,r,i,s){var o=T.call(e,t)&&d(e,t).set,u=I(n,r);return h(e,t,A(function(){return r},function(f){u=q(n,u,r=f),i&&s(t),o&&o.call(e,f)})),u.fragment}function I(e,t){var n,r;x.innerHTML="<!---->"+t+"<!---->",n={start:x.firstChild,end:x.lastChild,fragment:e.createDocumentFragment()};while(r=x.firstChild)n.fragment.appendChild(r);return n}function q(e,t,n){var r=t.start,i=r.parentNode,s;do s=r.nextSibling,i.removeChild(s);while(s!==t.end);return t=I(e,n),i.replaceChild(t.fragment,r),t}function R(e,t,n,r,i,s,o){var u=null,a=o?null:s.createTextNode("");return i.split(y).forEach(z,{autobots:t,bindings:n,method:e[r],source:e,onUpdate:o?function(e){u=u?q(s,u,e):I(s,e)}:function(e){a.nodeValue=e}}),a||u.fragment}function U(){var e=[],t=0;while(t<arguments.length)e[t]=this[arguments[t++]];return e}function z(e,t,n){var r=this.autobots,i=this.bindings,s=this.source,o=this.method,u=this.onUpdate,a=$(i,s,e).set,f=!!a;r[e]=s[e],h(i,e,A(function(){return r[e]},function(s){r[e]=s,u(o.apply(i,U.apply(r,n))),f&&a.call(i,s)})),u(o.apply(i,U.apply(r,n)))}function W(e,t){var n=e.childNodes,r=n.length,i,s;while(r--)i=n[r],s=i.nodeType,s===3?t.push(i):s===1&&!v.test(i.nodeName)&&W(i,t);return t}function X(e){switch(!0){case typeof e=="number":return e<0?-1:e;case e:return 133;default:return-1}}function V(e,t){h(e,"bindings",{configurable:!0,enumerable:!0,writable:!1,value:t})}function $(e,t,n){var r;return T.call(e,n)?r=d(e,n):(r=d(t,n)||S,r.set&&h(e,n,r)),r}var t=0,n=1,r=2,i=4,s="DOMAttrModified",o="attachedCallback",u="detachedCallback",a="getAttribute",f="setAttribute",l="destroyBindings",c=e.create,h=e.defineProperty,p=e.getPrototypeOf,d=e.getOwnPropertyDescriptor,v=/IFRAME|NOFRAMES|NOSCRIPT|SCRIPT|SELECT|STYLE|TEXTAREA|[a-z]/,m=/\{\{\{?[\S\s]+?\}\}\}?/g,g=/^\{[\S\s]+?\}$/,y=/\s*,\s*/,b=/\s*:\s*/,w=/^\s+|\s+$/g,E=/^([\S]+?)\(([\S\s]*?)\)/,S={attributes:!0,subtree:!0},x=document.createElement("dummy"),T=S.hasOwnProperty,N=function(e,t){return e==null?t:e},C=function(e,t,n){e.addEventListener(t,n,!0)},k=function(e,t,n){e.removeEventListener(t,n,!0)},L=s.trim||function(){return this.replace(w,"")},A=function(e,t){return{configurable:!0,enumerable:!0,get:e,set:t}},O=function(e,t){return typeof t=="function"?function(){return t.apply(e,arguments)}:t},M=function(e,t){var n=e,r;while(n&&!T.call(n,t))n=p(n);if(n){r=d(n,t);if("set"in r&&"get"in r)try{if(r.get.call(e)!==e[t])throw r;return r}catch(i){}}return null},_=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,D=!!_,P=function(e){return setTimeout(requestAnimationFrame,100,e)},H=clearTimeout,B=D;return B||function(t,n){function r(){B=!0}C(t,s,r),t[f](n,1),t.removeAttribute(n),k(t,s,r)}(document.documentElement,"dom-"+(Math.random()+"-class").slice(2)),{init:function(){(this.template||this.bindings)&&this.createBindings(this)},createBindings:function(e){T.call(this,l)&&this[l](),e.template&&!L.call(this.innerHTML)&&(this.innerHTML=e.template);var p=this,d=p.ownerDocument||d,v=e.bindings||{},w=W(p,[]),x=c(null),I=c(null),q=c(e.bindings||null),U=p.queryAll("[data-bind]"),J=function(e){var t=e.attrName,n=Q;Q=i,q[I[t]]=e.currentTarget[a](t),Q=n},K=!1,Q=t,G=X(e.dispatchBindings||this.dispatchBindings),Y=-1<G,Z=Y&&c(null),et=Y&&function(e){delete Z[e],p.dispatchEvent(new CustomEvent("bindingChanged",{detail:{key:e,value:q[e]}}))},tt=G?function(e){e in Z&&clearTimeout(Z[e]),Z[e]=setTimeout(et,G,e)}:function(e){e in Z&&cancelAnimationFrame(Z[e]),Z[e]=requestAnimationFrame(function(){et(e)})},nt=!1,rt;return h(p,l,{configurable:!0,value:function(){var e;if(nt)return;nt=!0;if(Y)for(e in Z)G?clearTimeout(Z[e]):cancelAnimationFrame(Z[e]),delete Z[e];for(e in x)delete x[e];for(e in I)delete I[e];for(e in q)delete q[e];V(p,{}),K?rt.disconnect():B?U.forEach(function(e){k(e,s,J)}):U.forEach(function(e){delete e[f]})}}),w.forEach(function(e){var t,n,r,i,s,o=0,u=e.nodeValue,a=[],f=[],l=e.parentNode,c;while(r=m.exec(u))i=r.index,s=r[0].length,a.push(u.slice(o,i)),f.push(u.substr(i+2,s-4)),o=i+s;f.length&&(a.push(u.slice(o)),a.forEach(function(i,s){i.length&&l.insertBefore(d.createTextNode(i),e),s<f.length&&(n=L.call(f[s]),t=g.test(n),t&&(n=n.slice(1,-1)),(r=E.exec(n))?l.insertBefore(R(v,x,q,r[1],r[2],d,t),e):($(q,v,n),l.insertBefore(t?F(q,n,d,N(v[n],""),Y,tt):j(q,n,d.createTextNode(N(v[n],"")),Y,tt),e)))}),e.remove())}),U.forEach(function(e){var l=e[f],c=function(t,n){var r=Q;Q=i,l.call(this,t,n),t in I&&this===e&&(q[I[t]]=n),Q=r};e[a]("data-bind").split(y).filter(function(e,t,n){return e.indexOf("(")>0&&e.indexOf(")")<0?(n[t+1]=e+","+n[t+1],!1):!0}).forEach(function(d,m){var g=d.split(b),w=g[0],N=g[1]||w,L=w in e,_=g[1]&&E.exec(N),j,F,R,U,W,X,V;if(_)_[2].split(y).forEach(z,{autobots:x,bindings:q,method:v[_[1]],source:v,onUpdate:L?function(t){e[w]=O(q,t)}:function(t){l.call(e,w,t)}});else{I[w]=N,F=$(q,v,N).set,X=!!F;if(L){T.call(v,N)&&(e[w]=O(q,v[N])),h(q,N,A(function(){return e[w]},function(s){var o=Q;Q=n;switch(o){case t:case i:e[w]=s,Y&&tt(N)}X&&F.call(q,s),Q=o})),j=function(t){if(nt)return k(e,t.type,j);var n=Q;Q=i,q[N]=e[w],Q=n};switch(w){case"value":C(e,"input",j);case"checked":case"selectedIndex":C(e,"change",j)}R=M(e,w),R?(L=T.call(e,w),h(e,w,{configurable:!0,enumerable:R.enumerable,get:R.get,set:function(t){if(nt)return L?h(e,w,R):delete e[w];var n=Q;Q=r,R.set.call(e,t),q[N]=t,Q=n}})):(V=e[w],j=function(){if(nt)return;if(e[w]!==V){var t=Q;Q=r,V=e[w],q[N]=V,Q=t}m=P(j)},U=p[o],W=p[u],h(p,o,{configurable:!0,value:function(){nt||j(H(m)),U&&U.apply(e,arguments)}}),h(p,u,{configurable:!0,value:function(){nt||H(m),W&&W.apply(e,arguments)}}),j())}else T.call(v,N)&&l.call(e,w,v[N]),h(q,N,A(function(){return e[a](w)},function(o){var u=Q;Q=r;switch(u){case t:case n:D?rt.disconnect():B&&k(e,s,J),l.call(e,w,o),Y&&tt(N),D?rt.observe(p,S):B&&C(e,s,J)}X&&F.call(q,o),Q=u})),D?K=!0:B?C(e,s,J):e[f]!==c&&h(e,f,{configurable:!0,value:c})}}),e.removeAttribute("data-bind")}),K&&(rt=new _(function(e){var t=Q;Q=i;for(var n,r,s=0;s<e.length;s++)r=e[s],r.type==="attributes"&&(n=r.attributeName,n!=null&&n in I&&(q[I[n]]=r.target[a](n)));Q=t}),rt.observe(p,S)),V(p,q),p}}}(Object)});