From e5e247504024cb47a39ab31c4685629054025949 Mon Sep 17 00:00:00 2001 From: "epistema\\cfossati" Date: Thu, 12 Mar 2015 08:36:36 +0100 Subject: [PATCH] Add a way to provide a composite context with <% include %> --- .gitignore | 3 +++ ect.min.js | 8 ++++---- ect.min.map | 2 +- lib/ect.js | 32 ++++++++++++++++++++++++++------ 4 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..70cd34a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +bower_components/ +node_modules/ +.idea/ diff --git a/ect.min.js b/ect.min.js index 5010431..e6ec08d 100644 --- a/ect.min.js +++ b/ect.min.js @@ -1,9 +1,9 @@ -/*! +/**! * ECT CoffeeScript template engine v0.5.9 * https://github.com/baryshev/ect * * Copyright 2012-2014, Vadim M. Baryshev - * Licensed under the MIT license + * @license Licensed under the MIT license * https://github.com/baryshev/ect/LICENSE * * Includes parts of node @@ -16,5 +16,5 @@ * Copyright 2007-2012 Steven Levithan * Released under the MIT license */ -(function(){"use strict";var fs;var path;var CoffeeScript;var ECT=function(options){if(!(this instanceof ECT)){return new ECT(options)}this.options={open:"<%",close:"%>",ext:"",cache:true,watch:false,root:""};var ect=this,trimExp=/^[ \t]+|[ \t]+$/g,newlineExp=/\n/g,cache={},watchers={},indentChars={":":":",">":">"},escapeExp=/[&<>"]/,escapeAmpExp=/&/g,escapeLtExp=//g,escapeQuotExp=/"/g,regExpEscape=function(str){return String(str).replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},read=function(file){if(Object.prototype.toString.call(ect.options.root)==="[object Object]"){var data=file.split(".").reduce(function(currentContext,key){return currentContext[key]},ect.options.root);if(Object.prototype.toString.call(data)==="[object String]"){return data}else{throw new Error("Failed to load template "+file)}}else{try{return fs.readFileSync(file,"utf8")}catch(e){throw new Error("Failed to load template "+file)}}},compile=function(template){var lineNo=1,bufferStack=["__ectOutput"],bufferStackPointer=0,buffer=bufferStack[bufferStackPointer]+" = '",matches=template.split(new RegExp(regExpEscape(ect.options.open)+"((?:.|[\r\n])+?)(?:"+regExpEscape(ect.options.close)+"|$)")),output,text,command,line,prefix,postfix,newline,indentChar,indentation="",indent=false,indentStack=[],indentStackPointer=-1,baseIndent,lines,j;for(var i=0;i>0,res=[],i,val;if(typeof fun!=="function"){throw new TypeError}for(i=0;i>0,curr;if(typeof accumulator!=="function"){throw new TypeError("First argument is not callable")}if(arguments.length<2){if(len===0){throw new TypeError("Array length is 0 and no second argument")}curr=this[0];i=1}else{curr=arguments[1]}while(i>>0:limit>>>0;while(match=separator.exec(str)){lastIndex=match.index+match[0].length;if(lastIndex>lastLastIndex){output.push(str.slice(lastLastIndex,match.index));if(!compliantExecNpcg&&match.length>1){match[0].replace(separator2,function(){for(var i=1;i1&&match.index=limit){break}}if(separator.lastIndex===match.index){separator.lastIndex++}}if(lastLastIndex===str.length){if(lastLength||!separator.test("")){output.push("")}}else{output.push(str.slice(lastLastIndex))}return output.length>limit?output.slice(0,limit):output};String.prototype.split=function(separator,limit){return self(this,separator,limit)};return self}();if(typeof define==="function"&&define.amd){define("ect",["coffee-script"],function(cs){CoffeeScript=cs;return ECT})}else{CoffeeScript=window.CoffeeScript;window.ECT=ECT}path=function(){var normalizeArray=function(parts,allowAboveRoot){var up=0,i,last;for(i=parts.length-1;i>=0;i--){last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){while(up){parts.unshift("..");up--}}return parts},normalize=function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.slice(-1)==="/";path=normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};return{normalize:normalize}}();fs=function(){var readFileSync=function(file,encoding){var AJAX;if(window.XMLHttpRequest){AJAX=new XMLHttpRequest;if(AJAX.overrideMimeType){AJAX.overrideMimeType("text/html")}}else{AJAX=new ActiveXObject("Microsoft.XMLHTTP")}if(AJAX){AJAX.open("GET",file,false);AJAX.send(null);if(AJAX.status!==0&&(AJAX.status<200||AJAX.status>399)){throw new Error("Failed to load template "+file)}return AJAX.responseText}else{throw new Error("Failed to load template "+file)}},watch=function(){};return{readFileSync:readFileSync,watch:watch}}()}})(); -//# sourceMappingURL=../ect.min.map \ No newline at end of file +!function(){"use strict";var fs,path,CoffeeScript,ECT=function(options){if(!(this instanceof ECT))return new ECT(options);this.options={open:"<%",close:"%>",ext:"",cache:!0,watch:!1,root:""};var ect=this,trimExp=/^[ \t]+|[ \t]+$/g,newlineExp=/\n/g,cache={},watchers={},indentChars={":":":",">":">"},escapeExp=/[&<>"]/,escapeAmpExp=/&/g,escapeLtExp=//g,escapeQuotExp=/"/g,regExpEscape=function(e){return String(e).replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},read=function(e){if("[object Object]"===Object.prototype.toString.call(ect.options.root)){var t=e.split(".").reduce(function(e,t){return e[t]},ect.options.root);if("[object String]"===Object.prototype.toString.call(t))return t;throw new Error("Failed to load template "+e)}try{return fs.readFileSync(e,"utf8")}catch(n){throw new Error("Failed to load template "+e)}},compile=function(template){for(var lineNo=1,bufferStack=["__ectOutput"],bufferStackPointer=0,buffer=bufferStack[bufferStackPointer]+" = '",matches=template.split(new RegExp(regExpEscape(ect.options.open)+"((?:.|[\r\n])+?)(?:"+regExpEscape(ect.options.close)+"|$)")),output,text,command,line,prefix,postfix,newline,indentChar,indentation="",indent=!1,indentStack=[],indentStackPointer=-1,baseIndent,lines,j,i=0;i1)for(t={},n=0;l>n;n+=1)if(i=p[n],"object"==typeof i)for(r in i)i.hasOwnProperty(r)&&(t[r]=i[r]);try{return a.compiled.call(t||this.data,this,c,function(){return o.render.apply(o,arguments)},function(){return o.content.apply(o,arguments)},function(){return o.block.apply(o,arguments)})}catch(f){throw/ in /.test(f.message)||(f.message=f.message+" in "+c.file+" on line "+c.line),f}},this.configure=function(e){e=e||{};for(var t in e)this.options[t]=e[t]},this.compile=function(e){var t;try{return t=compile(e)}catch(n){throw n.message=n.message.replace(/ on line \d+/,""),n}},this.render=function(e,t,n){var i;if("function"!=typeof arguments[arguments.length-1])return i=new TemplateContext(t),i.render(e);2===arguments.length&&(n=t,t={}),i=new TemplateContext(t);try{n(void 0,i.render(e))}catch(r){n(r)}},this.clearCache=function(e){e?delete cache[e]:cache={}},"undefined"!=typeof module&&module.exports&&(this.compiler=function(e){var t=require("zlib");e=e||{},e.root=e.root||"/",e.root="/"+e.root.replace(/^\//,""),e.root=e.root.replace(/\/$/,"")+"/";var n=new RegExp("^"+regExpEscape(e.root));return function(i,r,o){if("GET"!==i.method&&"HEAD"!==i.method)return o();if(e.root&&i.url.substr(0,e.root.length)!==e.root)o();else{var a=i.url.replace(n,"");try{var c=new TemplateContext,p=c.load(a);r.setHeader("Content-Type","application/x-javascript; charset=utf-8"),r.setHeader("Last-Modified",p.lastModified),e.gzip?(r.setHeader("Content-Encoding","gzip"),null===p.gzip?t.gzip(p.source,function(e,t){e?o(e):(p.gzip=t,r.end(p.gzip))}):r.end(p.gzip)):(r.setHeader("Content-Length","undefined"!=typeof Buffer?Buffer.byteLength(p.source,"utf8"):p.source.length),r.end(p.source))}catch(l){o(l)}}}}),this.configure(options)};if("undefined"!=typeof module&&module.exports)fs=require("fs"),path=require("path"),"function"==typeof define&&define.amd?define("ect",["coffee-script"],function(e){return CoffeeScript=e,ECT}):(CoffeeScript=require("coffee-script"),module.exports=ECT);else{Array.prototype.filter||(Array.prototype.filter=function(e,t){var n,i,r=this.length>>0,o=[];if("function"!=typeof e)throw new TypeError;for(n=0;r>n;n++)n in this&&(i=this[n],e.call(t,i,n,this)&&o.push(i));return o}),Array.prototype.reduce||(Array.prototype.reduce=function(e){if(null===this||void 0===this)throw new TypeError("Object is null or undefined");var t,n=0,i=this.length>>0;if("function"!=typeof e)throw new TypeError("First argument is not callable");if(arguments.length<2){if(0===i)throw new TypeError("Array length is 0 and no second argument");t=this[0],n=1}else t=arguments[1];for(;i>n;)n in this&&(t=e.call(void 0,t,this[n],n,this)),++n;return t});var split;split=split||function(e){var t,n=String.prototype.split,i=/()??/.exec("")[1]===e;return t=function(t,r,o){if("[object RegExp]"!==Object.prototype.toString.call(r))return n.call(t,r,o);var a,c,p,l,f=[],s=(r.ignoreCase?"i":"")+(r.multiline?"m":"")+(r.extended?"x":"")+(r.sticky?"y":""),u=0,r=new RegExp(r.source,s+"g");for(t+="",i||(a=new RegExp("^"+r.source+"$(?!\\s)",s)),o=o===e?-1>>>0:o>>>0;(c=r.exec(t))&&(p=c.index+c[0].length,!(p>u&&(f.push(t.slice(u,c.index)),!i&&c.length>1&&c[0].replace(a,function(){for(var t=1;t1&&c.index=o)));)r.lastIndex===c.index&&r.lastIndex++;return u===t.length?(l||!r.test(""))&&f.push(""):f.push(t.slice(u)),f.length>o?f.slice(0,o):f},String.prototype.split=function(e,n){return t(this,e,n)},t}(),"function"==typeof define&&define.amd?define("ect",["coffee-script"],function(e){return CoffeeScript=e,ECT}):(CoffeeScript=window.CoffeeScript,window.ECT=ECT),path=function(){var e=function(e,t){var n,i,r=0;for(n=e.length-1;n>=0;n--)i=e[n],"."===i?e.splice(n,1):".."===i?(e.splice(n,1),r++):r&&(e.splice(n,1),r--);if(t)for(;r;)e.unshift(".."),r--;return e},t=function(t){var n="/"===t.charAt(0),i="/"===t.slice(-1);return t=e(t.split("/").filter(function(e){return!!e}),!n).join("/"),t||n||(t="."),t&&i&&(t+="/"),(n?"/":"")+t};return{normalize:t}}(),fs=function(){var e=function(e){var t;if(window.XMLHttpRequest?(t=new XMLHttpRequest,t.overrideMimeType&&t.overrideMimeType("text/html")):t=new ActiveXObject("Microsoft.XMLHTTP"),t){if(t.open("GET",e,!1),t.send(null),0!==t.status&&(t.status<200||t.status>399))throw new Error("Failed to load template "+e);return t.responseText}throw new Error("Failed to load template "+e)},t=function(){};return{readFileSync:e,watch:t}}()}}(); +//# sourceMappingURL=ect.min.map \ No newline at end of file diff --git a/ect.min.map b/ect.min.map index 8ff34bb..f7bcb75 100644 --- a/ect.min.map +++ b/ect.min.map @@ -1 +1 @@ -{"version":3,"file":"../ect.min.js","sources":["./ect.js"],"names":["fs","path","CoffeeScript","ECT","options","this","open","close","ext","cache","watch","root","ect","trimExp","newlineExp","watchers","indentChars",":",">","escapeExp","escapeAmpExp","escapeLtExp","escapeGtExp","escapeQuotExp","regExpEscape","str","String","replace","read","file","Object","prototype","toString","call","data","split","reduce","currentContext","key","Error","readFileSync","e","compile","template","lineNo","bufferStack","bufferStackPointer","buffer","matches","RegExp","output","text","command","line","prefix","postfix","newline","indentChar","indentation","indent","indentStack","indentStackPointer","baseIndent","lines","j","i","length","charAt","substr","test","push","pop","splice","search","undefined","eval","bare","TemplateContext","blocks","childContent","escape","result","block","name","content","load","compiled","container","extExp","process","platform","normalize","message","source","lastModified","Date","toUTCString","gzip","persistent","render","that","fileInfo","apply","arguments","configure","option","callback","context","clearCache","module","exports","compiler","zlib","require","rootExp","req","res","next","method","url","setHeader","err","end","Buffer","byteLength","define","amd","cs","Array","filter","fun","thisp","len","val","TypeError","accumulator","curr","undef","nativeSplit","compliantExecNpcg","exec","self","separator","limit","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","separator2","match","lastIndex","lastLength","index","slice","window","normalizeArray","parts","allowAboveRoot","up","last","unshift","isAbsolute","trailingSlash","p","join","encoding","AJAX","XMLHttpRequest","overrideMimeType","ActiveXObject","send","status","responseText"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ect.min.js","sources":["lib\\ect.js"],"names":["fs","path","CoffeeScript","ECT","options","this","open","close","ext","cache","watch","root","ect","trimExp","newlineExp","watchers","indentChars",":",">","escapeExp","escapeAmpExp","escapeLtExp","escapeGtExp","escapeQuotExp","regExpEscape","str","String","replace","read","file","Object","prototype","toString","call","data","split","reduce","currentContext","key","Error","readFileSync","e","compile","template","lineNo","bufferStack","bufferStackPointer","buffer","matches","RegExp","output","text","command","line","prefix","postfix","newline","indentChar","indentation","indent","indentStack","indentStackPointer","baseIndent","lines","j","i","length","charAt","substr","test","push","pop","splice","search","undefined","eval","bare","TemplateContext","blocks","childContent","escape","result","block","name","content","load","compiled","container","extExp","normalize","process","platform","message","source","lastModified","Date","toUTCString","gzip","persistent","render","arg","that","fileInfo","args","slice","arguments","nbArgs","hasOwnProperty","apply","configure","option","callback","context","clearCache","module","exports","compiler","zlib","require","rootExp","req","res","next","method","url","setHeader","err","end","Buffer","byteLength","define","amd","cs","Array","filter","fun","thisp","val","len","TypeError","accumulator","curr","undef","self","nativeSplit","compliantExecNpcg","exec","separator","limit","separator2","match","lastIndex","lastLength","flags","ignoreCase","multiline","extended","sticky","lastLastIndex","index","window","normalizeArray","parts","allowAboveRoot","last","up","unshift","isAbsolute","trailingSlash","p","join","AJAX","XMLHttpRequest","overrideMimeType","ActiveXObject","send","status","responseText"],"mappings":"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","sourcesContent":["/**!\r\n * ECT CoffeeScript template engine v0.5.9\r\n * https://github.com/baryshev/ect\r\n *\r\n * Copyright 2012-2014, Vadim M. Baryshev \r\n * @license Licensed under the MIT license\r\n * https://github.com/baryshev/ect/LICENSE\r\n *\r\n * Includes parts of node\r\n * https://github.com/joyent/node\r\n * Copyright Joyent, Inc. and other Node contributors\r\n * Released under the MIT license\r\n *\r\n * Includes Cross-Browser Split 1.1.1\r\n * http://xregexp.com/\r\n * Copyright 2007-2012 Steven Levithan \r\n * Released under the MIT license\r\n */\r\n(function () {\r\n\t'use strict';\r\n\tvar fs;\r\n\tvar path;\r\n\tvar CoffeeScript;\r\n\r\n\tvar\tECT = function (options) {\r\n\t\tif (!(this instanceof ECT)) {\r\n\t\t\treturn new ECT(options);\r\n\t\t}\r\n\r\n\t\tthis.options = {\r\n\t\t\topen : '<%',\r\n\t\t\tclose : '%>',\r\n\t\t\text : '',\r\n\t\t\tcache : true,\r\n\t\t\twatch : false,\r\n\t\t\troot : ''\r\n\t\t};\r\n\r\n\t\tvar\r\n\t\t\tect = this,\r\n\t\t\ttrimExp = /^[ \\t]+|[ \\t]+$/g,\r\n\t\t\tnewlineExp = /\\n/g,\r\n\t\t\tcache = {},\r\n\t\t\twatchers = {},\r\n\t\t\tindentChars = { ':' : ':', '>' : '>' },\r\n\t\t\tescapeExp = /[&<>\"]/,\r\n\t\t\tescapeAmpExp = /&/g,\r\n\t\t\tescapeLtExp = //g,\r\n\t\t\tescapeQuotExp = /\"/g,\r\n\t\t\tregExpEscape = function (str) {\r\n\t\t\t\treturn String(str).replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\r\n\t\t\t},\r\n\r\n\t\t\tread = function (file) {\r\n\t\t\t\tif (Object.prototype.toString.call(ect.options.root) === '[object Object]') {\r\n\t\t\t\t\tvar data = file.split('.').reduce(function (currentContext, key) { return currentContext[key]; }, ect.options.root);\r\n\t\t\t\t\tif (Object.prototype.toString.call(data) === '[object String]') {\r\n\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error ('Failed to load template ' + file);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\treturn fs.readFileSync(file, 'utf8');\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tthrow new Error ('Failed to load template ' + file);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tcompile = function (template) {\r\n\t\t\t\tvar\r\n\t\t\t\t\tlineNo = 1,\r\n\t\t\t\t\tbufferStack = [ '__ectOutput' ], bufferStackPointer = 0,\r\n\t\t\t\t\tbuffer = bufferStack[bufferStackPointer] + ' = \\'',\r\n\t\t\t\t\tmatches = template.split(new RegExp(regExpEscape(ect.options.open) + '((?:.|[\\r\\n])+?)(?:' + regExpEscape(ect.options.close) + '|$)')),\r\n\t\t\t\t\toutput, text, command, line,\r\n\t\t\t\t\tprefix, postfix, newline,\r\n\t\t\t\t\tindentChar, indentation = '', indent = false, indentStack = [], indentStackPointer = -1, baseIndent, lines, j;\r\n\r\n\t\t\t\tfor (var i = 0; i < matches.length; i++) {\r\n\t\t\t\t\ttext = matches[i];\r\n\t\t\t\t\tcommand = '';\r\n\t\t\t\t\tif (i % 2 === 1) {\r\n\t\t\t\t\t\tline = '__ectFileInfo.line = ' + lineNo;\r\n\t\t\t\t\t\tswitch (text.charAt(0)) {\r\n\t\t\t\t\t\tcase '=':\r\n\t\t\t\t\t\t\tprefix = '\\' + (' + line + '\\n\\'\\') + __ectTemplateContext.escape(';\r\n\t\t\t\t\t\t\tpostfix = ') + \\'';\r\n\t\t\t\t\t\t\tnewline = '';\r\n\t\t\t\t\t\t\ttext = text.substr(1);\r\n\t\t\t\t\t\t\toutput = 'escaped';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase '-':\r\n\t\t\t\t\t\t\tprefix = '\\' + (' + line + '\\n\\'\\') + ((';\r\n\t\t\t\t\t\t\tpostfix = ') ? \\'\\') + \\'';\r\n\t\t\t\t\t\t\tnewline = '';\r\n\t\t\t\t\t\t\ttext = text.substr(1);\r\n\t\t\t\t\t\t\toutput = 'unescaped';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tprefix = '\\'\\n' + line;\r\n\t\t\t\t\t\t\tpostfix = '\\n' + bufferStack[bufferStackPointer] + ' += \\'';\r\n\t\t\t\t\t\t\tnewline = '\\n';\r\n\t\t\t\t\t\t\toutput = 'none';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttext = text.replace(trimExp, '');\r\n\r\n\t\t\t\t\t\tcommand = text.split(/[^a-z]+/)[0];\r\n\t\t\t\t\t\tif ((indentChar = indentChars[text.charAt(text.length - 1)])) {\r\n\t\t\t\t\t\t\ttext = text.replace(/:$/, '').replace(trimExp, '');\r\n\t\t\t\t\t\t\tif (indentChar === '>') {\r\n\t\t\t\t\t\t\t\tif (/[$a-z_][0-9a-z_$]*[^=]+(-|=)>/i.test(text.replace(/'.*'|\".*\"/, ''))) {\r\n\t\t\t\t\t\t\t\t\tindentStack.push('capture_output_' + output);\r\n\t\t\t\t\t\t\t\t\tindentStackPointer++;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbufferStack.push('__ectFunction' + bufferStackPointer);\r\n\t\t\t\t\t\t\t\tbufferStackPointer++;\r\n\t\t\t\t\t\t\t\tpostfix = '\\n' + bufferStack[bufferStackPointer] + ' = \\'';\r\n\t\t\t\t\t\t\t\tcommand = 'function';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tindentStack.push(command);\r\n\t\t\t\t\t\t\tindentStackPointer++;\r\n\t\t\t\t\t\t\tindent = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tswitch (command) {\r\n\t\t\t\t\t\tcase 'include' :\r\n\t\t\t\t\t\t\tif (output === 'none') {\r\n\t\t\t\t\t\t\t\tprefix = '\\' + (' + line + '\\n\\'\\') + (';\r\n\t\t\t\t\t\t\t\tpostfix = ') + \\'';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + text + postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'block' :\r\n\t\t\t\t\t\t\tbufferStack.push('__ectTemplateContext.blocks[\\'' + text.replace(/block\\s+('|\")([^'\"]+)('|\").*/, '$2') + '\\']');\r\n\t\t\t\t\t\t\tbufferStackPointer++;\r\n\t\t\t\t\t\t\tprefix = '\\'\\n';\r\n\t\t\t\t\t\t\tpostfix = '\\n' + bufferStack[bufferStackPointer] + ' += \\'';\r\n\t\t\t\t\t\t\ttext = 'if ' + text;\r\n\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + text;\r\n\t\t\t\t\t\t\tif (indent) {\r\n\t\t\t\t\t\t\t\tindentation += ' ';\r\n\t\t\t\t\t\t\t\tindent = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'content' :\r\n\t\t\t\t\t\t\tif (output === 'none') {\r\n\t\t\t\t\t\t\t\tprefix = '\\' + (' + line + '\\n\\'\\') + (';\r\n\t\t\t\t\t\t\t\tpostfix = ') + \\'';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (text === 'content') {\r\n\t\t\t\t\t\t\t\ttext = 'content()'\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + text + postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'end' :\r\n\t\t\t\t\t\t\tprefix = '\\'';\r\n\t\t\t\t\t\t\tswitch (indentStack[indentStackPointer]) {\r\n\t\t\t\t\t\t\tcase 'block' :\r\n\t\t\t\t\t\t\t\tbufferStack.pop();\r\n\t\t\t\t\t\t\t\tbufferStackPointer--;\r\n\t\t\t\t\t\t\t\tprefix = '\\'';\r\n\t\t\t\t\t\t\t\tpostfix = '\\n' + bufferStack[bufferStackPointer] + ' += \\'';\r\n\t\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t\tindentation = indentation.substr(2);\r\n\t\t\t\t\t\t\t\tbuffer += postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'when' :\r\n\t\t\t\t\t\t\t\tpostfix = '\\n' + bufferStack[bufferStackPointer] + ' += \\'\\'';\r\n\t\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t\tindentation = indentation.substr(2);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'function' :\r\n\t\t\t\t\t\t\t\tprefix = '\\'\\n' + bufferStack[bufferStackPointer];\r\n\t\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t\tindentation = indentation.substr(2);\r\n\t\t\t\t\t\t\t\tbufferStack.pop();\r\n\t\t\t\t\t\t\t\tbufferStackPointer--;\r\n\t\t\t\t\t\t\t\tpostfix = '\\n' + bufferStack[bufferStackPointer] + ' += \\'';\r\n\t\t\t\t\t\t\t\tswitch (indentStack[indentStackPointer - 1]) {\r\n\t\t\t\t\t\t\t\t\tcase 'capture_output_escaped' :\r\n\t\t\t\t\t\t\t\t\t\tindentStack.pop();\r\n\t\t\t\t\t\t\t\t\t\tindentStackPointer--;\r\n\t\t\t\t\t\t\t\t\t\tbuffer += ')';\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase 'capture_output_unescaped' :\r\n\t\t\t\t\t\t\t\t\t\tindentStack.pop();\r\n\t\t\t\t\t\t\t\t\t\tindentStackPointer--;\r\n\t\t\t\t\t\t\t\t\t\tbuffer += ') ? \\'\\')';\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase 'capture_output_none' :\r\n\t\t\t\t\t\t\t\t\t\tindentStack.pop();\r\n\t\t\t\t\t\t\t\t\t\tindentStackPointer--;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbuffer += postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'switch' :\r\n\t\t\t\t\t\t\t\tprefix = '\\n' + line;\r\n\t\t\t\t\t\t\tdefault :\r\n\t\t\t\t\t\t\t\tif (indentStack[indentStackPointer - 1] === 'switch') {\r\n\t\t\t\t\t\t\t\t\tpostfix = '';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tindentation = indentation.substr(2);\r\n\t\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tindentStack.pop();\r\n\t\t\t\t\t\t\tindentStackPointer--;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'else' :\r\n\t\t\t\t\t\t\tif (indentStack[indentStackPointer - 1] === 'switch') {\r\n\t\t\t\t\t\t\t\tprefix = '';\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tprefix = '\\'';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tif (indentStack[indentStackPointer - 1] === 'if' || indentStack[indentStackPointer - 1] === 'else' || indentStack[indentStackPointer - 1] === 'unless') {\r\n\t\t\t\t\t\t\t\tindentStack.splice(-2, 1);\r\n\t\t\t\t\t\t\t\tindentStackPointer--;\r\n\t\t\t\t\t\t\t\tindentation = indentation.substr(2);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += (newline.length ? newline + indentation : '') + text;\r\n\t\t\t\t\t\t\tif (indent) {\r\n\t\t\t\t\t\t\t\tindentation += ' ';\r\n\t\t\t\t\t\t\t\tindent = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'switch' :\r\n\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + (newline.length ? newline + indentation : '') + text;\r\n\t\t\t\t\t\t\tif (indent) {\r\n\t\t\t\t\t\t\t\tindentation += ' ';\r\n\t\t\t\t\t\t\t\tindent = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'when' :\r\n\t\t\t\t\t\t\tbuffer += (newline.length ? newline + indentation : '') + text;\r\n\t\t\t\t\t\t\tif (indent) {\r\n\t\t\t\t\t\t\t\tindentation += ' ';\r\n\t\t\t\t\t\t\t\tindent = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'extend' :\r\n\t\t\t\t\t\t\t\ttext = '__ectExtended = true\\n__ectParent = ' + text.replace(/extend\\s+/, '');\r\n\t\t\t\t\t\tdefault :\r\n\t\t\t\t\t\t\tif (/\\n/.test(text)) {\r\n\t\t\t\t\t\t\t\tlines = text.split(/\\n/);\r\n\t\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\t\tfor (j = 0; j < lines.length; j++) {\r\n\t\t\t\t\t\t\t\t\tif (/^\\s*$/.test(lines[j])) {\r\n\t\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (typeof baseIndent === 'undefined') {\r\n\t\t\t\t\t\t\t\t\t\tbaseIndent = new RegExp('^' + lines[j].substr(0, lines[j].search(/[^\\s]/)));\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbuffer += (newline.length ? newline + indentation : '') + lines[j].replace(baseIndent, '');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tlines = undefined;\r\n\t\t\t\t\t\t\t\tbaseIndent = undefined;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tbuffer += prefix.replace(newlineExp, '\\n' + indentation) + (newline.length ? newline + indentation : '') + text;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (indent) {\r\n\t\t\t\t\t\t\t\tindentation += ' ';\r\n\t\t\t\t\t\t\t\tindent = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbuffer += postfix.replace(newlineExp, '\\n' + indentation);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (indentStack[indentStackPointer] !== 'switch') {\r\n\t\t\t\t\t\t\tbuffer += text.replace(/[\\\\']/g, '\\\\$&').replace(/\\r/g, '').replace(newlineExp, '\\\\n').replace(/^\\\\n/, '');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlineNo += text.split(newlineExp).length - 1;\r\n\t\t\t\t}\r\n\t\t\t\tbuffer += '\\'\\nif not __ectExtended\\n return __ectOutput\\nelse\\n __ectContainer = __ectTemplateContext.load __ectParent\\n __ectFileInfo.file = __ectContainer.file\\n __ectFileInfo.line = 1\\n __ectTemplateContext.childContent = __ectOutput\\n return __ectContainer.compiled.call(this, __ectTemplateContext, __ectFileInfo, include, content, block)';\r\n\t\t\t\tbuffer = '__ectExtended = false\\n' + buffer;\r\n\r\n\t\t\t\treturn eval('(function __ectTemplate(__ectTemplateContext, __ectFileInfo, include, content, block) {\\n' + CoffeeScript.compile(buffer, { bare : true }) + '});');\r\n\t\t\t};\r\n\r\n\t\tvar TemplateContext = function (data) {\r\n\t\t\tthis.blocks = {};\r\n\t\t\tthis.data = data || {};\r\n\t\t\tthis.childContent = '';\r\n\t\t};\r\n\r\n\t\tTemplateContext.prototype.escape = function (text) {\r\n\t\t\tif (text == null) {\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t\tvar result = text.toString();\r\n\t\t\tif (!escapeExp.test(result)) {\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t\treturn result.replace(escapeAmpExp, '&').replace(escapeLtExp, '<').replace(escapeGtExp, '>').replace(escapeQuotExp, '"');\r\n\t\t};\r\n\r\n\t\tTemplateContext.prototype.block = function (name) {\r\n\t\t\tif (!this.blocks[name]) { this.blocks[name] = ''; }\r\n\t\t\treturn !this.blocks[name].length;\r\n\t\t};\r\n\r\n\t\tTemplateContext.prototype.content = function (block) {\r\n\t\t\tif (block && block.length) {\r\n\t\t\t\tif (!this.blocks[block]) { return ''; }\r\n\t\t\t\treturn this.blocks[block];\r\n\t\t\t} else {\r\n\t\t\t\treturn this.childContent;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tTemplateContext.prototype.load = function (template) {\r\n\t\t\tvar file, compiled, container, data;\r\n\r\n\t\t\tif (ect.options.cache && cache[template]) {\r\n\t\t\t\treturn cache[template];\r\n\t\t\t} else {\r\n\t\t\t\tvar extExp = new RegExp(regExpEscape(ect.options.ext) + '$');\r\n\t\t\t\tif (Object.prototype.toString.call(ect.options.root) === '[object String]') {\r\n\t\t\t\t\tif (typeof process !== 'undefined' && process.platform === 'win32') {\r\n\t\t\t\t\t\tfile = path.normalize((ect.options.root.length && template.charAt(0) !== '/' && template.charAt(0) !== '\\\\' && !/^[a-zA-Z]:/.test(template) ? (ect.options.root + '/') : '') + template.replace(extExp, '') + ect.options.ext);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfile = path.normalize((ect.options.root.length && template.charAt(0) !== '/' ? (ect.options.root + '/') : '') + template.replace(extExp, '') + ect.options.ext);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfile = template;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdata = read(file);\r\n\t\t\t\tif (data.substr(0, 24) === '(function __ectTemplate(') {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tcompiled = eval(data);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\te.message = e.message + ' in ' + file;\r\n\t\t\t\t\t\tthrow e;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tcompiled = compile(data);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\te.message = e.message.replace(/ on line \\d+/, '') + ' in ' + file;\r\n\t\t\t\t\t\tthrow e;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcontainer = { file : file, compiled : compiled, source : '(' + compiled.toString() + ');', lastModified: new Date().toUTCString(), gzip : null };\r\n\t\t\t\tif (ect.options.cache) {\r\n\t\t\t\t\tcache[template] = container;\r\n\t\t\t\t\tif (ect.options.watch && typeof watchers[file] === 'undefined') {\r\n\t\t\t\t\t\twatchers[file] = fs.watch(file, { persistent: false }, function () {\r\n\t\t\t\t\t\t\twatchers[file].close();\r\n\t\t\t\t\t\t\tdelete (watchers[file]);\r\n\t\t\t\t\t\t\tdelete (cache[template]);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn container;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tTemplateContext.prototype.render = function (template, data) {\r\n var i;\r\n var arg;\r\n var key;\r\n var that = this;\r\n var container = this.load(template);\r\n var fileInfo = { file : container.file, line : 1 };\r\n var args = [].slice.call(arguments, 1);\r\n var nbArgs = args.length;\r\n\r\n if (nbArgs > 1) {\r\n // If we have more than 3 arguments, create a merged data version\r\n // Allows to do : <% include 'partial', @, {other: 'value'} %>\r\n data = {};\r\n for (i = 0; i < nbArgs; i += 1) {\r\n arg = args[i];\r\n if (typeof arg === 'object') {\r\n for (key in arg) {\r\n if (arg.hasOwnProperty(key)) {\r\n data[key] = arg[key];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\t\t\ttry {\r\n\t\t\t\treturn container.compiled.call(\r\n\t\t\t\t\tdata || this.data,\r\n\t\t\t\t\tthis,\r\n\t\t\t\t\tfileInfo,\r\n\t\t\t\t\tfunction() { return that.render.apply(that, arguments); },\r\n\t\t\t\t\tfunction() { return that.content.apply(that, arguments); },\r\n\t\t\t\t\tfunction() { return that.block.apply(that, arguments); }\r\n\t\t\t\t);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tif (!/ in /.test(e.message)) {\r\n\t\t\t\t\te.message = e.message + ' in ' + fileInfo.file + ' on line ' + fileInfo.line;\r\n\t\t\t\t}\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.configure = function (options) {\r\n\t\t\toptions = options || {};\r\n\t\t\tfor (var option in options) {\r\n\t\t\t\tthis.options[option] = options[option];\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.compile = function (template) {\r\n\t\t\tvar compiled;\r\n\t\t\ttry {\r\n\t\t\t\tcompiled = compile(template);\r\n\t\t\t\treturn compiled;\r\n\t\t\t} catch (e) {\r\n\t\t\t\te.message = e.message.replace(/ on line \\d+/, '');\r\n\t\t\t\tthrow e;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.render = function (template, data, callback) {\r\n\t\t\tvar context;\r\n\t\t\tif (typeof arguments[arguments.length - 1] === 'function') {\r\n\t\t\t\tif (arguments.length === 2) {\r\n\t\t\t\t\tcallback = data;\r\n\t\t\t\t\tdata = {};\r\n\t\t\t\t}\r\n\t\t\t\tcontext = new TemplateContext(data);\r\n\t\t\t\ttry {\r\n\t\t\t\t\tcallback(undefined, context.render(template));\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tcallback(e);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcontext = new TemplateContext(data);\r\n\t\t\t\treturn context.render(template);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.clearCache = function (template) {\r\n\t\t\tif (template) {\r\n\t\t\t\tdelete (cache[template]);\r\n\t\t\t} else {\r\n\t\t\t\tcache = {};\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\t\tthis.compiler = function (options) {\r\n\t\t\t\tvar zlib = require('zlib');\r\n\t\t\t\toptions = options || {};\r\n\t\t\t\toptions.root = options.root || '/';\r\n\t\t\t\toptions.root = '/' + options.root.replace(/^\\//, '');\r\n\t\t\t\toptions.root = options.root.replace(/\\/$/, '') + '/';\r\n\t\t\t\tvar rootExp = new RegExp('^' + regExpEscape(options.root));\r\n\t\t\t\treturn function (req, res, next) {\r\n\t\t\t\t\tif (req.method !== 'GET' && req.method !== 'HEAD') {\r\n\t\t\t\t\t\treturn next();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!options.root || req.url.substr(0, options.root.length) === options.root) {\r\n\t\t\t\t\t\tvar template = req.url.replace(rootExp, '');\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tvar context = new TemplateContext();\r\n\t\t\t\t\t\t\tvar container = context.load(template);\r\n\t\t\t\t\t\t\tres.setHeader('Content-Type', 'application/x-javascript; charset=utf-8');\r\n\t\t\t\t\t\t\tres.setHeader('Last-Modified', container.lastModified);\r\n\t\t\t\t\t\t\tif (options.gzip) {\r\n\t\t\t\t\t\t\t\tres.setHeader('Content-Encoding', 'gzip');\r\n\t\t\t\t\t\t\t\tif (container.gzip === null) {\r\n\t\t\t\t\t\t\t\t\tzlib.gzip(container.source, function (err, buffer) {\r\n\t\t\t\t\t\t\t\t\t\tif (!err) {\r\n\t\t\t\t\t\t\t\t\t\t\tcontainer.gzip = buffer;\r\n\t\t\t\t\t\t\t\t\t\t\tres.end(container.gzip);\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\tnext(err);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tres.end(container.gzip);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tres.setHeader('Content-Length', typeof Buffer !== 'undefined' ? Buffer.byteLength(container.source, 'utf8') : container.source.length);\r\n\t\t\t\t\t\t\t\tres.end(container.source);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tnext(e);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnext();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.configure(options);\r\n\t};\r\n\r\n\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\tfs = require('fs');\r\n\t\tpath = require('path');\r\n\r\n\t\tif (typeof define === 'function' && define.amd) {\r\n\t\t\tdefine('ect', ['coffee-script'], function (cs) {\r\n\t\t\t\tCoffeeScript = cs;\r\n\t\t\t\treturn ECT;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tCoffeeScript = require('coffee-script');\r\n\t\t\tmodule.exports = ECT;\r\n\t\t}\r\n\t} else {\r\n\t\tif (!Array.prototype.filter) {\r\n\t\t\tArray.prototype.filter = function filter (fun, thisp) {\r\n\t\t\t\tvar len = this.length >> 0, res = [], i, val;\r\n\t\t\t\tif (typeof fun !== 'function') { throw new TypeError(); }\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tif (i in this) {\r\n\t\t\t\t\t\tval = this[i];\r\n\t\t\t\t\t\tif (fun.call(thisp, val, i, this)) { res.push(val); }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn res;\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (!Array.prototype.reduce) {\r\n\t\t\tArray.prototype.reduce = function reduce (accumulator) {\r\n\t\t\t\tif (this === null || this === undefined) {\r\n\t\t\t\t\tthrow new TypeError('Object is null or undefined');\r\n\t\t\t\t}\r\n\t\t\t\tvar i = 0, len = this.length >> 0, curr;\r\n\t\t\t\tif (typeof accumulator !== 'function') {\r\n\t\t\t\t\tthrow new TypeError('First argument is not callable');\r\n\t\t\t\t}\r\n\t\t\t\tif (arguments.length < 2) {\r\n\t\t\t\t\tif (len === 0) {\r\n\t\t\t\t\t\tthrow new TypeError('Array length is 0 and no second argument');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcurr = this[0];\r\n\t\t\t\t\ti = 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurr = arguments[1];\r\n\t\t\t\t}\r\n\t\t\t\twhile (i < len) {\r\n\t\t\t\t\tif (i in this) {\r\n\t\t\t\t\t\tcurr = accumulator.call(undefined, curr, this[i], i, this);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t++i;\r\n\t\t\t\t}\r\n\t\t\t\treturn curr;\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar split;\r\n\r\n\t\tsplit = split || function (undef) {\r\n\r\n\t\t\tvar nativeSplit = String.prototype.split,\r\n\t\t\t\tcompliantExecNpcg = /()??/.exec('')[1] === undef,\r\n\t\t\t\tself;\r\n\r\n\t\t\tself = function (str, separator, limit) {\r\n\t\t\t\tif (Object.prototype.toString.call(separator) !== '[object RegExp]') {\r\n\t\t\t\t\treturn nativeSplit.call(str, separator, limit);\r\n\t\t\t\t}\r\n\t\t\t\tvar output = [],\r\n\t\t\t\t\tflags = (separator.ignoreCase ? 'i' : '') +\r\n\t\t\t\t\t(separator.multiline ? 'm' : '') +\r\n\t\t\t\t\t(separator.extended ? 'x' : '') +\r\n\t\t\t\t\t(separator.sticky ? 'y' : ''),\r\n\t\t\t\t\tlastLastIndex = 0,\r\n\t\t\t\t\tseparator = new RegExp(separator.source, flags + 'g'),\r\n\t\t\t\t\tseparator2, match, lastIndex, lastLength;\r\n\t\t\t\tstr += '';\r\n\t\t\t\tif (!compliantExecNpcg) {\r\n\t\t\t\t\tseparator2 = new RegExp(\"^\" + separator.source + \"$(?!\\\\s)\", flags);\r\n\t\t\t\t}\r\n\t\t\t\tlimit = limit === undef ? -1 >>> 0 :\r\n\t\t\t\tlimit >>> 0;\r\n\t\t\t\twhile (match = separator.exec(str)) {\r\n\t\t\t\t\tlastIndex = match.index + match[0].length;\r\n\t\t\t\t\tif (lastIndex > lastLastIndex) {\r\n\t\t\t\t\t\toutput.push(str.slice(lastLastIndex, match.index));\r\n\t\t\t\t\t\tif (!compliantExecNpcg && match.length > 1) {\r\n\t\t\t\t\t\t\tmatch[0].replace(separator2, function () {\r\n\t\t\t\t\t\t\t\tfor (var i = 1; i < arguments.length - 2; i++) {\r\n\t\t\t\t\t\t\t\t\tif (arguments[i] === undef) {\r\n\t\t\t\t\t\t\t\t\t\tmatch[i] = undef;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (match.length > 1 && match.index < str.length) {\r\n\t\t\t\t\t\t\tArray.prototype.push.apply(output, match.slice(1));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlastLength = match[0].length;\r\n\t\t\t\t\t\tlastLastIndex = lastIndex;\r\n\t\t\t\t\t\tif (output.length >= limit) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (separator.lastIndex === match.index) {\r\n\t\t\t\t\t\tseparator.lastIndex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (lastLastIndex === str.length) {\r\n\t\t\t\t\tif (lastLength || !separator.test('')) {\r\n\t\t\t\t\t\toutput.push('');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\toutput.push(str.slice(lastLastIndex));\r\n\t\t\t\t}\r\n\t\t\t\treturn output.length > limit ? output.slice(0, limit) : output;\r\n\t\t\t};\r\n\r\n\t\t\tString.prototype.split = function (separator, limit) {\r\n\t\t\t\treturn self(this, separator, limit);\r\n\t\t\t};\r\n\r\n\t\t\treturn self;\r\n\t\t}();\r\n\r\n\t\tif (typeof define === 'function' && define.amd ) {\r\n\t\t\tdefine('ect', ['coffee-script'], function (cs) {\r\n\t\t\t\tCoffeeScript = cs;\r\n\t\t\t\treturn ECT;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tCoffeeScript = window.CoffeeScript;\r\n\t\t\twindow.ECT = ECT;\r\n\t\t}\r\n\r\n\t\tpath = (function () {\r\n\t\t\tvar\r\n\t\t\t\tnormalizeArray = function (parts, allowAboveRoot) {\r\n\t\t\t\t\tvar up = 0, i, last;\r\n\t\t\t\t\tfor (i = parts.length - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tlast = parts[i];\r\n\t\t\t\t\t\tif (last === '.') {\r\n\t\t\t\t\t\t\tparts.splice(i, 1);\r\n\t\t\t\t\t\t} else if (last === '..') {\r\n\t\t\t\t\t\t\tparts.splice(i, 1);\r\n\t\t\t\t\t\t\tup++;\r\n\t\t\t\t\t\t} else if (up) {\r\n\t\t\t\t\t\t\tparts.splice(i, 1);\r\n\t\t\t\t\t\t\tup--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (allowAboveRoot) {\r\n\t\t\t\t\t\twhile (up) {\r\n\t\t\t\t\t\t\tparts.unshift('..');\r\n\t\t\t\t\t\t\tup--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn parts;\r\n\t\t\t\t},\r\n\r\n\t\t\t\tnormalize = function (path) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tisAbsolute = path.charAt(0) === '/',\r\n\t\t\t\t\t\ttrailingSlash = path.slice(-1) === '/';\r\n\t\t\t\t\tpath = normalizeArray(path.split('/').filter(function (p) {\r\n\t\t\t\t\t\treturn !!p;\r\n\t\t\t\t\t}), !isAbsolute).join('/');\r\n\t\t\t\t\tif (!path && !isAbsolute) {\r\n\t\t\t\t\t\tpath = '.';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (path && trailingSlash) {\r\n\t\t\t\t\t\tpath += '/';\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (isAbsolute ? '/' : '') + path;\r\n\t\t\t\t};\r\n\r\n\t\t\treturn {\r\n\t\t\t\tnormalize: normalize\r\n\t\t\t};\r\n\t\t}());\r\n\r\n\t\tfs = (function () {\r\n\t\t\tvar\r\n\t\t\t\treadFileSync = function (file, encoding) {\r\n\t\t\t\t\tvar AJAX;\r\n\t\t\t\t\tif (window.XMLHttpRequest) {\r\n\t\t\t\t\t\tAJAX = new XMLHttpRequest();\r\n\t\t\t\t\t\tif (AJAX.overrideMimeType) { AJAX.overrideMimeType('text/html'); }\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tAJAX = new ActiveXObject('Microsoft.XMLHTTP');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (AJAX) {\r\n\t\t\t\t\t\tAJAX.open('GET', file, false);\r\n\t\t\t\t\t\tAJAX.send(null);\r\n\t\t\t\t\t\tif (AJAX.status !== 0 && (AJAX.status < 200 || AJAX.status > 399)) {\r\n\t\t\t\t\t\t\tthrow new Error ('Failed to load template ' + file);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn AJAX.responseText;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow new Error ('Failed to load template ' + file);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\twatch = function () {};\r\n\r\n\t\t\treturn {\r\n\t\t\t\treadFileSync: readFileSync,\r\n\t\t\t\twatch: watch\r\n\t\t\t};\r\n\t\t}());\r\n\r\n\t}\r\n}());"]} \ No newline at end of file diff --git a/lib/ect.js b/lib/ect.js index 37bcd61..3cd8e7c 100644 --- a/lib/ect.js +++ b/lib/ect.js @@ -1,9 +1,9 @@ -/*! +/**! * ECT CoffeeScript template engine v0.5.9 * https://github.com/baryshev/ect * * Copyright 2012-2014, Vadim M. Baryshev - * Licensed under the MIT license + * @license Licensed under the MIT license * https://github.com/baryshev/ect/LICENSE * * Includes parts of node @@ -363,10 +363,30 @@ }; TemplateContext.prototype.render = function (template, data) { - var that = this; - - var container = this.load(template); - var fileInfo = { file : container.file, line : 1 }; + var i; + var arg; + var key; + var that = this; + var container = this.load(template); + var fileInfo = { file : container.file, line : 1 }; + var args = [].slice.call(arguments, 1); + var nbArgs = args.length; + + if (nbArgs > 1) { + // If we have more than 3 arguments, create a merged data version + // Allows to do : <% include 'partial', @, {other: 'value'} %> + data = {}; + for (i = 0; i < nbArgs; i += 1) { + arg = args[i]; + if (typeof arg === 'object') { + for (key in arg) { + if (arg.hasOwnProperty(key)) { + data[key] = arg[key]; + } + } + } + } + } try { return container.compiled.call(