PageSourceSearch

https://astroforumspace.com/wp-content/plugins/catch-infinite-scro…/js/catch-infinite-scroll-public.js?ver=2.2

js astroforumspace.com collected 2026-09-24 21:24:45 UTC 6,339 bytes, 234 lines download raw bytes

1(function ($) {
2	'use strict';
3	/**
4	 * All of the code for your public-facing JavaScript source
5	 * should reside in this file.
6	 *
7	 * Note: It has been assumed you will write jQuery code here, so the
8	 * $ function reference has been prepared for usage within the scope
9	 * of this function.
10	 *
11	 * This enables you to define handlers, for when the DOM is ready:
12	 *
13	 * $(function() {
14	 *
15	 * });
16	 *
17	 * When the window is loaded:
18	 *
19	 * $( window ).load(function() {
20	 *
21	 * });
22	 *
23	 * ...and/or other possibilities.
24	 *
25	 * Ideally, it is not considered best practise to attach more than a
26	 * single DOM-ready or window-load handler for a particular page.
27	 * Although scripts in the WordPress core, Plugins and Themes may be
28	 * practising this, we should strive to set a better example in our own work.
29	 */
30	window.addEventListener('load', function () {
31		var nextSelector = selector['nextSelector'];
32		var navigationSelector = selector['navigationSelector'];
33		var contentSelector = selector['contentSelector'];
34		var itemSelector = selector['itemSelector'];
35		var themeName = selector.theme;
36
37		/** Support for TwentyTwenty theme */
38		if( 'twentytwenty' === themeName ) {
39			if ('' !== contentSelector) {
40				itemSelector =
41					selector['contentSelector'] + ' ' + selector['itemSelector'];
42			} else {
43				itemSelector = selector['itemSelector'];
44			}
45		} else {
46			if (
47				"." !== selector.contentSelector.charAt(0) &&
48				"#" !== selector.contentSelector.charAt(0)
49			) {
50				if ($("." + selector.contentSelector).length) {
51				contentSelector = "." + selector.contentSelector;
52				} else if ($("#" + selector.contentSelector).length) {
53				contentSelector = "#" + selector.contentSelector;
54				}
55			} else {
56				contentSelector = selector.contentSelector;
57			}
58			itemSelector = contentSelector + " " + selector['itemSelector'];
59		}
60
61		var destUrl = $(nextSelector).attr('href');
62		var finished = false;
63		var flag = false;
64
65		if (
66			$(nextSelector).length &&
67			$(navigationSelector).length &&
68			// $(contentSelector).length &&
69			$(itemSelector).length
70		) {
71			$(navigationSelector).css('display', 'none');
72			$('body').addClass('infinite-scroll');
73
74			var trigger = selector['event'];
75			$(itemSelector)
76				.last()
77				.after(
78					'<div id="ctis-loading" class="infinite-loader ctis-loader-elements"><span class="spinner"><img src="' +
79						selector['image'] +
80						'" alt="catch-infinite-scroll-loader"></span></div>'
81				);
82			if ('click' == trigger) {
83				$(itemSelector)
84					.last()
85					.after(
86						'<div id="infinite-handle" class="ctis-load-more-container ctis-loader-elements"><span class="ctis-load-more"><button>
86' +
87							selector['load_more_text'] +
88							'</button></span></div>'
89					);
90				load_on_click();
91			} else {
92				load_on_scroll();
93			}
94
95		}
96
97		function ctis_load_more() {
98			$.ajax({
99				url: destUrl,
100				beforeSend: show_loader(),
101				success: function (results) {
102					if (selector['jetpack_enabled']) {
103						$('.infinite-loader').css('text-indent', '0');
104						$('.infinite-loader').css('height', 'auto');
105					}
106					hide_loader();
107					var obj = $(results);
108
109					var elem = obj.find(itemSelector);
110					// console.log(elem);
111					var next = obj.find(nextSelector);
112
113					if (next.length !== 0) {
114						$(nextSelector).attr('href', next.attr('href'));
115					}
116
117					// var itemClass = selector['itemSelector'].split('.');
118
119					elem = elem.each(function (index, value) {
120						var el;
121						if (
122							$(value).find('img').hasClass('lazy') &&
123							$(value).find('img').attr('data-src') !== undefined
124						) {
125							var src = $(value).find('img').attr('data-src');
126							$(value)
127								.find('img')
128								.attr('src', src)
129								.removeClass('lazy')
130								.removeAttr('data-src');
131						}
132
133						/** Support: Logic for prepending separator in TwentyTwenty theme */
134						var el;
135						if ('twentytwenty' === themeName) {
136							/* sepp = document.getElementsByClassName('post-separator');
137                console.log(sepp[0].classList); */
138							// Create a hr separator as in the theme as using existing element from the DOM didn't work in this theme for some reason
139							var hr = document.createElement('HR');
140							hr.classList.add(
141								'post-separator',
142								'styled-separator',
143								'is-style-wide',
144								'section-inner'
145							);
146							// console.log(hr);
147							// hr.appendChild($(value));
148							el = $(value).prepend(hr);
149							//el = $(value);
150						} else {
151							el = $(value);
152						}
153						return el;
154					});
155
156					elem.each(function (i, v) {
157						$(itemSelector).last().after($(this));
158					});
159
160					$(itemSelector).trigger('post-load');
161
162					if (next.length !== 0 && next.attr('href') != '#') {
163						destUrl = $(nextSelector).attr('href');
164					} else {
165						finished = true;
166						$('body').addClass('infinity-end');
167						$('.ctis-load-more-container').hide();
168						$(itemSelector)
169							.last()
170							.after(
171								'<div class="ctis-finished-notice infinite-loader ctis-loader-elements"><span class="finish-text spinner">' +
172									selector['finish_text'] +
173									'</span></div>'
174							);
175					}
176
177					// Create the event
178					let event = new CustomEvent('afterScroll', {
179						detail: 'Hook some event after load completes',
180					});
181
182					// Dispatch/Trigger/Fire the event
183					document.dispatchEvent(event);
184				},
185				error: function () {
186					hide_loader();
187					//$(".ctis-finished-notice").html('Error retrieving posts...');
188				},
189			});
190		}
191
192		function show_loader() {
193			flag = true;
194			$('#ctis-loading').show();
195			// $('.infinite-loader').show();
196			$('.ctis-load-more-container').hide();
197		}
198
199		function hide_loader() {
200			$('#ctis-loading').hide();
201			// $('.infinite-loader').hide();
202			$('.ctis-load-more-container').show();
203			setTimeout(function () {
204				flag = false;
205			}, 500);
206		}
207
208		function load_on_scroll() {
209			$(window).on('scroll', function () {
210				var t = $(this),
211					elem = $(itemSelector).last();
212
213				if (typeof elem == 'undefined') {
214					return;
215				}
216
217				if (
218					flag === false &&
219					!finished &&
220					t.scrollTop() + t.height() >=
221						elem.offset().top + elem.height()
222				) {
223					ctis_load_more();
224				}
225			});
226		}
227
228		function load_on_click() {
229			$('body').on('click', '.ctis-load-more', function () {
230				ctis_load_more();
231			});
232		}
233	});
234})(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.