diff --git a/app.js b/app.js index a5da55bcfe..d9ac0296e5 100644 --- a/app.js +++ b/app.js @@ -27,8 +27,9 @@ async = require('async'), semver = require('semver'), winston = require('winston'), - pkg = require('./package.json'), path = require('path'), + pkg = require('./package.json'), + utils = require('./public/src/utils.js'), meta; // Runtime environment @@ -108,16 +109,11 @@ var customTemplates = meta.config['theme:templates'] ? path.join(__dirname, 'node_modules', meta.config['theme:id'], meta.config['theme:templates']) : false; - // todo: replace below with read directory code, derp. - templates.init([ - 'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index', - 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext', - 'emails/header', 'emails/footer', - - 'noscript/header', 'noscript/home', 'noscript/category', 'noscript/topic' - ], customTemplates); - - + + utils.walk(path.join(__dirname, 'public/templates'), function (err, tplsToLoad) { + templates.init(tplsToLoad, customTemplates); + }); + plugins.ready(function() { templates.ready(webserver.init); }); diff --git a/public/src/templates.js b/public/src/templates.js index 5829ac5195..0c90900d9c 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -48,7 +48,7 @@ } }; - templates.prepare = function (raw_tpl, data) { + templates.prepare = function (raw_tpl) { var template = {}; template.html = raw_tpl; template.parse = parse; @@ -78,7 +78,9 @@ global.templates[file] = new template; loaded--; - if (loaded == 0) templates.ready(); + if (loaded === 0) { + templates.ready(); + } }); }(templatesToLoad[t])); } diff --git a/src/webserver.js b/src/webserver.js index 0ac8e00fe7..3606113cc8 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -807,7 +807,8 @@ var path = require('path'), var custom_routes = { 'routes': [], - 'api': [] + 'api': [], + 'templates': [] }; plugins.ready(function() { @@ -843,6 +844,17 @@ var path = require('path'), } } + var templateRoutes = custom_routes.templates; + for (var route in templateRoutes) { + if (templateRoutes.hasOwnProperty(route)) { + (function(route) { + app.get('/templates/' + templateRoutes[route].template, function(req, res) { + res.send(templateRoutes[route].content); + }); + }(route)); + } + } + }); }); diff --git a/src/websockets.js b/src/websockets.js index 8d16a66c08..310af2fbc9 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -106,12 +106,12 @@ websockets.init = function(io) { socket.on('disconnect', function() { - var index = userSockets[uid].indexOf(socket); + var index = (userSockets[uid] || []).indexOf(socket); if (index !== -1) { userSockets[uid].splice(index, 1); } - if (userSockets[uid].length === 0) { + if (userSockets[uid] && userSockets[uid].length === 0) { delete users[sessionID]; delete userSockets[uid]; if (uid) {