Skip to content
Snippets Groups Projects
tinyDOM-Sideburns.min.js 4.52 KiB
Newer Older
(function(window,undefined){var globalOptions={ignoreUndefined:!1,escape:"general",escapeSets:{xml:{"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;"},general:{'"':'\\"',"'":"\\'"}}},deepMergeJson=function(e,n){var t;for(t in n)n.hasOwnProperty(t)&&(e[t]="object"==typeof e[t]&&"object"==typeof n[t]?deepMergeJson(e[t],n[t]):n[t]);return e},setDeepProperty=function(e,n,t){var r,o=function(e,n,t){e.length>1?o(e,n,t[r.shift()]):t[e[0]]=n};return r=e.push||e.map?e:e.split(".").map(function(e){return e.trim()}),o(r,n,t),t},getDeepProperty=function(e,n){var t,r=null,o=function(n,i){var a;if(n.length>1){if(!i.hasOwnProperty(n[0]))throw a=n.reduce(function(e,n,t){return e+(t>0?".":"")+n}),new Error('Invalid proprty, missing expected data "'+a+'" (IDENT: '+e+") from data "+JSON.stringify(i));o(n,i[t.shift()])}else{if(!i.hasOwnProperty(n[0]))throw new Error('Invalid proprty, missing expected data "'+n[0]+'" (IDENT: '+e+") from data "+JSON.stringify(i));r=i[n[0]]}};return t=e.push||e.map?e:e.split(".").map(function(e){return e.trim()}),o(t,n),r},resolveNamespace=function(e,n){var t,r=n.length,o="";for(t=0;r>t;t+=1)o+=n[t]+".";return o+e},safeDeepMergeJson=function(e,n){if("object"!=typeof e)throw new TypeError("Cannot deep merge with an "+typeof e+": [Param 1]");if("object"!=typeof n)throw new TypeError("Cannot deep merge with an "+typeof n+": [Param 2]");return deepMergeJson(deepMergeJson({},e),n)},captureTags=/(\[\[)(\#|\/)?\s*(?:([a-zA-Z]+[a-zA-Z0-9]*)\s*\:\s*([a-zA-Z]+[a-zA-Z0-9]*)|([\*\&]?)\s*((?:\!(?:\(([a-zA-Z]+[a-zA-Z0-9]*)\))?)?)\s*([a-zA-Z](?:[a-zA-Z0-9]*(?:\.(?=[a-zA-Z]))?)+))\s*(\]\])/,Stack=function(){var e=this;return this.length=0,this.push=function(n){e[e.length]=n,e.length+=1},this.pop=function(){var n=null;return e.length>0&&(n=e[e.length-1],e[e.length-1]=null,e.length-=1),n},this.peek=function(){return this.length>0?e[e.length-1]:null},this.contains=function(e,n){n=n||function(e,n){return e===n};for(var t=this.length;t--;)if(n(this[t],e))return!0;return!1},this},Node=function(e,n,t){return this.ident=e||"N_NULL",this.val=n||null,this.content=t||{},this},Token=function(e,n,t){return this.ident=e||"T_NULL",this.val=n||null,this.info=t||{},this},tokenise=function(e){var n,t,r,o=[],i=0,a=null;for(n=function(){return null!==(a=captureTags.exec(t))};i<e.length;)t=e.substr(i),n()?(a.index>0&&o.push(new Token("STRING",a.input.substr(0,a.index))),r=new Token("T_NULL",null,{close:!1,escape:!1,escapeType:null}),"#"===a[2]?(r.ident="T_DIRECTIVE",r.val={},r.val[a[3]]=a[4]):("/"===a[2]&&(r.info.close=!0),r.ident="*"===a[5]?"T_LOOP":"&"===a[5]?"T_BLOCK":"T_DATA","undefined"!=typeof a[6]&&"!"===a[6].charAt(0)&&(r.info.escape=!0,"undefined"!=typeof a[7]&&(r.info.escapeType=a[7])),r.val=a[8]),o.push(r),i+=a.index+a[0].length):(o.push(new Token("STRING",t)),i+=t.length);return o.push(new Token("EOD")),o},collapseParse=function(e){for(var n,t,r,o,i=0;i<e.length;)if(e[i].info&&e[i].info.close){for(n=[],r=e[i],t=i-1;e[t].ident!==r.ident||e[t].val!==r.val;)if(n.push(e[t]),t-=1,0>t)throw new Error("Unmatched Closing Tag "+o+" at index "+i);o="T_LOOP"===r.ident?new Node("N_LOOP",r.val,n.slice().reverse()):new Node("N_BLOCK",r.val,n.slice().reverse()),e.splice(t,i-t+1,o),i=0}else i+=1;return e},unwindNode=function(e,n,t,r){var o,i,a,u,s;switch(n.ident){case"STRING":return e+n.val;case"T_DATA":return s=n.val,r.loopTag&&n.val===r.loopTag.slice(0,-1)&&(s=r.loopTag+"."+r.i.toString()),e+getDeepProperty(s,r.data);case"N_LOOP":for(a="",o=n.content,o.data=r.data,o.loopTag=n.val,i=getDeepProperty(n.val,r.data),u=0;u<i.length;u+=1)o.i=u,a+=o.reduce(unwindNode,"");return e+a;case"N_BLOCK":return o=n.content,o.data=getDeepProperty(n.val,r.data),o.loopTag=null,e+o.reduce(unwindNode,"");default:return e}},render=function(e,n){var t=collapseParse(tokenise(e));return t.data=n,t.loopTag=null,t.i=null,t.reduce(unwindNode,"")};if(render.partial=function(e){return function(e,n){return e.data=n,e.loopTag=null,e.i=null,e.reduce(unwindNode,"")}.bind(null,collapseParse(tokenise(e)))},!window.mu)throw new Error("tinyDOM-Sideburns requires tinyDOM to be in use on the page");mu.templates={},mu.render=function(e,n,t){return mu.templates.hasOwnProperty(e)?mu.templates[e](n,t):render(e,n,t)},mu.fn.render=function(e,n,t){var r=mu.render(e,n,t),o=t||{useHtml:!0};"undefined"==typeof o.useHtml&&(o.useHtml=!0),this.each(function(e,n){o.useHtml?n.innerHTML=r:n.textContent=r})},mu.ready(function(){mu("[type='x-template/sideburns']").each(function(e,n){var t=n.getAttribute("data-name");mu.templates[t]=render.partial(n.textContent)})});})(window);
//# sourceMappingURL=tinyDOM-Sideburns.min.js.map