diff --git a/public/src/forum/category.js b/public/src/forum/category.js index aa6b25dd79..b0dff6f486 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -52,24 +52,10 @@ define(['composer', 'forum/pagination'], function(composer, pagination) { } }); } else { - pagination.init(templates.get('currentPage'), templates.get('pageCount'), loadPage); + pagination.init(templates.get('currentPage'), templates.get('pageCount')); } } - function loadPage(page, callback) { - socket.emit('categories.loadPage', {cid: templates.get('category_id'), page: page}, function(err, data) { - if(err) { - return callback(err); - } - - if (data && data.topics && data.topics.length) { - Category.onTopicsLoaded(data.topics); - } - - callback(null); - }); - } - Category.onNewTopic = function(data) { var html = templates.prepare(templates['category'].blocks['topics']).parse({ topics: [data] diff --git a/public/src/forum/pagination.js b/public/src/forum/pagination.js index d7e9abc965..7c21a3090d 100644 --- a/public/src/forum/pagination.js +++ b/public/src/forum/pagination.js @@ -5,12 +5,10 @@ define(function() { pagination.currentPage = 0; pagination.pageCount = 0; - pagination.loadFunction = null; - pagination.init = function(currentPage, pageCount, loadFunction) { + pagination.init = function(currentPage, pageCount) { pagination.currentPage = parseInt(currentPage, 10); pagination.pageCount = parseInt(pageCount, 10); - pagination.loadFunction = loadFunction; updatePageLinks(); @@ -48,17 +46,9 @@ define(function() { return; } - pagination.loadFunction(page, function(err) { - if(err) { - return app.alertError(err.message); - } - - pagination.currentPage = parseInt(page, 10); - updatePageLinks(); - }); + ajaxify.go(window.location.pathname.slice(1) + '?page=' + page); } - function updatePageLinks() { if(pagination.pageCount === 0) { $('.pagination').addClass('hide'); @@ -79,6 +69,11 @@ define(function() { $('.pagination .page').removeClass('active'); $('.pagination .page[data-page="' + pagination.currentPage + '"]').addClass('active'); + $('.pagination .page').each(function(index, element) { + var li = $(this); + var page = li.attr('data-page'); + li.find('a').attr('href', window.location.pathname + '?page=' + page); + }); } return pagination; diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index 60ab01ce92..3976687684 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -4,8 +4,8 @@ define(['composer', 'forum/pagination'], function(composer, pagination) { pagination; function showBottomPostBar() { - if($('#post-container .post-row').length > 1) { - $('.topic-main-buttons').removeClass('hide').parent().removeClass('hide'); + if($('#post-container .post-row').length > 1 || !$('#post-container li[data-index="0"]').length) { + $('.bottom-post-bar').removeClass('hide'); } } @@ -328,7 +328,7 @@ define(['composer', 'forum/pagination'], function(composer, pagination) { var bookmark = localStorage.getItem('topic:' + tid + ':bookmark'); - if(bookmark && !config.usePagination) { + if(bookmark) { Topic.scrollToPost(parseInt(bookmark, 10)); } @@ -358,65 +358,10 @@ define(['composer', 'forum/pagination'], function(composer, pagination) { } else { $('.pagination-block').addClass('hide'); - pagination.init(currentPage, pageCount, loadPage); + pagination.init(currentPage, pageCount); } } - function loadPage(page, callback) { - if(page === 1) { - ajaxify.go('topic/' + tid ); - return; - } - - socket.emit('topics.loadPage', {tid: tid, page: page}, function(err, data) { - if(err) { - return callback(err); - } - - if (data && data.posts && data.posts.length) { - createPagePosts(data, function() { - fixDeleteStateForPosts(); - }); - } - - callback(null); - }); - } - - function onNewPostPagination(data) { - var posts = data.posts; - socket.emit('topics.getPageCount', tid, function(err, newPageCount) { - - pagination.recreatePaginationLinks('topic', newPageCount); - - if(pagination.currentPage === pagination.newPageCount) { - createNewPosts(data); - } else if(data.posts && data.posts.length && parseInt(data.posts[0].uid, 10) === parseInt(app.uid, 10)) { - pagination.loadPage(pagination.pageCount); - } - }); - } - - function createPagePosts(data, callback) { - if(!data || (data.posts && !data.posts.length)) { - return; - } - - parseAndTranslatePosts(data.posts, function(translatedHTML) { - var translated = $(translatedHTML); - - $('#post-container').fadeOut(200, function() { - - $('#post-container').empty().append(translated).fadeIn('slow'); - - onNewPostsLoaded(data.posts); - - callback(); - }); - }); - } - - $('.topic').on('click', '.post_reply', function() { var selectionText = '', selection = window.getSelection() || document.getSelection(); @@ -1071,34 +1016,62 @@ define(['composer', 'forum/pagination'], function(composer, pagination) { return; } - var container = $(window), + if(config.usePagination) { + socket.emit('posts.getPidPage', pid, function(err, page) { + if(parseInt(page, 10) !== pagination.currentPage) { + pagination.loadPage(page); + } else { + scrollToPid(pid); + } + }); + } else { + scrollToPid(pid); + } + + function scrollToPid(pid) { + var container = $(window), scrollTo = $('#post_anchor_' + pid), tid = $('#post-container').attr('data-tid'); - function animateScroll() { - $('window,html').animate({ - scrollTop: scrollTo.offset().top + container.scrollTop() - $('#header-menu').height() - }, 400); + function animateScroll() { + $('window,html').animate({ + scrollTop: scrollTo.offset().top + container.scrollTop() - $('#header-menu').height() + }, 400); + } + + if (!scrollTo.length && tid) { + + var intervalID = setInterval(function () { + loadMorePosts(tid, function (posts) { + scrollTo = $('#post_anchor_' + pid); + + if (tid && scrollTo.length) { + animateScroll(); + } + + if (!posts.length || scrollTo.length) + clearInterval(intervalID); + }); + }, 100); + + } else if (tid) { + animateScroll(); + } } + } - if (!scrollTo.length && tid) { + function onNewPostPagination(data) { + var posts = data.posts; + socket.emit('topics.getPageCount', tid, function(err, newPageCount) { - var intervalID = setInterval(function () { - loadMorePosts(tid, function (posts) { - scrollTo = $('#post_anchor_' + pid); + pagination.recreatePaginationLinks('topic', newPageCount); - if (tid && scrollTo.length) { - animateScroll(); - } - - if (!posts.length || scrollTo.length) - clearInterval(intervalID); - }); - }, 100); - - } else if (tid) { - animateScroll(); - } + if(pagination.currentPage === pagination.pageCount) { + createNewPosts(data); + } else if(data.posts && data.posts.length && parseInt(data.posts[0].uid, 10) === parseInt(app.uid, 10)) { + pagination.loadPage(pagination.pageCount); + } + }); } function createNewPosts(data, infiniteLoaded) { diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl index 36b3a63076..bd5b7e82b7 100644 --- a/public/templates/topic.tpl +++ b/public/templates/topic.tpl @@ -143,7 +143,7 @@ -