From aae3ac6b9840d19b4762d699a60cf6d689c239a6 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 21 May 2015 12:07:46 -0400 Subject: [PATCH] updated title parsing methods to call a new hook: filter:parse.title --- src/meta/title.js | 43 ++++++++++++++++++++++++++---------- src/middleware/middleware.js | 4 ++-- src/socket.io/meta.js | 4 ++-- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/meta/title.js b/src/meta/title.js index 7522dbe3a7..c33348ab4e 100644 --- a/src/meta/title.js +++ b/src/meta/title.js @@ -3,6 +3,7 @@ var winston = require('winston'), validator = require('validator'), user = require('../user'), + plugins = require('../plugins'), translator = require('../../public/src/modules/translator'); module.exports = function(Meta) { @@ -15,7 +16,7 @@ module.exports = function(Meta) { isUserPage: /^user\/[^\/]+(\/[\w]+)?/ }; - Meta.title.build = function (urlFragment, language, locals, callback) { + Meta.title.build = function (urlFragment, language, callback) { var uri = ''; var fallbackTitle = validator.escape(Meta.config.browserTitle || Meta.config.title || 'NodeBB'); try { @@ -25,7 +26,7 @@ module.exports = function(Meta) { return callback(null, fallbackTitle); } - Meta.title.parseFragment(uri, language, locals, function(err, title) { + Meta.title.parseFragment(uri, language, function(err, title) { if (err) { title = fallbackTitle; } else { @@ -39,29 +40,47 @@ module.exports = function(Meta) { }); }; - Meta.title.parseFragment = function (urlFragment, language, locals, callback) { - var translated = ['', 'recent', 'unread', 'users', 'notifications', 'popular', 'tags']; + Meta.title.parseFragment = function (urlFragment, language, callback) { + var translated = ['', 'recent', 'unread', 'users', 'notifications', 'popular', 'tags'], + onParsed = function(err, translated) { + if (err) { + return callback(err); + } + + plugins.fireHook('filter:parse.title', { + fragment: urlFragment, + language: language, + parsed: translated + }, function(err, data) { + if (err) { + return callback(err); + } + + callback(null, data.parsed); + }); + }; + if (translated.indexOf(urlFragment) !== -1) { if (!urlFragment.length) { urlFragment = 'home'; } translator.translate('[[pages:' + urlFragment + ']]', language, function(translated) { - callback(null, translated); + onParsed(null, translated); }); } else if (tests.isCategory.test(urlFragment)) { var cid = urlFragment.match(/category\/(\d+)/)[1]; - require('../categories').getCategoryField(cid, 'name', callback); + require('../categories').getCategoryField(cid, 'name', onParsed); } else if (tests.isTopic.test(urlFragment)) { var tid = urlFragment.match(/topic\/(\d+)/)[1]; - require('../topics').getTopicField(tid, 'title', callback); + require('../topics').getTopicField(tid, 'title', onParsed); } else if (tests.isTag.test(urlFragment)) { var tag = urlFragment.match(/tags\/([\s\S]+)/)[1]; translator.translate('[[pages:tag, ' + tag + ']]', language, function(translated) { - callback(null, translated); + onParsed(null, translated); }); } else if (tests.isUserPage.test(urlFragment)) { var matches = urlFragment.match(/user\/([^\/]+)\/?([\w]+)?/), @@ -70,7 +89,7 @@ module.exports = function(Meta) { user.getUsernameByUserslug(userslug, function(err, username) { if (err) { - return callback(err); + return onParsed(err); } if (!username) { @@ -78,15 +97,15 @@ module.exports = function(Meta) { } if (!subpage) { - return callback(null, username); + return onParsed(null, username); } translator.translate('[[pages:user.' + subpage + ', ' + username + ']]', language, function(translated) { - callback(null, translated); + onParsed(null, translated); }); }); } else { - callback(null); + onParsed(null); } }; }; \ No newline at end of file diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 8adc6aabe7..956963f76d 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -229,10 +229,10 @@ middleware.renderHeader = function(req, res, callback) { if (err) { return next(err); } - meta.title.build(req.url.slice(1), settings.userLang, res.locals, next); + meta.title.build(req.url.slice(1), settings.userLang, next); }); } else { - meta.title.build(req.url.slice(1), meta.config.defaultLang, res.locals, next); + meta.title.build(req.url.slice(1), meta.config.defaultLang, next); } }, isAdmin: function(next) { diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 890a40c3e0..9368d0c470 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -41,10 +41,10 @@ SocketMeta.buildTitle = function(socket, text, callback) { if (err) { return callback(err); } - meta.title.build(text, settings.userLang, {}, callback); + meta.title.build(text, settings.userLang, callback); }); } else { - meta.title.build(text, meta.config.defaultLang, {}, callback); + meta.title.build(text, meta.config.defaultLang, callback); } };