From dd61bdb9c6b5f99611ee01f73c24cbade3687a2c Mon Sep 17 00:00:00 2001 From: barisusakli <barisusakli@gmail.com> Date: Wed, 22 Apr 2015 13:47:41 -0400 Subject: [PATCH] closes #3038 --- public/src/client/account/favourites.js | 6 +++-- public/src/client/account/posts.js | 6 +++-- public/src/client/account/topics.js | 6 +++-- public/src/client/account/watched.js | 6 +++-- public/src/client/category.js | 3 +-- public/src/client/recent.js | 2 +- public/src/client/tag.js | 2 +- src/controllers/accounts.js | 36 +++++++++++++++++++++---- src/pagination.js | 2 +- 9 files changed, 51 insertions(+), 18 deletions(-) diff --git a/public/src/client/account/favourites.js b/public/src/client/account/favourites.js index 1e6e77e20b..30a6d29a7e 100644 --- a/public/src/client/account/favourites.js +++ b/public/src/client/account/favourites.js @@ -10,7 +10,9 @@ define('forum/account/favourites', ['forum/account/header', 'forum/infinitescrol $('.user-favourite-posts img').addClass('img-responsive'); - infinitescroll.init(loadMore); + if (!config.usePagination) { + infinitescroll.init(loadMore); + } }; function loadMore(direction) { @@ -24,10 +26,10 @@ define('forum/account/favourites', ['forum/account/header', 'forum/infinitescrol }, function(data, done) { if (data.posts && data.posts.length) { onPostsLoaded(data.posts, done); - $('.user-favourite-posts').attr('data-nextstart', data.nextStart); } else { done(); } + $('.user-favourite-posts').attr('data-nextstart', data.nextStart); }); } diff --git a/public/src/client/account/posts.js b/public/src/client/account/posts.js index c4759b9016..9b04cdc67a 100644 --- a/public/src/client/account/posts.js +++ b/public/src/client/account/posts.js @@ -10,7 +10,9 @@ define('forum/account/posts', ['forum/account/header', 'forum/infinitescroll'], $('.user-favourite-posts img').addClass('img-responsive'); - infinitescroll.init(loadMore); + if (!config.usePagination) { + infinitescroll.init(loadMore); + } }; function loadMore(direction) { @@ -24,10 +26,10 @@ define('forum/account/posts', ['forum/account/header', 'forum/infinitescroll'], }, function(data, done) { if (data.posts && data.posts.length) { onPostsLoaded(data.posts, done); - $('.user-favourite-posts').attr('data-nextstart', data.nextStart); } else { done(); } + $('.user-favourite-posts').attr('data-nextstart', data.nextStart); }); } diff --git a/public/src/client/account/topics.js b/public/src/client/account/topics.js index c6c93f4262..3242f0395e 100644 --- a/public/src/client/account/topics.js +++ b/public/src/client/account/topics.js @@ -8,7 +8,9 @@ define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'], AccountTopics.init = function() { header.init(); - infinitescroll.init(loadMore); + if (!config.usePagination) { + infinitescroll.init(loadMore); + } }; function loadMore(direction) { @@ -23,10 +25,10 @@ define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'], if (data.topics && data.topics.length) { onTopicsLoaded(data.topics, done); - $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } + $('[component="category"]').attr('data-nextstart', data.nextStart); }); } diff --git a/public/src/client/account/watched.js b/public/src/client/account/watched.js index 08feb89344..b9f7fcc5f7 100644 --- a/public/src/client/account/watched.js +++ b/public/src/client/account/watched.js @@ -7,7 +7,9 @@ define('forum/account/watched', ['forum/account/header', 'forum/infinitescroll'] AccountWatched.init = function() { header.init(); - infinitescroll.init(loadMore); + if (!config.usePagination) { + infinitescroll.init(loadMore); + } }; function loadMore(direction) { @@ -21,10 +23,10 @@ define('forum/account/watched', ['forum/account/header', 'forum/infinitescroll'] }, function(data, done) { if (data.topics && data.topics.length) { onTopicsLoaded(data.topics, done); - $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } + $('[component="category"]').attr('data-nextstart', data.nextStart); }); } diff --git a/public/src/client/category.js b/public/src/client/category.js index 5e64f4fc56..777d3f808a 100644 --- a/public/src/client/category.js +++ b/public/src/client/category.js @@ -342,17 +342,16 @@ define('forum/category', [ after: after, author: utils.params().author }, function (data, done) { - if (data.topics && data.topics.length) { Category.onTopicsLoaded(data, function() { done(); callback(); }); - $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } + $('[component="category"]').attr('data-nextstart', data.nextStart); $(window).trigger('action:categories.loaded'); }); } diff --git a/public/src/client/recent.js b/public/src/client/recent.js index dc4a949c4d..fc55ee9b08 100644 --- a/public/src/client/recent.js +++ b/public/src/client/recent.js @@ -93,10 +93,10 @@ define('forum/recent', ['forum/infinitescroll', 'components'], function(infinite }, function(data, done) { if (data.topics && data.topics.length) { Recent.onTopicsLoaded('recent', data.topics, false, done); - $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); } + $('[component="category"]').attr('data-nextstart', data.nextStart); }); }; diff --git a/public/src/client/tag.js b/public/src/client/tag.js index 7328934e2d..d2e6dd30b7 100644 --- a/public/src/client/tag.js +++ b/public/src/client/tag.js @@ -29,11 +29,11 @@ define('forum/tag', ['forum/recent', 'forum/infinitescroll'], function(recent, i }, function(data, done) { if (data.topics && data.topics.length) { recent.onTopicsLoaded('tag', data.topics, false, done); - $('[component="category"]').attr('data-nextstart', data.nextStart); } else { done(); $('#load-more-btn').hide(); } + $('[component="category"]').attr('data-nextstart', data.nextStart); }); } }; diff --git a/src/controllers/accounts.js b/src/controllers/accounts.js index 536241dba1..71a208ba06 100644 --- a/src/controllers/accounts.js +++ b/src/controllers/accounts.js @@ -255,22 +255,48 @@ accountsController.getGroups = function(req, res, next) { }; function getFromUserSet(tpl, set, method, type, req, res, next) { - accountsController.getBaseUser(req.params.userslug, req.uid, function(err, userData) { + async.parallel({ + settings: function(next) { + user.getSettings(req.uid, next); + }, + userData: function(next) { + accountsController.getBaseUser(req.params.userslug, req.uid, next); + } + }, function(err, results) { if (err) { return next(err); } - + var userData = results.userData; if (!userData) { return helpers.notFound(req, res); } - method('uid:' + userData.uid + ':' + set, req.uid, 0, 19, function(err, data) { + var setName = 'uid:' + userData.uid + ':' + set; + + var page = Math.max(1, parseInt(req.query.page, 10) || 1); + var itemsPerPage = (tpl === 'account/topics' || tpl === 'account/watched') ? results.settings.topicsPerPage : results.settings.postsPerPage; + itemsPerPage = parseInt(itemsPerPage, 10); + + async.parallel({ + count: function(next) { + db.sortedSetCard(setName, next); + }, + data: function(next) { + var start = (page - 1) * itemsPerPage; + var stop = start + itemsPerPage; + method(setName, req.uid, start, stop, next); + } + }, function(err, results) { if (err) { return next(err); } - userData[type] = data[type]; - userData.nextStart = data.nextStart; + userData[type] = results.data[type]; + userData.nextStart = results.data.nextStart; + var pageCount = Math.ceil(results.count / itemsPerPage); + + var pagination = require('../pagination'); + userData.pagination = pagination.create(page, pageCount); res.render(tpl, userData); }); diff --git a/src/pagination.js b/src/pagination.js index 58aac68f8f..58813c391b 100644 --- a/src/pagination.js +++ b/src/pagination.js @@ -13,7 +13,7 @@ pagination.create = function(currentPage, pageCount, queryObj) { pages: [] }; } - + pageCount = parseInt(pageCount, 10); var pagesToShow = [1, 2, pageCount - 1, pageCount]; currentPage = parseInt(currentPage, 10) || 1;