diff --git a/.gitignore b/.gitignore index 0ba312d..1427deb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .test node_modules +src/require/test/test_tmpl-*.js +src/require/test/test_tmpl-*.css diff --git a/app.build.js b/app.build.js new file mode 100644 index 0000000..0dd6132 --- /dev/null +++ b/app.build.js @@ -0,0 +1,5 @@ +({ + modules: [ + {name: './require/test/test_tmpl'} + ] +}) diff --git a/src/require/tmpl.js b/src/require/tmpl.js index 8c1eb1a..a6f8595 100644 --- a/src/require/tmpl.js +++ b/src/require/tmpl.js @@ -11,25 +11,40 @@ // modified to work as a require.js plugin for storediq's client-side and build // infrastructure define(function() { - var compile = function(str) { - var value = "return (function(data) {var out = ''; out+=" + "'" + - str.replace(/[\r\t\n]/g, " ") - .replace(/'(?=[^%]*%>)/g,"\t") - .split("'").join("\\'") - .split("\t").join("'") - .replace(/<%=(.+?)%>/g, "'; out += $1; out += '") - .split("<%").join("';") - .split("%>").join("out+='") + - "'; return out;}).call(typeof ctx !== 'undefined'? ctx : this, data);"; - return new Function('data', 'ctx', value); - }; + var pluginMap = {}, + compile = function(str) { + var value = "return (function(data) {var out = ''; out+=" + "'" + + str.replace(/[\r\t\n]/g, " ") + .replace(/'(?=[^%]*%>)/g,"\t") + .split("'").join("\\'") + .split("\t").join("'") + .replace(/<%=(.+?)%>/g, "'; out += $1; out += '") + .split("<%").join("';") + .split("%>").join("out+='") + + "'; return out;}).call(typeof ctx !== 'undefined'? ctx : this, data);"; + return new Function('data', 'ctx', value); + }; return { load: function(name, req, load) { - var url = req.toUrl(name); - req(['text!' + req.toUrl(name)], function(templateText) { - load(compile(templateText)); - }); + if (require && require.nodeRequire) { + var fs = require.nodeRequire('fs'), + tmpl = fs.readFileSync(req.toUrl(name), 'utf8'), + compiled = compile(tmpl), + module = compiled.toString(); + pluginMap[name] = module; + load(); + } else { + req(['text!' + req.toUrl(name)], function(templateText) { + load(compile(templateText)); + }); + } + }, + + write: function(pluginName, moduleName, write) { + var module = "define('" + pluginName + "!" + moduleName + + "', function () { return " + pluginMap[moduleName] + ";});\n"; + write(module); } }; });