From ddb7896df1f7065ed33edccf8a88903412065f2c Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Sun, 1 Dec 2013 17:42:26 -0500 Subject: [PATCH] fixed post count in paginator and post bar when infinite loader kicked in --- public/src/forum/topic.js | 122 ++++++++++++++++++++------------------ src/websockets.js | 4 ++ 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index e7706df99d..fd77d2084f 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -1,7 +1,7 @@ define(function() { var Topic = {}, - infiniteLoaderActive = false; - + infiniteLoaderActive = false, + pagination; function showBottomPostBar() { if($('#post-container .post-row').length > 1) { @@ -775,74 +775,75 @@ define(function() { - var pagination; - Topic.postCount = templates.get('postcount'); - - function updateHeader() { - if (pagination == null) { - jQuery('.pagination-block i:first').on('click', function() { - app.scrollToTop(); - }); - jQuery('.pagination-block i:last').on('click', function() { - app.scrollToBottom(); - }); - } - pagination = pagination || document.getElementById('pagination'); - - var windowHeight = jQuery(window).height(); - var scrollTop = jQuery(window).scrollTop(); - var scrollBottom = scrollTop + windowHeight; - var progressBar = $('.progress-bar'); - var progressBarContainer = $('.progress-container'); - pagination.parentNode.style.display = 'block'; - progressBarContainer.css('display', ''); + Topic.postCount = templates.get('postcount'); - if (scrollTop < 50 && Topic.postCount > 1) { - localStorage.removeItem("topic:" + tid + ":bookmark"); - pagination.innerHTML = '1 out of ' + Topic.postCount; - progressBar.width(0); - return; - } + window.onscroll = updateHeader; + window.onload = updateHeader; + }; + function updateHeader() { + if (pagination == null) { + jQuery('.pagination-block i:first').on('click', function() { + app.scrollToTop(); + }); + jQuery('.pagination-block i:last').on('click', function() { + app.scrollToBottom(); + }); + } + pagination = pagination || document.getElementById('pagination'); + + var windowHeight = jQuery(window).height(); + var scrollTop = jQuery(window).scrollTop(); + var scrollBottom = scrollTop + windowHeight; + var progressBar = $('.progress-bar'); + var progressBarContainer = $('.progress-container'); + var tid = templates.get('topic_id'); + + pagination.parentNode.style.display = 'block'; + progressBarContainer.css('display', ''); + + if (scrollTop < 50 && Topic.postCount > 1) { + localStorage.removeItem("topic:" + tid + ":bookmark"); + pagination.innerHTML = '1 out of ' + Topic.postCount; + progressBar.width(0); + return; + } - var count = 0, smallestNonNegative = 0; - jQuery('.posts > .post-row:not(".deleted")').each(function() { - count++; - this.postnumber = count; + var count = 0, smallestNonNegative = 0; + jQuery('.posts > .post-row:not(".deleted")').each(function() { + count++; + this.postnumber = count; - var el = jQuery(this); - var elTop = el.offset().top; - var height = Math.floor(el.height()); - var elBottom = elTop + (height < 300 ? height : 300); - var inView = ((elBottom >= scrollTop) && (elTop <= scrollBottom) && (elBottom <= scrollBottom) && (elTop >= scrollTop)); + var el = jQuery(this); + var elTop = el.offset().top; + var height = Math.floor(el.height()); + var elBottom = elTop + (height < 300 ? height : 300); + var inView = ((elBottom >= scrollTop) && (elTop <= scrollBottom) && (elBottom <= scrollBottom) && (elTop >= scrollTop)); - if (inView) { - if(elTop - scrollTop > smallestNonNegative) { - localStorage.setItem("topic:" + tid + ":bookmark", el.attr('data-pid')); - smallestNonNegative = Number.MAX_VALUE; - } - pagination.innerHTML = (this.postnumber-1) + ' out of ' + Topic.postCount; - progressBar.width(((this.postnumber-1) / Topic.postCount * 100) + '%'); + if (inView) { + if(elTop - scrollTop > smallestNonNegative) { + localStorage.setItem("topic:" + tid + ":bookmark", el.attr('data-pid')); + smallestNonNegative = Number.MAX_VALUE; } - }); - setTimeout(function() { - if (scrollTop + windowHeight == jQuery(document).height()) { - pagination.innerHTML = Topic.postCount + ' out of ' + Topic.postCount; - progressBar.width('100%'); - } - }, 100); - } + pagination.innerHTML = (this.postnumber-1) + ' out of ' + Topic.postCount; + progressBar.width(((this.postnumber-1) / Topic.postCount * 100) + '%'); + } + }); - window.onscroll = updateHeader; - window.onload = updateHeader; - }; + setTimeout(function() { + if (scrollTop + windowHeight == jQuery(document).height()) { + pagination.innerHTML = Topic.postCount + ' out of ' + Topic.postCount; + progressBar.width('100%'); + } + }, 100); + } Topic.scrollToPost = function(pid) { if (!pid) { @@ -944,8 +945,13 @@ define(function() { } function updatePostCount() { - Topic.postCount = $('#post-container li[data-pid]:not(.deleted)').length; - $('#topic-post-count').html(Topic.postCount); + socket.emit('api:topics.postcount', templates.get('topic_id'), function(err, postcount) { + if(!err) { + Topic.postCount = postcount; + $('#topic-post-count').html(Topic.postCount); + updateHeader(); + } + }) } function loadMorePosts(tid, callback) { diff --git a/src/websockets.js b/src/websockets.js index bb52393b42..9fdbd43e34 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -403,6 +403,10 @@ module.exports.init = function(io) { }); + socket.on('api:topics.postcount', function(tid, callback) { + topics.getTopicField(tid, 'postcount', callback); + }); + socket.on('api:topics.markAllRead', function(data, callback) { topics.markAllRead(uid, function(err, success) { if (!err && success) {