easy.templatejs
Version:
Small, pure, high-performance JavaScript template engine.
4 lines • 2.86 kB
JavaScript
/*!
* https://github.com/wusfen/wu.tmpl.js
*/
var wu=wu||{};!function(window){function tplToCode(e){var t=0,n=e.replace(/</g,"<").replace(/>/g,">").replace(/(^|%>|}})([\s\S]*?)({{|<%|$)/g,function(e,t,n,r){return t+'\n_html_+= "'+n.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\r?\n/g,"\\n")+'"\n'+r}).replace(/(<%=)([\s\S]*?)(%>)/g,"_html_+= ($2)\n").replace(/(<%)(?!=)([\s\S]*?)(%>)/g,"\n $2\n").replace(/{{each\s+([\$\w]*)\s*([\$\w]*)?\s*([\$\w]*)?}}/g,function(e,n,r,a){var l="_ii_"+t++,o="for(var $ii=0; $ii<$1.length; $ii++){";return o+=r?"\nvar $2 = $1[$ii];":"\nvar $item = $1[$ii];",o+=a?"\nvar $3 = $ii;":"",o.replace(/\$1/g,n).replace(/\$2/g,r).replace(/\$3/g,a).replace(/\$ii/g,l)}).replace(/{{\/each}}/g,"}").replace(/{{if\s+(.*?)}}/g,"if($1){").replace(/{{else ?if (.*?)}}/g,"}else if($1){").replace(/{{else}}/g,"}else{").replace(/{{\/if}}/g,"}").replace(/{{=?([\s\S]*?)}}/g,"_html_+=$1");return n='var _html_="";'+n+"return _html_"}function dataToVars(e){for(var t=Object.keys(e||{}).sort(),n="";t.length;){var r=t.shift();n+="var "+r+'= _data_["'+r+'"]\n'}return n}function getRender(e,t){cache[e]=cache[e]||{};var n=dataToVars(t);if(cache[e].vars==n)return cache[e].render;var r=cache[e].code||tplToCode(e),a=Function("_data_",n+r);return cache[e].vars=n,cache[e].code=r,cache[e].render=a,a}function tmpl(e,t){var n=getRender(e,t);return arguments.length>1?n(t):function(t){var n=getRender(e,t);return n(t)}}function ready(e){window.addEventListener&&addEventListener("DOMContentLoaded",function(){e(),e.called=!0});var t=onload;onload=function(){!e.called&&e(),t&&t()}}function getElementsByAttrName(e){if(document.querySelectorAll)return document.querySelectorAll("["+e+"]");for(var t=document.getElementsByTagName("*"),n=[],r=0;r<t.length;r++)t[r].getAttribute(e)&&n.push(t[r]);return n}var cache={};if(wu.tmpl=tmpl,"function"==typeof define&&define(function(e,t,n){return n.exports=tmpl}),"undefined"!=typeof module&&(module.exports=tmpl),window.document){var head=document.getElementsByTagName("head")[0],style=document.createElement("style");style.innerHTML="[wu-tmpl]{display:none}",head.appendChild(style);var tmplElements=[];ready(function(){tmplElements=getElementsByAttrName("wu-tmpl");for(var i=0;i<tmplElements.length;i++)+function(){var el=tmplElements[i],optionsStr=el.getAttribute("wu-tmpl"),options;try{options=optionsStr?eval("("+optionsStr+")"):{}}catch(e){window.console&&console.warn(e.stack),options={}}el.tpl=el.innerHTML,el.innerHTML="",el.name=options.name,el.data=options.data,el.render=function(e){this.innerHTML=wu.tmpl(this.tpl,e||this.data),e&&(this.data=e)},options.render&&el.render()}();setTimeout(function(){style.parentNode.removeChild(style)},41)}),wu.tmpl.render=function(e,t){for(var n=0;n<tmplElements.length;n++){var r=tmplElements[n];e&&r.name!=e&&r.data!=e&&r!=e||r.render(t)}}}}(this);