-
Notifications
You must be signed in to change notification settings - Fork 0
/
dataflow.min.js
19 lines (19 loc) · 9.3 KB
/
dataflow.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(function(){function v(a){for(var b=[],c=a.length;c--;b[c]=a[c]);return b}function r(a,b){"string"===typeof a&&(a=a.split("."));for(var c=0;c<a.length;c++){var e=a[c];if("string"===typeof e&&"$"===e.charAt(0)){if(void 0===b||void 0===b[e])return a;a[c]=b[e]}}void 0!==b&&(b.prepared=!0);return a}function w(a){for(var b=0;b<a.length;b++){var c=a[b];if("function"===typeof c)c();else{var e=h.prepare(c);void 0!==c.fn&&c.fn.apply(c,e)}}}function B(a){for(var b in a){var c=a[b];w(c.watchers);B(c.keys)}}
function t(a,b,c,e,d,k){for(var f="",g=null,n=!1,l=null,p=null,q=!1;c<b.length;c++){var m=b[c];switch(!0){case " "===m&&!n:continue;case "\\"===m&&n:continue;case "'"===m&&"\\"!=b[c-1]:n=!n;f+="'";continue;case "["===m&&!n:f=[];c=t(f,b,c+1,e,d,k);continue;case (","===m||";"===m||"]"===m||"}"===m||")"===m)&&!n:null!==l&&(l.pos=null===g?a.length:g,l.path.push(f),e.push(l),f=void 0);null===l&&q&&(k.push({obj:a,name:f,pos:g||a.length}),q=!1);x(a,f,g);l=null;f="";g=null;if(","===m||";"===m)continue;return c;
case "{"===m&&!n:f={};c=t(f,b,c+1,e,d,k);continue;case ":"===m&&!n:x(a,f,g);g=f;f="";q=!1;continue;case ("*"===m||"#"===m)&&!n:l={obj:a,watch:D[m],flow:"l",path:[]};continue;case "&"===m&&!n:l={obj:a,watch:!1,flow:"p",path:[]};continue;case "~"===m&&!n&&null!==l:l.flow="g";continue;case "."===m&&!n&&null!==l:if(""===f)continue;l.path.push(f);f="";continue;case "@"===m&&!n&&null===p:p={};continue;case "("===m&&!n&&null!==p:p.obj=a;p.name=f;p.pos=a.length;f=[];c=t(f,b,c+1,e,d,k);p.args=f;d.push(p);
p=null;f=void 0;continue;case "$"===m&&!n:f+=m;null===l&&(q=!0);continue;default:f+=m}}null!==l&&(l.pos=null===g?a.length:g,l.path.push(f),e.push(l),f=void 0);null===l&&q&&k.push({obj:a,name:f,pos:g||a.length});x(a,f,g);return c}function E(a){if(void 0===a)return a;switch(!0){case "'"===a[0]&&"'"===a[a.length-1]:return a.slice(1,-1);case F(a):return parseFloat(a);case G(a):return JSON.parse(a);default:return a}}function x(a,b,c){b=E(b);Array.isArray(a)?a.push(b):null===c?a[b]=void 0:a[c]=b}var y=
{},u={},z={},A={},C={},H=0,D={"*":!0,"#":!1},F=function(a){return("number"===typeof a||"string"===typeof a&&""!==a.trim())&&!isNaN(a)},G=function(a){if("string"!=typeof a)return!1;a=a.toLowerCase();return"true"===a||"false"===a},h={component:function(a,b){if(void 0===b)return y[a];y[a]=b},directive:function(a,b){if(void 0===b)return u[":"+a];u[":"+a]=b},watcher:function(a,b){a=r(a,b.ctx);if(void 0!==a)for(var c=a.length,e=A,d=0;d<c&&void 0!==a[d];d++){void 0===e[a[d]]&&(e[a[d]]={len:0,watchers:[],
keys:{}});e[a[d]].len++;if(d===c-1){"function"===typeof b&&(b={fn:b});b.watcherId=++H;e[a[d]].watchers.push(b);void 0!==b.el&&void 0===b.el.dataflow&&(b.el.dataflow={},void 0===b.el.dataflow.watchers&&(b.el.dataflow.watchers=[{watcherId:b.watcherId,path:a}]));break}e=e[a[d]].keys}},unset:function(a){if(void 0!==a)for(var b=a.length,c=z,e=0;e<b;e++)if(e<b-1){if(void 0===c[a[e]])break;c=c[a[e]]}else delete c[a[e]]},clean:function(a,b){if(void 0!==a.dataflow&&void 0!==a.dataflow.watchers){var c=!0;void 0!==
b&&!1===b.data&&(c=!1);for(var e=0;e<a.dataflow.watchers.length;e++)for(var d=a.dataflow.watchers[e],k=d.path.length,f=A,g=0;g<k;g++){if(1===f[d.path[g]].len){delete f[d.path[g]];c&&this.unset(d.path.slice(0,g+1));break}f[d.path[g]].len--;if(g===k-1){for(k=0;k<f[d.path[g]].watchers.length;k++)d.watcherId===f[d.path[g]].watchers[k].watcherId&&f[d.path[g]].watchers.splice(k,1);break}f=f[d.path[g]].keys}}},remove:function(a,b){var c=this;"string"===typeof a&&(a=document.querySelector(a));void 0!==b&&
b.container&&c.clean(a,b);a.querySelectorAll("*").forEach(function(e){c.clean(e,b);e.parentNode.removeChild(e)})},func:function(a,b){if(void 0===b)return C[a];C[a]=b},set:function(a,b,c){a=r(a,c);if(void 0!==a){for(var e=a.length,d=z,k=0;k<e;k++)k<e-1?(void 0===d[a[k]]&&(d[a[k]]={}),d=d[a[k]]):d[a[k]]=b;this.flow(a,c)}},get:function(a,b){a=r(a,b);if(void 0!==a)for(var c=a.length,e=z,d=0;d<c;d++)if(d<c-1){if(void 0===e[a[d]])break;e=e[a[d]]}else return e[a[d]]},flow:function(a,b){if(void 0===b||"none"!==
b.flow){if(void 0!==b&&!0!==b.prepared){a=r(a,b);if(void 0===a)return;b.prepared=!1}for(var c=a.length,e=A,d=0;d<c;d++)if(d<c-1){if(void 0===e[a[d]])break;void 0===b||"before"!==b.flow&&"all"!==b.flow||w(e[a[d]].watchers);e=e[a[d]].keys}else void 0!==e[a[d]]&&(w(e[a[d]].watchers),void 0===b||"after"!==b.flow&&"all"!==b.flow||B(e[a[d]].keys))}},inject:function(a,b){void 0===b&&(b={});var c=y[a];void 0!==b.comp&&(a=b.comp);var e={},d={comp:a.split("."),watcher:function(k,f){h.watcher(a+(k?"."+k:""),
{el:e,fn:f})},set:function(k,f,g){h.set(a+(k?"."+k:""),f,g)},get:function(k,f){return h.get(a+(k?"."+k:""),f)},func:function(k,f){void 0===d.funcs&&(d.funcs={});d.funcs[k]=f}};c.call(d,b);this.set(a,d);this.set(a+".init",!0);d.el=void 0!==b.el?b.el:document.querySelector(b.root||d.root);d.el.dataflow=e.dataflow;d.el.innerHTML=d.template;this.exec(d);this.set(a+".ready",!0)},exec:function(a){void 0===a.el&&(a.el=document.querySelector(a.root));var b=[];a.container&&b.push(a.el);for(var c=a.el.querySelectorAll("*"),
e=c.length,d=0;d<e;d++)b.push(c[d]);e=b.length;for(c=0;c<e;c++)if(d=b[c],void 0===d.dataflow||!d.dataflow.omit)for(var k=d.attributes,f=k.length,g={},n=0;n<f;g={$jscomp$loop$prop$watcher$5:g.$jscomp$loop$prop$watcher$5},n++){var l=k[n].name,p=k[n].value;g.$jscomp$loop$prop$watcher$5={el:d,fn:u[l],ctx:a};switch(l.charAt(0)){case "@":g.$jscomp$loop$prop$watcher$5.args=h.parse(p);h.register(g.$jscomp$loop$prop$watcher$5);d.addEventListener(l.slice(1),function(q){return function(){h.prepare(q.$jscomp$loop$prop$watcher$5)}}(g));
break;case ":":if(void 0===u[l])return;g.$jscomp$loop$prop$watcher$5.args=h.parse(p);h.register(g.$jscomp$loop$prop$watcher$5);!0===g.$jscomp$loop$prop$watcher$5.register?g.$jscomp$loop$prop$watcher$5.register=!1:g.$jscomp$loop$prop$watcher$5.fn.apply(g.$jscomp$loop$prop$watcher$5,h.prepare(g.$jscomp$loop$prop$watcher$5))}}},parse:function(a){var b={obj:[],watchers:[],funcs:[],sys:[]};t(b.obj,a,0,b.watchers,b.funcs,b.sys);return b},register:function(a){for(var b=0;b<a.args.watchers.length;b++){var c=
a.args.watchers[b];if(("l"===c.flow||"p"===c.flow)&&void 0!==a.ctx.comp)for(var e=a.ctx.comp.length;e--;)c.path.unshift(a.ctx.comp[e]);c.watch&&h.watcher(c.path,a)}},sys:function(a){if(void 0!==a.args)for(var b=0;b<a.args.sys.length;b++){var c=a.args.sys[b];switch(c.name){case "$watcher":c.obj[c.pos]=a;break;case "$root":c.obj[c.pos]=a.ctx.el;case "$this":c.obj[c.pos]=a.el;break;case "$value":c.obj[c.pos]=a.el.value;break;case "$text":c.obj[c.pos]=a.el.textContent;break;default:c.obj[c.pos]=a.ctx[c.name]}}},
prepare:function(a){this.sys(a);if(void 0!==a.args){for(var b=0;b<a.args.watchers.length;b++){var c=a.args.watchers[b];c.obj[c.pos]="p"!==c.flow?h.get(c.path,a.ctx):r(c.path,a.ctx)}for(b=0;b<a.args.funcs.length;b++){c=a.args.funcs[b];var e=void 0!==a.ctx&&void 0!==a.ctx.funcs&&void 0!==a.ctx.funcs[c.name]?a.ctx.funcs[c.name]:this.func(c.name);c.obj[c.pos]=e.apply(a,c.args)}return a.args.obj}},transfer:function(a,b){void 0!==b.ctx.comp&&(a.comp=b.ctx.comp);a.funcs=b.ctx.funcs;a.set=b.ctx.set;a.get=
b.ctx.get}};h.func("set",function(a,b,c){h.set(a,b,c)});h.func("stringify",function(a){return JSON.stringify(a)});h.func("concat",function(){return v(arguments).join("")});h.func("not",function(a){return!a});h.func("empty",function(a){return a?!1:!0});h.func("eq",function(a,b){return a===b});h.func("ne",function(a,b){return a!==b});h.func("int",function(a){return parseInt(a)});h.func("float",function(a){return parseFloat(a)});h.func("if",function(){var a=v(arguments);if(a.shift()){var b=a.shift();
return void 0!==this.ctx.funcs&&void 0!==this.ctx.funcs[b]?this.ctx.funcs[b].apply(this,a):h.func(b).apply(this,a)}});h.func("ifr",function(){var a=v(arguments);if(a.shift())return a});h.func("class",function(a,b,c,e){switch(a){case "toggle":if(c){this.el.classList.add(b);break}this.el.classList.remove(b);break;case "switch":c?(this.el.classList.remove(b),this.el.classList.add(e)):(this.el.classList.remove(e),this.el.classList.add(b))}});h.directive("noop",function(){});h.directive("text",function(a,
b){this.el.textContent=a||b});h.directive("component",function(a,b){void 0===b&&(b={});b.el=this.el;h.inject(a,b)});h.directive("repeat",function(a){void 0===this.el.dataflow&&(this.el.dataflow={});void 0===this.el.dataflow.repeat&&(this.el.dataflow.repeat={});var b=this.el.dataflow.repeat;if(void 0===b.el){var c=this.el.firstElementChild;b.el=c.cloneNode(!0);for(var e=this.el.querySelectorAll("*"),d=0;d<e.length;d++){var k=e[d];void 0===k.dataflow&&(k.dataflow={});k.dataflow.omit=!0}this.el.removeChild(c);
b.el.classList.remove("df-hide")}h.remove(this.el,{data:!1});void 0===b.fn&&(b.fn=function(g,n,l){var p={};void 0!==g.ctx.comp&&(p.comp=g.ctx.comp);var q=b.el.cloneNode(!0);p.el=q;p[n]=l;p.container=!0;h.transfer(p,g);h.exec(p);g.el.insertAdjacentElement("beforeend",q)});switch(!0){case Array.isArray(a):for(c=0;c<a.length;c++)b.fn(this,"$index",c);break;case "object"===typeof a:for(var f in a)b.fn(this,"$key",f)}});h.directive("hide",function(a,b){void 0!==a&&(void 0!==b?a===b?this.el.classList.add("df-hide"):
this.el.classList.remove("df-hide"):a?this.el.classList.add("df-hide"):this.el.classList.remove("df-hide"))});h.directive("show",function(a,b){void 0!==a&&h.directive("hide").call(this,!a,b)});h.directive("class",h.func("class"));h.directive("if",h.func("if"));document.addEventListener("DOMContentLoaded",function(){h.set("dataflow.ready",!0)});this.df=h}).call(this);