mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-11 16:35:47 +01:00
updated title parsing methods to call a new hook: filter:parse.title
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user