From 5fb870779fa27a4ccbb7982cdf1b1d78f1bebdec Mon Sep 17 00:00:00 2001
From: Sean McArthur <sean.monstar@gmail.com>
Date: Fri, 7 Sep 2012 18:04:15 -0700
Subject: [PATCH] adding /test/mocks/site-templates.js route

this returns compiled site templates, similar to the dialog templates,
which are needed by the test suite to test the site works!
---
 lib/static/views.js                    | 19 ++++++++++++++-----
 resources/static/common/js/renderer.js |  2 ++
 resources/views/test.ejs               |  2 ++
 scripts/create_templates.js            | 23 ++++++++++++++---------
 4 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/lib/static/views.js b/lib/static/views.js
index 1c1272b91..dc4a583b2 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 25282c1fc..4a613d473 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 01012a801..1a11a48e5 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 b98009904..19260b84b 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");
-- 
GitLab