diff --git a/lib/static/views.js b/lib/static/views.js index 1c1272b91ab4cea1c39b4b9ea38cdbd0724ab5c0..dc4a583b2bdc1e3d29628dbec68b537b466e95e1 100644 --- a/lib/static/views.js +++ b/lib/static/views.js @@ -233,13 +233,22 @@ exports.setup = function(app) { // /common/js/templates.js is dynamically built each time if (!config.get('use_minified_resources')) { var generateTemplates = require('../../scripts/create_templates'); - var templatesPath = path.join(__dirname, '../../resources/static/dialog/views') - var templatesData; + var dialogTemplatesPath = path.join(__dirname, '../../resources/static/dialog/views') + var dialogTemplatesData; app.get('/common/js/templates.js', function(req, res) { - var str = generateTemplates(generateTemplates.RETURN, templatesPath); - if (str) templatesData = str; + var str = generateTemplates(generateTemplates.RETURN, dialogTemplatesPath); + if (str) dialogTemplatesData = str; - res.send(templatesData); + res.send(dialogTemplatesData); + }); + + var siteTemplatesPath = path.join(__dirname, "../../resources/views"); + var siteTemplatesData; + app.get('/test/mocks/site-templates.js', function(req, res) { + var str = generateTemplates(generateTemplates.RETURN, siteTemplatesPath, "site/"); + if (str) siteTemplatesData = str; + + res.send(siteTemplatesData); }); } diff --git a/resources/static/common/js/renderer.js b/resources/static/common/js/renderer.js index 25282c1fc3fdffd281cb7e068b3f5ae6ad08c2e3..4a613d473009f666e59c94fb125f1379b41c5fdf 100644 --- a/resources/static/common/js/renderer.js +++ b/resources/static/common/js/renderer.js @@ -13,6 +13,8 @@ BrowserID.Renderer = (function() { var templateFn = bid.Templates[templateName]; vars = vars || {}; + if (!templateFn) throw "Template not found: " + templateName; + // arguments are: locals, filters (which cant be used client-side), escapeFn return templateFn.call(null, vars); } diff --git a/resources/views/test.ejs b/resources/views/test.ejs index 01012a8017554c028823666e2d74654f979677b8..1a11a48e5b135e1176cbc2a90278dc96682caddc 100644 --- a/resources/views/test.ejs +++ b/resources/views/test.ejs @@ -84,11 +84,13 @@ <script src="mocks/mocks.js"></script> <script src="mocks/xhr.js"></script> <script src="mocks/templates.js"></script> + <script src="mocks/site-templates.js"></script> <script src="mocks/provisioning.js"></script> <script src="mocks/window.js"></script> <script src="mocks/winchan.js"></script> <script src="mocks/cachify.js"></script> + <script src="/common/js/templates.js"></script> <script src="/common/js/renderer.js"></script> <script src="/common/js/class.js"></script> <script src="/common/js/mediator.js"></script> diff --git a/scripts/create_templates.js b/scripts/create_templates.js index b980099044f771b465a7fe502b447afa851ad194..19260b84b20aaaf75bcb803d3d67e9d2f3109748 100755 --- a/scripts/create_templates.js +++ b/scripts/create_templates.js @@ -12,14 +12,18 @@ ejs = require('ejs'); var dir = process.env.TEMPLATE_DIR || process.cwd(); var output_dir = process.env.BUILD_DIR || dir; -var templates = {}; +var bundles = {}; -var lastGen = 0; -var templateData; - -function generateTemplates(outputType, templatesDir) { +function generateTemplates(outputType, templatesDir, namePrefix) { if (templatesDir) dir = templatesDir; - var fileNames = fs.readdirSync(dir) + if (!namePrefix) namePrefix = ""; + + var bundle = bundles[templatesDir] || (bundles[templatesDir] = {}); + var lastGen = bundle.lastGen || 0; + var templateData = bundle.data; + + var fileNames = fs.readdirSync(dir); + var templates = {}; // is a regen even neccesary? try { @@ -41,7 +45,7 @@ function generateTemplates(outputType, templatesDir) { for(var index = 0, max = fileNames.length; index < max; index++) { var fileName = fileNames[index]; if(fileName.match(/\.ejs$/)) { - var templateName = fileName.replace(/\.ejs/, ''); + var templateName = namePrefix + fileName.replace(/\.ejs/, ''); var templateText = fs.readFileSync(dir + "/" + fileName, "utf8"); templates[templateName] = ejs.compile(templateText, { @@ -51,7 +55,7 @@ function generateTemplates(outputType, templatesDir) { } } - var templateData = "BrowserID.Templates = {};"; + templateData = "BrowserID.Templates = BrowserID.Templates || {};"; for (var t in templates) { if (templates.hasOwnProperty(t)) { templateData += "\nBrowserID.Templates['" + t + "'] = " + String(templates[t]); @@ -59,7 +63,8 @@ function generateTemplates(outputType, templatesDir) { } if (outputType === generateTemplates.RETURN) { - lastGen = Date.now(); + bundle.lastGen = Date.now(); + bundle.data = templateData; return templateData; } else { fs.writeFileSync(output_dir + "/templates.js", templateData, "utf8");