diff --git a/public/language/en/pages.json b/public/language/en/pages.json index 15d24da2a0..d01f5f8a9b 100644 --- a/public/language/en/pages.json +++ b/public/language/en/pages.json @@ -3,5 +3,10 @@ "unread": "Unread Topics", "recent": "Recent Topics", "users": "Registered Users", - "notifications": "Notifications" + "notifications": "Notifications", + "user.edit": "Editing \"%1\"", + "user.following": "People %1 Follows", + "user.followers": "People who Follow %1", + "user.favourites": "%1's Favourite Posts", + "user.settings": "User Settings" } \ No newline at end of file diff --git a/src/meta.js b/src/meta.js index 8f43fc653b..c130f1f974 100644 --- a/src/meta.js +++ b/src/meta.js @@ -6,7 +6,8 @@ var fs = require('fs'), utils = require('./../public/src/utils'), db = require('./database'), - plugins = require('./plugins'); + plugins = require('./plugins'), + User = require('./user'); (function (Meta) { @@ -161,10 +162,15 @@ var fs = require('fs'), }; Meta.title = { + tests: { + isCategory: /^category\/\d+\/?/, + isTopic: /^topic\/\d+\/?/, + isUserPage: /^user\/[^\/]+(\/[\w]+)?/ + }, build: function (urlFragment, callback) { var user = require('./user'); - Meta.title.parseFragment(urlFragment, function(err, title) { + Meta.title.parseFragment(decodeURIComponent(urlFragment), function(err, title) { var title; if (err) { @@ -186,18 +192,32 @@ var fs = require('fs'), translator.translate('[[pages:' + urlFragment + ']]', function(translated) { callback(null, translated); }); - } else if (/^category\/\d+\/?/.test(urlFragment)) { + } else if (this.tests.isCategory.test(urlFragment)) { var cid = urlFragment.match(/category\/(\d+)/)[1]; require('./categories').getCategoryField(cid, 'name', function (err, name) { callback(null, name); }); - } else if (/^topic\/\d+\/?/.test(urlFragment)) { + } else if (this.tests.isTopic.test(urlFragment)) { var tid = urlFragment.match(/topic\/(\d+)/)[1]; require('./topics').getTopicField(tid, 'title', function (err, title) { callback(null, title); }); + } else if (this.tests.isUserPage.test(urlFragment)) { + var matches = urlFragment.match(/user\/([^\/]+)\/?([\w]+)?/), + userslug = matches[1], + subpage = matches[2]; + + User.getUsernameByUserslug(userslug, function(err, username) { + if (subpage) { + translator.translate('[[pages:user.' + subpage + ', ' + username + ']]', function(translated) { + callback(null, translated); + }) + } else { + callback(null, username); + } + }); } else { callback(null); } diff --git a/src/user.js b/src/user.js index 11470fe05a..76105044a3 100644 --- a/src/user.js +++ b/src/user.js @@ -733,6 +733,17 @@ var bcrypt = require('bcryptjs'), }); }; + User.getUsernameByUserslug = function(slug, callback) { + async.waterfall([ + function(next) { + User.getUidByUserslug(slug, next); + }, + function(uid, next) { + User.getUserField(uid, 'username', next); + } + ], callback); + }; + User.getUidByEmail = function(email, callback) { db.getObjectField('email:uid', email, function(err, data) { if (err) {