From e009ce5609a0c1901e8785986d9d02ecc9ab6272 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Fri, 17 Feb 2017 16:46:30 +0300 Subject: [PATCH] closes #5443 --- package.json | 2 +- public/src/client/category.js | 23 ++++++++++++++++------- public/src/modules/navigator.js | 16 +++++++--------- src/controllers/category.js | 2 +- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index e10b8ec9b6..e5907c0378 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "nodebb-plugin-spam-be-gone": "0.4.10", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "3.0.15", - "nodebb-theme-persona": "4.2.3", + "nodebb-theme-persona": "4.2.4", "nodebb-theme-vanilla": "5.2.0", "nodebb-widget-essentials": "2.0.13", "nodemailer": "2.6.4", diff --git a/public/src/client/category.js b/public/src/client/category.js index 24b0d274f6..d0af1d21b2 100644 --- a/public/src/client/category.js +++ b/public/src/client/category.js @@ -58,12 +58,25 @@ define('forum/category', [ }); }); + handleScrollToTopicIndex(); + handleIgnoreWatch(cid); $(window).trigger('action:topics.loaded', {topics: ajaxify.data.topics}); $(window).trigger('action:category.loaded', {cid: ajaxify.data.cid}); }; + function handleScrollToTopicIndex() { + var parts = window.location.pathname.split('/'); + var topicIndex = parts[parts.length - 1]; + if (topicIndex && utils.isNumber(topicIndex)) { + topicIndex = Math.max(0, parseInt(topicIndex, 10) - 1); + if (topicIndex && window.location.search.indexOf('page=') === -1) { + navigator.scrollToElement($('[component="category/topic"][data-index="' + topicIndex + '"]'), true, 0); + } + } + } + function handleIgnoreWatch(cid) { $('[component="category/watching"], [component="category/ignoring"]').on('click', function () { var $this = $(this); @@ -104,14 +117,10 @@ define('forum/category', [ }; $(window).on('action:ajaxify.contentLoaded', function (ev, data) { - if (ajaxify.data.template.category) { - var cid = ajaxify.data.cid; - if (!cid) { - return; - } + if (ajaxify.data.template.category && ajaxify.data.cid) { - var bookmarkIndex = localStorage.getItem('category:' + cid + ':bookmark'); - var clickedIndex = localStorage.getItem('category:' + cid + ':bookmark:clicked'); + var bookmarkIndex = localStorage.getItem('category:' + ajaxify.data.cid + ':bookmark'); + var clickedIndex = localStorage.getItem('category:' + ajaxify.data.cid + ':bookmark:clicked'); bookmarkIndex = Math.max(0, parseInt(bookmarkIndex, 10) || 0); clickedIndex = Math.max(0, parseInt(clickedIndex, 10) || 0); diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index c6ef158221..d7ecccf965 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -238,14 +238,17 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co navigator.scrollToPostIndex = function (postIndex, highlight, duration) { var scrollTo = components.get('post', 'index', postIndex); - var postHeight = scrollTo.height(); - var viewportHeight = $(window).height(); - var navbarHeight = components.get('navbar').height(); + navigator.scrollToElement(scrollTo, highlight, duration); + }; + navigator.scrollToElement = function(scrollTo, highlight, duration) { if (!scrollTo.length) { navigator.scrollActive = false; return; } + var postHeight = scrollTo.height(); + var viewportHeight = $(window).height(); + var navbarHeight = components.get('navbar').height(); // Temporarily disable navigator update on scroll $(window).off('scroll', navigator.update); @@ -290,13 +293,8 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co } } - if (components.get('topic').length) { - animateScroll(); - } else { - navigator.scrollActive = false; - } + animateScroll(); }; - return navigator; }); diff --git a/src/controllers/category.js b/src/controllers/category.js index bb9efe1cb5..3570f279ee 100644 --- a/src/controllers/category.js +++ b/src/controllers/category.js @@ -69,7 +69,7 @@ categoryController.get = function (req, res, callback) { } if (!settings.usePagination) { - topicIndex = Math.max(topicIndex - (settings.topicsPerPage - 1), 0); + topicIndex = Math.max(0, topicIndex - (Math.ceil(settings.topicsPerPage / 2) - 1)); } else if (!req.query.page) { var index = Math.max(parseInt((topicIndex || 0), 10), 0); currentPage = Math.ceil((index + 1) / settings.topicsPerPage);