diff --git a/public/src/modules/handleBack.js b/public/src/modules/handleBack.js index 94e7125f52..f5c9f61848 100644 --- a/public/src/modules/handleBack.js +++ b/public/src/modules/handleBack.js @@ -50,10 +50,10 @@ define('handleBack', [ var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage); if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) { pagination.loadPage(page, function () { - handleBack.scrollToTopic(bookmarkIndex, clickedIndex, 0); + handleBack.scrollToTopic(bookmarkIndex, clickedIndex); }); } else { - handleBack.scrollToTopic(bookmarkIndex, clickedIndex, 0); + handleBack.scrollToTopic(bookmarkIndex, clickedIndex); } } else { if (bookmarkIndex === 0) { @@ -63,9 +63,7 @@ define('handleBack', [ $('[component="category"]').empty(); loadTopicsMethod(Math.max(0, bookmarkIndex - 1) + 1, function () { - $(window).one('action:topics.loaded', function () { - handleBack.scrollToTopic(bookmarkIndex, clickedIndex, 0); - }); + handleBack.scrollToTopic(bookmarkIndex, clickedIndex); }); } } @@ -82,24 +80,17 @@ define('handleBack', [ } }; - handleBack.scrollToTopic = function (bookmarkIndex, clickedIndex, duration, offset) { + handleBack.scrollToTopic = function (bookmarkIndex, clickedIndex) { if (!utils.isNumber(bookmarkIndex)) { return; } - if (!offset) { - offset = 0; - } - var scrollTo = components.get('category/topic', 'index', bookmarkIndex); if (scrollTo.length) { - $('html, body').animate({ - scrollTop: (scrollTo.offset().top - offset) + 'px', - }, duration !== undefined ? duration : 400, function () { - handleBack.highlightTopic(clickedIndex); - navigator.update(); - }); + $(window).scrollTop(scrollTo.offset().top); + handleBack.highlightTopic(clickedIndex); + navigator.update(); } }; diff --git a/public/src/modules/topicList.js b/public/src/modules/topicList.js index 689d3c573c..4c66636422 100644 --- a/public/src/modules/topicList.js +++ b/public/src/modules/topicList.js @@ -18,12 +18,11 @@ define('topicList', ['forum/infinitescroll', 'handleBack', 'topicSelect'], funct $(window).on('action:ajaxify.start', function () { TopicList.removeListeners(); - loadTopicsCallback = null; }); TopicList.init = function (template, cb) { templateName = template; - loadTopicsCallback = cb; + loadTopicsCallback = cb || loadTopicsAfter; TopicList.watchForNewPosts(); @@ -33,8 +32,13 @@ define('topicList', ['forum/infinitescroll', 'handleBack', 'topicSelect'], funct infinitescroll.init(TopicList.loadMoreTopics); } - handleBack.init(function (after, cb) { - loadTopicsAfter(after, 1, cb); + handleBack.init(function (after, handleBackCallback) { + loadTopicsCallback(after, 1, function (data, loadCallback) { + TopicList.onTopicsLoaded(templateName, data.topics, ajaxify.data.showSelect, 1, function () { + handleBackCallback(); + loadCallback(); + }); + }); }); if ($('body').height() <= $(window).height() && $('[component="category"]').children().length >= 20) { @@ -202,14 +206,8 @@ define('topicList', ['forum/infinitescroll', 'handleBack', 'topicSelect'], funct return; } - var loadFn = loadTopicsCallback || loadTopicsAfter; - loadFn(after, direction, function (data, done) { - if (data.topics && data.topics.length) { - TopicList.onTopicsLoaded(templateName, data.topics, ajaxify.data.showSelect, direction, done); - } else { - done(); - $('#load-more-btn').hide(); - } + loadTopicsCallback(after, direction, function (data, done) { + TopicList.onTopicsLoaded(templateName, data.topics, ajaxify.data.showSelect, direction, done); }); }; @@ -229,12 +227,21 @@ define('topicList', ['forum/infinitescroll', 'handleBack', 'topicSelect'], funct }, callback); } - TopicList.onTopicsLoaded = function (templateName, topics, showSelect, direction, callback) { - topics = topics.filter(function (topic) { + function filterTopicsOnDom(topics) { + return topics.filter(function (topic) { return !$('[component="category/topic"][data-tid="' + topic.tid + '"]').length; }); + } + + TopicList.onTopicsLoaded = function (templateName, topics, showSelect, direction, callback) { + if (!topics || !topics.length) { + $('#load-more-btn').hide(); + return callback(); + } + topics = filterTopicsOnDom(topics); if (!topics.length) { + $('#load-more-btn').hide(); return callback(); }