|
|
|
@ -10,19 +10,10 @@ const translator = require('../translator');
|
|
|
|
|
const widgets = require('../widgets');
|
|
|
|
|
const utils = require('../utils');
|
|
|
|
|
const slugify = require('../slugify');
|
|
|
|
|
const cacheCreate = require('../cacheCreate');
|
|
|
|
|
const cache = cacheCreate({
|
|
|
|
|
name: 'header-footer',
|
|
|
|
|
max: 1000,
|
|
|
|
|
maxAge: 0,
|
|
|
|
|
enabled: global.env === 'production',
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const relative_path = nconf.get('relative_path');
|
|
|
|
|
|
|
|
|
|
module.exports = function (middleware) {
|
|
|
|
|
middleware.headerFooterCache = cache;
|
|
|
|
|
|
|
|
|
|
middleware.processRender = function processRender(req, res, next) {
|
|
|
|
|
// res.render post-processing, modified from here: https://gist.github.com/mrlannigan/5051687
|
|
|
|
|
const render = res.render;
|
|
|
|
@ -104,34 +95,14 @@ module.exports = function (middleware) {
|
|
|
|
|
|
|
|
|
|
async function renderHeaderFooter(method, req, res, options) {
|
|
|
|
|
let str = '';
|
|
|
|
|
const lang = getLang(req, res);
|
|
|
|
|
function getCacheKey() {
|
|
|
|
|
return [lang, method]
|
|
|
|
|
.concat(req.path.split('/').slice(0, 4))
|
|
|
|
|
.join('/');
|
|
|
|
|
}
|
|
|
|
|
let cacheKey;
|
|
|
|
|
if (req.uid === 0 && res.locals.renderHeader) {
|
|
|
|
|
cacheKey = getCacheKey();
|
|
|
|
|
str = cache.get(cacheKey);
|
|
|
|
|
if (str) {
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!str) {
|
|
|
|
|
if (res.locals.renderHeader) {
|
|
|
|
|
str = await middleware[method](req, res, options);
|
|
|
|
|
} else if (res.locals.renderAdminHeader) {
|
|
|
|
|
str = await middleware.admin[method](req, res, options);
|
|
|
|
|
} else {
|
|
|
|
|
str = '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const translated = await translate(str, lang);
|
|
|
|
|
if (req.uid === 0 && res.locals.renderHeader) {
|
|
|
|
|
cache.set(cacheKey, translated, 300000);
|
|
|
|
|
if (res.locals.renderHeader) {
|
|
|
|
|
str = await middleware[method](req, res, options);
|
|
|
|
|
} else if (res.locals.renderAdminHeader) {
|
|
|
|
|
str = await middleware.admin[method](req, res, options);
|
|
|
|
|
} else {
|
|
|
|
|
str = '';
|
|
|
|
|
}
|
|
|
|
|
return translated;
|
|
|
|
|
return await translate(str, getLang(req, res));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getLang(req, res) {
|
|
|
|
|