From 9d760e9cb5021c83190a9800c7298c15bfe0b518 Mon Sep 17 00:00:00 2001 From: Eugene Simakin Date: Sat, 19 Apr 2014 00:10:08 +0400 Subject: [PATCH] Fix bug with incorrect prev/next page in href attribute --- jquery.twbsPagination.js | 51 ++++++++++++++++++------------------ jquery.twbsPagination.min.js | 10 ++++++- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/jquery.twbsPagination.js b/jquery.twbsPagination.js index 9acdf5f..7c52bd7 100644 --- a/jquery.twbsPagination.js +++ b/jquery.twbsPagination.js @@ -1,5 +1,5 @@ /** - * jQuery pagination plugin v1.0 + * jQuery pagination plugin v1.1.1 * http://esimakin.github.io/twbs-pagination/ * * Copyright 2014, Eugene Simakin @@ -40,8 +40,6 @@ this.options.visiblePages = this.options.totalPages; } - this.currentPages = this.getPages(this.options.startPage); - if (this.options.onPageClick instanceof Function) { this.$element.bind('page', this.options.onPageClick); } @@ -57,20 +55,18 @@ this.$listContainer.addClass(this.options.paginationClass); - this.$listContainer.append(this.buildListItems(this.currentPages.numeric)); - if (tagName !== 'UL') { this.$element.append(this.$listContainer); } - this.render(this.currentPages); + this.render(this.getPages(this.options.startPage)); this.setupEvents(); this.$element.trigger('page', this.options.startPage); - + return this; }, - + destroy: function () { this.$element.empty(); return this; @@ -96,15 +92,17 @@ } if (this.options.prev) { - $listItems = $listItems.add(this.buildItem('prev', 1)); + var prev = pages.currentPage > 1 ? pages.currentPage - 1 : 1; + $listItems = $listItems.add(this.buildItem('prev', prev)); } - for (var i = 0; i < pages.length; i++) { - $listItems = $listItems.add(this.buildItem('page', pages[i])); + for (var i = 0; i < pages.numeric.length; i++) { + $listItems = $listItems.add(this.buildItem('page', pages.numeric[i])); } if (this.options.next) { - $listItems = $listItems.add(this.buildItem('next', 2)); + var next = pages.currentPage >= this.options.totalPages ? this.options.totalPages : pages.currentPage + 1; + $listItems = $listItems.add(this.buildItem('next', next)); } if (this.options.last) { @@ -120,7 +118,7 @@ itemText = null; itemContainer.addClass(type); - itemContainer.attr('data-page', page); + itemContainer.data('page', page); switch (type) { case 'page': @@ -173,14 +171,21 @@ }, render: function (pages) { - if (!this.equals(this.currentPages.numeric, pages.numeric)) { - this.$listContainer.children().remove(); - this.$listContainer.append(this.buildListItems(pages.numeric)); - this.currentPages = pages; - } + this.$listContainer.children().remove(); + this.$listContainer.append(this.buildListItems(pages)); this.$listContainer.find('.page').removeClass('active'); - this.$listContainer.find('.page').filter('[data-page="' + pages.currentPage + '"]').addClass('active'); + this.$listContainer.find('.page').filter(function () { + return $(this).data('page') === pages.currentPage; + }).addClass('active'); + + if (pages.currentPage === 1) { + this.$listContainer.find('.prev a,.first a').attr("href", "javascript:void(0);"); + } + + if (pages.currentPage === this.options.totalPages) { + this.$listContainer.find('.next a,.last a').attr("href", "javascript:void(0);"); + } this.$listContainer.find('.first') .toggleClass('disabled', pages.currentPage === 1); @@ -188,15 +193,11 @@ this.$listContainer.find('.last') .toggleClass('disabled', pages.currentPage === this.options.totalPages); - var prev = pages.currentPage - 1; this.$listContainer.find('.prev') - .toggleClass('disabled', pages.currentPage === 1) - .data('page', prev > 1 ? prev : 1); + .toggleClass('disabled', pages.currentPage === 1); - var next = pages.currentPage + 1; this.$listContainer.find('.next') - .toggleClass('disabled', pages.currentPage === this.options.totalPages) - .data('page', next < this.options.totalPages ? next : this.options.totalPages); + .toggleClass('disabled', pages.currentPage === this.options.totalPages); }, setupEvents: function () { diff --git a/jquery.twbsPagination.min.js b/jquery.twbsPagination.min.js index 150ee08..79323fb 100644 --- a/jquery.twbsPagination.min.js +++ b/jquery.twbsPagination.min.js @@ -1 +1,9 @@ -(function(e,d,a,f){var b=e.fn.twbsPagination;var c=function(h,g){this.$element=e(h);this.options=e.extend({},e.fn.twbsPagination.defaults,g);this.init(this.options)};c.prototype={constructor:c,init:function(g){this.options=e.extend({},this.options,g);if(this.options.startPage<1||this.options.startPage>this.options.totalPages){throw new Error("Start page option is incorrect")}if(this.options.totalPages<=0){throw new Error("Total pages option cannot be less 1 (one)!")}if(this.options.totalPages")}this.$listContainer.addClass(this.options.paginationClass);this.$listContainer.append(this.buildListItems(this.currentPages.numeric));if(h!=="UL"){this.$element.append(this.$listContainer)}this.render(this.currentPages);this.setupEvents();this.$element.trigger("page",this.options.startPage)},show:function(g){if(g<1||g>this.options.totalPages){throw new Error("Page is incorrect.")}this.render(this.getPages(g));this.setupEvents();this.$element.trigger("page",g)},buildListItems:function(g){var j=e();if(this.options.first){j=j.add(this.buildItem("first",1))}if(this.options.prev){j=j.add(this.buildItem("prev",1))}for(var h=0;h"),k=e(""),g=null;h.addClass(i);h.attr("data-page",j);switch(i){case"page":g=j;break;case"first":g=this.options.first;break;case"prev":g=this.options.prev;break;case"next":g=this.options.next;break;case"last":g=this.options.last;break;default:break}h.append(k.attr("href",this.href(j)).text(g));return h},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){if(!this.equals(this.currentPages.numeric,g.numeric)){this.$listContainer.children().remove();this.$listContainer.append(this.buildListItems(g.numeric));this.currentPages=g}this.$listContainer.find(".page").removeClass("active");this.$listContainer.find(".page").filter('[data-page="'+g.currentPage+'"]').addClass("active");this.$listContainer.find(".first").toggleClass("disabled",g.currentPage===1);this.$listContainer.find(".last").toggleClass("disabled",g.currentPage===this.options.totalPages);var i=g.currentPage-1;this.$listContainer.find(".prev").toggleClass("disabled",g.currentPage===1).data("page",i>1?i:1);var h=g.currentPage+1;this.$listContainer.find(".next").toggleClass("disabled",g.currentPage===this.options.totalPages).data("page",hthis.options.totalPages){throw new Error("Start page option is incorrect")}if(this.options.totalPages<=0){throw new Error("Total pages option cannot be less 1 (one)!")}if(this.options.totalPages")}this.$listContainer.addClass(this.options.paginationClass);if(n!=="UL"){this.$element.append(this.$listContainer)}this.render(this.getPages(this.options.startPage));this.setupEvents();this.$element.trigger("page",this.options.startPage);return this},destroy:function(){this.$element.empty();return this},show:function(e){if(e<1||e>this.options.totalPages){throw new Error("Page is incorrect.")}this.render(this.getPages(e));this.setupEvents();this.$element.trigger("page",e);return this},buildListItems:function(t){var n=e();if(this.options.first){n=n.add(this.buildItem("first",1))}if(this.options.prev){var r=t.currentPage>1?t.currentPage-1:1;n=n.add(this.buildItem("prev",r))}for(var i=0;i=this.options.totalPages?this.options.totalPages:t.currentPage+1;n=n.add(this.buildItem("next",s))}if(this.options.last){n=n.add(this.buildItem("last",this.options.totalPages))}return n},buildItem:function(t,n){var r=e("
  • "),i=e(""),s=null;r.addClass(t);r.data("page",n);switch(t){case"page":s=n;break;case"first":s=this.options.first;break;case"prev":s=this.options.prev;break;case"next":s=this.options.next;break;case"last":s=this.options.last;break;default:break}r.append(i.attr("href",this.href(n)).html(s));return r},getPages:function(e){var t=[];var n=Math.floor(this.options.visiblePages/2);var r=e-n+1-this.options.visiblePages%2;var i=e+n;if(r<=0){r=1;i=this.options.visiblePages}if(i>this.options.totalPages){r=this.options.totalPages-this.options.visiblePages+1;i=this.options.totalPages}var s=r;while(s<=i){t.push(s);s++}return{currentPage:e,numeric:t}},render:function(t){this.$listContainer.children().remove();this.$listContainer.append(this.buildListItems(t));this.$listContainer.find(".page").removeClass("active");this.$listContainer.find(".page").filter(function(){return e(this).data("page")===t.currentPage}).addClass("active");if(t.currentPage===1){this.$listContainer.find(".prev a,.first a").attr("href","javascript:void(0);")}if(t.currentPage===this.options.totalPages){this.$listContainer.find(".next a,.last a").attr("href","javascript:void(0);")}this.$listContainer.find(".first").toggleClass("disabled",t.currentPage===1);this.$listContainer.find(".last").toggleClass("disabled",t.currentPage===this.options.totalPages);this.$listContainer.find(".prev").toggleClass("disabled",t.currentPage===1);this.$listContainer.find(".next").toggleClass("disabled",t.currentPage===this.options.totalPages)},setupEvents:function(){var t=this;this.$listContainer.find("li").each(function(){var n=e(this);n.off();if(n.hasClass("disabled")||n.hasClass("active"))return;n.click(function(){t.show(parseInt(n.data("page"),10))})})},equals:function(e,t){var n=0;while(n