From 2b8491c5bc34e940b824f6a2a833358416e676cd Mon Sep 17 00:00:00 2001 From: Pavel Ivanov Date: Wed, 4 Nov 2015 21:55:47 +0200 Subject: [PATCH] Improved tests and fixed destroy call before initialization #54 --- jquery.twbsPagination.js | 4 +- jquery.twbsPagination.min.js | 2 +- tests/run-test-jquery-1.8.1.html | 21 +++++ ...-test.html => run-test-jquery-latest.html} | 2 +- tests/test.js | 94 +++++++++++++++++-- 5 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 tests/run-test-jquery-1.8.1.html rename tests/{run-test.html => run-test-jquery-latest.html} (86%) diff --git a/jquery.twbsPagination.js b/jquery.twbsPagination.js index 6ebcaeb..4837d13 100644 --- a/jquery.twbsPagination.js +++ b/jquery.twbsPagination.js @@ -238,7 +238,7 @@ var $this = $(this); var data = $this.data('twbs-pagination'); - var options = typeof option === 'object' && option; + var options = typeof option === 'object' ? option : {}; if (!data) $this.data('twbs-pagination', (data = new TwbsPagination(this, options) )); if (typeof option === 'string') methodReturn = data[ option ].apply(data, args); @@ -247,7 +247,7 @@ }; $.fn.twbsPagination.defaults = { - totalPages: 0, + totalPages: 1, startPage: 1, visiblePages: 5, initiateStartPageClick: true, diff --git a/jquery.twbsPagination.min.js b/jquery.twbsPagination.min.js index 582512f..185f173 100644 --- a/jquery.twbsPagination.min.js +++ b/jquery.twbsPagination.min.js @@ -6,4 +6,4 @@ * Released under Apache 2.0 license * http://apache.org/licenses/LICENSE-2.0.html */ -!function(a,b,c,d){"use strict";var e=a.fn.twbsPagination,f=function(c,d){if(this.$element=a(c),this.options=a.extend({},a.fn.twbsPagination.defaults,d),this.options.startPage<1||this.options.startPage>this.options.totalPages)throw new Error("Start page option is incorrect");if(this.options.totalPages=parseInt(this.options.totalPages),isNaN(this.options.totalPages))throw new Error("Total pages option is not correct!");if(this.options.visiblePages=parseInt(this.options.visiblePages),isNaN(this.options.visiblePages))throw new Error("Visible pages option is not correct!");if(this.options.totalPages"),this.$listContainer.addClass(this.options.paginationClass),"UL"!==g&&this.$element.append(this.$listContainer),this.render(this.getPages(this.options.startPage)),this.setupEvents(),this.options.initiateStartPageClick&&this.$element.trigger("page",this.options.startPage),this};f.prototype={constructor:f,destroy:function(){return this.$element.empty(),this.$element.removeData("twbs-pagination"),this.$element.off("page"),this},show:function(a){if(1>a||a>this.options.totalPages)throw new Error("Page is incorrect.");return this.render(this.getPages(a)),this.setupEvents(),this.$element.trigger("page",a),this},buildListItems:function(a){var b=[];if(this.options.first&&b.push(this.buildItem("first",1)),this.options.prev){var c=a.currentPage>1?a.currentPage-1:this.options.loop?this.options.totalPages:1;b.push(this.buildItem("prev",c))}for(var d=0;d"),e=a(""),f=null;return f=this.options[b]?this.makeText(this.options[b],c):c,d.addClass(this.options[b+"Class"]),d.data("page",c),d.data("page-type",b),d.append(e.attr("href",this.makeHref(c)).html(f)),d},getPages:function(a){var b=[],c=Math.floor(this.options.visiblePages/2),d=a-c+1-this.options.visiblePages%2,e=a+c;0>=d&&(d=1,e=this.options.visiblePages),e>this.options.totalPages&&(d=this.options.totalPages-this.options.visiblePages+1,e=this.options.totalPages);for(var f=d;e>=f;)b.push(f),f++;return{currentPage:a,numeric:b}},render:function(b){var c=this;this.$listContainer.children().remove(),this.$listContainer.append(this.buildListItems(b)),this.$listContainer.children().each(function(){var d=a(this),e=d.data("page-type");switch(e){case"page":d.data("page")===b.currentPage&&d.addClass(c.options.activeClass);break;case"first":d.toggleClass(c.options.disabledClass,1===b.currentPage);break;case"last":d.toggleClass(c.options.disabledClass,b.currentPage===c.options.totalPages);break;case"prev":d.toggleClass(c.options.disabledClass,!c.options.loop&&1===b.currentPage);break;case"next":d.toggleClass(c.options.disabledClass,!c.options.loop&&b.currentPage===c.options.totalPages)}})},setupEvents:function(){var b=this;this.$listContainer.find("li").each(function(){var c=a(this);return c.off(),c.hasClass(b.options.disabledClass)||c.hasClass(b.options.activeClass)?void c.on("click",!1):void c.click(function(a){!b.options.href&&a.preventDefault(),b.show(parseInt(c.data("page")))})})},makeHref:function(a){return this.options.href?this.makeText(this.options.href,a):"#"},makeText:function(a,b){return a.replace(this.options.pageVariable,b).replace(this.options.totalPagesVariable,this.options.totalPages)}},a.fn.twbsPagination=function(b){var c,e=Array.prototype.slice.call(arguments,1),g=a(this),h=g.data("twbs-pagination"),i="object"==typeof b&&b;return h||g.data("twbs-pagination",h=new f(this,i)),"string"==typeof b&&(c=h[b].apply(h,e)),c===d?g:c},a.fn.twbsPagination.defaults={totalPages:0,startPage:1,visiblePages:5,initiateStartPageClick:!0,href:!1,pageVariable:"{{page}}",totalPagesVariable:"{{total_pages}}",page:"{{page}}",first:"First",prev:"Previous",next:"Next",last:"Last",loop:!1,onPageClick:null,paginationClass:"pagination",nextClass:"next",prevClass:"prev",lastClass:"last",firstClass:"first",pageClass:"page",activeClass:"active",disabledClass:"disabled"},a.fn.twbsPagination.Constructor=f,a.fn.twbsPagination.noConflict=function(){return a.fn.twbsPagination=e,this}}(window.jQuery,window,document); \ No newline at end of file +!function(a,b,c,d){"use strict";var e=a.fn.twbsPagination,f=function(c,d){if(this.$element=a(c),this.options=a.extend({},a.fn.twbsPagination.defaults,d),this.options.startPage<1||this.options.startPage>this.options.totalPages)throw new Error("Start page option is incorrect");if(this.options.totalPages=parseInt(this.options.totalPages),isNaN(this.options.totalPages))throw new Error("Total pages option is not correct!");if(this.options.visiblePages=parseInt(this.options.visiblePages),isNaN(this.options.visiblePages))throw new Error("Visible pages option is not correct!");if(this.options.totalPages"),this.$listContainer.addClass(this.options.paginationClass),"UL"!==g&&this.$element.append(this.$listContainer),this.render(this.getPages(this.options.startPage)),this.setupEvents(),this.options.initiateStartPageClick&&this.$element.trigger("page",this.options.startPage),this};f.prototype={constructor:f,destroy:function(){return this.$element.empty(),this.$element.removeData("twbs-pagination"),this.$element.off("page"),this},show:function(a){if(1>a||a>this.options.totalPages)throw new Error("Page is incorrect.");return this.render(this.getPages(a)),this.setupEvents(),this.$element.trigger("page",a),this},buildListItems:function(a){var b=[];if(this.options.first&&b.push(this.buildItem("first",1)),this.options.prev){var c=a.currentPage>1?a.currentPage-1:this.options.loop?this.options.totalPages:1;b.push(this.buildItem("prev",c))}for(var d=0;d"),e=a(""),f=null;return f=this.options[b]?this.makeText(this.options[b],c):c,d.addClass(this.options[b+"Class"]),d.data("page",c),d.data("page-type",b),d.append(e.attr("href",this.makeHref(c)).html(f)),d},getPages:function(a){var b=[],c=Math.floor(this.options.visiblePages/2),d=a-c+1-this.options.visiblePages%2,e=a+c;0>=d&&(d=1,e=this.options.visiblePages),e>this.options.totalPages&&(d=this.options.totalPages-this.options.visiblePages+1,e=this.options.totalPages);for(var f=d;e>=f;)b.push(f),f++;return{currentPage:a,numeric:b}},render:function(b){var c=this;this.$listContainer.children().remove(),this.$listContainer.append(this.buildListItems(b)),this.$listContainer.children().each(function(){var d=a(this),e=d.data("page-type");switch(e){case"page":d.data("page")===b.currentPage&&d.addClass(c.options.activeClass);break;case"first":d.toggleClass(c.options.disabledClass,1===b.currentPage);break;case"last":d.toggleClass(c.options.disabledClass,b.currentPage===c.options.totalPages);break;case"prev":d.toggleClass(c.options.disabledClass,!c.options.loop&&1===b.currentPage);break;case"next":d.toggleClass(c.options.disabledClass,!c.options.loop&&b.currentPage===c.options.totalPages)}})},setupEvents:function(){var b=this;this.$listContainer.find("li").each(function(){var c=a(this);return c.off(),c.hasClass(b.options.disabledClass)||c.hasClass(b.options.activeClass)?void c.on("click",!1):void c.click(function(a){!b.options.href&&a.preventDefault(),b.show(parseInt(c.data("page")))})})},makeHref:function(a){return this.options.href?this.makeText(this.options.href,a):"#"},makeText:function(a,b){return a.replace(this.options.pageVariable,b).replace(this.options.totalPagesVariable,this.options.totalPages)}},a.fn.twbsPagination=function(b){var c,e=Array.prototype.slice.call(arguments,1),g=a(this),h=g.data("twbs-pagination"),i="object"==typeof b?b:{};return h||g.data("twbs-pagination",h=new f(this,i)),"string"==typeof b&&(c=h[b].apply(h,e)),c===d?g:c},a.fn.twbsPagination.defaults={totalPages:1,startPage:1,visiblePages:5,initiateStartPageClick:!0,href:!1,pageVariable:"{{page}}",totalPagesVariable:"{{total_pages}}",page:"{{page}}",first:"First",prev:"Previous",next:"Next",last:"Last",loop:!1,onPageClick:null,paginationClass:"pagination",nextClass:"next",prevClass:"prev",lastClass:"last",firstClass:"first",pageClass:"page",activeClass:"active",disabledClass:"disabled"},a.fn.twbsPagination.Constructor=f,a.fn.twbsPagination.noConflict=function(){return a.fn.twbsPagination=e,this}}(window.jQuery,window,document); \ No newline at end of file diff --git a/tests/run-test-jquery-1.8.1.html b/tests/run-test-jquery-1.8.1.html new file mode 100644 index 0000000..3fb2a0c --- /dev/null +++ b/tests/run-test-jquery-1.8.1.html @@ -0,0 +1,21 @@ + + + + + Tests + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/tests/run-test.html b/tests/run-test-jquery-latest.html similarity index 86% rename from tests/run-test.html rename to tests/run-test-jquery-latest.html index 2fd97f4..0cbe196 100644 --- a/tests/run-test.html +++ b/tests/run-test-jquery-latest.html @@ -7,7 +7,7 @@ - + diff --git a/tests/test.js b/tests/test.js index 187b1cd..5200b14 100644 --- a/tests/test.js +++ b/tests/test.js @@ -1,11 +1,17 @@ -(function () { +(function ($) { var pag1 = $('#pagination'); - pag1.twbsPagination({ - totalPages: 30 + + QUnit.test("Test destroy called before initialization", function () { + ok(pag1.twbsPagination('destroy')); }); - test("Test 'getPages' method (EVEN visible pages number)", function () { + QUnit.test("Test 'getPages' method (EVEN visible pages number)", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({ + totalPages: 30 + }); + var expected1 = {currentPage: 1, numeric: [1, 2, 3, 4, 5]}; deepEqual(pag1.twbsPagination('getPages', 1), expected1); var expected2 = {currentPage: 2, numeric: [1, 2, 3, 4, 5]}; @@ -30,9 +36,13 @@ deepEqual(pag1.twbsPagination('getPages', 30), expected30); }); - test("Test 'getPages' method (ODD visible pages number)", function () { + QUnit.test("Test 'getPages' method (ODD visible pages number)", function () { pag1.twbsPagination('destroy'); - pag1.twbsPagination({totalPages: 30, visiblePages: 6}); + pag1.twbsPagination({ + 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]}; @@ -57,7 +67,7 @@ deepEqual(pag1.twbsPagination('getPages', 30), expected30); }); - test("Test 'getPages' method (total < visible)", function () { + QUnit.test("Test 'getPages' method (total < visible)", function () { pag1.twbsPagination('destroy'); pag1.twbsPagination({ totalPages: 3, @@ -71,4 +81,72 @@ deepEqual(pag1.twbsPagination('getPages', 3), exp3); }); -})(); \ No newline at end of file + QUnit.test("Test classes appended for pagination", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({ + totalPages: 3, + visiblePages: 5 + }); + equal(pag1.find('.page').length, 3); + equal(pag1.find('.next').length, 1); + equal(pag1.find('.prev').length, 1); + equal(pag1.find('.last').length, 1); + equal(pag1.find('.first').length, 1); + equal(pag1.find('.page.active').length, 1); + equal(pag1.find('.prev.disabled').length, 1); + equal(pag1.find('.first.disabled').length, 1); + }); + + QUnit.test("Test custom classes appended for pagination", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({ + totalPages: 10, + visiblePages: 5, + pageClass: 'my-page', + nextClass: 'my-next-page', + prevClass: 'my-prev-page', + lastClass: 'my-last-page', + firstClass: 'my-first-page', + activeClass: 'my-active-class', + disabledClass: 'my-disabled-class' + }); + equal(pag1.find('.my-page').length, 5); + equal(pag1.find('.my-next-page').length, 1); + equal(pag1.find('.my-prev-page').length, 1); + equal(pag1.find('.my-last-page').length, 1); + equal(pag1.find('.my-first-page').length, 1); + equal(pag1.find('.my-page.my-active-class').length, 1); + equal(pag1.find('.my-prev-page.my-disabled-class').length, 1); + equal(pag1.find('.my-first-page.my-disabled-class').length, 1); + }); + + QUnit.test("Test page numbers text", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({ + totalPages: 2 + }); + equal(pag1.find('.page:eq(0)').text(), '1'); + equal(pag1.find('.next').text(), 'Next'); + equal(pag1.find('.prev').text(), 'Previous'); + equal(pag1.find('.first').text(), 'First'); + equal(pag1.find('.last').text(), 'Last'); + }); + + QUnit.test("Test custom texts", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({ + totalPages: 2, + page: '[{{page}}]', + first: '(first)', + prev: '<<', + next: '>>', + last: '(last)[{{total_pages}}]' + }); + equal(pag1.find('.page:eq(0)').text(), '[1]'); + equal(pag1.find('.next').text(), '>>'); + equal(pag1.find('.prev').text(), '<<'); + equal(pag1.find('.first').text(), '(first)'); + equal(pag1.find('.last').text(), '(last)[2]'); + }); + +})(window.jQuery); \ No newline at end of file