leopard-template
Version:
a simple HTML template engine
2 lines (1 loc) • 2.71 kB
JavaScript
;function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var fs=_interopDefault(require("fs")),escape$1=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},utils={escape:escape$1},escape$2=utils.escape;function escapeQuotes(e){return e.replace(/"/g,'\\"')}function Leopard(e){this.options=e||{}}var p=Leopard.prototype;function parseFilters(e){return e.split("|").reduce((e,r)=>r.trim()+"("+e.trim()+")")}p.parse=function(e,r){r=r||{};var t="var lines = [];\nvar rst;\nwith(data) {\n";function n(e){t+="lines.push("+e+");\n"}function i(e){var r=e.charAt(0);if(["=","-"].indexOf(r)>-1){var i=e.substr(1).trim();if(""===i)return;n("="===r?"escape("+parseFilters(i)+")":parseFilters(i))}else t+=e+"\n"}var s=/\S/;function a(e){return s.test(e)}for(var l,c=e.split("\n"),p=/<%(.+?)%>/g,o=/\s*$/,u=0,f=c.length;u<f;u++){var v=null,d=null,h=u===f-1;if(a(l=c[u].replace(o,"")))if(null!==(v=p.exec(l))){for(;v;){var m=l.substring(null!==d?d.index+d[0].length:0,v.index);a(m)&&n('"'+escapeQuotes(m)+'"');var b=v[1].trim();b&&i(b),d=v,v=p.exec(l)}var g=l.substr(d.index+d[0].length);a(g)&&n('"'+escapeQuotes(g)+(h?'"':'\\n"'))}else n('"'+escapeQuotes(l)+(h?'"':'\\n"'));else t+="\n"}return t+='rst = lines.join("");\n}\nreturn rst;'},p.compile=function(e,r){r=r||{};var t=this.parse(e,r);return new Function("escape","data",...Object.keys(p),t).call(p,escape$2,r,...Object.values(p))};var instance=Leopard;function filter(e,r){if("function"!=typeof r)throw new TypeError('Leopard: filter requires a function as handler, but got "'+typeof r+'" in filter "'+e+'"');if(e in this.prototype)throw new Error('Leopard: filter "'+e+'" has been declared');return this.prototype[e]=r,this}var filter_1=filter,capitalize=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},reverse=function(e){return e.split("").reverse().join("")},presets={capitalize:capitalize,reverse:reverse};instance.filter=filter_1;for(var name,presetFilters=Object.keys(presets),i=0,l=presetFilters.length;i<l;i++)name=presetFilters[i],instance.filter(name,presets[name]);var index_browser=instance;function _compileFile(e){var r={},t=e.prototype;function n(e,t,n,i){fs.readFile(e,"utf-8",function(s,a){if(s)n(s);else{i.options.cache&&(r[e]=i.parse(a));var l=i.compile(a,t);n(null,l)}})}t.cleanCache=function(){r={}},t.compileFile=function(e,i,s){if(i=i||{},this.options.cache){var a=r[e];if(a)s(null,new Function("escape","data",...Object.keys(t),a).call(t,escape,i,...Object.values(t)));else n(e,i,s,this)}else n(e,i,s,this)}}var compileFile=_compileFile;compileFile(index_browser);var index_server=index_browser;module.exports=index_server;