PageSourceSearch

https://www.olomedia.com/wp-content/plugins/team/assets/front/js/jquery.mixitup-pagination.js

js olomedia.com collected 2026-09-24 10:58:16 UTC 10,418 bytes, 423 lines download raw bytes

1/**!
2 * MixItUp Pagination v1.1.0
3 * A Premium Extension for MixItUp
4 *
5 * @copyright Copyright 2014 KunkaLabs Limited.
6 * @author    KunkaLabs Limited.
7 * @link      https://mixitup.kunkalabs.com
8 *
9 * @license   To be used under the same terms as MixItUp core.
10 *            https://mixitup.kunkalabs.com/licenses/
11 */ 
12
13(function($, undf){
14	
15	/* Add Actions
16	---------------------------------------------------------------------- */
17	
18	/**
19	 * Constructor
20	 * @extends _constructor
21	 */
22	
23	$.MixItUp.prototype.addAction('_constructor', 'pagination', function(){
24		var self = this;
25
26		self.pagination = {
27			limit: 0,
28			loop: false,
29			generatePagers: true,
30			maxPagers: 5,
31			pagerClass: '',
32			prevButtonHTML: '«',
33			nextButtonHTML: '»'
34		};
35
36		$.extend(self.selectors, {
37			pagersWrapper: '.pager-list',
38			pager: '.pager'
39		});
40		
41		$.extend(self.load, {
42			page: 1
43		});
44
45		self._activePage = null;
46		self._totalPages = null;
47
48		self._$pagersWrapper = $();
49	}, 1);
50	
51	/**
52	 * Initialize
53	 * @extends $.MixItUp.prototype._init
54	 * @priority 1
55	 */
56	
57	$.MixItUp.prototype.addAction('_init', 'pagination', function(){
58		var self = this;
59
60		self._activePage = self.load.page * 1;
61		self.pagination.maxPagers = (
62										typeof self.pagination.maxPagers === 'number' && 
63										self.pagination.maxPagers < 5
64									) ? 
65										5 : 
66										self.pagination.maxPagers;
67	}, 1);
68	
69	/**
70	 * Bind Handlers
71	 * @extends $.MixItUp.prototype._bindHandlers
72	 * @priority 1
73	 */
74	
75	$.MixItUp.prototype.addAction('_bindHandlers', 'pagination', function(){
76		var self = this;
77
78		if(self.pagination.generatePagers){
79			self._$pagersWrapper = $(self.selectors.pagersWrapper);
80		};
81
82		if(self.controls.live){
83			self._$body.on('click.mixItUp.'+self._id, self.selectors.pager, function(){
84				self._processClick($(this), 'page');
85			});
86		} else {
87			self._$pagersWrapper.on('click.mixItUp.'+self._id, self.selectors.pager, function(){;
88				self._processClick($(this), 'page');
89			});
90		}
91	}, 1);
92	
93	/**
94	 * Process Click
95	 * @extends $.MixItUp.prototype._processClick
96	 * @priority 1
97	 */
98	
99	$.MixItUp.prototype.addAction('_processClick', 'pagination', function(args){
100		var self = this,
101			pageNumber = null,
102			$button = args[0],
103			type = args[1];
104
105		if(type === 'page'){
106			pageNumber = $button.attr('data-page') || false;
107
108			if(pageNumber === 'prev'){
109				pageNumber = self._getPrevPage();
110			} else if(pageNumber === 'next'){
111				pageNumber = self._getNextPage();
112			} else if(pageNumber){
113				pageNumber = pageNumber * 1;
114			} else {
115				return false;
116			}
117			
118			if(!$button.hasClass(self.controls.activeClass)){
119				self.paginate(pageNumber);
120			}
121		}
122	}, 1);
123	
124	/**
125	 * Build State
126	 * @extends $.MixItUp.prototype._buildState
127	 * @priority 1
128	 */
129	
130	$.MixItUp.prototype.addAction('_buildState', 'pagination', function(){
131		var self = this;
132
133		$.extend(self._state, {
134			limit: self.pagination.limit,
135			activePage: self._activePage,
136			totalPages: self._totalPages
137		});
138	}, 1);
139	
140	/**
141	 * Sort
142	 * @extends $.MixItUp.prototype._sort
143	 * @priority 1
144	 */
145	
146	$.MixItUp.prototype.addAction('_sort', 'pagination', function(){
147		var self = this;
148
149		if(self.pagination.limit > 0){
150			self._printSort();
151		}
152	}, 1);
153	
154	/**
155	 * Filter
156	 * @extends $.MixItUp.prototype._filter
157	 * @priority 1
158	 */
159	
160	$.MixItUp.prototype.addAction('_filter', 'pagination', function(){
161		var self = this,
162			startPageAt = self.pagination.limit * (self.load.page - 1),
163			endPageAt = (self.pagination.limit * self.load.page) - 1,
164			$inPage = null,
165			$notInPage = null;
166
167		self._activePage = self.load.page;
168		self._totalPages = self.pagination.limit ? Math.ceil(self._$show.length / self.pagination.limit) : 1;
169
170		if(self.pagination.limit > 0){
171
172			$inPage = self._$show.filter(function(index){
173				return index >= startPageAt && index <= endPageAt;
174			});
175
176			$notInPage = self._$show.filter(function(index){
177				return index < startPageAt || index > endPageAt;
178			});
179
180			self._$show = $inPage;
181			self._$hide = self._$hide.add($notInPage);
182
183			if(self._sorting){
184				self._printSort(true);
185			}
186		}
187
188		if(self.pagination.generatePagers && self._$pagersWrapper.length){
189			self._generatePagers();	
190		};
191	}, 1);
192	
193	/**
194	 * MultiMix
195	 * @extends $.MixItUp.prototype.multiMix
196	 * @priority 0
197	 */
198	
199	$.MixItUp.prototype.addAction('multiMix', 'pagination', function(args){
200		var self = this,
201			args = self._parseMultiMixArgs(args);
202
203		if(args.command.paginate !== undf){
204			typeof args.command.paginate === 'object' ? 
205				$.extend(self.pagination, args.command.paginate) :
206				self.load.page = args.command.paginate;
207
208		} else if(args.command.filter !== undf || args.command.sort !== undf){
209			self.load.page = 1;
210		}
211	}, 0);
212	
213	/**
214	 * Destory
215	 * @extends $.MixItUp.prototype.destroy
216	 * @priority 1
217	 */
218	
219	$.MixItUp.prototype.addAction('destroy', 'pagination', function(){
220		var self = this;
221
222		self._$pagersWrapper.off('.mixItUp').html('');
223	}, 1);
224	
225	/* Add Private Methods
226	---------------------------------------------------------------------- */
227	
228	$.MixItUp.prototype.extend({
229		
230		/**
231		 * Get Next Page
232		 * @return {number} page
233		 */
234
235		_getNextPage: function(){
236			var self = this,
237				page = self._activePage + 1,
238				page = self._activePage < self._totalPages ? 
239					page :
240						self.pagination.loop ?
241							1 :
242							self._activePage;
243
244			return self._execFilter('_getNextPage', page * 1);
245		},
246
247		/**
248		 * Get Previous Page
249		 * @return {number} page
250		 */
251
252		_getPrevPage: function(){
253			var self = this,
254				page = self._activePage - 1,
255				page = self._activePage > 1 ?
256					page :
257						self.pagination.loop ?
258							self._totalPages :
259							self._activePage;
260
261			return self._execFilter('_getPrevPage', page * 1);
262		},
263
264		/**
265		 * Generate Pagination Controls
266		 */
267
268		_generatePagers: function(){
269			var self = this,
270				pagerTag = self._$pagersWrapper[0].nodeName === 'UL' ? 'li' : 'span',
271				pagerClass = self.pagination.pagerClass ? self.pagination.pagerClass+' ' : '',
272
273				prevButtonHTML = '<'+pagerTag+' class="'+pagerClass+'pager page-prev" data-page="prev"><span>'+self.pagination.prevButtonHTML+'</span></'+pagerTag+'>',
274				prevButtonHTML = (self._activePage > 1) ? 
275					prevButtonHTML : self.pagination.loop ? prevButtonHTML :
276					'<'+pagerTag+' class="'+pagerClass+'pager page-prev disabled"><span>'+self.pagination.prevButtonHTML+'</span></'+pagerTag+'>';
277
278				nextButtonHTML = '<'+pagerTag+' class="'+pagerClass+'pager page-next" data-page="next"><span>'+self.pagination.nextButtonHTML+'</span></'+pagerTag+'>',
279				nextButtonHTML = (self._activePage < self._totalPages) ? 
280					nextButtonHTML : self.pagination.loop ? nextButtonHTML :
281					'<'+pagerTag+' class="'+pagerClass+'pager page-next disabled"><span>'+self.pagination.nextButtonHTML+'</span></'+pagerTag+'>';
282
283				totalButtons = (
284									self.pagination.maxPagers !== false &&
285									self._totalPages > self.pagination.maxPagers
286								) ? 
287									self.pagination.maxPagers : 
288									self._totalPages,
289				pagerButtonsHTML = '',
290				pagersHTML = '',
291				wrapperClass = '';
292
293			self._execAction('_generatePagers', 0);
294
295			for(var i = 0; i < totalButtons; i++){
296				var pagerNumber = null,
297					classes = '';
298
299				if(i === 0){
300					pagerNumber = 1;
301					if(
302						self.pagination.maxPagers !== false &&
303						self._activePage > (self.pagination.maxPagers - 2) && 
304						self._totalPages > self.pagination.maxPagers
305					){
306						classes = ' page-first';
307					}
308				} else {
309					if(
310						self.pagination.maxPagers === false ||
311						totalButtons < self.pagination.maxPagers
312					){
313						pagerNumber = i + 1;
314					} else {
315						if(i === self.pagination.maxPagers - 1){
316							pagerNumber = self._totalPages;
317							if(self._activePage < self._totalPages - 2 && self._totalPages > self.pagination.maxPagers){
318								classes = ' page-last';
319							}
320						} else{
321							if(
322								self._activePage > self.pagination.maxPagers - 2 &&
323								self._activePage < self._totalPages - 2
324							){
325								pagerNumber = self._activePage - (2 - i);
326							} else if(self._activePage < self.pagination.maxPagers - 1){
327								pagerNumber = i + 1;
328							} else if(self._activePage >= self._totalPages - 2){
329								pagerNumber = self._totalPages - (self.pagination.maxPagers - 1 - i);
330							}
331						}
332					}
333				}
334
335				classes = (pagerNumber == self._activePage) ? classes+' '+self.controls.activeClass : classes;
336
337				pagerButtonsHTML += '<'+pagerTag+' class="'+pagerClass+'pager page-number'+classes+'" data-page="'+pagerNumber+'"><span>'+pagerNumber+'</span></'+pagerTag+'> ';
338			}
339
340			pagersHTML = self._totalPages > 1 ? prevButtonHTML+' '+pagerButtonsHTML+' '+nextButtonHTML : '';
341			
342			wrapperClass = self._totalPages > 1 ? '' : 'no-pagers';
343
344			self._$pagersWrapper.html(pagersHTML).removeClass('no-pagers').addClass(wrapperClass);
345
346			self._execAction('_generatePagers', 1);
347		},
348
349		/**
350		 * Parse Paginate Arguments
351		 * @param {array} args
352		 * @return {object} output
353		 */
354
355		_parsePaginateArgs: function(args){
356			var self = this,
357				output = {
358					command: null,
359					animate: self.animation.enable,
360					callback: null
361				};
362
363			for(var i = 0; i < args.length; i++){
364				var arg = args[i];
365
366				if(arg !== null){	
367					if(typeof arg === 'object' || typeof arg === 'number'){
368						output.command = arg;
369					} else if(typeof arg === 'boolean'){
370						output.animate = arg;
371					} else if(typeof arg === 'function'){
372						output.callback = arg;
373					}
374				}
375			}
376
377			return self._execFilter('_parsePaginateArgs', output, arguments);
378		}
379	});
380	
381	/* Add Public Methods
382	---------------------------------------------------------------------- */
383	
384	$.MixItUp.prototype.extend({
385		
386		/**
387		 * Paginate
388		 * @param {array} arguments
389		 */
390
391		paginate: function(){
392			var self = this,
393				args = self._parsePaginateArgs(arguments);
394
395			self.multiMix({paginate: args.command}, args.animate, args.callback);
396		},
397
398		/**
399		 * nextPage
400		 * @param {array} arguments
401		 */
402
403		nextPage: function(){
404			var self = this,
405				args = self._parsePaginateArgs(arguments);
406
407			self.multiMix({paginate: self._getNextPage()}, args.animate, args.callback);
408		},
409
410		/**
411		 * prevPage
412		 * @param {array} arguments
413		 */
414
415		prevPage: function(){
416			var self = this,
417				args = self._parsePaginateArgs(arguments);
418
419			self.multiMix({paginate: self._getPrevPage()}, args.animate, args.callback);
420		}
421	});
422	
423})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.