From 04122b8ab2c841f72e655c663ef822dc2cfd25fb Mon Sep 17 00:00:00 2001 From: Shane Tomlinson <stomlinson@mozilla.com> Date: Mon, 17 Sep 2012 11:16:28 +0100 Subject: [PATCH] Add partial support to client side templates. --- lib/static/views.js | 7 ++++++- lib/templates.js | 2 +- resources/static/common/js/renderer.js | 13 ++++++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/static/views.js b/lib/static/views.js index 800eb4b19..03b310f47 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 f9caaa449..4df22cdbe 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 4a613d473..ad8dae95a 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) { -- GitLab