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