You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2 lines
9.7 KiB
2 lines
9.7 KiB
//dna.js v0.2.9 ~~ dnajs.org/license.html
|
|
var dna={clone:function(a,b,c){var d={fade:!1,top:!1,container:null,empty:!1,html:!1,callback:null};$.extend(d,c);var e=dna.store.getTemplate(a);e.nested&&!d.container&&dna.core.berserk("Container missing for nested template: "+a),d.empty&&dna.empty(a);for(var f=b instanceof Array?b:[b],g=$(),h=0;h<f.length;h++)g=g.add(dna.core.replicate(e,f[h],h+1,d));return g},cloneSubTemplate:function(a,b,c,d){function e(){i.push(this)}var f=dna.compile.subTemplateName(a,b),g=".dna-contains-"+f,h={container:a.find(g).addBack(g)};$.extend(h,d),dna.clone(f,c,h);var i=dna.getModel(a)[b];return $.each(c instanceof Array?c:[c],e),a},load:function(a,b,c){function d(b){dna.core.unload(a,b,c)}return $.getJSON(b,d)},getModel:function(a){function b(){var b=[];return dna.getClones(a).each(function(){b.push($(this).data("dna-model"))}),b}return a instanceof jQuery?dna.getClone(a).data("dna-model"):b()},empty:function(a,b){var c={fade:!1};$.extend(c,b);var d=dna.store.getTemplate(a).container.find(".dna-clone");return c.fade?dna.ui.slideFadeDelete(d):d.remove()},mutate:function(a,b,c){var d={html:!1};return $.extend(d,c),a=dna.getClone(a),b||(b=dna.getModel(a)),dna.core.inject(a,b,null,d),a},mutateAll:function(a){function b(){dna.mutate($(this))}return dna.getClones(a).each(b)},destroy:function(a,b){function c(b,c){var d=b.children("."+dna.compile.subTemplateName(b,c));dna.getModel(b)[c].splice(d.index(a),1)}var d={fade:!1};return $.extend(d,b),a=dna.getClone(a),a.hasClass("dna-array")&&c(a.parent(),a.data().dnaRules.array),d.fade?dna.ui.slideFadeDelete(a):a.remove()},getClone:function(a){return a instanceof jQuery?a.closest(".dna-clone"):$()},getClones:function(a){return dna.store.getTemplate(a).container.children().filter(".dna-clone")},bye:function(a){return dna.destroy(dna.ui.toElem(a,this),{fade:!0})},registerInitializer:function(a,b){var c={onDocumentLoad:!0};return $.extend(c,b),c.onDocumentLoad&&dna.util.apply(a,[c.selector?$(c.selector).not(".dna-template "+c.selector).addClass("dna-initialized"):$(document)].concat(c.params)),dna.events.initializers.push({func:a,selector:c.selector,params:c.params})},clearInitializers:function(){dna.events.initializers=[]},info:function(){var a=Object.keys(dna.store.templates);return console.log("~~ dns.js v0.2.9 ~~"),console.log("templates:",a.length),console.log("names:",a),console.log("store:",dna.store.templates),console.log("initializers:",dna.events.initializers.length),navigator.appVersion}};dna.util={toCamel:function(a){function b(a,b){return b.toUpperCase()}return(""+a).replace(/\-(.)/g,b)},toCode:function(a){function b(a){return"-"+a.toLowerCase()}return(""+a).replace(/([A-Z])/g,b).replace(/\s|^-/g,"")},value:function(a,b){return"string"==typeof b&&(b=b.split(".")),null===a||void 0===a||void 0===b?null:1===b.length?a[b[0]]:this.value(a[b[0]],b.slice(1))},realTruth:function(a){function b(){return/^(f|false|0)$/i.test(a)}function c(){return a instanceof Array&&0===a.length}return a?!c()&&!b():!1},apply:function(a,b){function c(b,g){!b||1==g.length&&"function"!=typeof b[g[0]]?dna.core.berserk("Callback function not found: "+a):1==g.length?d=b[g[0]].apply(f,e):c(b[g[0]],g.slice(1))}var d,e=[].concat(b),f=e[0];return f instanceof jQuery&&0===f.length?d=f:"function"==typeof a?d=a.apply(f,e):f&&f[a]?d=f[a](e[1],e[2],e[3]):""===a||-1!==$.inArray(typeof a,["number","boolean"])?dna.core.berserk("Invalid callback function: "+a):"string"==typeof a&&a.length>0&&c(window,a.split(".")),d}},dna.ui={toElem:function(a,b){return a instanceof jQuery?a:$(a?a.target:b)},deleteElem:function(a){return dna.ui.toElem(a,this).remove()},slideFade:function(a,b,c){function d(){a.css(h)}var e={opacity:0,transition:"opacity 0s ease 0s"},f={opacity:1,transition:"opacity 0.4s ease-in"},g={opacity:0,transition:"opacity 0.4s ease-out"},h={transition:"opacity 0s ease 0s"};return window.setTimeout(d,1e3),c?a.css(e).hide().slideDown({complete:b}).css(f):a.css(g).slideUp({complete:b}),a},slideFadeIn:function(a,b){return dna.ui.slideFade(a,b,!0)},slideFadeOut:function(a,b){return dna.ui.slideFade(a,b,!1)},slideFadeToggle:function(a,b){return dna.ui.slideFade(a,b,a.is(":hidden"))},slideFadeDelete:function(a){return dna.ui.slideFadeOut(a,dna.ui.deleteElem)},slidingFlasher:function(a,b){return a.is(":hidden")?dna.ui.slideFadeIn(a,b):a.hide().fadeIn()}},dna.compile={regexDnaField:/^[\s]*(~~|\{\{).*(~~|\}\})[\s]*$/,regexDnaBasePair:/~~|{{|}}/,regexDnaBasePairs:/~~|\{\{|\}\}/g,setupNucleotide:function(a){return void 0===a.data().dnaRules&&(a.data().dnaRules={}),a.addClass("dna-nucleotide")},isDnaField:function(){var a=$(this)[0].childNodes[0];return a&&a.nodeValue&&a.nodeValue.match(dna.compile.regexDnaField)},field:function(){var a=dna.compile.setupNucleotide($(this));return a.data().dnaRules.text=$.trim(a.text()).replace(dna.compile.regexDnaBasePairs,""),a.empty()},propsAndAttrs:function(){function a(){if(/^data-dna-prop-/.test(this.name))c.push(this.name.replace(/^data-dna-prop-/,""),this.value.replace(dna.compile.regexDnaBasePairs,""));else{if(3!==this.value.split(dna.compile.regexDnaBasePair).length)return;d.push(this.name.replace(/^data-dna-attr-/,""),this.value.split(dna.compile.regexDnaBasePair))}e.push(this.name)}var b=$(this),c=[],d=[],e=[];return $.each(b.get(0).attributes,a),c.length>0&&(dna.compile.setupNucleotide(b).data().dnaRules.props=c),d.length>0&&(dna.compile.setupNucleotide(b).data().dnaRules.attrs=d),b.removeAttr(e.join(" "))},getDataField:function(a,b){return $.trim(a.data("dna-"+b).replace(dna.compile.regexDnaBasePairs,""))},subTemplateName:function(a,b){var c=a instanceof jQuery?dna.getClone(a).data().dnaRules.template:a;return c+"-"+b+"-instance"},rules:function(a,b,c){function d(){var a=dna.compile.setupNucleotide($(this)),d=dna.compile.getDataField(a,b);a.data().dnaRules[b]=c?d.split(","):d}return a.filter("[data-dna-"+b+"]").each(d).removeAttr("data-dna-"+b)},template:function(a){function b(){$(this).data().dnaRules={template:$(this).attr("id")}}var c=$("#"+a);c.length||dna.core.berserk("Template not found: "+a),c.find(".dna-template").addBack().each(b).removeAttr("id");var d=c.find("*").addBack();return d.filter(dna.compile.isDnaField).each(dna.compile.field),dna.compile.rules(d,"array").addClass("dna-array"),dna.compile.rules(d,"class",!0),dna.compile.rules(d,"require"),dna.compile.rules(d,"missing"),dna.compile.rules(d,"truthy"),dna.compile.rules(d,"falsey"),d.each(dna.compile.propsAndAttrs),dna.store.stash(c)}},dna.store={templates:{},stash:function(a){function b(){var a=$(this),b=a.data().dnaRules.template,c={name:b,elem:a,container:a.parent().addClass("dna-container").addClass("dna-contains-"+b),nested:0!==a.parent().closest(".dna-clone").length,index:a.index(),clones:0};dna.store.templates[b]=c,a.removeClass("dna-template").addClass("dna-clone").addClass(b).detach()}function c(){var a=$(this),b=a.data().dnaRules.array,c=dna.compile.subTemplateName(d,b);dna.compile.setupNucleotide(a.parent()).data().dnaRules.loop={name:c,field:b},a.data().dnaRules.template=c}var d=a.data().dnaRules.template;return a.find(".dna-template").addBack().each(b),a.find(".dna-array").each(c).each(b),dna.store.templates[d]},getTemplate:function(a){return dna.store.templates[a]||dna.compile.template(a)}},dna.events={initializers:[],elementSetup:function(a,b){function c(){dna.util.apply($(this).data("dna-setup"),[$(this),b])}var d="[data-dna-setup]",e=a?a.find(d).addBack(d):$(".dna-setup");return e.each(c).addClass("dna-initialized")},runInitializers:function(a,b){function c(){dna.util.apply(this.func,[(this.selector?a.find(this.selector).addBack(this.selector):a).addClass("dna-initialized")].concat(this.params))}return dna.events.elementSetup(a,b),$.each(dna.events.initializers,c),a},runner:function(a,b,c){return a=a.closest("[data-dna-"+b+"]"),dna.util.apply(a.data("dna-"+b),[a,c])},handle:function(a){return dna.events.runner($(a.target),a.type.replace("key","key-"),a)},handleEnterKey:function(a){return 13===a.which?dna.events.runner($(a.target),"enter-key",a):null},setup:function(){$(document).click(dna.events.handle).change(dna.events.handle).keyup(dna.events.handle).keyup(dna.events.handleEnterKey).keydown(dna.events.handle).keypress(dna.events.handle),dna.events.elementSetup()}},$(dna.events.setup),dna.core={inject:function(a,b,c,d){function e(a,e){function f(a){return-1!==$.inArray(typeof a,h)}var g="object"==typeof b?dna.util.value(b,e):"[count]"===e?c:"[value]"===e?b:null,h=["string","number","boolean"];f(g)&&(a=d.html?a.html(g):a.text(g))}function f(a,c){for(var d=0;d<c.length/2;d++)a.prop(c[2*d],dna.util.realTruth(dna.util.value(b,c[2*d+1])))}function g(a,c){for(var d=0;d<c.length/2;d++){var e=c[2*d],f=c[2*d+1],g=[f[0],dna.util.value(b,f[1]),f[2]].join("");a.attr(e,g),"value"===e&&a.val(g)}}function h(a,c){var d=dna.util.value(b,c[0]),e=dna.util.realTruth(d);1===c.length?a.addClass(d):c.length>1&&(a.toggleClass(c[1],e),c[2]&&a.toggleClass(c[2],!e))}function i(a,c){var d=dna.util.value(b,c.field);d&&dna.clone(c.name,d,{container:a})}function j(){var a=$(this),c=a.data().dnaRules;c.text&&e(a,c.text),c.props&&f(a,c.props),c.attrs&&g(a,c.attrs),c.class&&h(a,c.class),c.require&&a.toggle(void 0!==dna.util.value(b,c.require)),c.missing&&a.toggle(void 0===dna.util.value(b,c.missing)),c.truthy&&a.toggle(dna.util.realTruth(dna.util.value(b,c.truthy))),c.falsey&&a.toggle(!dna.util.realTruth(dna.util.value(b,c.falsey))),c.loop&&i(a,c.loop)}return a.find(".dna-array").remove(),a.find(".dna-nucleotide").addBack(".dna-nucleotide").each(j),a.data("dna-model",b)},replicate:function(a,b,c,d){var e=a.elem.clone(!0,!0);a.clones++,dna.core.inject(e,b,c,d);var f=".dna-contains-"+a.name,g=d.container?d.container.find(f).addBack(f):a.container;return g[d.top?"prepend":"append"](e),dna.events.runInitializers(e,b),d.callback&&d.callback(e,b),d.fade&&dna.ui.slideFadeIn(e),e},unload:function(a,b,c){b.error||dna.clone(a,b,c)},berserk:function(a){throw"dna.js error -> "+a}}; |