-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tmpl.min.js
1 lines (1 loc) · 4.08 KB
/
Tmpl.min.js
1
"use strict";var Tmpl=(function(f,g){function k(b,e){h[b]=(new Function("$data",l(e))).bind(i)}function m(b){return h[b]||null}function l(b){var e=[];return['var $control={},$$=[];$$.n={};with($data){$$.push("',b.replace(q,"{{= $1}}").replace(n,"").replace(r," ").replace(s,function(c,a){return a?"\\"+a:c}).replace(t,function(c,a,b,d){b=b&&b.split(/\s*,\s*/g)||[];b=b.concat((u[a]||[]).slice(b.length));c=b[0];b=b[1];switch(a){case "!":a="";break;case "=":a="try{$$.push(this.i(("+d+')))}catch(e){this.w("${}: '+d+' is undefined")}';break;case "html":a="try{$$.push("+d+')}catch(e){this.w("Html: '+d+' is undefined")}';break;case "tmpl":a='try{$$.push(this.i(this.t("'+d+'")('+c+'),$$.n))}catch(e){console.log(e);this.w("Tmpl: '+d+' does not exist")}';break;case "if":a="if("+d+"){";break;case "else":a=d?"}else if("+d+"){":"}else{";break;case "switch":a="try{switch("+(e.push(d),d)+"){case void 0:";break;case "case":a="break;case("+d+"):";break;case "for":a="for("+c+"="+(d=d.split(";"),d[0])+";"+c+(0<(d[2]||1)?"<=":">=")+d[1]+";"+c+"+="+(d[2]||1)+"){";break;case "each":a="try{for("+c+" in "+(e.push(d),d)+"){if("+d+".hasOwnProperty("+c+")){var "+b+"="+d+"["+c+"];with("+b+"){";break;case "default":a="break;default:";break;case "/if":a="}";break;case "/for":a="}";break;case "/switch":a='}}catch(e){this.w("Switch: '+e.pop()+' is undefined")}';break;case "/each":a='}}}}catch(e){this.w("Each: '+e.pop()+' is undefined")}';break;default:throw new SyntaxError("Invalid operation: "+a);}return'");'+a+'$$.push("'}),'")}return this.c(this.p($$.join("")), $$.n);'].join("").replace(v,function(b,a){return a?"":b})}function o(b,e){var c=b.firstChild,a;if(c){do"#comment"===c.nodeName&&(a=e[c.nodeValue])?(b.replaceChild(a,c),c=a):o(c,e);while(c=c.nextSibling)}return b}var p=Function.prototype,h={},q=/\$\{([^\}]*)\}/g,n=/[\n\r\t]+/g,r=/\s+/g,s=/\{\{[\s\S]+?\}\}|(["\\])/g,t=/\{\{(\/?[a-z]+|[!=])(?:\(([^\)]+)\))?(?:\s+([\S\s]+?))?\}\}/g,v=/"(?:\\"|[^"])*"|(this\.push\(""(?:\s*,\s*"")*\));/g,w={area:[1,"<map>","</map>"],caption:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup><tbody></tbody></table>"],colgroup:[1,"<table>","</table>"],option:[1,'<select multiple="multiple">',"</select>"],optgroup:[1,'<select multiple="multiple">',"</select>"],legend:[1,"<fieldset>","</fieldset>"],tbody:[1,"<table>","</table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],tfoot:[1,"<table>","</table>"],th:[3,"<table><tbody><tr>","</tr></tbody></table>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"]},j=function(){var b=g.createDocumentFragment(),e=g.createElement("div"),c="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" ");if("createElement"in b)for(var a=c.length;a--;)b.createElement(c[a]);return b.appendChild(e)}();p.bind=p.bind||function(b){var e=this;return function(){return e.apply(b,arguments)}};var u={"for":["$index"],each:["$index","$value"],tmpl:["{}"]},i={t:m,p:function(b){var e=g.createDocumentFragment(),c=b.match(/<([A-Za-z][A-Za-z0-9]*)/),a=w[c&&c[1]||""],c=j;j.innerHTML=a?[a[1],b,a[2]].join(""):b;for(b=a&&a[0]||0;b--;)c=c.firstChild;for(;b=c.firstChild;)e.appendChild(b);j.innerHTML="";return e},i:function(b,e){var c;return b.nodeType&&typeof("string"===b.nodeName)?(e[c=+new Date+""+Math.random()]=b,"<\!--"+c+"--\>"):(""+b).replace(/[<>"']/g,function(a){return"&#"+a.charCodeAt(0)+";"})},c:o,w:function(b){f.console&&f.console.warn&&console.warn(b)}};return{load:k,loadXhr:function(e,b){var c=e.substr(e.lastIndexOf(".")+1),a=f.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");a.open("GET",e,!0);a.onreadystatechange=function(){if(4===a.readyState&&200===a.status)switch(a.onreadystatechange=null,c){case "tpl":k(b,a.responseText);break;case "tpc":h[b]=(new Function("$data",a.responseText)).bind(i);break;case "tpx":for(var e=a.responseText.split(n),d,f,g=e.length;g--;)d=e[g],f=d.indexOf("="),h[d.substr(0,f)]=(new Function("$data",d.substr(f+1))).bind(i);break;default:throw Error("Invalid template format detected: "+c);}};a.send(null)},template:m,compile:l}})(window,document);