PageSourceSearch

https://shop.dementiauk.org/wp-content/plugins/donationsystem/assets/lib/footable/footable.paginate.js?ver=3.4

js dementiauk.org collected 2026-10-02 03:27:28 UTC 9,237 bytes, 266 lines download raw bytes

1(function ($, w, undefined) {
2	if (w.footable === undefined || w.footable === null) {
3		throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.');
4	}
5
6	var defaults = {
7		paginate: true,
8		pageSize: 10,
9		pageNavigation: '.pagination',
10		firstText: '«',
11		previousText: '‹',
12		nextText: '›',
13		lastText: '»',
14		limitNavigation: 0,
15		limitPreviousText: '...',
16		limitNextText: '...'
17	};
18
19	function pageInfo(ft) {
20		var $table = $(ft.table), data = $table.data();
21		this.pageNavigation = data.pageNavigation || ft.options.pageNavigation;
22		this.pageSize = data.pageSize || ft.options.pageSize;
23		this.firstText = data.firstText || ft.options.firstText;
24		this.previousText = data.previousText || ft.options.previousText;
25		this.nextText = data.nextText || ft.options.nextText;
26		this.lastText = data.lastText || ft.options.lastText;
27		this.limitNavigation = parseInt(data.limitNavigation || ft.options.limitNavigation || defaults.limitNavigation, 10);
28		this.limitPreviousText = data.limitPreviousText || ft.options.limitPreviousText;
29		this.limitNextText = data.limitNextText || ft.options.limitNextText;
30		this.limit = this.limitNavigation > 0;
31		this.currentPage = data.currentPage || 0;
32		this.pages = [];
33		this.control = false;
34	}
35
36	function Paginate() {
37		var p = this;
38		p.name = 'Footable Paginate';
39
40		p.init = function (ft) {
41			if (ft.options.paginate === true) {
42				if ($(ft.table).data('page') === false) {
43					return;
44				}
45				p.footable = ft;
46				$(ft.table)
47					.unbind('.paging')
48					.bind({
49						'footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging': function () {
50							p.setupPaging();
51						}
52					})
53					//save the filter object onto the table so we can access it later
54					.data('footable-paging', p);
55			}
56		};
57
58		p.setupPaging = function () {
59			var ft = p.footable,
60				$tbody = $(ft.table).find('> tbody');
61
62			ft.pageInfo = new pageInfo(ft);
63
64			p.createPages(ft, $tbody);
65			p.createNavigation(ft, $tbody);
66			p.fillPage(ft, $tbody, ft.pageInfo.currentPage);
67		};
68
69		p.createPages = function (ft, tbody) {
70			var pages = 1;
71			var info = ft.pageInfo;
72			var pageCount = pages * info.pageSize;
73			var page = [];
74			var lastPage = [];
75			info.pages = [];
76			var rows = tbody.find('> tr:not(.footable-filtered,.footable-row-detail)');
77			rows.each(function (i, row) {
78				page.push(row);
79				if (i === pageCount - 1) {
80					info.pages.push(page);
81					pages++;
82					pageCount = pages * info.pageSize;
83					page = [];
84				} else if (i >= rows.length - (rows.length % info.pageSize)) {
85					lastPage.push(row);
86				}
87			});
88			if (lastPage.length > 0) {
89				info.pages.push(lastPage);
90			}
91			if (info.currentPage >= info.pages.length) {
92				info.currentPage = info.pages.length - 1;
93			}
94			if (info.currentPage < 0) {
95				info.currentPage = 0;
96			}
97			if (info.pages.length === 1) {
98				//we only have a single page
99				$(ft.table).addClass('no-paging');
100			} else {
101				$(ft.table).removeClass('no-paging');
102			}
103		};
104
105		p.createNavigation = function (ft, tbody) {
106			var $nav = $(ft.table).find(ft.pageInfo.pageNavigation);
107			//if we cannot find the navigation control within the table, then try find it outside
108			if ($nav.length === 0) {
109				$nav = $(ft.pageInfo.pageNavigation);
110				//if the navigation control is inside another table, then get out
111				if ($nav.parents('table:first').length > 0 && $nav.parents('table:first') !== $(ft.table)) {
112					return;
113				}
114				//if we found more than one navigation control, write error to console
115				if ($nav.length > 1 && ft.options.debug === true) {
116					console.error('More than one pagination control was found!');
117				}
118			}
119			//if we still cannot find the control, then don't do anything
120			if ($nav.length === 0) {
121				return;
122			}
123			//if the nav is not a UL, then find or create a UL
124			if (!$nav.is('ul')) {
125				if ($nav.find('ul:first').length === 0) {
126					$nav.append('<ul />');
127				}
128				$nav = $nav.find('ul');
129			}
130			$nav.find('li').remove();
131			var info = ft.pageInfo;
132			info.control = $nav;
133			if (info.pages.length > 0) {
134				$nav.append('<li class="footable-page-arrow"><a data-page="first" href="#first">' + ft.pageInfo.firstText + '</a>');
135				$nav.append('<li class="footable-page-arrow"><a data-page="prev" href="#prev">' + ft.pageInfo.previousText + '</a></li>');
136				if (info.limit) {
137					$nav.append('<li class="footable-page-arrow"><a data-page="limit-prev" href="#limit-prev">' + ft.pageInfo.limitPreviousText + '</a></li>');
138				}
139				if (!info.limit) {
140					$.each(info.pages, function (i, page) {
141						if (page.length > 0) {
142							$nav.append('<li class="footable-page"><a data-page="' + i + '" href="#">' + (i + 1) + '</a></li>');
143						}
144					});
145				}
146				if (info.limit) {
147					$nav.append('<li class="footable-page-arrow"><a data-page="limit-next" href="#limit-next">' + ft.pageInfo.limitNextText + '</a></li>');
148					p.createLimited($nav, info, 0);
149				}
150				$nav.append('<li class="footable-page-arrow"><a data-page="next" href="#next">' + ft.pageInfo.nextText + '</a></li>');
151				$nav.append('<li class="footable-page-arrow"><a data-page="last" href="#last">' + ft.pageInfo.lastText + '</a></li>');
152			}
153			$nav.off('click', 'a[data-page]').on('click', 'a[data-page]', function (e) {
154				e.preventDefault();
155				var page = $(this).data('page');
156				var newPage = info.currentPage;
157				if (page === 'first') {
158					newPage = 0;
159				} else if (page === 'prev') {
160					if (newPage > 0) {
161						newPage--;
162					}
163				} else if (page === 'next') {
164					if (newPage < info.pages.length - 1) {
165						newPage++;
166					}
167				} else if (page === 'last') {
168					newPage = info.pages.length - 1;
169				} else if (page === 'limit-prev') {
170					newPage = -1;
171					var first = $nav.find('.footable-page:first a').data('page');
172					p.createLimited($nav, info, first - info.limitNavigation);
173					p.setPagingClasses($nav, info.currentPage, info.pages.length);
174				} else if (page === 'limit-next') {
175					newPage = -1;
176					var last = $nav.find('.footable-page:last a').data('page');
177					p.createLimited($nav, info, last + 1);
178					p.setPagingClasses($nav, info.currentPage, info.pages.length);
179				} else {
180					newPage = page;
181				}
182				if (newPage >= 0) {
183					if (info.limit && info.currentPage != newPage) {
184						var start = newPage;
185						while (start % info.limitNavigation !== 0) {
186							start -= 1; }
187						p.createLimited($nav, info, start);
188					}
189					p.paginate(ft, newPage);
190				}
191			});
192			p.setPagingClasses($nav, info.currentPage, info.pages.length);
193		};
194
195		p.createLimited = function(nav, info, start){
196			start = start || 0;
197			nav.find('li.footable-page').remove();
198			var i, page,
199				$prev = nav.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(),
200				$next = nav.find('li.footable-page-arrow > a[data-page="limit-next"]').parent();
201			for (i = info.pages.length - 1; i >=0 ; i--) {
202				page = info.pages[i];
203				if (i >= start && i < start + info.limitNavigation && page.length > 0) {
204					$prev.after('<li class="footable-page"><a data-page="' + i + '" href="#">' + (i + 1) + '</a></li>');
205				}
206			}
207			if (start === 0) {
208				$prev.hide(); } else {
209				$prev.show(); }
210				if (start + info.limitNavigation >= info.pages.length) {
211					$next.hide(); } else {
212								$next.show(); }
213		};
214
215		p.paginate = function (ft, newPage) {
216			var info = ft.pageInfo;
217			if (info.currentPage !== newPage) {
218				var $tbody = $(ft.table).find('> tbody');
219
220				//raise a pre-pagin event so that we can cancel the paging if needed
221				var event = ft.raise('footable_paging', { page: newPage, size: info.pageSize });
222				if (event && event.result === false) {
223					return;
224				}
225
226				p.fillPage(ft, $tbody, newPage);
227				info.control.find('li').removeClass('active disabled');
228				p.setPagingClasses(info.control, info.currentPage, info.pages.length);
229			}
230		};
231
232		p.setPagingClasses = function (nav, currentPage, pageCount) {
233			nav.find('li.footable-page > a[data-page=' + currentPage + ']').parent().addClass('active');
234			if (currentPage >= pageCount - 1) {
235				nav.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass('disabled');
236				nav.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass('disabled');
237			}
238			if (currentPage < 1) {
239				nav.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass('disabled');
240				nav.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass('disabled');
241			}
242		};
243
244		p.fillPage = function (ft, tbody, pageNumber) {
245			ft.pageInfo.currentPage = pageNumber;
246			$(ft.table).data('currentPage', pageNumber);
247			tbody.find('> tr').hide();
248			$(ft.pageInfo.pages[pageNumber]).each(function () {
249				p.showRow(this, ft);
250			});
251		};
252
253		p.showRow = function (row, ft) {
254			var $row = $(row), $next = $row.next(), $table = $(ft.table);
255			if ($table.hasClass('breakpoint') && $row.hasClass('footable-detail-show') && $next.hasClass('footable-row-detail')) {
256				$row.add($next).show();
257				ft.createOrUpdateDetailRow(row);
258			} else {
259				$row.show();
260			}
261		};
262	}
263
264	w.footable.plugins.register(Paginate, defaults);
265
266}
266)(jQuery, window);

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.