-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathgset-min.js
8 lines (8 loc) · 3.74 KB
/
gset-min.js
1
2
3
4
5
6
7
8
/*
* GSet v1.0.1
* http://github.com/bemson/GSet/
*
* Copyright 2010, Bemi Faison
* Released under the MIT License
*/
(function(a){var b={gvsCall:function(h,g,e,d,c){return(function f(){return h.apply(g,e)}).apply(d,c)},gsetCall:function(c,d){return function(){return c._gset.apply(c,[d].concat(arguments.length?[].slice.call(arguments):[]))}},customCall:function(f,d,e,c,h){var g=[c,e,"custom"];return function(){var i=arguments;if(!h(i,g)){return !1}return b.gvsCall(d[e],f,i,c,g)}},typeMap:{string:"s","[object Array]":"a","function":"f","[object Function]":"f"},rxp:{rtnFnc:/\breturn\b/,fsType:/[fs]/,afsType:/[afs]/},getType:function(d){var c=b.typeMap[typeof d]||b.typeMap[Object.prototype.toString.call(d)];return c&&(c!=="s"||c.length)?c:0},testValueTypes:function(g,c){var f=0,d=c.length,k,l=g.length,e,h=1;for(;f<d;f++){e=typeof c[f];h=0;for(k=0;k<l;k++){if(g[k]===e){h=1;break}}if(!h){break}}return h}};a.GSet=a.GSet||function(c,d){var g=this,l=arguments,j,h,p=b.rxp.rtnFnc,i=b.getType,n={},o=function(r,t){var s=t[1],q=!n[s];if(q&&i){n[s]=1;if(b.gvsCall(i,c,r,g,t)===!1){q=0}n[s]=0}return q},f,e,m,k;if(!(g.hasOwnProperty&&g instanceof GSet)){throw new Error("GSet: missing new operator")}if(c==null){throw new Error("GSet: invalid source")}if(l.length>2){if(l.length>3){i=[typeof l[2],typeof l[3],"function"];if((i[0]===i[2])===(i[1]===i[2])){throw new Error("GSet: too many or too few gate functions")}p=l[i[0]===i[2]?3:2];i=l[i[0]===i[2]?2:3]}else{if(typeof l[2]==="function"){i=l[2]}else{p=l[2]}}}if(d instanceof GSet){d=d._gset(b);j=d[0];h=d[1];if(p===b.rxp.rtnFnc){p=d[2]}if(i===b.getType){i=d[3]}d=d[4];for(m in h){if(h.hasOwnProperty(m)){n[m]=0;if(h[m]===2){g[m]=b.customCall(c,d,m,g,o)}else{g[m]=b.gsetCall(g,m)}}}}else{j={};h={};for(m in d){if(!d.hasOwnProperty(m)){continue}n[m]=0;f=d[m];e=b.getType(f);if(e==="f"){g[m]=b.customCall(c,d,m,g,o);h[m]=2}else{k={get:0,set:0};if(e!=="a"||(f.length===1&&(e=b.getType(f[0]))==="a")){if(e==="a"){d[m]=f[0];k.isAry=1}k.get=1;k.fixed=1;k.fixedValue=d[m]}else{if(!f.length){f=d[m]=[m,1]}e=[b.getType(f[0]),b.getType(f[1]),b.getType(f[2])];if((e[0]==="f"&&!b.rxp.rtnFnc.test(f[0]+""))||(e[1]==="f"&&!b.rxp.rtnFnc.test(f[1]+""))){continue}if(f[0]){k.get=1;k[e[0]==="f"?"getter":"getProperty"]=b.rxp.fsType.test(e[0])?f[0]:m}if(f[2]){k.set=1;k.validAny=1;if(b.rxp.fsType.test(e[2])){k[e[2]==="f"?"setter":"setProperty"]=f[2]}else{if(k.get){k[k.getter?"setter":"setProperty"]=k.getter||k.getProperty}}}else{if(f.length>2){k.set=0}}if(f[1]&&(f.length<3||k.set)){k.set=1;k.validAny=!b.rxp.afsType.test(e[1]);if(!k.validAny){k[e[1]==="f"?"validator":"types"]=e[1]==="s"?[f[1]]:f[1]}}}if(k.get||k.set){h[m]=k.get-k.set;j[m]=k;g[m]=b.gsetCall(g,m)}}}}if(i===b.getType){i=0}g._gset=function(u){var t=arguments,r=[].slice.call(arguments,1),v=r.length,w=v?"set":"get",x=[g,u,v?"vet":w],q=j.hasOwnProperty(u)&&j[u],s;if(!t.length){s=function(){};s.prototype=h;return new s()}if(u===p){return c}if(u===b){return[j,h,p,i,d]}if(q){if(q[w]){if(!o(r,x)){return !1}if(q.fixed){return q.isAry?q.fixedValue.concat():q.fixedValue}if(v){if(q.validAny||(q.validator&&b.gvsCall(q.validator,c,r,g,x))||(q.types&&b.testValueTypes(q.types,r))){if((q.setter||(!q.setProperty&&q.getter))&&x.splice(2,1,"set")){w=b.gvsCall(q.setter||q.getter,c,r,g,x);return(w===undefined)?!0:(v?!!w:w)}c[(w=q.setProperty||u)]=r[0];return c[w]===r[0]}}else{if(q.getter){return b.gvsCall(q.getter,c,r,g,x)}return c[q.getProperty||u]}}else{throw new Error('GSet: "'+u+'" has no '+w+"ter")}}else{throw new Error('GSet: "'+u+'" is unmapped')}return !1}};a.GSet.getContext=function(d){var c={gset:!1,alias:!1,action:!1},e=function(g,f){return typeof g===(f?"object":"function")};if(e(d,1)&&e((d=d.callee))&&e((d=d.caller))&&e((d=d.arguments),1)&&d.length===3){c.gset=d[0];c.alias=d[1];c.action=d[2]}return c}})(this);