//dna.js v0.2.7 ~~ 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;h0&&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);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).removeAttr("id"),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:[],onLoadInit:function(a,b){function c(){dna.util.apply($(this).data("dna-init"),[$(this),b])}var d="[data-dna-init]",e=a?a.find(d).addBack(d):$(".dna-init");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.onLoadInit(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.onLoadInit()}},$(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;d1&&(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}};