forked from gwendall/way.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathway.min.js
1 lines (1 loc) · 9.95 KB
/
way.min.js
1
window.way={},function(){"use strict";var a="way",b=function(){this._watchers={},this._watchersAll={}};b.prototype.constructor=b,b.prototype.watchAll=function(a){this._watchersAll=this._watchersAll||[],_.contains(this._watchersAll,a)||this._watchersAll.push(a)},b.prototype.watch=function(a,b){this._watchers||(this._watchers={}),this._watchers[a]=this._watchers[a]||[],this._watchers[a].push(b)},b.prototype.findWatcherDeps=function(a){var b=[],c=_.keys(this._watchers);return c.forEach(function(c){d(a,c)&&b.push(c)}),b},b.prototype.emitChange=function(a){this._watchers||(this._watchers={});var b=this,c=b.findWatcherDeps(a);c.forEach(function(a){this._watchers[a]&&this._watchers[a].forEach(function(c){c.apply(b,[b.get(a)])})}),b._watchersAll&&_.isArray(b._watchersAll)&&b._watchersAll.forEach(function(c){_.isFunction(c)&&c.apply(b,[a,b.get(a)])})};var c=function(){this.data={},this._bindings={},this.options={persistent:!0,timeoutInput:50,timeoutDOM:500}};c.prototype=Object.create(b.prototype),c.constructor=c,c.prototype.dom=function(a){return this._element=$(a),this},c.prototype.toStorage=function(a,b){var c=this,b=b||c._element,a=a||c.dom(b).getOptions(),d=c.dom(b).toJSON(a),e=c.dom(b).scope(),f=e?e+"."+a.data:a.data;return a.readonly?!1:void c.set(f,d,a)},c.prototype.toJSON=function(a,b){var c=this,b=b||c._element,d=c.dom(b).getValue(),a=a||c.dom(b).getOptions();return _.isArray(a.pick)&&(d=i(d,a.pick,!0)),_.isArray(a.omit)&&(d=i(d,a.omit,!1)),d},c.prototype.fromStorage=function(a,b){var c=this,b=b||c._element,a=a||c.dom(b).getOptions();if(a.writeonly)return!1;var d=c.dom(b).scope(),e=d?d+"."+a.data:a.data,f=c.get(e);c.dom(b).fromJSON(f,a)},c.prototype.fromJSON=function(a,b,c){var d=this,c=c||d._element,b=b||d.dom(c).getOptions();if(b.writeonly)return!1;if(_.isObject(a)){_.isArray(b.pick)&&(a=i(a,b.pick,!0)),_.isArray(b.omit)&&(a=i(a,b.omit,!1));var e=_.isObject(d.dom(c).toJSON())?d.dom(c).toJSON():{};a=_.extend(e,a)}b.json&&(a=_json.isStringified(a)?a:_json.prettyprint(a)),d.dom(c).setValue(a,b)},c.prototype.getValue=function(a){var b=this,a=a||b._element,c={SELECT:function(){return $(a).val()},INPUT:function(){var b=$(a).get(0).type;return _.contains(["text","password"],b)?$(a).val():_.contains(["checkbox","radio"],b)?$(a).prop("checked")?$(a).val():null:void 0},TEXTAREA:function(){return $(a).val()}},d=function(){$(a).html()},e=$(a).get(0).tagName,f=c[e]||d;return f()},c.prototype.setValue=function(a,b,c){var d=this,c=c||d._element,b=b||d.dom(c).getOptions(),e={SELECT:function(a){a==$(c).val()?$(c).prop("selected",!0):$(c).removeAttr("selected")},INPUT:function(a){_.isString(a)||(a=JSON.stringify(a));var b=$(c).get(0).type;_.contains(["text","password"],b)&&$(c).val(a||""),_.contains(["checkbox","radio"],b)&&(a==$(c).val()?$(c).prop("checked",!0):$(c).removeAttr("checked"))},TEXTAREA:function(a){_.isString(a)||(a=JSON.stringify(a)),$(c).val(a||"")},PRE:function(a){b.html?$(c).html(a):$(c).text(a)},IMG:function(a){if(!a)return a=b.default||"",$(c).attr("src",a),!1;var d=function(a,b){$(c).addClass("way-loading"),$("<img>",{src:a,error:function(){b(!1)},load:function(){b(!0)}})};d(a,function(d){$(c).removeClass("way-loading"),d?$(c).removeClass("way-error").addClass("way-success"):(a?$(c).addClass("way-error"):$(c).removeClass("way-error").removeClass("way-success"),a=b.default||""),$(c).attr("src",a)})}},f=function(a){b.html?$(c).html(a):$(c).text(a)},g=$(c).get(0).tagName,h=e[g]||f;h(a)},c.prototype.setDefault=function(a,b,c){var d=this,c=c||d._element,a=a||!1,b=b?_.extend(d.dom(c).getOptions(),b):d.dom(c).getOptions();return b.default?void(a?d.set(b.data,b.default,b):d.dom(c).setValue(b.default,b)):!1},c.prototype.setDefaults=function(){var b=this,c="["+a+"-default]";$(c).each(function(){var a=b.dom(this).getOptions(),c=a.data||null,d=c?b.get(c):null;d||b.dom(this).setDefault()})},c.prototype.registerBindings=function(){var b=this,c="["+a+"-data]";b._bindings={},$(c).each(function(){var a=this,c=b.dom(a).getOptions();b._bindings[c.data]=b._bindings[c.data]||[],f(b._bindings[c.data],a)||b._bindings[c.data].push($(a))})},c.prototype.updateBindings=function(a){var b=this;b._bindings=b._bindings||{};var c=j(b._bindings,a);c.forEach(function(a){var c=$(a).get(0)==$(":focus").get(0)?!0:!1;c||b.dom(a).fromStorage()}),b._bindings.__all__&&b._bindings.__all__.forEach(function(a){b.dom(a).fromJSON(b.data)})},c.prototype.registerRepeats=function(){var b=this,c="["+a+"-repeat]";b._repeats=b._repeats||{},b._repeatsCount=b._repeatsCount||0,$(c).each(function(){var c=this,d=b.dom(c).getOptions();b._repeats[d.repeat]=b._repeats[d.repeat]||[];var e=a+'-repeat-wrapper="'+b._repeatsCount+'"';if(!$(c).parent("["+e+"]").length){b._repeats[d.repeat].push({id:b._repeatsCount,element:$(c).clone().removeAttr(a+"-repeat"),selector:d.repeat});var f=document.createElement("div");$(f).attr(a+"-repeat-wrapper",b._repeatsCount),$(f).attr(a+"-scope",d.repeat),$(c).replaceWith(f),b.updateRepeats(d.repeat),b._repeatsCount++}})},c.prototype.updateRepeats=function(b){var c=this;c._repeats=c._repeats||{};var d=j(c._repeats,b);d.forEach(function(b){var d="["+a+"-repeat-wrapper='"+b.id+"']",e=c.get(b.selector),f=[];if(!e||e.length!=$(d+" > *").length){$(d).empty();for(var g in e){b.element.attr(a+"-scope",g);var h=b.element.get(0).outerHTML;h=h.replace(/\$\$key/gi,g),f.push(h)}$(d).html(f),c.registerBindings(),c.updateBindings()}})},c.prototype.updateForms=function(){var b=this,c="form["+a+"-data]";$(c).each(function(){var c=this,d=b.dom(c).getOptions(),f=d.data;$(c).removeAttr(a+"-data");var g=$(c).find("[name]").get().reverse();$(g).each(function(){var a=this,g=$(a).attr("name");if(e(g,"[]")){var h=g.split("[]")[0],i="[name^='"+h+"']",j=$(c).find(i).length;g=h+"."+j}var k=f+"."+g;d.data=k,b.dom(a).setOptions(d),$(a).removeAttr("name")})})},c.prototype.registerDependencies=function(){this.registerBindings(),this.registerRepeats()},c.prototype.updateDependencies=function(){this.updateBindings(),this.updateRepeats(),this.updateForms()},c.prototype.setOptions=function(b,c){var d=this,c=d._element||c;for(var e in b){var f=a+"-"+e,g=b[e];$(c).attr(f,g)}},c.prototype.getOptions=function(b){var c=this,b=b||c._element,d={data:null,html:!1,readonly:!1,writeonly:!1,persistent:!1};return _.extend(d,c.dom(b).getAttrs(a))},c.prototype.getAttrs=function(a,b){var c=this,b=b||c._element,e=function(a,b){var c={pick:"array",omit:"array",readonly:"boolean",writeonly:"boolean",json:"boolean",html:"boolean",persistent:"boolean"},d={array:function(a){return a.split(",")},"boolean":function(a){return"true"==a?!0:"false"==a?!1:!0}},e=function(){return b},f=c[a]||null,g=d[f]||e;return g(b)},f={};return $(b).length&&$.each($(b).get(0).attributes,function(b,c){var g=a&&d(c.name,a+"-")?!0:!1;if(g){var h=a?c.name.slice(a.length+1,c.name.length):c.name,i=e(h,c.value);f[h]=i}}),f},c.prototype.scope=function(b,c){var d=this,c=c||d._element,e=a+"-scope",f=a+"-scope-break",g=[],h="";return $(c).parents("["+f+"], ["+e+"]").each(function(){return $(this).attr(f)?!1:void g.unshift($(this).attr(e))}),$(c).attr(e)&&g.push($(c).attr(e)),$(c).attr(f)&&(g=[]),h=g.join(".")},c.prototype.get=function(a){var b=this;return void 0==a||_.isString(a)?b.data?a?_json.get(b.data,a):b.data:{}:!1},c.prototype.set=function(a,b,c){if(!a)return!1;if("this"===a.split(".")[0])return console.log('Sorry, "this" is a reserved word in way.js'),!1;var d=this;if(c=c||{},a){if(!_.isString(a))return!1;d.data=d.data||{},d.data=a?_json.set(d.data,a,b):{},d.updateDependencies(a),d.emitChange(a,b),c.persistent&&d.backup(a)}},c.prototype.push=function(a,b,c){if(!a)return!1;var d=this;c=c||{},a&&(d.data=a?_json.push(d.data,a,b,!0):{}),d.updateDependencies(a),d.emitChange(a,null),c.persistent&&d.backup(a)},c.prototype.remove=function(a,b){var c=this;b=b||{},c.data=a?_json.remove(c.data,a):{},c.updateDependencies(a),c.emitChange(a,null),b.persistent&&c.backup(a)},c.prototype.clear=function(){this.remove(null,{persistent:!0})},c.prototype.backup=function(){var b=this;if(b.options.persistent)try{var c=b.data||{};localStorage.setItem(a,JSON.stringify(c))}catch(d){console.log("Your browser does not support localStorage.")}},c.prototype.restore=function(){var b=this;if(b.options.persistent)try{var c=localStorage.getItem(a);try{c=JSON.parse(c);for(var d in c)b.set(d,c[d])}catch(e){}}catch(e){console.log("Your browser does not support localStorage.")}};var d=function(a,b){return""===b?!0:null==a||null==b?!1:(a=String(a),b=String(b),a.length>=b.length&&a.slice(0,b.length)===b)},e=function(a,b){return""===b?!0:null==a||null==b?!1:(a=String(a),b=String(b),a.length>=b.length&&a.slice(a.length-b.length,a.length)===b)},f=function(a,b){var c=!1;return a.every(function(a){return $(a).get(0)===$(b).get(0)?(c=!0,!1):!0}),c},g=function(a){return _.pick(a,_.compact(_.keys(a)))},h=function(a,b,c){var e=_.keys(a);return e.forEach(function(e){c?d(e,b)||delete a[e]:d(e,b)&&delete a[e]}),a},i=function(a,b,c){var d=_json.flatten(a);for(var e in b)d=h(d,b[e],c);var f=_json.unflatten(d);return g(f)},j=function(a,b){var c=[];if(b)for(var e in a)d(e,b)&&(c=_.union(c,a[e]));else for(var e in a)c=_.union(c,a[e]);return c};way=new c;var k=function(){way.restore(),way.setDefaults(),way.registerDependencies(),way.updateDependencies()},l=null,m=function(){l&&clearTimeout(l),l=setTimeout(function(){way.registerDependencies()},way.options.timeoutDOM)},n=null,o=function(a){n&&clearTimeout(n),n=setTimeout(function(){var b=$(a.target);way.dom(b).toStorage()},way.options.timeout)},p=function(a){console.log("Clicked!"),a.preventDefault();var b=way.dom(this).getOptions();way.remove(b.data,b)},q=function(a){a.preventDefault();var b=way.dom(this).getOptions();if(b&&b["action-push"]){var c=b["action-push"].split(":"),d=c[0]||null,e=c[1]||null;way.push(d,e,b)}},r=function(a){a.preventDefault();var b=way.dom(this).getOptions();b&&b["action-remove"]&&way.remove(b["action-remove"],b)};$(document).on("click","["+a+"-clear]",p),$(document).on("input change",":input["+a+"-data]",o),$(document).on("click","["+a+"-action-push]",q),$(document).on("click","["+a+"-action-remove]",r),$(document).on("DOMSubtreeModified","body",m),$(document).ready(k)}.call(this);