All Downloads are FREE. Search and download functionalities are using the official Maven repository.

static.jquery-twbsPagination.jquery.twbsPagination.js Maven / Gradle / Ivy

The newest version!
/*!
 * jQuery pagination plugin v1.4.1
 * http://esimakin.github.io/twbs-pagination/
 *
 * Copyright 2014-2016, Eugene Simakin
 * Released under Apache 2.0 license
 * http://apache.org/licenses/LICENSE-2.0.html
 */
(function ($, window, document, undefined) {

    'use strict';

    var old = $.fn.twbsPagination;

    // PROTOTYPE AND CONSTRUCTOR

    var TwbsPagination = function (element, options) {
        this.$element = $(element);
        this.options = $.extend({}, $.fn.twbsPagination.defaults, options);

        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.onPageClick instanceof Function) {
            this.$element.first().on('page', this.options.onPageClick);
        }

        // hide if only one page exists
        if (this.options.hideOnlyOnePage && this.options.totalPages == 1) {
            this.$element.trigger('page', 1);
            return this;
        }

        if (this.options.totalPages < this.options.visiblePages) {
            this.options.visiblePages = this.options.totalPages;
        }

        if (this.options.href) {
            this.options.startPage = this.getPageFromQueryString();
            if (!this.options.startPage) {
                this.options.startPage = 1;
            }
        }

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

        if (tagName === 'UL') {
            this.$listContainer = this.$element;
        } else {
            this.$listContainer = $('
    '); } this.$listContainer.addClass(this.options.paginationClass); if (tagName !== 'UL') { this.$element.append(this.$listContainer); } if (this.options.initiateStartPageClick) { this.show(this.options.startPage); } else { this.currentPage = this.options.startPage; this.render(this.getPages(this.options.startPage)); this.setupEvents(); } return this; }; TwbsPagination.prototype = { constructor: TwbsPagination, destroy: function () { this.$element.empty(); this.$element.removeData('twbs-pagination'); this.$element.off('page'); return this; }, show: function (page) { if (page < 1 || page > this.options.totalPages) { throw new Error('Page is incorrect.'); } this.currentPage = page; this.render(this.getPages(page)); this.setupEvents(); this.$element.trigger('page', page); return this; }, enable: function () { this.show(this.currentPage); }, disable: function () { var _this = this; this.$listContainer.off('click').on('click', 'li', function (evt) { evt.preventDefault(); }); this.$listContainer.children().each(function () { var $this = $(this); if (!$this.hasClass(_this.options.activeClass)) { $(this).addClass(_this.options.disabledClass); } }); }, buildListItems: function (pages) { var listItems = []; if (this.options.first) { listItems.push(this.buildItem('first', 1)); } if (this.options.prev) { var prev = pages.currentPage > 1 ? pages.currentPage - 1 : this.options.loop ? this.options.totalPages : 1; listItems.push(this.buildItem('prev', prev)); } for (var i = 0; i < pages.numeric.length; i++) { listItems.push(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.push(this.buildItem('next', next)); } if (this.options.last) { listItems.push(this.buildItem('last', this.options.totalPages)); } return listItems; }, buildItem: function (type, page) { var $itemContainer = $('
  • '), $itemContent = $(''), 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)).addClass(this.options.anchorClass).html(itemText)); return $itemContainer; }, getPages: function (currentPage) { var pages = []; 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 itPage = start; while (itPage <= end) { pages.push(itPage); itPage++; } return {"currentPage": currentPage, "numeric": pages}; }, render: function (pages) { var _this = this; this.$listContainer.children().remove(); var items = this.buildListItems(pages); $.each(items, function(key, item){ _this.$listContainer.append(item); }); this.$listContainer.children().each(function () { var $this = $(this), pageType = $this.data('page-type'); switch (pageType) { case 'page': if ($this.data('page') === pages.currentPage) { $this.addClass(_this.options.activeClass); } break; case 'first': $this.toggleClass(_this.options.disabledClass, pages.currentPage === 1); break; case 'last': $this.toggleClass(_this.options.disabledClass, pages.currentPage === _this.options.totalPages); break; case 'prev': $this.toggleClass(_this.options.disabledClass, !_this.options.loop && pages.currentPage === 1); break; case 'next': $this.toggleClass(_this.options.disabledClass, !_this.options.loop && pages.currentPage === _this.options.totalPages); break; default: break; } }); }, setupEvents: function () { var _this = this; this.$listContainer.off('click').on('click', 'li', function (evt) { var $this = $(this); if ($this.hasClass(_this.options.disabledClass) || $this.hasClass(_this.options.activeClass)) { return false; } // Prevent click event if href is not set. !_this.options.href && evt.preventDefault(); _this.show(parseInt($this.data('page'))); }); }, 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; }, getCurrentPage: function () { return this.currentPage; } }; // PLUGIN DEFINITION $.fn.twbsPagination = function (option) { var args = Array.prototype.slice.call(arguments, 1); var methodReturn; var $this = $(this); var data = $this.data('twbs-pagination'); 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); return ( methodReturn === undefined ) ? $this : methodReturn; }; $.fn.twbsPagination.defaults = { totalPages: 1, startPage: 1, visiblePages: 5, initiateStartPageClick: true, hideOnlyOnePage: false, 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' }; $.fn.twbsPagination.Constructor = TwbsPagination; $.fn.twbsPagination.noConflict = function () { $.fn.twbsPagination = old; return this; }; $.fn.twbsPagination.version = "1.4.1"; })(window.jQuery, window, document);




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy