Skip to content

Commit

Permalink
Search by data-attributes implemented + support href pagination addition
Browse files Browse the repository at this point in the history
  • Loading branch information
Eugene Simakin committed Nov 12, 2014
1 parent 0f5fa97 commit 1f0a12d
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 24 deletions.
66 changes: 44 additions & 22 deletions jquery.twbsPagination.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* jQuery pagination plugin v1.2.3
* jQuery pagination plugin v1.2.4
* http://esimakin.github.io/twbs-pagination/
*
* Copyright 2014, Eugene Simakin
Expand Down Expand Up @@ -41,6 +41,14 @@
this.$element.first().bind('page', this.options.onPageClick);
}

if (this.options.href) {
var m, regexp = this.options.href.replace(/[-\/\\^$*+?.|[\]]/g, '\\$&');
regexp = regexp.replace(this.options.hrefVariable, '(\\d+)');
if ((m = new RegExp(regexp, 'i').exec(window.location.href)) != null) {
this.options.startPage = parseInt(m[1], 10);
}
}

var tagName = (typeof this.$element.prop === 'function') ?
this.$element.prop('tagName') : this.$element.attr('tagName');

Expand Down Expand Up @@ -89,59 +97,63 @@
var $listItems = $();

if (this.options.first) {
$listItems = $listItems.add(this.buildItem('first', 1, this.options.firstClass));
$listItems = $listItems.add(this.buildItem('first', 1));
}

if (this.options.prev) {
var prev = pages.currentPage > 1 ? pages.currentPage - 1 : this.options.loop ? this.options.totalPages : 1;
$listItems = $listItems.add(this.buildItem('prev', prev, this.options.prevClass));
$listItems = $listItems.add(this.buildItem('prev', prev));
}

for (var i = 0; i < pages.numeric.length; i++) {
$listItems = $listItems.add(this.buildItem('page', pages.numeric[i], this.options.pageClass));
$listItems = $listItems.add(this.buildItem('page', pages.numeric[i]));
}

if (this.options.next) {
var next = pages.currentPage < this.options.totalPages ? pages.currentPage + 1 : this.options.loop ? 1 : this.options.totalPages;
$listItems = $listItems.add(this.buildItem('next', next, this.options.nextClass));
$listItems = $listItems.add(this.buildItem('next', next));
}

if (this.options.last) {
$listItems = $listItems.add(this.buildItem('last', this.options.totalPages, this.options.lastClass));
$listItems = $listItems.add(this.buildItem('last', this.options.totalPages));
}

return $listItems;
},

buildItem: function (type, page, el_class) {
buildItem: function (type, page) {
var itemContainer = $('<li></li>'),
itemContent = $('<a></a>'),
itemText = null;

itemContainer.addClass(el_class);
itemContainer.data('page', page);

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;
}

itemContainer.append(itemContent.attr('href', this.href(page)).html(itemText));
itemContainer.data('page', page);
itemContainer.data('page-type', type);
itemContainer.append(itemContent.attr('href', this.makeHref(page)).html(itemText));
return itemContainer;
},

Expand Down Expand Up @@ -175,29 +187,39 @@
this.$listContainer.children().remove();
this.$listContainer.append(this.buildListItems(pages));

this.$listContainer.find('.'+this.options.pageClass).removeClass(this.options.activeClass).filter(function () {
var children = this.$listContainer.children();
children.filter(function () {
return $(this).data('page') === pages.currentPage;
}).addClass(this.options.activeClass);

this.$listContainer.find('.'+this.options.firstClass)
.toggleClass(this.options.disabledClass, pages.currentPage === 1);
children.filter(function () {
return $(this).data('page-type') === 'first';
}).toggleClass(this.options.disabledClass, pages.currentPage === 1);

this.$listContainer.find('.'+this.options.lastClass)
.toggleClass(this.options.disabledClass, pages.currentPage === this.options.totalPages);
children.filter(function () {
return $(this).data('page-type') === 'last';
}).toggleClass(this.options.disabledClass, pages.currentPage === this.options.totalPages);

this.$listContainer.find('.'+this.options.prevClass)
.toggleClass(this.options.disabledClass, !this.options.loop && pages.currentPage === 1);
children.filter(function () {
return $(this).data('page-type') === 'prev';
}).toggleClass(this.options.disabledClass, !this.options.loop && pages.currentPage === 1);

this.$listContainer.find('.'+this.options.nextClass)
.toggleClass(this.options.disabledClass, !this.options.loop && pages.currentPage === this.options.totalPages);
children.filter(function () {
return $(this).data('page-type') === 'next';
}).toggleClass(this.options.disabledClass, !this.options.loop && pages.currentPage === this.options.totalPages);
},

setupEvents: function () {
var base = this;
this.$listContainer.find('li').each(function () {
var $this = $(this);
$this.off();
if ($this.hasClass(base.options.disabledClass) || $this.hasClass(base.options.activeClass)) return;
if ($this.hasClass(base.options.disabledClass) || $this.hasClass(base.options.activeClass)) {
$this.click(function (evt) {
evt.preventDefault();
});
return;
}
$this.click(function (evt) {
// Prevent click event if href is not set.
!base.options.href && evt.preventDefault();
Expand All @@ -206,7 +228,7 @@
});
},

href: function (c) {
makeHref: function (c) {
return this.options.href ? this.options.href.replace(this.options.hrefVariable, c) : "#";
}

Expand Down
4 changes: 2 additions & 2 deletions jquery.twbsPagination.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 1f0a12d

Please sign in to comment.