diff --git a/client/index.html b/client/index.html index 83ac96ad..0bd055f5 100644 --- a/client/index.html +++ b/client/index.html @@ -9,7 +9,7 @@ - +
- <% if (gitCommit) { %>
+ {{#if gitCommit}}
The Lounge is running from source
- (<%= gitCommit %>
).
- <% } else { %>
- The Lounge is in version <%= version %>
- (See release notes).
- <% } %>
+ ({{ gitCommit }}
).
+ {{else}}
+ The Lounge is in version {{version}}
+ (See release notes).
+ {{/if}}
Website
Documentation
diff --git a/client/js/libs/handlebars/firstLetterUppercase.js b/client/js/libs/handlebars/firstLetterUppercase.js
new file mode 100644
index 00000000..d36bff54
--- /dev/null
+++ b/client/js/libs/handlebars/firstLetterUppercase.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = function(string) {
+ return string.charAt(0).toUpperCase() + string.slice(1);
+};
diff --git a/client/js/libs/handlebars/index.js b/client/js/libs/handlebars/index.js
new file mode 100644
index 00000000..fe485b47
--- /dev/null
+++ b/client/js/libs/handlebars/index.js
@@ -0,0 +1,18 @@
+"use strict";
+
+module.exports = {
+ colorClass: require("./colorClass"),
+ diff: require("./diff"),
+ equal: require("./equal"),
+ firstLetterUppercase: require("./firstLetterUppercase"),
+ localedate: require("./localedate"),
+ localetime: require("./localetime"),
+ modes: require("./modes"),
+ parse: require("./parse"),
+ roundBadgeNumber: require("./roundBadgeNumber"),
+ slugify: require("./slugify"),
+ ternary: require("./ternary"),
+ tojson: require("./tojson"),
+ tz: require("./tz"),
+ users: require("./users"),
+};
diff --git a/client/js/libs/handlebars/ternary.js b/client/js/libs/handlebars/ternary.js
new file mode 100644
index 00000000..4dfa2995
--- /dev/null
+++ b/client/js/libs/handlebars/ternary.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = function(test, yes, no) {
+ return test ? yes : no;
+};
diff --git a/package.json b/package.json
index 30154e29..3628e2b3 100644
--- a/package.json
+++ b/package.json
@@ -46,6 +46,7 @@
"commander": "2.9.0",
"event-stream": "3.3.4",
"express": "4.15.2",
+ "express-handlebars": "^3.0.0",
"fs-extra": "2.1.2",
"irc-framework": "2.6.1",
"ldapjs": "1.0.1",
diff --git a/src/server.js b/src/server.js
index 0ff97b76..082ef98f 100644
--- a/src/server.js
+++ b/src/server.js
@@ -5,7 +5,9 @@ var pkg = require("../package.json");
var Client = require("./client");
var ClientManager = require("./clientManager");
var express = require("express");
+var expressHandlebars = require("express-handlebars");
var fs = require("fs");
+var path = require("path");
var io = require("socket.io");
var dns = require("dns");
var Helper = require("./helper");
@@ -29,7 +31,10 @@ module.exports = function() {
var app = express()
.use(allRequests)
.use(index)
- .use(express.static("client"));
+ .use(express.static("client"))
+ .engine("html", expressHandlebars({extname: ".html", helpers: require("../client/js/libs/handlebars")}))
+ .set("view engine", "html")
+ .set("views", path.join(__dirname, "..", "client"));
var config = Helper.config;
var server = null;
@@ -125,28 +130,19 @@ function index(req, res, next) {
return next();
}
- return fs.readFile("client/index.html", "utf-8", function(err, file) {
- if (err) {
- throw err;
- }
-
- var data = _.merge(
- pkg,
- Helper.config
- );
- data.gitCommit = Helper.getGitCommit();
- data.themes = fs.readdirSync("client/themes/").filter(function(themeFile) {
- return themeFile.endsWith(".css");
- }).map(function(css) {
- return css.slice(0, -4);
- });
- var template = _.template(file);
- res.setHeader("Content-Security-Policy", "default-src *; connect-src 'self' ws: wss:; style-src * 'unsafe-inline'; script-src 'self'; child-src 'self'; object-src 'none'; form-action 'none';");
- res.setHeader("Referrer-Policy", "no-referrer");
- res.setHeader("Content-Type", "text/html");
- res.writeHead(200);
- res.end(template(data));
+ var data = _.merge(
+ pkg,
+ Helper.config
+ );
+ data.gitCommit = Helper.getGitCommit();
+ data.themes = fs.readdirSync("client/themes/").filter(function(themeFile) {
+ return themeFile.endsWith(".css");
+ }).map(function(css) {
+ return css.slice(0, -4);
});
+ res.setHeader("Content-Security-Policy", "default-src *; connect-src 'self' ws: wss:; style-src * 'unsafe-inline'; script-src 'self'; child-src 'self'; object-src 'none'; form-action 'none';");
+ res.setHeader("Referrer-Policy", "no-referrer");
+ res.render("index", data);
}
function init(socket, client) {