From eb9704f85e1547df86b967e658da2d593c1d3a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 30 Jun 2020 11:34:32 -0400 Subject: [PATCH] feat: #8450, next/prev link tags on /unread /recent --- src/controllers/helpers.js | 13 +++++++++++++ src/controllers/recent.js | 1 + src/controllers/tags.js | 2 ++ src/controllers/unread.js | 1 + src/pagination.js | 4 ++-- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index 1d3a5ff424..41108267d6 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -53,6 +53,19 @@ helpers.buildQueryString = function (cid, filter, term) { return Object.keys(qs).length ? '?' + querystring.stringify(qs) : ''; }; +helpers.addLinkTags = function (params) { + params.res.locals.linkTags = params.res.locals.linkTags || []; + params.res.locals.linkTags.push({ + rel: 'canonical', + href: nconf.get('url') + '/' + params.url, + }); + + params.tags.forEach(function (rel) { + rel.href = nconf.get('url') + '/' + params.url + rel.href; + params.res.locals.linkTags.push(rel); + }); +}; + helpers.buildFilters = function (url, filter, query) { return [{ name: '[[unread:all-topics]]', diff --git a/src/controllers/recent.js b/src/controllers/recent.js index 13ee9b956c..8e7d6769aa 100644 --- a/src/controllers/recent.js +++ b/src/controllers/recent.js @@ -78,6 +78,7 @@ recentController.getData = async function (req, url, sort) { var pageCount = Math.max(1, Math.ceil(data.topicCount / settings.topicsPerPage)); data.pagination = pagination.create(page, pageCount, req.query); + helpers.addLinkTags({ url: url, res: req.res, tags: data.pagination.rel }); if (req.originalUrl.startsWith(nconf.get('relative_path') + '/api/' + url) || req.originalUrl.startsWith(nconf.get('relative_path') + '/' + url)) { data.title = '[[pages:' + url + ']]'; diff --git a/src/controllers/tags.js b/src/controllers/tags.js index da9c8122b9..b73b6842b6 100644 --- a/src/controllers/tags.js +++ b/src/controllers/tags.js @@ -49,6 +49,8 @@ tagsController.getTag = async function (req, res) { const pageCount = Math.max(1, Math.ceil(topicCount / settings.topicsPerPage)); templateData.pagination = pagination.create(page, pageCount); + helpers.addLinkTags({ url: 'tags/' + tag, res: req.res, tags: templateData.pagination.rel }); + templateData.rssFeedUrl = nconf.get('relative_path') + '/tags/' + tag + '.rss'; res.render('tag', templateData); }; diff --git a/src/controllers/unread.js b/src/controllers/unread.js index a5c2ab053d..b11a147058 100644 --- a/src/controllers/unread.js +++ b/src/controllers/unread.js @@ -42,6 +42,7 @@ unreadController.get = async function (req, res, next) { data.title = meta.config.homePageTitle || '[[pages:home]]'; data.pageCount = Math.max(1, Math.ceil(data.topicCount / userSettings.topicsPerPage)); data.pagination = pagination.create(page, data.pageCount, req.query); + helpers.addLinkTags({ url: 'unread', res: req.res, tags: data.pagination.rel }); if (userSettings.usePagination && (page < 1 || page > data.pageCount)) { req.query.page = Math.max(1, Math.min(data.pageCount, page)); diff --git a/src/pagination.js b/src/pagination.js index 8a6d0bed70..52d3de7511 100644 --- a/src/pagination.js +++ b/src/pagination.js @@ -69,14 +69,14 @@ pagination.create = function (currentPage, pageCount, queryObj) { if (currentPage < pageCount) { data.rel.push({ rel: 'next', - href: '?page=' + next, + href: '?' + qs.stringify({ ...queryObj, page: next }), }); } if (currentPage > 1) { data.rel.push({ rel: 'prev', - href: '?page=' + previous, + href: '?' + qs.stringify({ ...queryObj, page: previous }), }); } return data;