UNPKG

@danielkalen/simplybind

Version:

Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.

2 lines (1 loc) 13.3 kB
!function(){var r,t,E,y,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,m,aa,z,n,F,g,ba,u,A,ca,v,p,da,G,H,ea,B,fa,q,w,ga,ha,ia,I,J,K,L,M,ja,x,k,C,ka,D;return ca=0,z="push pop shift unshift splice reverse sort".split(" "),da={},n={},K=["{{","}}"],x=Object.create({silent:!1},{placeholder:{get:function(){return K},set:function(a){g.iA(a)&&2===a.length&&(K=a,M())}}}),v={throttle:!1,simpleSelector:!1,promiseTransforms:!1,dispatchEvents:!1,sendArrayCopies:!1,updateEvenIfSame:!1,updateOnBind:!0},p=Object.defineProperty,ha=Object.getOwnPropertyDescriptor,ja=function(a,b){return this.uAS(b||this)},fa=function(){return""+ ++ca},q=function(){return Object.create(null)},w=function(a,b){return function(c,d,e){return m(c,d,e,a,b)}},ga=function(a,b){return a.sU||(a.sU=new r(function(){return b?a.sV(a.fDV(),a,!0):a.uAS(a)},"Func",{}))},k=function(a,b){return a&&-1!==a.indexOf(b)},g={iD:function(a){return void 0!==a},iA:function(a){return a instanceof Array},iO:function(a){return"object"==typeof a&&a},iS:function(a){return"string"==typeof a},iN:function(a){return"number"==typeof a},iF:function(a){return"function"==typeof a},iBI:function(a){return a instanceof t}},u=function(a,b,c){var d,e,f,h,l,k,m,n;a.OD||(a.OD=ha(b,a.pr)),c?z.forEach(function(c){return p(b,c,{configurable:!0,value:function(){var d;return d=Array.prototype[c].apply(b,arguments),a.uAS(a),d}})}):"Proxy"===a.type?(e=a.oR=a.value,a.value={result:null,args:null},g.iF(e)&&(m=[].slice,d=l=function(){var c;return c=m.call(arguments),a.value.args=c=a.tfS?a.tfS(c):c,a.value.result=c=e.apply(b,c),a.uAS(a),c},p(b,a.pr,{configurable:a.isL=!0,get:function(){return d},set:function(b){g.iF(b)?b!==e&&(b!==l&&(e=a.oR=b),d!==l&&(d=l)):d=b}}))):(c=a.OD||da,c.get&&(f=c.get.bind(b)),c.set&&(h=c.set.bind(b)),(k=c.configurable)&&(n="Array"===a.type,p(b,a.pr,{configurable:a.isL=!0,enumerable:c.enumerable,get:f||function(){return a.value},set:h?function(b){h(b),a.sV(b,a,!n)}:function(b){a.sV(b,a,!n)}}),n&&u(a,b[a.pr],!0)))},A=function(a,b,c){var d,e;if(c){for(e=[],a=0,c=z.length;a<c;a++)d=z[a],e.push(delete b[d]);return e}return c=a.OD,c.set||c.get||(c.value=a.oR||a.value),p(b,a.pr,c)},ba=function(a){var b,c;b=q();for(c in a)b[c]=a[c];return b},B=function(a,b){var c,d,e,f;for(f=Object.keys(b),c=0,e=f.length;c<e;c++)d=f[c],a[d]=b[d]},F={get:function(a,b,c,d){return b?n[a._sb_ID]:a._sb_map&&a._sb_map[c]?n[a._sb_map[c]]:void 0},set:function(a,b){var c,d;b?p(a.object,"_sb_ID",{configurable:!0,value:a.ID}):(d=a.se,a.object._sb_map?a.object._sb_map[d]=a.ID:(c={},c[d]=a.ID,p(a.object,"_sb_map",{configurable:!0,value:c})))}},H=/[.*+?^${}()|[\]\\]/g,I=J=null,M=function(){var a,b,c;c=x.placeholder[0].replace(H,"\\$&"),a=x.placeholder[1].replace(H,"\\$&"),b="[^"+a+"]+",I=new RegExp(c+"("+b+")"+a,"g"),J=new RegExp(""+c+b+a,"g")},M(),aa=function(a,b,c){var d,e,f,h,g;for(g="",e=f=0,h=a.length;f<h;e=++f)d=a[e],g+=d,c[e]&&(g+=b[c[e]]);return g},C=function(a){throw Error("SimplyBind: "+(G[a]||a))},D=function(a,b){var c,d;x.silent||(c=ia(b),d=G[a],console.warn("SimplyBind: "+(d+("\n\n"+c))))},ka=function(a){C("Invalid argument/s ("+a+")",!0)},ia=function(a){return(Error().stack||"").split("\n").slice(a+3).join("\n")},G={erIP:"SimplyBind() and .to() only accept a function, an array, a bound object, a string, or a number.",erFN:"Only functions are allowed for .transform/.condition/All()",erEV:"Invalid argument number in .ofEvent()",emptyList:"Empty collection provided"},m=function(a,b,c,d,e){return(a||0===a)&&(g.iS(a)||g.iN(a)||g.iF(a)||a instanceof Array)||g.iBI(a)||C("erIP"),!g.iO(a)||a instanceof Array?(b=new t(b),b.so=c,b.IS=d,b.cC=e,a=g.iF(a)?b.sS(a,!0):b.sP(a)):a=e?e(a):a.sC(),a},m.version="1.13.0",m.settings=x,m.defaultOptions=v,m.unBindAll=function(a,b){var c,d,e;if(a&&(g.iO(a)||g.iF(a))&&(e=a._sb_map,a._sb_ID&&n[a._sb_ID].rAS(b),e))for(d in e)c=e[d],n[c].rAS(b)},r=function(a,b,c){return B(this,c),this.oD=this.so?this.options:v,this.type=b,this.object=a,this.ID=fa(),this.subs=[],this.sM=q(),this.pM=q(),this.atEV=[],"Proxy"===this.type&&(this.sV=ja),"Event"===this.type||"Func"===this.type&&this.IS||("Pholder"===this.type?(b=this.pr,a=this.pB=m(b).of(a)._,a.sPH(),this.value=a.pVL[this.Ph]):(this.value=a=this.fDV(),"ObjectProp"!==this.type||g.iD(a)||(this.object[this.pr]=a),u(this,this.object))),this.aEV(),n[this.ID]=this},r.prototype={aS:function(a,b,c,d){var e,f,h,g;if(a.isMulti)for(h=a.bindings,a=0,f=h.length;a<f;a++)g=h[a],this.aS(g,b,c,d);else this.sM[a.ID]?e=!0:(a.pM[this.ID]=this,this.subs.unshift(a),f=this.sM[a.ID]=q(),f.uO=c,f.opts=ba(b),(d||"Event"===this.type||"Proxy"===this.type||"Array"===this.type)&&(f.opts.updateEvenIfSame=!0),f.VR="Func"===a.type?"ps":"value");return e},rS:function(a,b){var c,d,e,f;if(a.isMulti)for(e=a.bindings,c=0,d=e.length;c<d;c++)f=e[c],this.rS(f,b);else this.sM[a.ID]&&(this.subs.splice(this.subs.indexOf(a),1),delete this.sM[a.ID],delete a.pM[this.ID]),b&&(a.rS(this),delete this.pM[a.ID]);0===this.subs.length&&0===Object.keys(this.pM).length&&this.DES()},rAS:function(a){var b,c,d,e;for(d=this.subs.slice(),b=0,c=d.length;b<c;b++)e=d[b],this.rS(e,a)},DES:function(){var a,b,c,d;if(delete n[this.ID],this.rPI(),"Event"===this.type)for(d=this.atEV,b=0,c=d.length;b<c;b++)a=d[b],this.urEVE(a,this.cEM.listen);else"Func"===this.type&&delete this.object._sb_ID;this.isL&&A(this,this.object),"Array"===this.type&&A(this,this.value,!0),this.object._sb_map&&(delete this.object._sb_map[this.se],0===Object.keys(this.object._sb_map).length&&delete this.object._sb_map)},fDV:function(){var a;switch(a=this.type,!1){case"Func"!==a:return this.object();default:return this.object[this.pr]}},sV:function(a,b,c){var d;if(b||(b=this),this.tfS&&(a=this.tfS(a)),!c)switch(this.type){case"ObjectProp":this.isL||a===this.value||(this.object[this.pr]=a);break;case"Pholder":d=this.pB,d.pVL[this.Ph]=a,c=aa(d.pCT,d.pVL,d.pIM),d.sV(c,b);break;case"Array":a!==this.value&&(g.iA(a)||(a=Array.prototype.concat(a)),A(this,this.value,!0),u(this,a=a.slice(),!0));break;case"Func":c=this.ps,this.ps=a,a=this.object(a,c);break;case"Event":this.iE=!0,this.eE(a),this.iE=!1}this.value=a,this.uAS(b)},uAS:function(a){var b,c;if(c=(b=this.subs).length)for(;c--;)this.uS(b[c],a)},uS:function(a,b){var c,d,e,f;if(!(b===a||b!==this&&b.sM[a.ID])){if(d=this.sM[a.ID],d.opts.throttle){if(c=+new Date,e=c-d.lU,e<d.opts.throttle)return clearTimeout(d.uT),d.uT=setTimeout(function(c){return function(){return c.uS(a,b)}}(this),d.opts.throttle-e);d.lU=c}c="Array"===this.type&&d.opts.sendArrayCopies?this.value.slice():this.value,e=a[d.VR],c=(f=d.tF)?f(c,e,a.object):c,c===e&&!d.opts.updateEvenIfSame||d.cN&&!d.cN(c,e,a.object)||(d.opts.promiseTransforms&&c&&g.iF(c.then)?c.then(function(c){a.sV(c,b)}):a.sV(c,b),d.uO&&this.rS(a))}},aM:function(a,b,c,d){var e,f,h,l;if(g.iF(c)){for(e=0,f=b.length;e<f;e++)h=b[e],l=h._||h,l.isMulti?this.aM(a,l.bindings,c,d):(h=this.sM[l.ID],h[a]=c,d=d&&!h.uO,this.pM[l.ID]&&(l.sM[this.ID][a]=c),!d&&"Func"!==this.type||"tF"!==a||this.uS(l,this));return!0}return D("erFN",2)},ss:function(a,b){this.tfS=a,b&&this.sV(this.value)},sPH:function(){var a;this.pVL||(this.pVL=q(),this.pIM=q(),this.pCT=[],g.iS(this.value)&&(this.pCT=this.value.split(J),a=0,this.value=this.value.replace(I,function(b){return function(c,d){return b.pIM[a++]=d,b.pVL[d]=d}}(this))))},aPI:function(a){if("Event"!==this.type)return this.rPI(),this.PI=setInterval(function(a){return function(){var b;return b=a.fDV(),a.sV(b)}}(this),a)},rPI:function(){return clearInterval(this.PI),this.PI=null},aEV:function(){this.evN&&this.rEVE(this.evN,this.cEM.listen)},rEVE:function(a,b){this.atEV.push(a),this.iEM(a,b||"on","on")},urEVE:function(a,b){this.atEV.splice(this.atEV.indexOf(a),1),this.iEM(a,b||"removeListener","removeListener")},iEM:function(a,b,c){var d;d=this.object,d[b]||(b=c),this.evH||(this.evH=ea.bind(this)),"function"==typeof d[b]&&d[b](a,this.evH)},eE:function(a){var b,c;c=this.object,b=this.cEM.emit||"emit",c[b]||(b="emit"),c[b](this.evN,a)}},ea=function(){this.iE||this.sV(arguments[this.pr],null,!0)},t=function(a,b){var c;if(b)B(this,b),this.sG=1;else for(c in this.sG=0,this.subs=[],this.oP=a||(a={}),this.options={},v)this.options[c]=null!=a[c]?a[c]:v[c];return this},E={sC:function(){return new t(null,this)},dM:function(a){return this._=a,Object.defineProperties(this,{value:{get:function(){return a.value}},original:{get:function(){return a.objects||a.object}},subscribers:{get:function(){return a.subs.slice().map(function(a){return a.object})}}})},createBP:function(a,b,c,d){var e;return this.object=a,(e=F.get(a,d,this.se,this.mC))?this.patchCachedBP(e):(a=new r(a,b,c),F.set(a,d),a)},patchCachedBP:function(a){var b,c,d,e;if("ObjectProp"!==a.type||this.pr in this.object||u(a,this.object),this.so)for(c in d=this.oP)e=d[c],a.oD[c]=e;c=a.oD;for(b in c)e=c[b],this.options[b]=g.iD(this.oP[b])?this.oP[b]:e;return a},sP:function(a){var b;return g.iN(a)&&(a=a.toString()),this.se=this.pr=a,this.options.simpleSelector||(k(a,":")&&(b=a.split(":"),this.de=b.slice(0,-1).join(":"),this.pr=b[b.length-1]),k(a,".")&&(b=this.pr.split("."),this.pr=b[0],this.Ph=b.slice(1).join(".")),k(this.de,"event")&&(k(a,"#")?(b=this.pr.split("#"),this.evN=b[0],this.pr=b[1]):(this.evN=this.pr,this.pr=0),isNaN(parseInt(this.pr))&&D("erEV",1),this.cEM={listen:this.oP.listenMethod,emit:this.oP.emitMethod})),this},sS:function(a,b){var c;switch(this.sG=1,!1){case!b:c="Func";break;case!this.Ph:c="Pholder";break;case!k(this.de,"array"):c="Array";break;case!k(this.de,"event"):c="Event";break;case!k(this.de,"func"):c="Proxy";break;default:c="ObjectProp"}return k(this.de,"multi")?(a.length||C("emptyList"),this.dM(new y(this,a,c))):this.dM(this.createBP(a,c,this,b)),k(this._.type,"Event")||k(this._.type,"Proxy")?this.options.updateOnBind=!1:k(this._.type,"Func")&&(this.options.updateOnBind=!0),this.cC?this.cC(this):this},aP:function(a){var b,c,d,e;if(a.sG=2,a.subs.push(this),b=a._.aS(this._,a.options,a.uO),a.uO)delete a.uO;else if(a.options.updateOnBind&&!b)if(this._.isMulti)for(e=this._.bindings,c=0,d=e.length;c<d;c++)b=e[c],a._.uS(b,a._);else a._.uS(this._,a._)}},t.prototype=Object.create(E,{of:{get:function(){if(!this.sG)return R}},set:{get:function(){if(this.sG)return T}},chainTo:{get:function(){if(2===this.sG)return O}},transformSelf:{get:function(){if(1===this.sG)return Y}},transform:{get:function(){if(2===this.sG)return W}},transformAll:{get:function(){if(2===this.sG)return X}},condition:{get:function(){if(2===this.sG)return P}},conditionAll:{get:function(){if(2===this.sG)return Q}},bothWays:{get:function(){if(2===this.sG)return N}},unBind:{get:function(){if(2===this.sG)return Z}},pollEvery:{get:function(){if(this.sG)return S}},stopPolling:{get:function(){if(this.sG)return V}},setOption:{get:function(){if(2===this.sG)return U}},updateOn:{get:function(){var a;if(this.sG&&(a=this))return w(!1,function(b){return b._!==a._&&(a._.pM[b._.ID]=b._,b._.aS(ga(a._,!0),b.options,!1,!0)),a})}},removeUpdater:{get:function(){var a,b;if(this.sG&&(b=this)&&(a=this._.sU))return w(!1,function(c){c._.sM[a.ID]&&(delete b._.pM[c._.ID],c._.rS(a))})}},to:{get:function(){var a;if(1===this.sG&&(a=this))return w(!0,function(b){return b._!==a._&&b.aP(a),a})}},and:{get:function(){var a,b;return b=this.sC(),2===this.sG?b:1===this.sG?(b._.isMulti||(a=b._,b._=b._=new y(b),b._.addBP(a)),w(!1,function(a){return b._.addBP(a._),b})):void 0}},once:{get:function(){var a;if(1===this.sG)return a=this.sC(),a.uO=!0,a}},update:{get:function(){return this.set}},twoWay:{get:function(){return this.bothWays}},pipe:{get:function(){return this.chainTo}}}),R=function(a){return g.iO(a)||g.iF(a)||ka(a),g.iBI(a)&&(a=a.object),this.sG=1,this.sS(a)},O=function(a,b,c){return m(this.subs[this.subs.length-1]).to(a,b,c)},T=function(a){return this._.sV(a),this},Y=function(a){return g.iF(a)?this._.ss(a,this.options.updateOnBind):D("erFN",1),this},W=function(a){return this._.aM("tF",this.subs.slice(-1),a,this.options.updateOnBind),this},X=function(a){return this._.aM("tF",this.subs,a,this.options.updateOnBind),this},P=function(a){return this._.aM("cN",this.subs.slice(-1),a),this},Q=function(a){return this._.aM("cN",this.subs,a),this},N=function(a){var b,c,d,e,f,h;for(d=this.subs[this.subs.length-1],h=d._,c=this._.isMulti?this._.bindings:[this._],h.aS(this._,d.options),d=0,e=c.length;d<e;d++)b=c[d],f=b.sM[h.ID].tF,b=b.sM[h.ID].cN,(f||a)&&(f=g.iF(a)?a:f)&&!1!==a&&(h.sM[this._.ID].tF=f),b&&(h.sM[this._.ID].cN=b);return this},Z=function(a){var b,c,d,e;for(d=this.subs,b=0,c=d.length;b<c;b++)e=d[b],this._.rS(e._,a);return this},S=function(a){return this._.aPI(a),this},V=function(){return this._.rPI(),this},U=function(a,b){return this._.sM[this.subs[this.subs.length-1]._.ID].opts[a]=b,this},y=function(a,b,c){var d,e,f;if(a.se=a.se.slice(6),B(this,this.In=a),this.isMulti=!0,this.bindings=d=[],b)for(a=0,e=b.length;a<e;a++)f=b[a],this.addBP(f,c);return Object.defineProperties(this,{type:{get:function(){return d.map(function(a){return a.type})}},value:{get:function(){return d.map(function(a){return a.value})}}})},L=y.prototype=Object.create(E),Object.keys(r.prototype).forEach(function(a){return L[a]=function(b,c,d,e){var f,g,l,k;for(k=this.bindings,g=0,l=k.length;g<l;g++)f=k[g],"uS"===a&&(c=f),f[a](b,c,d,e)}}),L.addBP=function(a,b){this.bindings.push(b?this.createBP(a,b,this.In):a)},module.exports=m}();