From 83f9e9458416e2ee1aa4dcdcb88f06ad929b4789 Mon Sep 17 00:00:00 2001
From: Sean McArthur <sean.monstar@gmail.com>
Date: Thu, 13 Sep 2012 18:00:22 -0700
Subject: [PATCH] split up create_templates script into a lib file

---
 lib/static/views.js         |  6 ++--
 lib/templates.js            | 61 +++++++++++++++++++++++++++++++
 scripts/create_templates.js | 72 ++++++-------------------------------
 3 files changed, 74 insertions(+), 65 deletions(-)
 create mode 100644 lib/templates.js

diff --git a/lib/static/views.js b/lib/static/views.js
index dc4a583b2..2579f05ff 100644
--- a/lib/static/views.js
+++ b/lib/static/views.js
@@ -232,11 +232,11 @@ 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 templates = require('../templates');
     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, dialogTemplatesPath);
+      var str = templates.generate(dialogTemplatesPath);
       if (str) dialogTemplatesData = str;
 
       res.send(dialogTemplatesData);
@@ -245,7 +245,7 @@ exports.setup = function(app) {
     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/");
+      var str = templates.generate(siteTemplatesPath, "site/");
       if (str) siteTemplatesData = str;
 
       res.send(siteTemplatesData);
diff --git a/lib/templates.js b/lib/templates.js
new file mode 100644
index 000000000..f9caaa449
--- /dev/null
+++ b/lib/templates.js
@@ -0,0 +1,61 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+const
+fs = require('fs'),
+path = require('path'),
+ejs = require('ejs'),
+config = require('./configuration');
+
+var bundles = {};
+
+exports.generate = function generate(templatesDir, namePrefix, lastGen) {
+  if (!namePrefix) namePrefix = "";
+
+  var bundle = bundles[templatesDir] || (bundles[templatesDir] = {});
+  lastGen = lastGen || bundle.lastGen || 0;
+  var templateData = bundle.data;
+
+  var fileNames = fs.readdirSync(templatesDir);
+  var templates = [];
+
+  // is a regen necessary?
+  try {
+    for (var i = 0; i < fileNames.length; i++) {
+      if (lastGen < fs.statSync(path.join(templatesDir, fileNames[i])).mtime) {
+        throw "newer";
+      }
+    }
+    // no rebuild needed
+    console.log("templates [%s] up to date", templatesDir);
+    return templateData;
+  } catch (e) {
+    console.log("creating templates [%s]", templatesDir);
+  }
+
+  for(var index = 0, max = fileNames.length; index < max; index++) {
+    var fileName = fileNames[index];
+    if(fileName.match(/\.ejs$/)) {
+      var templateName = namePrefix + fileName.replace(/\.ejs/, '');
+      var templateText = fs.readFileSync(path.join(templatesDir, fileName), "utf8");
+
+      templates[templateName] = ejs.compile(templateText, {
+        client: true,
+        compileDebug: !config.get('use_minified_resources')
+      });
+    }
+  }
+
+  templateData = "BrowserID.Templates = BrowserID.Templates || {};";
+  for (var t in templates) {
+    if (templates.hasOwnProperty(t)) {
+      templateData += "\nBrowserID.Templates['" + t + "'] = " + String(templates[t]);
+    }
+  }
+
+  bundle.lastGen = Date.now();
+  bundle.data = templateData;
+  return templateData;
+};
diff --git a/scripts/create_templates.js b/scripts/create_templates.js
index 729a63b6a..6d91d995a 100755
--- a/scripts/create_templates.js
+++ b/scripts/create_templates.js
@@ -7,74 +7,22 @@
 const
 fs = require("fs"),
 path = require('path'),
-ejs = require('ejs'),
-config = require('../lib/configuration');
+templates = require('../lib/templates');
 
+var existsSync = fs.existsSync || path.existsSync;
 var dir = process.env.TEMPLATE_DIR || process.cwd();
 var output_dir = process.env.BUILD_DIR || dir;
-
-var bundles = {};
-
-function generateTemplates(outputType, templatesDir, namePrefix) {
-  if (templatesDir) dir = templatesDir;
-  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 {
-    if (outputType !== generateTemplates.RETURN) {
-      lastGen = fs.statSync(path.join(output_dir, "templates.js")).mtime;
-    }
-    for (var i = 0; i < fileNames.length; i++) {
-      if (lastGen < fs.statSync(path.join(dir, fileNames[i])).mtime) {
-        throw "newer";
-      }
-    };
-    // no rebuild needed
-    console.log("templates.js is up to date");
-    return templateData;
-  } catch (e) {
-    console.log("creating templates.js");
-  }
-
-  for(var index = 0, max = fileNames.length; index < max; index++) {
-    var fileName = fileNames[index];
-    if(fileName.match(/\.ejs$/)) {
-      var templateName = namePrefix + fileName.replace(/\.ejs/, '');
-      var templateText = fs.readFileSync(dir + "/" + fileName, "utf8");
-
-      templates[templateName] = ejs.compile(templateText, {
-        client: true,
-        compileDebug: !config.get('use_minified_resources')
-      });
-    }
-  }
-
-  templateData = "BrowserID.Templates = BrowserID.Templates || {};";
-  for (var t in templates) {
-    if (templates.hasOwnProperty(t)) {
-      templateData += "\nBrowserID.Templates['" + t + "'] = " + String(templates[t]);
-    }
-  }
-
-  if (outputType === generateTemplates.RETURN) {
-    bundle.lastGen = Date.now();
-    bundle.data = templateData;
-    return templateData;
-  } else {
-    fs.writeFileSync(output_dir + "/templates.js", templateData, "utf8");
+var outputFile = path.join(output_dir, "templates.js");
+
+function generateTemplates() {
+  var lastGen = existsSync(outputFile) ? fs.statSync(outputFile).mtime : 0;
+  var templateData = templates.generate(dir, null, lastGen);
+  if (templateData) {
+    // no data most likely means we're already up-to-date
+    fs.writeFileSync(path.join(output_dir, "templates.js"), templateData, "utf8");
   }
 };
 
-generateTemplates.FILE = 0;
-generateTemplates.RETURN = 1;
-
 // run or export the function
 if (process.argv[1] === __filename) generateTemplates();
 else module.exports = generateTemplates;
-- 
GitLab