710b1846b11f6c6a3ecf8d81e6ff262599b4e2c8
[redakcja.git] / project / static / js / jquery.paginate.js
1 (function($) {
2     
3     var settings = {
4             items: [],
5             itemsPerPage: 20,
6             page: 0
7     };
8
9     $.fn.filterItems = function(condition)
10     {
11         settings.items = $('p', this);
12
13         if(condition) settings.items = settings.items.filter(function() {
14             return condition( $(this).attr('title') );
15         });
16
17         var pageCount = Math.ceil(settings.items.length / settings.itemsPerPage);
18         var buttons =  $('.page-nav-wrap button', this.parent());
19         buttons.show().filter(function(i) { return i >= pageCount; }).hide();
20         this.switchToPage();
21     };
22
23     $.fn.switchToPage = function(index)
24     {
25         index = index || settings.page;
26         var start = index * settings.itemsPerPage;
27         var end = start + settings.itemsPerPage;
28         $('p', this).hide();
29         
30         var visibleItems = settings.items.filter(function(i) { return i >= start && i < end; });
31         visibleItems.show();        
32     }
33
34     $.fn.paginate = function(options)
35     {
36         var list = this;                 
37
38         // apply defaults
39         if (options) $.extend(settings, options);
40         settings.items = $('p', list);       
41
42         var nav = $('<p class="page-nav-wrap"></p>');
43         list.before(nav);
44         var pageCount = Math.floor(settings.items.length / settings.itemsPerPage);
45         var orphanCount = settings.items.length - (pageCount * settings.itemsPerPage);
46         var button = null;
47
48         for(var i=0; i < pageCount; i++)
49         {
50             button = $("<button type='button'>"+(i+1)+"</button>");
51             button.bind('click', i, function(event) { list.switchToPage(event.data); });
52             nav.append(button);            
53         }        
54
55         if(orphanCount > 0)
56         {
57             i = pageCount;
58             button = $("<button type='button'>"+(i+1)+"</button>");
59             button.bind('click', i, function(event) { list.switchToPage(event.data); });
60             nav.append(button);            
61         }
62
63         list.filterItems(function(){return true;});
64         list.switchToPage(0);
65     };
66 })(jQuery);