diff --git a/lib/static/views.js b/lib/static/views.js index 800eb4b19e5229a54ece1d1e585bf8a9266ca749..03b310f4783a16266a10abd46b89253954031562 100644 --- a/lib/static/views.js +++ b/lib/static/views.js @@ -239,8 +239,13 @@ exports.setup = function(app) { }); var siteTemplatesPath = path.join(__dirname, "../../resources/views"); + var sitePartialTemplatesPath = path.join(__dirname, "../../resources/views/partial"); app.get('/test/mocks/site-templates.js', function(req, res) { - res.send(templates.generate(siteTemplatesPath, "site/")); + // combine main templates and partials into one big set for development + // mode. + var siteTemplates = templates.generate(siteTemplatesPath, "site/"); + siteTemplates += templates.generate(sitePartialTemplatesPath, "partial/"); + res.send(siteTemplates); }); } diff --git a/lib/templates.js b/lib/templates.js index f9caaa4498d74201b59fbe41a1b76b3857f0dee1..4df22cdbe7ffacb9ac66262f4e7357f5076304e4 100644 --- a/lib/templates.js +++ b/lib/templates.js @@ -51,7 +51,7 @@ exports.generate = function generate(templatesDir, namePrefix, lastGen) { templateData = "BrowserID.Templates = BrowserID.Templates || {};"; for (var t in templates) { if (templates.hasOwnProperty(t)) { - templateData += "\nBrowserID.Templates['" + t + "'] = " + String(templates[t]); + templateData += "\nBrowserID.Templates['" + t + "'] = " + String(templates[t]) + ";"; } } diff --git a/resources/static/common/js/renderer.js b/resources/static/common/js/renderer.js index 4a613d473009f666e59c94fb125f1379b41c5fdf..ad8dae95a7a0dfa43f767ffa7901a74353637f19 100644 --- a/resources/static/common/js/renderer.js +++ b/resources/static/common/js/renderer.js @@ -11,12 +11,19 @@ BrowserID.Renderer = (function() { function getTemplateHTML(templateName, vars) { var templateFn = bid.Templates[templateName]; - vars = vars || {}; - if (!templateFn) throw "Template not found: " + templateName; + var localVars = _.extend({}, vars); + if(!localVars.partial) { + localVars.partial = function(name) { + // partials are not supported by the client side EJS. Create + // a standin that does what partial rendering would do on the backend. + return getTemplateHTML(name, vars); + } + } + // arguments are: locals, filters (which cant be used client-side), escapeFn - return templateFn.call(null, vars); + return templateFn.call(null, localVars); } function render(target, templateName, vars) {