forked from chrismichaelscott/iugo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathiugo.min.js
More file actions
2 lines (2 loc) · 5.68 KB
/
iugo.min.js
File metadata and controls
2 lines (2 loc) · 5.68 KB
1
2
/* Author Chris Scott, MIT license */
window.$iugo={};$iugo.$internals={};$iugo.$internals.registerModelMember=function(a,b){Object.defineProperty(a,b,{get:function(){return this.$[b]},set:function(a){this.updateView(b,a);this.$[b]=a;$iugo.$internals.applySetters(a,this,[b],a)}})};$iugo.$internals.applySetters=function(a,b,c,f){if(a instanceof Object||a instanceof Array){for(var d in a){$iugo.$internals.registerProperty(a,d,b,c);var e=c.concat([d]);$iugo.$internals.applySetters(a[d],b,e,f)}a instanceof Array&&$iugo.$internals.registerArray(a,b,c)}};$iugo.$internals.registerProperty=function(a,b,c,f){c.$[f.concat([b]).join(".")]=a[b];a.__defineSetter__(b,function(d){c.$[f.concat([b]).join(".")]=d;$iugo.$internals.setChildMembers(a,c,f);c.updateView(f[0],c[f[0]])});a.__defineGetter__(b,function(){return c.$[f.concat([b]).join(".")]})};$iugo.$internals.setChildMembers=function(a,b,c){if(a instanceof Object||a instanceof Array)for(var f in a){var d=c.concat([f]);b.$[d.join(".")]=a[f];$iugo.$internals.setChildMembers(a[f],b,d)}};$iugo.$internals.registerArray=function(a,b,c){a.push=function(){var a=Array.prototype.push.apply(this,arguments);b[c[0]]=b[c[0]];return a};a.pop=function(){var f=$iugo.$internals.clone(Array.prototype.pop.call(a));b[c[0]]=b[c[0]];return f};a.unshift=function(){for(var a=$iugo.$internals.clone(this),d=0;d<arguments.length;d++)this[d]=arguments[d];for(var e=0;e<a.length;e++)this[d++]=a[e];b[c[0]]=b[c[0]];return this.length};a.shift=function(){var a=$iugo.$internals.clone(Array.prototype.shift.call(this));b[c[0]]=b[c[0]];return a};a.reverse=function(){for(var a=$iugo.$internals.clone(this),b=0;b<this.length;b++)this[b]=a[this.length-1-b];return this};a.sort=function(){var a=$iugo.$internals.clone(this);Array.prototype.sort.apply(a,arguments);for(var b=0;b<this.length;b++)this[b]=a[b];return this};a.splice=function(){for(var a=$iugo.$internals.clone(this),d=0;d<a.length,d<arguments[0];d++)this[d]=a[d];for(var e=2;e<arguments.length;e++)this[d++]=arguments[e];for(e=arguments[0]+arguments[1];e<a.length;e++)this[d++]=a[e];for(e=d;e<a.length;e++)this.pop();b[c[0]]=b[c[0]];return this}};$iugo.$internals.clone=function(a){var b;b=a instanceof Array?[]:{};for(var c in a)b[c]=a[c]instanceof Object||a[c]instanceof Array?$iugo.$internals.clone(a[c]):a[c];return b};$iugo.$internals.MVVC=function(a,b,c){this.view=b?b:document.body;this.viewcontroller=c?c:{};for(b=0;b<this.initializers.length;b++)if(this.initializers[b]instanceof Function)this.initializers[b](this.view);this.model=a};$iugo.$internals.MVVC.prototype={$:{},set model(a){for(var b in a)$iugo.$internals.registerModelMember(this,b),this[b]=a[b]},updateView:function(a,b){for(var c=0;c<this.defaultViewcontrollers.length;c++)if(this.defaultViewcontrollers[c]instanceof Function)this.defaultViewcontrollers[c](a,b,this.view);if("undefined"!==typeof this.viewcontroller[a]&&this.viewcontroller[a]instanceof Function)this.viewcontroller[a](b,this.view)},defaultViewcontrollers:[],initializers:[]};$iugo.defaultViewcontrollers=$iugo.$internals.MVVC.prototype.defaultViewcontrollers;$iugo.initializers=$iugo.$internals.MVVC.prototype.initializers;$iugo.store={};window.Iugo=function(a,b,c){return new $iugo.$internals.MVVC(a,b,c)};$iugo.store.BD={a:[],b:{}};$iugo.initializers.push(function(a){for(var l=0,h=/(>[^<$]*)\$\{([^:.}<]+:)?([^}<]*)\}([^<]*<)/g;a.innerHTML.match(h);)a.innerHTML=a.innerHTML.replace(h,function(j,e,a,f,b){j=e+"<span ";a&&(j+='class="bindto-'+a.substr(0,a.length-1)+'" ');return j+('data-bind_key="'+f+'"></span>'+b)});a.innerHTML=a.innerHTML.replace(/<[^>]+ [^ =]+="[^"]*\$\{[^}<"]+\}[^"]*"[^>]*>/g,function(a){var e=l++;$iugo.store.BD.a[e]={d:[],c:{},e:{}};a=a.replace(/([^ =]+)="([^"]*\$\{[^}"]+\}[^"]*)"/g,function(a,f,b){"data-iugo_alias-"==f.substr(0,16)&&(f=f.substr(16));$iugo.store.BD.a[e].d.push(f);$iugo.store.BD.a[e].c[f]=b;b.replace(/\$\{([^"}:]+):[^}"]+\}/g,function(a,b){$iugo.store.BD.b[b]||($iugo.store.BD.b[b]=[]);-1==$iugo.store.BD.b[b].indexOf(e)&&$iugo.store.BD.b[b].push(e)});return f+'=""'});return a=a.replace(/ ?>$/,' data-iugo_id="'+e+'">')})});$iugo.defaultViewcontrollers.push(function(a,l,h){function j(a,c,b){if(c.hasAttribute("data-iugo_id")){var d=c.getAttribute("data-iugo_id");c=$iugo.store.BD.a[d].d;for(var g=0;g<c.length;g++)$iugo.store.BD.a[d].c[c[g]].replace(n,function(c,e,g){if(!e&&!b||e&&e.substr(0,e.length-1)==b){e=g.split(".");g=a;for(var f=0;f<e.length;f++)g=g[e[f]];$iugo.store.BD.a[d].e[c]=g}});c=document.querySelector('[data-iugo_id="'+d+'"]');for(var g=$iugo.store.BD.a[d].d,e=0;e<g.length;e++){var f=$iugo.store.BD.a[d].c[g[e]].replace(n,function(c){return $iugo.store.BD.a[d].e[c]?$iugo.store.BD.a[d].e[c]:""});c.setAttribute(g[e],f)}}}function e(a,c,b){j(a,c);if(a instanceof Array){b=c.children.length;for(var d=b-1;0<=d;d--)c.children[d].classList.contains("iugo_cloned")&&c.removeChild(c.children[d]);b=c.children.length;for(d=0;d<b;d++){var g;if(c.children[d].hasAttribute("data-bind_each")){g=c.children[d];0==a.length?(g.setAttribute("data-iugo_display",g.style.display),g.style.display="none"):g.style.display=g.getAttribute("data-iugo_display");for(var f=0;f<a.length;f++){var h;1<=f?(h=g.cloneNode(!0),h.classList.add("iugo_cloned"),c.appendChild(h)):h=g;e(a[f],h)}}}}else if(a instanceof Object){d=c.getAttribute("data-bind_key");null!=d&&""!=d&&(b=null==b?"":b+".",d=d.slice(b.length).split(".")[0],e(a[d],c,b+d));for(d=0;d<c.children.length;d++)c.children[d].className.match("bindto-")||e(a,c.children[d],b)}else"INPUT"==c.tagName?c.value=a:c.innerHTML=a}var n=/\$\{([^:}]+:)?([^}]+)\}/g;if($iugo.store.BD.b[a])for(var f=$iugo.store.BD.b[a],b=0;b<f.length;b++)for(var k=h.querySelectorAll('[data-iugo_id="'+f[b]+'"]'),m=0;m<k.length;m++)j(l,k[m],a);k=h.getElementsByClassName("bindto-"+a);for(b=0;b<k.length;b++)e(l,k[b])});