From 1afd7ae33263e9102135e63b38232c48325f12f3 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Sat, 25 Jan 2014 21:25:56 -0500 Subject: [PATCH] trim pagination numberS --- public/language/en/global.json | 5 ++++- public/src/forum/pagination.js | 40 +++++++++++++++++++++++++++------- public/templates/category.tpl | 7 ++---- public/templates/topic.tpl | 7 ++---- src/categories.js | 24 +++++--------------- src/topics.js | 24 +++++--------------- 6 files changed, 50 insertions(+), 57 deletions(-) diff --git a/public/language/en/global.json b/public/language/en/global.json index 6c41d49b2a..99fd8c74dc 100644 --- a/public/language/en/global.json +++ b/public/language/en/global.json @@ -33,5 +33,8 @@ "motd.get": "Get NodeBB", "motd.fork": "Fork", "motd.like": "Like", - "motd.follow": "Follow" + "motd.follow": "Follow", + + "previouspage": "Previous Page", + "nextpage": "Next Page" } diff --git a/public/src/forum/pagination.js b/public/src/forum/pagination.js index ca0d0513c7..3915d40c1e 100644 --- a/public/src/forum/pagination.js +++ b/public/src/forum/pagination.js @@ -10,7 +10,7 @@ define(function() { pagination.currentPage = parseInt(currentPage, 10); pagination.pageCount = parseInt(pageCount, 10); - updatePageLinks(); + pagination.recreatePaginationLinks(pageCount); $('.pagination').on('click', '.previous', function() { pagination.loadPage(pagination.currentPage - 1); @@ -25,18 +25,42 @@ define(function() { }); } - pagination.recreatePaginationLinks = function(template, newPageCount) { + pagination.recreatePaginationLinks = function(newPageCount) { pagination.pageCount = parseInt(newPageCount, 10); - var pages = []; - for(var i=1; i<=pagination.pageCount; ++i) { - pages.push({pageNumber: i}); + var pagesToShow = [1, pagination.pageCount]; + + var previous = pagination.currentPage - 1; + var next = pagination.currentPage + 1; + + if(previous > 1 && pagesToShow.indexOf(previous) === -1) { + pagesToShow.push(previous); + } + + if(next < pagination.pageCount && pagesToShow.indexOf(next) === -1) { + pagesToShow.push(next); + } + + if(pagesToShow.indexOf(pagination.currentPage) === -1) { + pagesToShow.push(pagination.currentPage); + } + + pagesToShow.sort(function(a, b) { + return parseInt(a, 10) - parseInt(b, 10); + }); + + var html = ''; + for(var i=0; i 0) { + if (pagesToShow[i] - 1 !== pagesToShow[i-1]) { + html += '
  • |
  • '; + } + } + html += '
  • ' + pagesToShow[i] + '
  • '; } - var html = templates.prepare(templates[template].blocks['pages']).parse({pages:pages}); - html = $(html); $('.pagination li.page').remove(); - html.insertAfter($('.pagination li.previous')); + $(html).insertAfter($('.pagination li.previous')); updatePageLinks(); } diff --git a/public/templates/category.tpl b/public/templates/category.tpl index 81727bd042..5b578dc604 100644 --- a/public/templates/category.tpl +++ b/public/templates/category.tpl @@ -87,11 +87,8 @@ diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl index bd5b7e82b7..39688723d8 100644 --- a/public/templates/topic.tpl +++ b/public/templates/topic.tpl @@ -206,11 +206,8 @@ diff --git a/src/categories.js b/src/categories.js index 5131f8e57a..a2aee70091 100644 --- a/src/categories.js +++ b/src/categories.js @@ -66,15 +66,15 @@ var db = require('./database.js'), }); } - function getPages(next) { - Categories.getPages(category_id, next); + function getPageCount(next) { + Categories.getPageCount(category_id, next); } - async.parallel([getTopicIds, getActiveUsers, getSidebars, getPages], function(err, results) { + async.parallel([getTopicIds, getActiveUsers, getSidebars, getPageCount], function(err, results) { var tids = results[0], active_users = results[1], sidebars = results[2], - pages = results[3]; + pageCount = results[3]; var category = { 'category_name': categoryData.name, @@ -88,8 +88,7 @@ var db = require('./database.js'), 'category_id': category_id, 'active_users': [], 'topics': [], - 'pages': pages, - 'pageCount': pages.length, + 'pageCount': pageCount, 'disableSocialButtons': meta.config.disableSocialButtons !== undefined ? parseInt(meta.config.disableSocialButtons, 10) !== 0 : false, 'sidebars': sidebars }; @@ -145,19 +144,6 @@ var db = require('./database.js'), db.getSortedSetRevRange('categories:' + cid + ':tid', start, stop, callback); }; - Categories.getPages = function(cid, callback) { - Categories.getPageCount(cid, function(err, pageCount) { - if(err) { - return callback(err); - } - var pages = []; - for(var i=1; i<=pageCount; ++i) { - pages.push({pageNumber: i}); - } - callback(null, pages); - }); - }; - Categories.getPageCount = function(cid, callback) { db.sortedSetCard('categories:' + cid + ':tid', function(err, topicCount) { if(err) { diff --git a/src/topics.js b/src/topics.js index ab32d10267..d7848ce466 100644 --- a/src/topics.js +++ b/src/topics.js @@ -392,19 +392,6 @@ var async = require('async'), }); } - Topics.getPages = function(tid, callback) { - Topics.getPageCount(tid, function(err, pageCount) { - if(err) { - return callback(err); - } - var pages = []; - for(var i=1; i<=pageCount; ++i) { - pages.push({pageNumber: i}); - } - callback(null, pages); - }); - } - Topics.getPageCount = function(tid, callback) { db.sortedSetCard('tid:' + tid + ':posts', function(err, postCount) { if(err) { @@ -794,11 +781,11 @@ var async = require('async'), Topics.getCategoryData(tid, next); } - function getPages(next) { - Topics.getPages(tid, next); + function getPageCount(next) { + Topics.getPageCount(tid, next); } - async.parallel([getTopicData, getTopicPosts, getPrivileges, getCategoryData, getPages], function(err, results) { + async.parallel([getTopicData, getTopicPosts, getPrivileges, getCategoryData, getPageCount], function(err, results) { if (err) { winston.error('[Topics.getTopicWithPosts] Could not retrieve topic data: ', err.message); return callback(err, null); @@ -808,7 +795,7 @@ var async = require('async'), topicPosts = results[1], privileges = results[2], categoryData = results[3], - pages = results[4]; + pageCount = results[4]; var postsPerPage = parseInt(meta.config.postsPerPage, 10); postsPerPage = postsPerPage ? postsPerPage : 20; @@ -824,8 +811,7 @@ var async = require('async'), 'slug': topicData.slug, 'postcount': topicData.postcount, 'viewcount': topicData.viewcount, - 'pages': pages, - 'pageCount': pages.length, + 'pageCount': pageCount, 'unreplied': parseInt(topicData.postcount, 10) > 1, 'topic_id': tid, 'expose_tools': privileges.editable ? 1 : 0,