diff --git a/jquery.twbsPagination.js b/jquery.twbsPagination.js index da31db6..e9c41b5 100644 --- a/jquery.twbsPagination.js +++ b/jquery.twbsPagination.js @@ -141,17 +141,24 @@ getPages: function (currentPage) { var pages = []; - var startPage; - var section = parseInt(currentPage / this.options.visiblePages, 10); - if (currentPage % this.options.visiblePages === 0) { - startPage = (section - 1) * this.options.visiblePages + 1; - } else { - startPage = section * this.options.visiblePages + 1; + var half = Math.floor(this.options.visiblePages / 2); + var start = currentPage - half + 1 - this.options.visiblePages % 2; + var end = currentPage + half; + + // handle boundary case + if (start <= 0) { + start = 1; + end = this.options.visiblePages; + } + if (end > this.options.totalPages) { + start = this.options.totalPages - this.options.visiblePages + 1; + end = this.options.totalPages; } - var endPage = Math.min(this.options.totalPages, (startPage + this.options.visiblePages) - 1); - for (var i = startPage; i <= endPage; i++) { - pages.push(i); + var itPage = start; + while (itPage <= end) { + pages.push(itPage); + itPage++; } return {"currentPage": currentPage, "numeric": pages}; diff --git a/tests/test.js b/tests/test.js index 392f981..43851ec 100644 --- a/tests/test.js +++ b/tests/test.js @@ -2,9 +2,7 @@ var pag1 = $('#pagination'); pag1.twbsPagination({ - totalPages: 30, - startPage: 4, - visiblePages: 5 + totalPages: 30 }); test("Test 'equals' method", function () { @@ -18,16 +16,55 @@ ok(!pag1.twbsPagination('equals', b, real), "Dirty test"); }); - test( "Test 'getPages' method", function() { - pag1.twbsPagination('init', {totalPages: 50, visiblePages: 10}); - var expected1 = {currentPage: 1, numeric: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}; + test( "Test 'getPages' method (EVEN visible pages number)", function() { + var expected1 = {currentPage: 1, numeric: [1, 2, 3, 4, 5]}; deepEqual(pag1.twbsPagination('getPages', 1), expected1); - var expected2 = {currentPage: 10, numeric: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}; - deepEqual(pag1.twbsPagination('getPages', 10), expected2); - var expected3 = {currentPage: 11, numeric: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]}; - deepEqual(pag1.twbsPagination('getPages', 11), expected3); - var expected4 = {currentPage: 45, numeric: [41, 42, 43, 44, 45, 46, 47, 48, 49, 50]}; - deepEqual(pag1.twbsPagination('getPages', 45), expected4); + var expected2 = {currentPage: 2, numeric: [1, 2, 3, 4, 5]}; + deepEqual(pag1.twbsPagination('getPages', 2), expected2); + var expected3 = {currentPage: 3, numeric: [1, 2, 3, 4, 5]}; + deepEqual(pag1.twbsPagination('getPages', 3), expected3); + + var expected4 = {currentPage: 4, numeric: [2, 3, 4, 5, 6]}; + deepEqual(pag1.twbsPagination('getPages', 4), expected4); + var expected5 = {currentPage: 5, numeric: [3, 4, 5, 6, 7]}; + deepEqual(pag1.twbsPagination('getPages', 5), expected5); + var expected20 = {currentPage: 20, numeric: [18, 19, 20, 21, 22]}; + deepEqual(pag1.twbsPagination('getPages', 20), expected20); + + var expected27 = {currentPage: 27, numeric: [25, 26, 27, 28, 29]}; + deepEqual(pag1.twbsPagination('getPages', 27), expected27); + var expected28 = {currentPage: 28, numeric: [26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 28), expected28); + var expected29 = {currentPage: 29, numeric: [26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 29), expected29); + var expected30 = {currentPage: 30, numeric: [26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 30), expected30); + }); + + test( "Test 'getPages' method (ODD visible pages number)", function() { + pag1.twbsPagination('init', {totalPages: 30, visiblePages: 6}); + var expected1 = {currentPage: 1, numeric: [1, 2, 3, 4, 5, 6]}; + deepEqual(pag1.twbsPagination('getPages', 1), expected1); + var expected2 = {currentPage: 2, numeric: [1, 2, 3, 4, 5, 6]}; + deepEqual(pag1.twbsPagination('getPages', 2), expected2); + var expected3 = {currentPage: 3, numeric: [1, 2, 3, 4, 5, 6]}; + deepEqual(pag1.twbsPagination('getPages', 3), expected3); + + var expected4 = {currentPage: 4, numeric: [2, 3, 4, 5, 6, 7]}; + deepEqual(pag1.twbsPagination('getPages', 4), expected4); + var expected5 = {currentPage: 5, numeric: [3, 4, 5, 6, 7, 8]}; + deepEqual(pag1.twbsPagination('getPages', 5), expected5); + var expected20 = {currentPage: 20, numeric: [18, 19, 20, 21, 22, 23]}; + deepEqual(pag1.twbsPagination('getPages', 20), expected20); + + var expected27 = {currentPage: 27, numeric: [25, 26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 27), expected27); + var expected28 = {currentPage: 28, numeric: [25, 26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 28), expected28); + var expected29 = {currentPage: 29, numeric: [25, 26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 29), expected29); + var expected30 = {currentPage: 30, numeric: [25, 26, 27, 28, 29, 30]}; + deepEqual(pag1.twbsPagination('getPages', 30), expected30); }); })(); \ No newline at end of file