Subversion Repositories cheapmusic

Rev

Rev 128 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
43 - 1
(function($) {
2
    $.fn.paginate = function(options) {
3
        var defaults = {
4
            paginateElement: 'li',
5
            hashPage: 'page',
6
            elementsPerPage: 10,
124 - 7
            maxPageButtons: 5,
43 - 8
            firstButton: true,
9
            firstButtonText: '<<',
10
            lastButton: true,
11
            lastButtonText: '>>',
12
            prevButton: true,
13
            prevButtonText: '<',
14
            nextButton: true,
15
            nextButtonText: '>',
120 - 16
            extraButtonClasses: '',
17
            functionOnNav: null
119 - 18
        };
43 - 19
 
20
        return this.each(function() {
21
            if (typeof plugin == 'undefined') {
22
                plugin = {};
23
                newPlugin = true;
24
            } else {
25
                newPlugin = false;
26
            }
27
 
28
            if (newPlugin) {
29
                plugin.el = $(this);
30
                plugin.el.addClass('paginateList');
31
 
32
                plugin.settings = {
33
                    pages: 0,
34
                    objElements: Object,
35
                    currentPage: 1
119 - 36
                };
43 - 37
            }
38
 
39
            var getNbOfPages = function() {
40
                return Math.ceil(plugin.objElements.length / plugin.settings.elementsPerPage);
41
            };
42
 
43
            var displayNav = function() {
44
                htmlNav = '<div class="paginateNav text-center' + (plugin.settings.pages <= 1 ? " invisible" : "") + '">';
45
 
46
                if (plugin.settings.firstButton) {
47
                    htmlNav += '<a href="#' + plugin.settings.hashPage + ':1" title="First page" rel="1" class="first mr-1 ' + plugin.settings.extraButtonClasses + '">' + plugin.settings.firstButtonText + '</a>';
48
                }
49
 
50
                if (plugin.settings.prevButton) {
149 - 51
                    htmlNav += '<a href="" title="Previous Page" rel="" class="prev mr-1 ' + plugin.settings.extraButtonClasses + '">' + plugin.settings.prevButtonText + '</a>';
43 - 52
                }
53
 
128 - 54
                pagesLeft = plugin.settings.pages - plugin.settings.currentPage + 1;
55
                if (plugin.settings.pages > plugin.settings.maxPageButtons && pagesLeft >= plugin.settings.maxPageButtons) {
56
                    startPage = plugin.settings.currentPage - Math.floor((plugin.settings.maxPageButtons - 2) / 2);
57
                    showPages = plugin.settings.maxPageButtons - 2;
58
                } else {
59
                    startPage = plugin.settings.pages - plugin.settings.maxPageButtons + 1;
60
                    showPages = plugin.settings.maxPageButtons;
61
                }
124 - 62
                startPage = (startPage < 1) ? 1 : startPage;
128 - 63
 
64
                for (j = 1, i = startPage; j <= showPages && i <= plugin.settings.pages; j++, i++) {
124 - 65
                    htmlNav += '<a href="#' + plugin.settings.hashPage + ':' + i + '" title="Page ' + i + '" rel="' + i + '" class="pageNoNav' + i + ' page mx-1 ' + plugin.settings.extraButtonClasses + '">' + i + '</a>';
119 - 66
                }
43 - 67
 
128 - 68
                if (plugin.settings.pages > plugin.settings.maxPageButtons && pagesLeft >= plugin.settings.maxPageButtons) {
69
                    htmlNav += '<span class="btn-sm mx-1 ' + plugin.settings.extraButtonClasses + '">...</span>';
70
                    htmlNav += '<a href="#' + plugin.settings.hashPage + ':' + plugin.settings.pages + '" title="Page ' + plugin.settings.pages + '" rel="' + plugin.settings.pages + '" class="pageNoNav' + plugin.settings.pages + ' page mx-1 ' + plugin.settings.extraButtonClasses + '">' + plugin.settings.pages + '</a>';
71
                }
72
 
43 - 73
                if (plugin.settings.nextButton) {
149 - 74
                    htmlNav += '<a href="" title="Next Page" rel="" class="next ml-1 ' + plugin.settings.extraButtonClasses + '">' + plugin.settings.nextButtonText + '</a>';
43 - 75
                }
76
 
77
                if (plugin.settings.lastButton) {
78
                    htmlNav += '<a href="#' + plugin.settings.hashPage + ':' + plugin.settings.pages + '" title="Last page" rel="' + plugin.settings.pages + '" class="last ml-1 ' + plugin.settings.extraButtonClasses + '">' + plugin.settings.lastButtonText + '</a>';
79
                }
80
 
81
                htmlNav += '</div>';
82
                plugin.nav = $(htmlNav);
128 - 83
//                plugin.nav.css({
84
//                    'width': plugin.el.width()
85
//                });
86
 
124 - 87
                $('.paginateNav').remove();
43 - 88
                plugin.el.after(plugin.nav);
89
 
90
                var elSelector = '#' + plugin.el.get(0).id + ' + ';
91
                $(elSelector + ' .paginateNav a.page,' +
92
                    elSelector + ' .paginateNav a.first,' +
93
                    elSelector + ' .paginateNav a.last').on('click', function(e) {
94
                    e.preventDefault();
95
                    displayPage($(this).attr('rel'));
120 - 96
                    if (plugin.settings.functionOnNav) plugin.settings.functionOnNav();
43 - 97
                });
98
 
99
                $(elSelector + ' .paginateNav a.prev').on('click', function(e) {
100
                    e.preventDefault();
101
                    page = plugin.settings.currentPage > 1 ? parseInt(plugin.settings.currentPage) - 1 : 1;
102
                    displayPage(page);
120 - 103
                    if (plugin.settings.functionOnNav) plugin.settings.functionOnNav();
43 - 104
                });
105
 
106
                $(elSelector + ' .paginateNav a.next').on('click', function(e) {
107
                    e.preventDefault();
108
                    page = plugin.settings.currentPage < plugin.settings.pages ? parseInt(plugin.settings.currentPage) + 1 : plugin.settings.pages;
109
                    displayPage(page);
120 - 110
                    if (plugin.settings.functionOnNav) plugin.settings.functionOnNav();
43 - 111
                });
112
            };
113
 
120 - 114
            var displayPage = function(page) {
43 - 115
                plugin.settings.currentPage = parseInt(page);
124 - 116
                displayNav();
43 - 117
                offsetStart = (page - 1) * plugin.settings.elementsPerPage;
118
                offsetEnd = page * plugin.settings.elementsPerPage;
120 - 119
                transition_default (offsetStart, offsetEnd);
43 - 120
 
121
                if (plugin.nav !== undefined) {
122
                    plugin.nav.find('.current').removeClass('current');
124 - 123
//                    plugin.nav.find('a.page:eq(' + (page - 1) + ')').addClass('current');
124
                    plugin.nav.find('a.pageNoNav' + page + '').addClass('current');
43 - 125
                }
126
 
127
                switch (plugin.settings.currentPage) {
128
                    case 1:
129
                        $('.paginateNav a', plugin).removeClass('disabled');
130
                        $('.paginateNav a.first, .paginateNav a.prev', plugin).addClass('disabled');
131
                        break;
132
                    case plugin.settings.pages:
133
                        $('.paginateNav a', plugin).removeClass('disabled');
134
                        $('.paginateNav a.last, .paginateNav a.next', plugin).addClass('disabled');
135
                        break;
136
                    default:
137
                        $('.paginateNav a', plugin).removeClass('disabled');
138
                        break;
139
                }
140
            };
141
 
142
            var transition_default = function(offsetStart, offsetEnd) {
149 - 143
                //plugin.currentElements.hide();
144
                plugin.currentElements.addClass("d-none");
43 - 145
                plugin.currentElements = plugin.objElements.slice(offsetStart, offsetEnd).clone();
146
                plugin.el.html(plugin.currentElements);
149 - 147
                //plugin.currentElements.show();
148
                plugin.currentElements.removeClass("d-none");
43 - 149
            };
150
 
151
            plugin.settings = $.extend({}, defaults, options);
124 - 152
            plugin.settings.currentPage = 1;
43 - 153
            plugin.currentElements = $([]);
154
 
155
            if (newPlugin) {
156
                plugin.objElements = plugin.el.find(plugin.settings.paginateElement);
157
            } else {
158
                $('.paginateNav').remove();
159
            }
160
 
161
            plugin.settings.pages = getNbOfPages();
162
            plugin.el.html();
163
 
164
            displayNav();
165
 
166
            page = 1;
167
            if (document.location.hash.indexOf('#' + plugin.settings.hashPage + ':') != -1) {
168
                page = parseInt(document.location.hash.replace('#' + plugin.settings.hashPage + ':', ''));
169
                if (page.length <= 0 || page < 1 || page > plugin.settings.pages) {
170
                    page = 1;
171
                }
172
            }
173
 
120 - 174
            displayPage(page);
43 - 175
        });
176
    };
66 - 177
})(jQuery);