Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | espaco | 1 | /** |
| 2 | * @preserve |
||
| 3 | * bootpag - jQuery plugin for dynamic pagination |
||
| 4 | * |
||
| 5 | * Copyright (c) 2013 botmonster@7items.com |
||
| 6 | * |
||
| 7 | * Licensed under the MIT license: |
||
| 8 | * http://www.opensource.org/licenses/mit-license.php |
||
| 9 | * |
||
| 10 | * Project home: |
||
| 11 | * http://botmonster.com/jquery-bootpag/ |
||
| 12 | * |
||
| 13 | * Version: 1.0.5 |
||
| 14 | * |
||
| 15 | */ |
||
| 16 | (function($, window) { |
||
| 17 | |||
| 18 | $.fn.bootpag = function(options){ |
||
| 19 | |||
| 20 | var $owner = this, |
||
| 21 | settings = $.extend({ |
||
| 22 | total: 0, |
||
| 23 | page: 1, |
||
| 24 | maxVisible: null, |
||
| 25 | leaps: true, |
||
| 26 | href: 'javascript:void(0);', |
||
| 27 | hrefVariable: '{{number}}', |
||
| 28 | next: '»', |
||
| 29 | prev: '«' |
||
| 30 | }, |
||
| 31 | $owner.data('settings') || {}, |
||
| 32 | options || {}); |
||
| 33 | |||
| 34 | if(settings.total <= 0) |
||
| 35 | return this; |
||
| 36 | |||
| 37 | if(!$.isNumeric(settings.maxVisible) && !settings.maxVisible){ |
||
| 38 | settings.maxVisible = settings.total; |
||
| 39 | } |
||
| 40 | |||
| 41 | $owner.data('settings', settings); |
||
| 42 | |||
| 43 | function renderPage($bootpag, page){ |
||
| 44 | |||
| 45 | var lp, |
||
| 46 | maxV = settings.maxVisible == 0 ? 1 : settings.maxVisible, |
||
| 47 | step = settings.maxVisible == 1 ? 0 : 1, |
||
| 48 | vis = Math.floor((page - 1) / maxV) * maxV, |
||
| 49 | $page = $bootpag.find('li'); |
||
| 50 | settings.page = page = page < 0 ? 0 : page > settings.total ? settings.total : page; |
||
| 51 | $page.removeClass('disabled'); |
||
| 52 | lp = page - 1 < 1 ? 1 : |
||
| 53 | settings.leaps && page - 1 >= settings.maxVisible ? |
||
| 54 | Math.floor((page - 1) / maxV) * maxV : page - 1; |
||
| 55 | $page |
||
| 56 | .first() |
||
| 57 | .toggleClass('disabled', page === 1) |
||
| 58 | .attr('data-lp', lp) |
||
| 59 | .find('a').attr('href', href(lp)); |
||
| 60 | |||
| 61 | var step = settings.maxVisible == 1 ? 0 : 1; |
||
| 62 | |||
| 63 | lp = page + 1 > settings.total ? settings.total : |
||
| 64 | settings.leaps && page + 1 < settings.total - settings.maxVisible ? |
||
| 65 | vis + settings.maxVisible + step: page + 1; |
||
| 66 | |||
| 67 | $page |
||
| 68 | .last() |
||
| 69 | .toggleClass('disabled', page === settings.total) |
||
| 70 | .attr('data-lp', lp) |
||
| 71 | .find('a').attr('href', href(lp));; |
||
| 72 | |||
| 73 | var $currPage = $page.filter('[data-lp='+page+']'); |
||
| 74 | if(!$currPage.not('.next,.prev').length){ |
||
| 75 | var d = page <= vis ? -settings.maxVisible : 0; |
||
| 76 | $page.not('.next,.prev').each(function(index){ |
||
| 77 | lp = index + 1 + vis + d; |
||
| 78 | $(this) |
||
| 79 | .attr('data-lp', lp) |
||
| 80 | .toggle(lp <= settings.total) |
||
| 81 | .find('a').html(lp).attr('href', href(lp)); |
||
| 82 | }); |
||
| 83 | $currPage = $page.filter('[data-lp='+page+']'); |
||
| 84 | } |
||
| 85 | $currPage.addClass('disabled'); |
||
| 86 | $owner.data('settings', settings); |
||
| 87 | } |
||
| 88 | |||
| 89 | function href(c){ |
||
| 90 | |||
| 91 | return settings.href.replace(settings.hrefVariable, c); |
||
| 92 | } |
||
| 93 | |||
| 94 | return this.each(function(){ |
||
| 95 | |||
| 96 | var $bootpag, lp, me = $(this), |
||
| 97 | p = ['<ul class="pagination bootpag">']; |
||
| 98 | |||
| 99 | if(settings.prev){ |
||
| 100 | p.push('<li data-lp="1" class="prev"><a href="'+href(1)+'">'+settings.prev+'</a></li>'); |
||
| 101 | } |
||
| 102 | for(var c = 1; c <= Math.min(settings.total, settings.maxVisible); c++){ |
||
| 103 | p.push('<li data-lp="'+c+'"><a href="'+href(c)+'">'+c+'</a></li>'); |
||
| 104 | } |
||
| 105 | if(settings.next){ |
||
| 106 | lp = settings.leaps && settings.total > settings.maxVisible |
||
| 107 | ? Math.min(settings.maxVisible + 1, settings.total) : 2; |
||
| 108 | p.push('<li data-lp="'+lp+'" class="next"><a href="'+href(lp)+'">'+settings.next+'</a></li>'); |
||
| 109 | } |
||
| 110 | p.push('</ul>'); |
||
| 111 | me.find('ul.bootpag').remove(); |
||
| 112 | me.append(p.join('')); |
||
| 113 | $bootpag = me.find('ul.bootpag'); |
||
| 114 | me.find('li').click(function paginationClick(){ |
||
| 115 | |||
| 116 | var me = $(this); |
||
| 117 | if(me.hasClass('disabled')){ |
||
| 118 | return; |
||
| 119 | } |
||
| 120 | var page = parseInt(me.attr('data-lp'), 10); |
||
| 121 | renderPage($bootpag, page); |
||
| 122 | $owner.trigger('page', page); |
||
| 123 | }); |
||
| 124 | renderPage($bootpag, settings.page); |
||
| 125 | }); |
||
| 126 | } |
||
| 127 | |||
| 128 | })(jQuery, window); |