diff --git a/README.md b/README.md index 25bd958..d04f8a4 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,4 @@ For development use grunt build to make minified file. To use grunt install packages by using: npm install ## Demo and Docs -For more information see [docs on github pages](http://esimakin.github.io/twbs-pagination/) \ No newline at end of file +For more information see [docs on github pages](http://esimakin.github.io/twbs-pagination/) (out of date since 26 september) \ No newline at end of file diff --git a/bower.json b/bower.json index c66275c..5642e9e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "twbs-pagination", - "version": "1.3.1", + "version": "1.4.0", "homepage": "https://github.com/esimakin/twbs-pagination", "authors": [ "Eugene Simakin " @@ -11,7 +11,7 @@ "globals" ], "dependencies": { - "jquery": ">=1.7.0" + "jquery": ">=1.7" }, "keywords": [ "pagination", @@ -19,7 +19,7 @@ "jQuery-plugin", "bootstrap" ], - "license": "Apache 2.0", + "license": "Apache-2.0", "ignore": [ "**/.*", "node_modules", diff --git a/examples/bootstrap-v4.html b/examples/bootstrap-v4.html new file mode 100644 index 0000000..27e4214 --- /dev/null +++ b/examples/bootstrap-v4.html @@ -0,0 +1,31 @@ + + + + + jQuery Pagination plugin + + + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000..5100d39 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,31 @@ + + + + + jQuery Pagination plugin + + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/jquery.twbsPagination.js b/jquery.twbsPagination.js index 354c6b1..15bb5ee 100644 --- a/jquery.twbsPagination.js +++ b/jquery.twbsPagination.js @@ -1,8 +1,8 @@ -/* - * jQuery Bootstrap Pagination v1.3.1 - * https://github.com/esimakin/twbs-pagination +/*! + * jQuery pagination plugin v1.4 + * http://esimakin.github.io/twbs-pagination/ * - * Copyright 2014-2015 Eugene Simakin + * Copyright 2014-2016, Eugene Simakin * Released under Apache 2.0 license * http://apache.org/licenses/LICENSE-2.0.html */ @@ -32,6 +32,11 @@ throw new Error('Visible pages option is not correct!'); } + // hide if only one page exists + if (this.options.totalPages == 1) { + return this; + } + if (this.options.totalPages < this.options.visiblePages) { this.options.visiblePages = this.options.totalPages; } @@ -41,10 +46,9 @@ } if (this.options.href) { - var match, regexp = this.options.href.replace(/[-\/\\^$*+?.|[\]]/g, '\\$&'); - regexp = regexp.replace(this.options.hrefVariable, '(\\d+)'); - if ((match = new RegExp(regexp, 'i').exec(window.location.href)) != null) { - this.options.startPage = parseInt(match[1], 10); + this.options.startPage = this.getPageFromQueryString(); + if (!this.options.startPage) { + this.options.startPage = 1; } } @@ -63,11 +67,11 @@ this.$element.append(this.$listContainer); } - this.render(this.getPages(this.options.startPage)); - this.setupEvents(); - if (this.options.initiateStartPageClick) { - this.$element.trigger('page', this.options.startPage); + this.show(this.options.startPage); + } else { + this.render(this.getPages(this.options.startPage)); + this.setupEvents(); } return this; @@ -89,6 +93,7 @@ if (page < 1 || page > this.options.totalPages) { throw new Error('Page is incorrect.'); } + this.currentPage = page; this.render(this.getPages(page)); this.setupEvents(); @@ -129,36 +134,12 @@ buildItem: function (type, page) { var $itemContainer = $('
  • '), $itemContent = $(''), - itemText = null; - - switch (type) { - case 'page': - itemText = page; - $itemContainer.addClass(this.options.pageClass); - break; - case 'first': - itemText = this.options.first; - $itemContainer.addClass(this.options.firstClass); - break; - case 'prev': - itemText = this.options.prev; - $itemContainer.addClass(this.options.prevClass); - break; - case 'next': - itemText = this.options.next; - $itemContainer.addClass(this.options.nextClass); - break; - case 'last': - itemText = this.options.last; - $itemContainer.addClass(this.options.lastClass); - break; - default: - break; - } + itemText = this.options[type] ? this.makeText(this.options[type], page) : page; + $itemContainer.addClass(this.options[type + 'Class']); $itemContainer.data('page', page); $itemContainer.data('page-type', type); - $itemContainer.append($itemContent.attr('href', this.makeHref(page)).html(itemText)); + $itemContainer.append($itemContent.attr('href', this.makeHref(page)).addClass(this.options.anchorClass).html(itemText)); return $itemContainer; }, @@ -192,7 +173,10 @@ render: function (pages) { var _this = this; this.$listContainer.children().remove(); - this.$listContainer.append(this.buildListItems(pages)); + var items = this.buildListItems(pages); + jQuery.each(items, function(key, item){ + _this.$listContainer.append(item); + }); this.$listContainer.children().each(function () { var $this = $(this), @@ -226,23 +210,53 @@ setupEvents: function () { var _this = this; - this.$listContainer.find('li').each(function () { + this.$listContainer.off('click').on('click', 'li', function (evt) { var $this = $(this); - $this.off(); if ($this.hasClass(_this.options.disabledClass) || $this.hasClass(_this.options.activeClass)) { - $this.on('click', false); - return; + return false; } - $this.click(function (evt) { - // Prevent click event if href is not set. - !_this.options.href && evt.preventDefault(); - _this.show(parseInt($this.data('page'))); - }); + // Prevent click event if href is not set. + !_this.options.href && evt.preventDefault(); + _this.show(parseInt($this.data('page'))); }); }, - makeHref: function (c) { - return this.options.href ? this.options.href.replace(this.options.hrefVariable, c) : "#"; + makeHref: function (page) { + return this.options.href ? this.generateQueryString(page) : "#"; + }, + + makeText: function (text, page) { + return text.replace(this.options.pageVariable, page) + .replace(this.options.totalPagesVariable, this.options.totalPages) + }, + getPageFromQueryString: function (searchStr) { + var search = this.getSearchString(searchStr), + regex = new RegExp(this.options.pageVariable + '(=([^&#]*)|&|#|$)'), + page = regex.exec(search); + if (!page || !page[2]) { + return null; + } + page = decodeURIComponent(page[2]); + page = parseInt(page); + if (isNaN(page)) { + return null; + } + return page; + }, + generateQueryString: function (pageNumber, searchStr) { + var search = this.getSearchString(searchStr), + regex = new RegExp(this.options.pageVariable + '=*[^&#]*'); + if (!search) return ''; + return '?' + search.replace(regex, this.options.pageVariable + '=' + pageNumber); + + }, + getSearchString: function (searchStr) { + var search = searchStr || window.location.search; + if (search === '') { + return null; + } + if (search.indexOf('?') === 0) search = search.substr(1); + return search; } }; @@ -255,7 +269,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); @@ -264,12 +278,14 @@ }; $.fn.twbsPagination.defaults = { - totalPages: 0, + totalPages: 1, startPage: 1, visiblePages: 5, initiateStartPageClick: true, href: false, - hrefVariable: '{{number}}', + pageVariable: '{{page}}', + totalPagesVariable: '{{total_pages}}', + page: null, first: 'First', prev: 'Previous', next: 'Next', @@ -277,13 +293,14 @@ loop: false, onPageClick: null, paginationClass: 'pagination', - nextClass: 'next', - prevClass: 'prev', - lastClass: 'last', - firstClass: 'first', - pageClass: 'page', + nextClass: 'page-item next', + prevClass: 'page-item prev', + lastClass: 'page-item last', + firstClass: 'page-item first', + pageClass: 'page-item', activeClass: 'active', - disabledClass: 'disabled' + disabledClass: 'disabled', + anchorClass: 'page-link' }; $.fn.twbsPagination.Constructor = TwbsPagination; @@ -293,4 +310,6 @@ return this; }; + $.fn.twbsPagination.version = "1.4"; + })(window.jQuery, window, document); diff --git a/jquery.twbsPagination.min.js b/jquery.twbsPagination.min.js index 7cc71f9..e5f20ed 100644 --- a/jquery.twbsPagination.min.js +++ b/jquery.twbsPagination.min.js @@ -1,9 +1,9 @@ /* - * jQuery Bootstrap Pagination v1.3.1 - * https://github.com/esimakin/twbs-pagination + * jQuery pagination plugin v1.4 + * http://esimakin.github.io/twbs-pagination/ * - * Copyright 2014-2015 Eugene Simakin + * Copyright 2014-2016, Eugene Simakin * 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;switch(b){case"page":f=c,d.addClass(this.options.pageClass);break;case"first":f=this.options.first,d.addClass(this.options.firstClass);break;case"prev":f=this.options.prev,d.addClass(this.options.prevClass);break;case"next":f=this.options.next,d.addClass(this.options.nextClass);break;case"last":f=this.options.last,d.addClass(this.options.lastClass)}return 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.options.href.replace(this.options.hrefVariable,a):"#"}},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,hrefVariable:"{{number}}",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(e,d,a,f){var b=e.fn.twbsPagination;var c=function(i,g){this.$element=e(i);this.options=e.extend({},e.fn.twbsPagination.defaults,g);if(this.options.startPage<1||this.options.startPage>this.options.totalPages){throw new Error("Start page option is incorrect")}this.options.totalPages=parseInt(this.options.totalPages);if(isNaN(this.options.totalPages)){throw new Error("Total pages option is not correct!")}this.options.visiblePages=parseInt(this.options.visiblePages);if(isNaN(this.options.visiblePages)){throw new Error("Visible pages option is not correct!")}if(this.options.totalPages==1){return this}if(this.options.totalPages")}this.$listContainer.addClass(this.options.paginationClass);if(h!=="UL"){this.$element.append(this.$listContainer)}if(this.options.initiateStartPageClick){this.show(this.options.startPage)}else{this.render(this.getPages(this.options.startPage));this.setupEvents()}return this};c.prototype={constructor:c,destroy:function(){this.$element.empty();this.$element.removeData("twbs-pagination");this.$element.off("page");return this},show:function(g){if(g<1||g>this.options.totalPages){throw new Error("Page is incorrect.")}this.currentPage=g;this.render(this.getPages(g));this.setupEvents();this.$element.trigger("page",g);return this},buildListItems:function(g){var l=[];if(this.options.first){l.push(this.buildItem("first",1))}if(this.options.prev){var k=g.currentPage>1?g.currentPage-1:this.options.loop?this.options.totalPages:1;l.push(this.buildItem("prev",k))}for(var h=0;h"),h=e(""),g=this.options[i]?this.makeText(this.options[i],j):j;k.addClass(this.options[i+"Class"]);k.data("page",j);k.data("page-type",i);k.append(h.attr("href",this.makeHref(j)).addClass(this.options.anchorClass).html(g));return k},getPages:function(j){var g=[];var k=Math.floor(this.options.visiblePages/2);var l=j-k+1-this.options.visiblePages%2;var h=j+k;if(l<=0){l=1;h=this.options.visiblePages}if(h>this.options.totalPages){l=this.options.totalPages-this.options.visiblePages+1;h=this.options.totalPages}var i=l;while(i<=h){g.push(i);i++}return{currentPage:j,numeric:g}},render:function(g){var i=this;this.$listContainer.children().remove();var h=this.buildListItems(g);jQuery.each(h,function(j,k){i.$listContainer.append(k)});this.$listContainer.children().each(function(){var k=e(this),j=k.data("page-type");switch(j){case"page":if(k.data("page")===g.currentPage){k.addClass(i.options.activeClass)}break;case"first":k.toggleClass(i.options.disabledClass,g.currentPage===1);break;case"last":k.toggleClass(i.options.disabledClass,g.currentPage===i.options.totalPages);break;case"prev":k.toggleClass(i.options.disabledClass,!i.options.loop&&g.currentPage===1);break;case"next":k.toggleClass(i.options.disabledClass,!i.options.loop&&g.currentPage===i.options.totalPages);break;default:break}})},setupEvents:function(){var g=this;this.$listContainer.off("click").on("click","li",function(h){var i=e(this);if(i.hasClass(g.options.disabledClass)||i.hasClass(g.options.activeClass)){return false}!g.options.href&&h.preventDefault();g.show(parseInt(i.data("page")))})},makeHref:function(g){return this.options.href?this.generateQueryString(g):"#"},makeText:function(h,g){return h.replace(this.options.pageVariable,g).replace(this.options.totalPagesVariable,this.options.totalPages)},getPageFromQueryString:function(g){var h=this.getSearchString(g),i=new RegExp(this.options.pageVariable+"(=([^&#]*)|&|#|$)"),j=i.exec(h);if(!j||!j[2]){return null}j=decodeURIComponent(j[2]);j=parseInt(j);if(isNaN(j)){return null}return j},generateQueryString:function(g,h){var i=this.getSearchString(h),j=new RegExp(this.options.pageVariable+"=*[^&#]*");if(!i){return""}return"?"+i.replace(j,this.options.pageVariable+"="+g)},getSearchString:function(g){var h=g||d.location.search;if(h===""){return null}if(h.indexOf("?")===0){h=h.substr(1)}return h}};e.fn.twbsPagination=function(i){var h=Array.prototype.slice.call(arguments,1);var k;var l=e(this);var j=l.data("twbs-pagination");var g=typeof i==="object"?i:{};if(!j){l.data("twbs-pagination",(j=new c(this,g)))}if(typeof i==="string"){k=j[i].apply(j,h)}return(k===f)?l:k};e.fn.twbsPagination.defaults={totalPages:1,startPage:1,visiblePages:5,initiateStartPageClick:true,href:false,pageVariable:"{{page}}",totalPagesVariable:"{{total_pages}}",page:null,first:"First",prev:"Previous",next:"Next",last:"Last",loop:false,onPageClick:null,paginationClass:"pagination",nextClass:"page-item next",prevClass:"page-item prev",lastClass:"page-item last",firstClass:"page-item first",pageClass:"page-item",activeClass:"active",disabledClass:"disabled",anchorClass:"page-link"};e.fn.twbsPagination.Constructor=c;e.fn.twbsPagination.noConflict=function(){e.fn.twbsPagination=b;return this};e.fn.twbsPagination.version="1.4"})(window.jQuery,window,document); \ No newline at end of file diff --git a/package.json b/package.json index e418e79..35354b9 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "twbs-pagination", "nativeName": "jQuery Bootstrap Pagination", - "version": "1.3.1", + "version": "1.4.0", "homepage": "https://github.com/esimakin/twbs-pagination", "author": "Eugene Simakin ", "description": "jQuery simple pagination plugin for bootstrap-style webpages", "main": "jquery.twbsPagination", "dependencies": { - "jquery": ">=1.7.0" + "jquery": ">=1.7" }, "devDependencies": { "grunt": "^0.4.5", @@ -16,6 +16,10 @@ "grunt-contrib-uglify": "^0.9.2", "load-grunt-tasks": "^3.1.0" }, + "repository": { + "type": "git", + "url": "git://github.com/esimakin/twbs-pagination.git" + }, "keywords": [ "pagination", "jQuery", diff --git a/tests/run-test.html b/tests/run-test-jquery-1.8.1.html similarity index 74% rename from tests/run-test.html rename to tests/run-test-jquery-1.8.1.html index 2fd97f4..3fb2a0c 100644 --- a/tests/run-test.html +++ b/tests/run-test-jquery-1.8.1.html @@ -6,8 +6,8 @@ - - + + diff --git a/tests/run-test-jquery-latest.html b/tests/run-test-jquery-latest.html new file mode 100644 index 0000000..35c7552 --- /dev/null +++ b/tests/run-test-jquery-latest.html @@ -0,0 +1,21 @@ + + + + + Tests + + + + + + + + +
    +
    + + + + + + \ No newline at end of file diff --git a/tests/test.js b/tests/test.js index 187b1cd..46d5c72 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,104 @@ 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-item').length, 7); + 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-item.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-item:eq(2)').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-item:eq(2)').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]'); + }); + + QUnit.test("Test 'getPageFromQueryString' method", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({pageVariable: 'page'}); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=1'), 1); + equal(pag1.twbsPagination('getPageFromQueryString', '?page='), null); + equal(pag1.twbsPagination('getPageFromQueryString', '?page'), null); + equal(pag1.twbsPagination('getPageFromQueryString', '?'), null); + equal(pag1.twbsPagination('getPageFromQueryString', ''), null) + ; + equal(pag1.twbsPagination('getPageFromQueryString', '?page=2'), 2); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=3¶m=taram'), 3); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=4¶m=test&opilki'), 4); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=5¶m=test or not&opilki='), 5); + equal(pag1.twbsPagination('getPageFromQueryString', '?ID=1&keyWord=net&page=6'), 6); + }); + + QUnit.test("Test 'generateQueryString' method", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({pageVariable: 'page'}); + equal(pag1.twbsPagination('generateQueryString', 1, '?page=1'), '?page=1'); + equal(pag1.twbsPagination('generateQueryString', 1, '?page='), '?page=1'); + equal(pag1.twbsPagination('generateQueryString', 1, '?page'), '?page=1'); + equal(pag1.twbsPagination('generateQueryString', 1, '?'), ''); + equal(pag1.twbsPagination('generateQueryString', 1, ''), window.location.search); + + equal(pag1.twbsPagination('generateQueryString', 2, '?page=1'), '?page=2'); + equal(pag1.twbsPagination('generateQueryString', 3, '?page=2¶m=taram'), '?page=3¶m=taram'); + equal(pag1.twbsPagination('generateQueryString', 4, '?page=3¶m=test&opilki'), '?page=4¶m=test&opilki'); + equal(pag1.twbsPagination('generateQueryString', 5, '?page=4¶m=test or not&opilki='), '?page=5¶m=test or not&opilki='); + equal(pag1.twbsPagination('generateQueryString', 6, '?ID=1&keyWord=net&page=50'), '?ID=1&keyWord=net&page=6'); + }); + +})(window.jQuery); \ No newline at end of file diff --git a/twbs-pagination.jquery.json b/twbs-pagination.jquery.json index 8fcaffc..603631f 100644 --- a/twbs-pagination.jquery.json +++ b/twbs-pagination.jquery.json @@ -1,6 +1,6 @@ { "name": "twbs-pagination", - "version": "1.3.1", + "version": "1.4.0", "title": "jQuery Bootstrap Pagination", "author": { "name": "Eugene Simakin", @@ -9,7 +9,7 @@ }, "licenses": [ { - "type": "Apache 2.0", + "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } ],