snakeskin
Version:
Awesome JavaScript template engine.
25 lines (24 loc) • 10.7 kB
JavaScript
/*! Snakeskin v7.5.1 (live) | https://github.com/SnakeskinTpl/Snakeskin/blob/master/LICENSE */
(function(){'use strict';
function p(){function y(a){return z[a]}function A(a){return B[a]||a}function f(a,b,d){b in a?Object.defineProperty(a,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):a[b]=d;return a}function q(a){return"function"===typeof a}function n(a,b){function d(){this.constructor=a}d.prototype=b.prototype;a.prototype=new d}function m(a,b){a=((C.exec(a)||[])[1]||"").trim();return!(!a||!isNaN(Number(a))||(b||D)[a])}var g=void 0,c=g={VERSION:[7,5,1]};g.UID=null;g.f={};g.Filters={};g.Vars={override:function(a){return function(b,
d){return d[a]=b}},ignore:function(a){a.ignore=!0}};g.LocalVars={};g.cache={};Array.isArray=Array.isArray||function(a){return"[object Array]"==={}.call(a)};String.prototype.trim=String.prototype.trim||function(){for(var a=this.replace(/^\s\s*/,""),b=a.length,d=/\s/;d.test(a.charAt(--b)););return a.substring(0,b+1)};c.HTMLObject=function(a,b){this.value=a;this.attr=b};c.StringBuffer=function(){return[]};c.Node=function(){};c.Node.prototype.length=function(){return this.value.childNodes.length};c.Node.prototype.textContent=
function(){return this.value.textContent};c.DocumentFragment=function(a){this.renderMode=a;this.value=document.createDocumentFragment()};n(c.DocumentFragment,c.Node);c.DocumentFragment.prototype.appendChild=function(a){this.value.appendChild(a)};c.DocumentFragment.prototype.textContent=function(){for(var a=this.value.childNodes,b="",d=0;d<a.length;d++)b+=a[d].outerHTML||a[d].textContent;return b};c.Element=function(a,b){this.renderMode=b;this.value=document.createElement(a)};n(c.Element,c.Node);c.Element.prototype.appendChild=
function(a){this.value.appendChild(a)};c.Element.prototype.setAttribute=function(a,b){this.value.setAttribute(a,b)};c.Element.prototype.textContent=function(){return this.value.outerHTML};c.Comment=function(a,b){this.renderMode=b;this.value=document.createComment(a)};n(c.Comment,c.Node);c.Text=function(a,b){this.renderMode=b;this.value=document.createTextNode(a)};n(c.Text,c.Node);c.inlineTags={html:{area:"href",base:"href",br:!0,col:!0,embed:"src",hr:!0,img:"src",input:"value",link:"href",meta:"content",
param:"value",source:"src",track:"src",wbr:!0},xml:{}};c.appendChild=function(a,b,d){!1===b instanceof c.Node&&(b=new c.Text(String(b),d));a&&a.appendChild(b.value);return b};c.setAttribute=function(a,b,d){a.setAttribute(b,d instanceof c.Node?d.textContent():String(d))};var r=/\[native code]/.test(Object.keys&&Object.keys.toString())&&Object.keys;c.forEach=function(a,b){if(a){var d=0;if(Array.isArray(a)){d=a.length;for(var c=0;c<d&&!1!==b(a[c],c,a,{isFirst:0===c,isLast:c===d-1,length:d});c++);}else if(r){c=
r(a);d=c.length;for(var e=0;e<d&&!1!==b(a[c[e]],c[e],a,{i:e,isFirst:0===e,isLast:e===d-1,length:d});e++);}else{if(4<=b.length)for(e in a){if(!a.hasOwnProperty(e))break;d++}e=0;for(c in a){if(!a.hasOwnProperty(c))break;if(!1===b(a[c],c,a,{i:e,isFirst:0===e,isLast:e===d-1,length:d}))break;e++}}}};c.forIn=function(a,b){if(a){var d=0,c=0;if(4<=b.length)for(var e in a)d++;for(var l in a){if(!1===b(a[l],l,a,{i:c,isFirst:0===c,isLast:c===d-1,length:d}))break;c++}}};c.decorate=function(a,b,d){c.forEach(a,
function(a){return d=a(d,b)||d});d.decorators=a;return d};var E=/([\\/'*+?|()[\]{}.^$-])/g,C=/^\(*\s*(.*?)\s*\)*$/,D={"false":!0,"null":!0,"true":!0,undefined:!0},F={stringBuffer:!0,stringConcat:!0},t={"-":!0,":":!0,_:!0},G="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"===typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};(function(){function a(a){this.value=a}function b(b){function c(e,f){try{var k=
b[e](f),l=k.value;l instanceof a?Promise.resolve(l.value).then(function(a){c("next",a)},function(a){c("throw",a)}):d(k.done?"return":"normal",k.value)}catch(H){d("throw",H)}}function d(a,b){switch(a){case "return":e.resolve({value:b,done:!0});break;case "throw":e.reject(b);break;default:e.resolve({value:b,done:!1})}(e=e.next)?c(e.key,e.c):f=null}var e,f;this.a=function(a,b){return new Promise(function(d,k){d={key:a,c:b,resolve:d,reject:k,next:null};f?f=f.next=d:(e=f=d,c(a,b))})};"function"!==typeof b.return&&
(this.return=void 0)}"function"===typeof Symbol&&Symbol.b&&(b.prototype[Symbol.b]=function(){return this});b.prototype.next=function(a){return this.a("next",a)};b.prototype.return=function(a){return this.a("return",a)};return{wrap:function(a){return function(){return new b(a.apply(this,arguments))}},g:function(b){return new a(b)}}})();var h;g={};f(g,"///","///");f(g,"/*","/*");f(g,"*/","*/");var w=f({"-":!0},"#",!0),I={};c.forEach(w,function(a,b){return I[b]=!0});g={"\\":!0,'"':!0,"'":!0,"/":!0};
f(g,"`",!0);f(g,"{",!0);f(g,"/",!0);f(g,"/",!0);var J=(h={"\\":!0},f(h,"`",!0),f(h,"{",!0),f(h,"#",!0),f(h,"/",!0),f(h,"/",!0),f(h,"&",!0),f(h,".",!0),f(h,"|",!0),f(h," :: ".trim().charAt(0),!0),h);c.forEach(w,function(a,b){return J[b.charAt(0)]=!0});h={"\\":!0};f(h,"`",!0);f(h,"/",!0);f(h,"/",!0);f({"\\":!0},"$",!0);var K=[];c.forEach(t,function(a,b){K.push(b.replace(E,"\\$1"))});var x=/([^\s=]+)/,e=c.Filters;c.importFilters=function(a,b){var d=e;b&&c.forEach(b.split("."),function(a){d[a]=d[a]||
{};d=d[a]});c.forEach(a,function(a,b){return d[b]=a});return this};c.setFilterParams=function(a,b){function c(a,b){for(var c,d=arguments.length,e=Array(2<d?d-2:0),f=2;f<d;f++)e[f-2]=arguments[f];if(a&&q(b)&&a instanceof b){var k;a.value=(k=g).call.apply(k,[this,a.value].concat(e));return a}return(c=g).call.apply(c,[this,a].concat(e))}var f=b.safe;f&&(b.bind=["Unsafe"].concat(b.bind||[]));var g=void 0;if("string"===typeof a)return f&&(g=e[a],e[a]=c),e[a]=e[a]||function(a){return a},e[a].ssFilterParams=
b,e[a];f&&(g=a,a=c);a.ssFilterParams=b;return a};e.console={dir:function(a){var b;(b=console).dir.apply(b,arguments);return a},error:function(a){var b;(b=console).error.apply(b,arguments);return a},info:function(a){var b;(b=console).info.apply(b,arguments);return a},log:function(a){var b;(b=console).log.apply(b,arguments);return a},table:function(a){var b;(b=console).table.apply(b,arguments);return a},warn:function(a){var b;(b=console).warn.apply(b,arguments);return a}};var B={'"':""","&":"&",
"'":"'","<":"<",">":">"},L=/[<>"'/]|&(?!#|[a-z]+;)/g,z={"'":"'","/":"/","&":"&",">":">","<":"<",""":'"'},M=/&|<|>|"|'|//g;e.html=function(a,b,d,f,g){return!a||a instanceof c.Node?a:a instanceof c.HTMLObject?(c.forEach(a.value,function(c,d,k){a.attr?f[d]=k[d]=c[0]!==g?[e.html(c[0],b,a.attr,f,g)]:c:k[d]=e.html(c,b)}),a):q(b)&&a instanceof b?a.value:String(d?e[d](a):a).replace(L,A)};c.setFilterParams("html",{bind:["Unsafe","$attrType",function(a){return a.getVar("$attrs")},
"TRUE"],test:function(a){return m(a)}});e.htmlObject=function(a){return a instanceof c.HTMLObject?"":a};c.setFilterParams("htmlObject",{test:function(a){return m(a)}});e.undef=function(a){return void 0!==a?a:""};c.setFilterParams("undef",{test:function(a){return m(a,{"false":!0,"null":!0,"true":!0})}});e.uhtml=function(a){return String(a).replace(M,y)};var N=/<\/?[^>]+>/g;e.stripTags=function(a){return String(a).replace(N,"")};var O=/%5B/g,P=/%5D/g;e.uri=function(a){return encodeURI(String(a)).replace(O,
"[").replace(P,"]")};c.setFilterParams("uri",{safe:!0});e.upper=function(a){return String(a).toUpperCase()};c.setFilterParams("upper",{safe:!0});e.ucfirst=function(a){a=String(a);return a.charAt(0).toUpperCase()+a.slice(1)};c.setFilterParams("ucfirst",{safe:!0});e.lower=function(a){return String(a).toLowerCase()};c.setFilterParams("lower",{safe:!0});e.lcfirst=function(a){a=String(a);return a.charAt(0).toLowerCase()+a.slice(1)};c.setFilterParams("lcfirst",{safe:!0});e.trim=function(a){return String(a).trim()};
c.setFilterParams("trim",{safe:!0});var Q=/\s{2,}/g;e.collapse=function(a){return String(a).replace(Q," ").trim()};c.setFilterParams("collapse",{safe:!0});e.truncate=function(a,b,c,e){a=String(a);if(!a||a.length<=b)return a;a=a.slice(0,b-1);b=a.length;for(var d=void 0;b--&&c;)if(" "===a.charAt(b))d=b;else if(void 0!==d)break;return(void 0!==d?a.slice(0,d):a)+(e?"…":"\u2026")};e.repeat=function(a,b){return Array(null!=b?b+1:3).join(a)};c.setFilterParams("repeat",{safe:!0});e.remove=function(a,
b){return String(a).replace(b,"")};e.replace=function(a,b,c){return String(a).replace(b,c)};var R=/\${(.*?)}/g;e.tpl=function(a,b){return String(a).replace(R,function(a,c){return c in b?b[c]:""})};e.json=function(a){return JSON.stringify(a)};e.string=function(a){return"object"===("undefined"===typeof a?"undefined":G(a))&&!1===a instanceof String?JSON.stringify(a):String(a)};e.parse=function(a){return"string"===typeof a?JSON.parse(a):a};e["default"]=function(a,b){return void 0===a?b:a};c.setFilterParams("default",
{"!undef":!0});var S=/\r?\n|\n/g;e.nl2br=function(a,b,d,f,g){a=a.split(S);for(var k="",h=0;h<a.length;h++){var u=a[h],v=h===a.length-1;f||F[d]?(k+=e.html(u),v||(k+="<br"+("xml"===g?"/":"")+">")):(c.appendChild(b,u,d),v||c.appendChild(b,new c.Element("br",d),d))}return k};c.setFilterParams("nl2br",{"!html":!0,bind:["$0",function(a){return"'"+a.renderMode+"'"},function(a){return a.stringResult},"$0",function(a){return"'"+a.doctype+"'"}]});e.attrKey=function(a){return(a=x.exec(String(a)))&&a[1]||"undefined"};
e.attrKeyGroup=function(a){return(a=x.exec(String(a)))&&a[1]||""};var T=/(javascript)(:|;)/g;e.attrValue=function(a){return String(a).replace(T,"$1$2")};e.attr=function(a,b,d,f,g,h,n){function k(a,b){b=b||"";c.forEach(a,function(a,c){if(a!==n){if(a&&a.constructor===Object)return c=e.attrKeyGroup(c),k(a,b+(!c.length||t[c.slice(-1)]?c:c+"-"));c=b+c;for(var d=c[0].toLowerCase(),f=1;f<c.length;f++){var h=c.charAt(f),m=h.toUpperCase();m===h&&m!==h.toLowerCase()?d+="-"+h:d+=h}c=d.toLowerCase();g[c]=
l[c]=[a]}});return new c.HTMLObject(l,"attrValue")}if("attrKey"!==f||!a||a.constructor!==Object)return q(b)&&a instanceof b?a:String(a);var l={};return k(a)};c.setFilterParams("attr",{"!html":!0,bind:["Unsafe",function(a){return"'"+a.doctype+"'"},"$attrType",function(a){return a.getVar("$attrs")},"TRUE","FALSE"],test:function(a){return m(a)}});e["super"]=function(a,b,c,e){b=b.templates=b.templates||{};c+=a;b[c]=b[c]||[a];if(e)return b[c].slice(-2)[0]||a;a+=Math.random().toString().slice(2);b[c].push(a);
return a};c.setFilterParams("super",{"!html":!0,bind:[function(a){return a.getVar("__STORE__")},function(a){return JSON.stringify(a.scope[0])},function(a){return!!a.vars[a.tplName]}]});return c}"object"===typeof exports&&"undefined"!==typeof module?module.exports=p():"function"===typeof define&&define.amd?define("Snakeskin",p):this.Snakeskin=p();
}).call(this);