diff --git a/src/eco.plugin.coffee b/src/eco.plugin.coffee index 2729109..809f931 100755 --- a/src/eco.plugin.coffee +++ b/src/eco.plugin.coffee @@ -15,5 +15,11 @@ module.exports = (BasePlugin) -> # Requires eco = require('eco') - # Render - opts.content = eco.render(opts.content,templateData) + if opts.outExtension in ['js'] + # Compile template into JavaScript functions + output = eco.compile(opts.content,'') + output = "window.JST['#{opts.file.get('relativeOutPath')}'] = #{output}\n" + opts.content = "if (!window.JST) {\n window.JST = {};\n}\n#{output}\n" + else + # Render + opts.content = eco.render(opts.content,templateData) diff --git a/test/out-expected/templates/eco.js b/test/out-expected/templates/eco.js new file mode 100644 index 0000000..e8db435 --- /dev/null +++ b/test/out-expected/templates/eco.js @@ -0,0 +1,60 @@ +if (!window.JST) { + window.JST = {}; +} +window.JST['templates/eco.js'] = function (__obj) { + if (!__obj) __obj = {}; + var __out = [], __capture = function(callback) { + var out = __out, result; + __out = []; + callback.call(this); + result = __out.join(''); + __out = out; + return __safe(result); + }, __sanitize = function(value) { + if (value && value.ecoSafe) { + return value; + } else if (typeof value !== 'undefined' && value != null) { + return __escape(value); + } else { + return ''; + } + }, __safe, __objSafe = __obj.safe, __escape = __obj.escape; + __safe = __obj.safe = function(value) { + if (value && value.ecoSafe) { + return value; + } else { + if (!(typeof value !== 'undefined' && value != null)) value = ''; + var result = new String(value); + result.ecoSafe = true; + return result; + } + }; + if (!__escape) { + __escape = __obj.escape = function(value) { + return ('' + value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); + }; + } + (function() { + (function() { + + __out.push('Hello, '); + + __out.push(__sanitize(this.name)); + + __out.push('.\nI\'M SHOUTING AT YOU, '); + + __out.push(__sanitize(this.name.toUpperCase())); + + __out.push('!\n'); + + }).call(this); + + }).call(__obj); + __obj.safe = __objSafe, __obj.escape = __escape; + return __out.join(''); +} + diff --git a/test/out-expected/templates/index.html b/test/out-expected/templates/index.html new file mode 100644 index 0000000..e745f94 --- /dev/null +++ b/test/out-expected/templates/index.html @@ -0,0 +1,9 @@ +
this is THE CLIENT-SIDE TEST FOR ECO
+ +this is <%= @document.title.toUpperCase() %>
+ +