updated title parsing methods to call a new hook: filter:parse.title

v1.18.x
Julian Lam 10 years ago
parent 830e1a7a3d
commit aae3ac6b98

@ -3,6 +3,7 @@
var winston = require('winston'), var winston = require('winston'),
validator = require('validator'), validator = require('validator'),
user = require('../user'), user = require('../user'),
plugins = require('../plugins'),
translator = require('../../public/src/modules/translator'); translator = require('../../public/src/modules/translator');
module.exports = function(Meta) { module.exports = function(Meta) {
@ -15,7 +16,7 @@ module.exports = function(Meta) {
isUserPage: /^user\/[^\/]+(\/[\w]+)?/ isUserPage: /^user\/[^\/]+(\/[\w]+)?/
}; };
Meta.title.build = function (urlFragment, language, locals, callback) { Meta.title.build = function (urlFragment, language, callback) {
var uri = ''; var uri = '';
var fallbackTitle = validator.escape(Meta.config.browserTitle || Meta.config.title || 'NodeBB'); var fallbackTitle = validator.escape(Meta.config.browserTitle || Meta.config.title || 'NodeBB');
try { try {
@ -25,7 +26,7 @@ module.exports = function(Meta) {
return callback(null, fallbackTitle); return callback(null, fallbackTitle);
} }
Meta.title.parseFragment(uri, language, locals, function(err, title) { Meta.title.parseFragment(uri, language, function(err, title) {
if (err) { if (err) {
title = fallbackTitle; title = fallbackTitle;
} else { } else {
@ -39,29 +40,47 @@ module.exports = function(Meta) {
}); });
}; };
Meta.title.parseFragment = function (urlFragment, language, locals, callback) { Meta.title.parseFragment = function (urlFragment, language, callback) {
var translated = ['', 'recent', 'unread', 'users', 'notifications', 'popular', 'tags']; 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 (translated.indexOf(urlFragment) !== -1) {
if (!urlFragment.length) { if (!urlFragment.length) {
urlFragment = 'home'; urlFragment = 'home';
} }
translator.translate('[[pages:' + urlFragment + ']]', language, function(translated) { translator.translate('[[pages:' + urlFragment + ']]', language, function(translated) {
callback(null, translated); onParsed(null, translated);
}); });
} else if (tests.isCategory.test(urlFragment)) { } else if (tests.isCategory.test(urlFragment)) {
var cid = urlFragment.match(/category\/(\d+)/)[1]; 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)) { } else if (tests.isTopic.test(urlFragment)) {
var tid = urlFragment.match(/topic\/(\d+)/)[1]; 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)) { } else if (tests.isTag.test(urlFragment)) {
var tag = urlFragment.match(/tags\/([\s\S]+)/)[1]; var tag = urlFragment.match(/tags\/([\s\S]+)/)[1];
translator.translate('[[pages:tag, ' + tag + ']]', language, function(translated) { translator.translate('[[pages:tag, ' + tag + ']]', language, function(translated) {
callback(null, translated); onParsed(null, translated);
}); });
} else if (tests.isUserPage.test(urlFragment)) { } else if (tests.isUserPage.test(urlFragment)) {
var matches = urlFragment.match(/user\/([^\/]+)\/?([\w]+)?/), var matches = urlFragment.match(/user\/([^\/]+)\/?([\w]+)?/),
@ -70,7 +89,7 @@ module.exports = function(Meta) {
user.getUsernameByUserslug(userslug, function(err, username) { user.getUsernameByUserslug(userslug, function(err, username) {
if (err) { if (err) {
return callback(err); return onParsed(err);
} }
if (!username) { if (!username) {
@ -78,15 +97,15 @@ module.exports = function(Meta) {
} }
if (!subpage) { if (!subpage) {
return callback(null, username); return onParsed(null, username);
} }
translator.translate('[[pages:user.' + subpage + ', ' + username + ']]', language, function(translated) { translator.translate('[[pages:user.' + subpage + ', ' + username + ']]', language, function(translated) {
callback(null, translated); onParsed(null, translated);
}); });
}); });
} else { } else {
callback(null); onParsed(null);
} }
}; };
}; };

@ -229,10 +229,10 @@ middleware.renderHeader = function(req, res, callback) {
if (err) { if (err) {
return next(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 { } 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) { isAdmin: function(next) {

@ -41,10 +41,10 @@ SocketMeta.buildTitle = function(socket, text, callback) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
meta.title.build(text, settings.userLang, {}, callback); meta.title.build(text, settings.userLang, callback);
}); });
} else { } else {
meta.title.build(text, meta.config.defaultLang, {}, callback); meta.title.build(text, meta.config.defaultLang, callback);
} }
}; };

Loading…
Cancel
Save