From cc00c6c64a0c3d1f4a25ad3635e508a486317216 Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Fri, 29 May 2015 08:15:37 +0100 Subject: [PATCH] Fix context setup (remove dep on req.route.path) refs #5344 - As a result of #5344, context are pretty broken. - This PR removes all dependence on req.route.path, and uses res.locals.relativeUrl - res.locals.relativeUrl is used for many things and is dependable --- core/server/controllers/frontend.js | 16 +++++++++------- core/server/data/xml/rss/index.js | 6 +----- core/test/unit/frontend_spec.js | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/core/server/controllers/frontend.js b/core/server/controllers/frontend.js index 3a6ed32ea3..1070544481 100644 --- a/core/server/controllers/frontend.js +++ b/core/server/controllers/frontend.js @@ -68,25 +68,27 @@ function setResponseContext(req, res, data) { pageParam = req.params.page !== undefined ? parseInt(req.params.page, 10) : 1, tagPattern = new RegExp('^\\/' + config.routeKeywords.tag + '\\/'), authorPattern = new RegExp('^\\/' + config.routeKeywords.author + '\\/'), - privatePattern = new RegExp('^\\/' + config.routeKeywords.private + '\\/'); + privatePattern = new RegExp('^\\/' + config.routeKeywords.private + '\\/'), + indexPattern = new RegExp('^\\/' + config.routeKeywords.page + '\\/'), + homePattern = new RegExp('^\\/$'); // paged context if (!isNaN(pageParam) && pageParam > 1) { contexts.push('paged'); } - if (req.route.path === '/' + config.routeKeywords.page + '/:page/') { + if (indexPattern.test(res.locals.relativeUrl)) { contexts.push('index'); - } else if (req.route.path === '/') { + } else if (homePattern.test(res.locals.relativeUrl)) { contexts.push('home'); contexts.push('index'); - } else if (/\/rss\/(:page\/)?$/.test(req.route.path)) { + } else if (/^\/rss\//.test(res.locals.relativeUrl)) { contexts.push('rss'); - } else if (privatePattern.test(req.route.path)) { + } else if (privatePattern.test(res.locals.relativeUrl)) { contexts.push('private'); - } else if (tagPattern.test(req.route.path)) { + } else if (tagPattern.test(res.locals.relativeUrl)) { contexts.push('tag'); - } else if (authorPattern.test(req.route.path)) { + } else if (authorPattern.test(res.locals.relativeUrl)) { contexts.push('author'); } else if (data && data.post && data.post.page) { contexts.push('page'); diff --git a/core/server/data/xml/rss/index.js b/core/server/data/xml/rss/index.js index bca8e660d1..a8d6da654e 100644 --- a/core/server/data/xml/rss/index.js +++ b/core/server/data/xml/rss/index.js @@ -14,10 +14,6 @@ var _ = require('lodash'), getFeedXml, feedCache = {}; -function isPaginated(req) { - return req.route.path.indexOf(':page') !== -1; -} - function isTag(req) { return req.originalUrl.indexOf('/' + config.routeKeywords.tag + '/') !== -1; } @@ -209,7 +205,7 @@ generate = function (req, res, next) { options = getOptions(req, pageParam, slugParam); // No negative pages, or page 1 - if (isNaN(pageParam) || pageParam < 1 || (pageParam === 1 && isPaginated(req))) { + if (isNaN(pageParam) || pageParam < 1 || (req.params.page !== undefined && pageParam === 1)) { return res.redirect(baseUrl); } diff --git a/core/test/unit/frontend_spec.js b/core/test/unit/frontend_spec.js index e08ad50b7e..57543e46a6 100644 --- a/core/test/unit/frontend_spec.js +++ b/core/test/unit/frontend_spec.js @@ -1467,7 +1467,7 @@ describe('Frontend Controller', function () { beforeEach(function () { res = { - locals: {version: ''}, + locals: {version: '', relativeUrl: '/private/'}, render: sandbox.spy() }, req = {