const fileIO = require('./fileIO'); function fetchInTemplate(templateContext, templateKey, filename) { templateContext[templateKey] = fileIO.getFile(filename); } const PRIVILEGE = {NOBODY: 0, MEMBER: 1, ADMIN: 2}; /** Template engine */ const whiskers = require('whiskers'); module.exports = { renderHTML: function(request, result, templateFile, templateDependencyFunction) { var templateContext = Object(); var prom = []; prom.push(fileIO.getFile("./html/mainTemplate.html")); prom.push(fetchInTemplate(templateContext, "header", "./html/header.html")); prom.push(fetchInTemplate(templateContext, "footer", "./html/footer.html")); if(module.exports.checkPrivilege(request) >= PRIVILEGE.MEMBER) { templateContext.loggedIn = true; if(module.exports.checkPrivilege(request) === PRIVILEGE.ADMIN) templateContext.admin = true; } else { prom.push(fetchInTemplate(templateContext, "login","./html/login.html")); } if(templateDependencyFunction !== null) prom.push(templateDependencyFunction(templateContext, request)); prom.push(fetchInTemplate(templateContext, "main","./html/" + templateFile)); Promise.all(prom).then(function(content) { result.write(whiskers.render(content[0], templateContext)); result.end(); }); }, PRIVILEGE: { NOBODY: 0, MEMBER: 1, ADMIN: 2 }, checkPrivilege: function(request) { if(request.session.login !== true) return module.exports.PRIVILEGE.NOBODY; else if(request.session.admin === true) return module.exports.PRIVILEGE.ADMIN; return module.exports.PRIVILEGE.MEMBER; }, printError: function(result, errorMessage) { var templateContext = Object(); var prom = []; prom.push(fileIO.getFile("./html/mainTemplate.html")); prom.push(fetchInTemplate(templateContext, "header", "./html/header.html")); prom.push(fetchInTemplate(templateContext, "footer", "./html/footer.html")); prom.push(fetchInTemplate(templateContext, "main", "./html/error.html")); prom.push(fetchInTemplate(templateContext, "login","./html/login.html")); templateContext.errorMessage = errorMessage; Promise.all(prom).then(function(content) { result.write(whiskers.render(content[0], templateContext)); result.end(); }); } };