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
16 KiB

//dna.js v0.4.4 ~~ dnajs.org/license.html
var dna={clone:function(a,b,c){var d=$.extend({fade:!1,top:!1,container:null,empty:!1,html:!1,callback:null},c),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,d));return dna.placeholder.setup(),g.first().closest(".dna-menu, .dna-panels").length&&dna.panels.refresh(),g},cloneSubTemplate:function(a,b,c,d){function e(){i.push(this)}var f=dna.compile.subTemplateName(a,b),g=".dna-contains-"+f,h=$.extend({container:a.find(g).addBack(g)},d);dna.clone(f,c,h);var i=dna.getModel(a)[b];return $.each(c instanceof Array?c:[c],e),a},createTemplate:function(a,b,c){return $(b).attr("id",a).addClass("dna-template").appendTo(c),dna.store.getTemplate(a)},rest:{get:function(a,b,c){function d(b){b.error||dna.clone(a,b,c)}return $.getJSON(b,d)}},getModel:function(a,b){function c(a){return dna.getClone(a,b).data("dnaModel")}function d(a){function b(){c.push(dna.getModel($(this)))}var c=[];return dna.getClones(a).each(b),c}return(a instanceof jQuery?c:d)(a)},empty:function(a,b){var c=$.extend({fade:!1},b),d=dna.store.getTemplate(a).container.find(".dna-clone");return c.fade?dna.ui.slideFadeDelete(d):dna.core.remove(d)},refresh:function(a,b){var c=$.extend({html:!1},b),d=dna.getClone(a,b),e=c.data?c.data:dna.getModel(d);return dna.core.inject(d,e,null,c)},refreshAll:function(a){function b(){dna.refresh($(this))}return dna.getClones(a).each(b)},destroy:function(a,b){function c(b){dna.getModel(a.parent())[b].splice(dna.getIndex(a),1)}var d=$.extend({fade:!1},b);return a=dna.getClone(a,b),a.hasClass("dna-sub-clone")&&c(a.data().dnaRules.array),d.fade?dna.ui.slideFadeDelete(a):dna.core.remove(a)},getClone:function(a,b){var c=$.extend({main:!1},b),d=c.main?".dna-clone:not(.dna-sub-clone)":".dna-clone";return a instanceof jQuery?a.closest(d):$()},getClones:function(a){return dna.store.getTemplate(a).container.children().filter(".dna-clone")},getIndex:function(a,b){var c=dna.getClone(a,b);return c.parent().children(".dna-clone").index(c)},up:function(a){return dna.ui.smoothMove(dna.getClone(dna.ui.toElem(a,this)),!0)},down:function(a){return dna.ui.smoothMove(dna.getClone(dna.ui.toElem(a,this)),!1)},bye:function(a){return dna.destroy(dna.ui.toElem(a,this),{fade:!0})},registerInitializer:function(a,b){var c=$.extend({onDocumentLoad:!0},b);return 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("~~ dna.js v0.4.4 ~~"),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.array={find:function(a,b){function c(a){return a.code===b}var d=a.filter(c);return d.length?d[0]:null},last:function(a){return a&&a.length?a[a.length-1]:void 0},toMap:function(a,b){function c(a){d[a[b]]=a}b=b?b:"code";var d={};return a.forEach(c),d}},dna.browser={getParams:function(){function a(a){b[a.split("=")[0]]=a.split("=")[1]}var b={};return window.location.search.slice(1).split("&").forEach(a),b}},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},printf:function(a){function b(a,b){return a.replace(/%s/,b)}var c=Array.prototype.slice.call(arguments,1);return c.reduce(b,a)},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||{number:!0,"boolean":!0}[typeof a]?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){var b=dna.ui.toElem(a,this);return dna.core.remove(b),b},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()},smoothMove:function(a,b){function c(){var c=d.clone();b?a.after(d.hide()).before(c):a.before(d.hide()).after(c),dna.ui.slideFadeIn(d),dna.ui.slideFadeDelete(c)}var d=b?a.prev():a.next();d.length&&c()},focus:function(a){return a.focus()}},dna.placeholder={setup:function(){function a(){var a=$(this).stop();return dna.getClones(a.data().placeholder).length?a.fadeOut():a.fadeIn()}$("[data-placeholder]").each(a)}},$(dna.placeholder.setup),dna.pageToken={put:function(a,b){return sessionStorage[a+window.location.pathname]=JSON.stringify(b),b},get:function(a,b){var c=sessionStorage[a+window.location.pathname];return void 0===c?b:JSON.parse(c)}},dna.panels={key:function(a){return"#"+a.attr("id")+"-panels"},display:function(a,b,c){function d(){dna.pageToken.put(g,b),c&&f.data().hash&&window.history.pushState(null,null,"#"+f.data().hash)}var e,f,g=dna.panels.key(a),h=a.find(".menu-item");void 0===b&&(b=dna.pageToken.get(g,0)),b=Math.max(0,Math.min(b,h.length-1)),h.removeClass("selected").eq(b).addClass("selected"),e=$(g).children().hide().removeClass("displayed"),f=e.eq(b).fadeIn().addClass("displayed"),d(),dna.util.apply(a.data().callback,f)},rotate:function(a){var b=$(a.target).closest(".menu-item"),c=b.closest(".dna-menu");dna.panels.display(c,c.find(".menu-item").index(b),!0)},reload:function(a){dna.panels.display($("#"+a))},refresh:function(){function a(a){return a.filter("[data-hash="+d+"]").index()}function b(a){return a.first().closest(".dna-template").length>0}function c(){var c=$(this),e=dna.panels.key(c),f=$(e).children().addClass("panel");if(0===c.find(".menu-item").length&&c.children().addClass("menu-item"),!b(f)&&!b(c.children())){var g=d&&f.first().data().hash?a(f):dna.pageToken.get(e,0);dna.panels.display(c,g)}}var d=window.location.hash.slice(1);$(".dna-menu").each(c)},setup:function(){dna.panels.refresh(),$(document).on("click",".dna-menu .menu-item",dna.panels.rotate)}},$(dna.panels.setup),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(a,b){g.push(a),a=a.replace(/^data-prop-/,"").toLowerCase(),b=b.replace(dna.compile.regexDnaBasePairs,""),e.push(a,b),"checked"===a&&d.is("input")?d.addClass("dna-update-model").data().dnaField=b:"selected"===a&&d.is("option")&&(d.parent().addClass("dna-update-model").end().data().dnaField=b)}function b(a,b){var c=b.split(dna.compile.regexDnaBasePair);"[value]"===c[1]&&(c[1]=!0),f.push(a.replace(/^data-attr-/,""),c),g.push(a);var e="input:not(:checkbox, :radio)";"value"===a&&d.is(e)&&""===c[0]&&""===c[2]&&(d.addClass("dna-update-model").data().dnaField=c[1])}function c(){/^data-prop-/.test(this.name)?a(this.name,this.value):3===this.value.split(dna.compile.regexDnaBasePair).length&&b(this.name,this.value)}var d=$(this),e=[],f=[],g=[];return $.each(d.get(0).attributes,c),e.length>0&&(dna.compile.setupNucleotide(d).data().dnaRules.props=e),f.length>0&&(dna.compile.setupNucleotide(d).data().dnaRules.attrs=f),d.data().transform&&(dna.compile.setupNucleotide(d).data().dnaRules.transform=d.data().transform),d.data().callback&&(dna.compile.setupNucleotide(d).data().dnaRules.callback=d.data().callback),d.removeAttr(g.join(" "))},getDataField:function(a,b){return $.trim(a.data(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-"+b+"]").each(d).removeAttr("data-"+b)},separators:function(a){function b(){return 3===this.nodeType&&!/\S/.test(this.nodeValue)}function c(a,c,d){c&&(a.contents().last().filter(b).remove(),a.append($("<span>").addClass(d).html(c)))}function d(){var a=$(this);c(a,a.data().separator,"dna-separator"),c(a,a.data().lastSeparator,"dna-last-separator")}a.find(".dna-template, .dna-sub-clone").addBack().each(d)},template:function(a){function b(){$(this).data().dnaRules={template:$(this).attr("id")}}function c(){$(this).attr("type",$(this).data().attrType)}var d=$("#"+a);d.length||dna.core.berserk("Template not found: "+a),d.find(".dna-template").addBack().each(b).removeAttr("id");var e=d.find("*").addBack();return e.filter(dna.compile.isDnaField).each(dna.compile.field),dna.compile.rules(e,"array").addClass("dna-sub-clone"),dna.compile.rules(e,"class",!0),dna.compile.rules(e,"require"),dna.compile.rules(e,"missing"),dna.compile.rules(e,"truthy"),dna.compile.rules(e,"falsey"),dna.compile.rules(e.filter("select"),"option").addClass("dna-update-model"),e.each(dna.compile.propsAndAttrs),dna.compile.separators(d),$("input[data-attr-type]").each(c),dna.store.stash(d)}},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,separators:a.find(".dna-separator, .dna-last-separator").length,index:a.index(),elemsAbove:a.index()>0,elemsBelow:a.nextAll().length>0,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().addClass("dna-array")).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-sub-clone").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().onLoad,[$(this),b])}var d="[data-on-load]",e=a?a.find(d).addBack(d):$(d);return e.not(".dna-initialized").each(c).addClass("dna-initialized")},runInitializers:function(a,b){function c(){var b=this.selector?a.find(this.selector).addBack(this.selector):a;dna.util.apply(this.func,[b.addClass("dna-initialized")].concat(this.params))}return dna.events.elementSetup(a,b),$.each(dna.events.initializers,c),a},setup:function(){function a(a,b,c){return a=a.closest("[data-"+b+"]"),dna.util.apply(a.data(b),[a,c])}function b(b){function c(a){return a.dnaRules&&a.dnaRules.option||a.dnaField}function d(a,b){dna.getModel(a)[c(a.data())]=b(a)}function e(a){return a.val()}function f(a){return a.is(":checked")}function g(){d($(this),f)}function h(){var a=dna.getClone(i,{main:!0});0!==a.length&&(i.is("input:checkbox")?d(i,f):i.is("input:radio")?$("input:radio[name="+i.attr("name")+"]").each(g):i.is("input")||i.data().dnaRules.option?d(i,e):i.is("select")&&i.find("option").each(g),dna.refresh(a))}var i=$(b.target);i.hasClass("dna-update-model")&&h(),a(i,b.type.replace("key","key-"),b)}function c(b){13===b.which&&a($(b.target),"enter-key",b)}function d(b){function c(){function c(){f.dnaLastUpdated=Date.now(),f.dnaTimeoutId=void 0,a(e,"smart-update",b)}var g=f.smartThrottle?Number(f.smartThrottle):d;f.dnaLastValue=e.val(),f.dnaTimeoutId||(Date.now()<f.dnaLastUpdated+g?f.dnaTimeoutId=window.setTimeout(c,g):c())}var d=2e3,e=$(b.target),f=e.data();f.smartUpdate&&e.val()!==f.dnaLastValue&&c()}function e(){function a(a){return a.closest(".external-site").length?"_blank":"_self"}function b(){window.open($(this).data().href,a($(this)))}$(document).on("click","[data-href]",b)}$(document).click(b).change(b).keyup(b).keyup(c).keyup(d).keydown(b).keypress(b),e(),dna.events.elementSetup()}},$(dna.events.setup),dna.core={inject:function(a,b,c,d){function e(a,e){var f="[count]"===e?c+1:"[value]"===e?b:dna.util.value(b,e),g={string:!0,number:!0,"boolean":!0};g[typeof f]&&(a=d.html?a.html(f):a.text(f))}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[1]===!0?b:dna.util.value(b,f[1]),h=[f[0],g,f[2]].join("");a.attr(e,h),/^data-./.test(e)&&a.data(e.substring(5),h),"value"===e&&h!==a.val()&&a.val(h)}}function h(a,b){null!==b&&a.val(b)}function i(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 j(a,c){function e(a){dna.core.inject($(this),g[a],a,d)}function f(){h.remove(),dna.clone(c.name,g,{container:a,html:d.html})}var g=dna.util.value(b,c.field),h=a.children("."+c.name.replace(/[.]/g,"\\."));g?g.length===h.length?h.each(e):f():b[c.field]=[]}function k(){var a=$(this),c=a.data().dnaRules;c.transform&&dna.util.apply(c.transform,b),c.text&&e(a,c.text),c.props&&f(a,c.props),c.attrs&&g(a,c.attrs),c["class"]&&i(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&&j(a,c.loop),c.option&&h(a,dna.util.value(b,c.option)),c.callback&&dna.util.apply(c.callback,a)}function l(a){a.filter(".dna-nucleotide").each(k),a.length&&l(a.children().not(".dna-sub-clone"))}return l(a),a.data().dnaModel=b,a},replicate:function(a,b,c,d){function e(){var b=h.children("."+a.name);b.find(".dna-separator").show().end().last().find(".dna-separator").hide(),b.find(".dna-last-separator").hide().end().eq(-2).find(".dna-last-separator").show().closest(".dna-clone").find(".dna-separator").hide()}var f=a.elem.clone(!0,!0);a.clones++,dna.core.inject(f,b,c,d);var g=".dna-contains-"+a.name.replace(/[.]/g,"\\."),h=d.container?d.container.find(g).addBack(g):a.container;return d.top&&!a.elemsAbove?h.prepend(f):d.top||a.elemsBelow?d.top?h.children().eq(a.index-1).after(f):h.children().eq(a.index+h.children().filter(".dna-clone").length).before(f):h.append(f),a.separators&&e(),dna.events.runInitializers(f,b),d.callback&&d.callback(f,b),d.fade&&dna.ui.slideFadeIn(f),f},remove:function(a){return a.remove(),dna.placeholder.setup(),a},berserk:function(a){throw"dna.js error -> "+a}};