PageSourceSearch

https://thenewly.ca/wp-content/themes/uncode/library/js/cssGrid.js?ver=210893640

js thenewly.ca collected 2026-10-04 11:19:51 UTC 16,980 bytes, 443 lines download raw bytes

1(function($) {
2	"use strict";
3
4	UNCODE.cssGrid = function() {
5	if ($('.cssgrid-layout').length > 0) {
6		var cssGridContainersArray = [];
7		var transitionDuration = [];
8		var $filters = $('.cssgrid-system .cssgrid-filters');
9
10		$('[class*="cssgrid-container"]').each(function() {
11			cssGridContainersArray.push($(this));
12			transitionDuration.push($('.t-inside.animate_when_almost_visible', this).length > 0 ? 0 : '0.5s');
13		});
14
15		var init_cssGridAjax = function() {
16			for (var i = 0, len = cssGridContainersArray.length; i < len; i++) {
17				var cssGridSystem = $(cssGridContainersArray[i]).closest($('.cssgrid-system')),
18					cssGridId = cssGridSystem.attr('id');
19
20				cssGridSystem.data('transitionDuration', transitionDuration[i]);
21
22				if ($(cssGridContainersArray[i]).hasClass('cssgrid-infinite') && $.fn.infinitescroll) {
23					$(cssGridContainersArray[i]).infinitescroll({
24						navSelector: '#' + cssGridId + ' .loadmore-button', // selector for the pagination container
25						nextSelector: '#' + cssGridId + ' .loadmore-button a', // selector for the NEXT link (to page 2)
26						itemSelector: '#' + cssGridId + ' .cssgrid-layout .tmb, #' + cssGridId + ' .grid-filters li.filter-cat, #' + cssGridId + ' .woocommerce-result-count-wrapper--default', // selector for all items you'll retrieve
27						animate: false,
28						behavior: 'local',
29						debug: false,
30						loading: {
31							selector: '#' + cssGridId + '.cssgrid-system .cssgrid-footer-inner',
32							speed: 0,
33							finished: undefined,
34							msg: $('#' + cssGridId + ' .loadmore-button'),
35						},
36						errorCallback: function() {
37							var cssgrid_system = $(this).closest('.cssgrid-system');
38							$('.loading-button', cssgrid_system).hide();
39							$('.loadmore-button', cssgrid_system).attr('style', 'display:none !important');
40						}
41					},
42					// append the new items to cssGrid on the infinitescroll callback function.
43					function(newElements, opts) {
44						var $cssGrid = $(this),
45							cssGridSystemCont = $cssGrid.closest('.cssgrid-system'),
46							cssGridId = cssGridSystemCont.attr('id'),
47							filters = new Array(),
48							$loading_button = cssGridSystemCont.find('.loading-button'),
49							$infinite_button = cssGridSystemCont.find('.loadmore-button'),
50							$numPages = $('a', $infinite_button).data('pages'),
51							$woo_results,
52							delay = 300;
53						$('a', $infinite_button).html($('a', $infinite_button).data('label'));
54						$infinite_button.show();
55						$loading_button.hide();
56						if ( $numPages != undefined && opts.state.currPage == $numPages) $infinite_button.hide();
57						$('> li', $cssGrid).remove();
58						$('.cssgrid-container').find('.woocommerce-result-count-wrapper').remove();
59						$.each($(newElements), function (index, val) {
60							if ($(val).hasClass('woocommerce-result-count-wrapper')) {
61								$woo_results = $(val);
62								delete newElements[index];
63							} else {
64								$(val).addClass('tmb-grid');
65								if ($(val).is("li")) {
66									filters.push($(val)[0]);
67								}
68							}
69							$(val).addClass('uncode-appended');
70						});
71						newElements = newElements.filter(function(x) {
72							return filters.indexOf(x) < 0
73						});
74						$.each($(filters), function(index, val) {
75							if ($('#' + cssGridId + ' a[data-filter="' + $('a', val).attr('data-filter') + '"]').length == 0) $('#' + cssGridId + ' .grid-filters ul').append($(val));
76						});
77						if ($woo_results && $woo_results.length > 0) {
78							var old_count = cssGridSystemCont.find('.woocommerce-result-count').text();
79							var new_count = $woo_results.find('.woocommerce-result-count').text();
80							var old_start = old_count.match(/(\d+)–(\d+)/)[1];
81							var new_end = new_count.match(/(\d+)–(\d+)/)[2];
82							function replaceMatch(match, p1, p2) {
83        						return old_start + '–' + new_end;
84							}
85							var new_count_text = old_count.replace(/(\d+)–(\d+)/, replaceMatch);
86							cssGridSystemCont.find('.woocommerce-result-count').text(new_count_text);
87						}
88
89						var filterValue = cssGridSystemCont.find('.grid-nav-link.active').attr('data-filter');
90						var sequential = cssGridSystemCont.hasClass('cssgrid-animate-sequential') ? true : false;
91						if (filterValue !== undefined && filterValue != '*') {
92							$(newElements).hide();
93							var els_to_show = $();
94							$(newElements).each(function() {
95								var el = $(this);
96								if (el.hasClass(filterValue)) {
97									els_to_show = els_to_show.add(el);
98									el.show();
99								}
100							});
101							UNCODE.animate_css_grids(cssGridSystemCont, els_to_show, els_to_show.length, sequential, true);
102						} else {
103							UNCODE.animate_css_grids(cssGridSystemCont, $(newElements), $(newElements).length, sequential, true);
104						}
105
106						UNCODE.adaptive();
107						if (SiteParameters.dynamic_srcset_active === '1') {
108							UNCODE.refresh_dynamic_srcset_size($cssGrid);
109						}
110						if (typeof UNCODE.lightbox !== 'undefined' && !SiteParameters.lbox_enhanced) {
111							var getLightbox = UNCODE.lightboxArray['ilightbox_' + cssGridId];
112							if (typeof getLightbox === 'object') {
113								getLightbox.refresh();
114							} else {
115								UNCODE.lightbox();
116							}
117						}
118						if ( typeof twttr !== 'undefined' ) {
119							twttr.widgets.load(cssGridContainersArray[i]);
120						}
121
122						UNCODE.carousel($(newElements));
123						requestTimeout(function() {
124							$cssGrid.trigger('more-items-loaded');
125							$(window).trigger('more-items-loaded');
126							window.dispatchEvent(new CustomEvent('uncode-more-items-loaded'));
127						}, 1000);
128
129					});
130					if ($(cssGridContainersArray[i]).hasClass('cssgrid-infinite-button')) {
131						var $cssgrid_el = $(cssGridContainersArray[i]),
132							$infinite_button = $cssgrid_el.closest('.cssgrid-system').find('.loadmore-button a');
133						$cssgrid_el.infinitescroll('pause');
134						$infinite_button.on('click', function(event) {
135							event.preventDefault();
136							var $cssgrid_system = $(event.target).closest('.cssgrid-system'),
137							$cssgrid_el = $cssgrid_system.find('.cssgrid-container'),
138							cssGridId = $cssgrid_system.attr('id');
139							$(event.currentTarget).html(SiteParameters.loading);
140							$cssgrid_el.infinitescroll('resume');
141							$cssgrid_el.infinitescroll('retrieve');
142							$cssgrid_el.infinitescroll('pause');
143						});
144					}
145				}
146			}
147		};
148
149		init_cssGridAjax();
150
151		if ($('.cssgrid-pagination').length > 0) {
152			$('.cssgrid-system').on('click', '.pagination a', function(evt) {
153				evt.preventDefault();
154
155				if (SiteParameters.index_pagination_disable_scroll !== '1') {
156					var container = $(this).closest('.cssgrid-system'),
157						pagination_disable_scroll = container.attr('data-pagination-scroll'),
158						calc_scroll = SiteParameters.index_pagination_scroll_to != false ? eval(SiteParameters.index_pagination_scroll_to) : container.closest('.row-parent').offset().top;
159
160					if ( pagination_disable_scroll !== 'disabled' ) {
161						calc_scroll -= UNCODE.get_scroll_offset();
162
163						var menu_container = $('.menu-sticky');
164						var menu = menu_container.find('.menu-container');
165
166						if (menu_container.length > 0 && menu.length > 0) {
167							calc_scroll = calc_scroll - menu.outerHeight();
168						}
169
170						var bodyTop = document.documentElement['scrollTop'] || document.body['scrollTop'],
171							delta = bodyTop - calc_scroll,
172							scrollSpeed = (SiteParameters.constant_scroll == 'on') ? Math.abs(delta) / parseFloat(SiteParameters.scroll_speed) : SiteParameters.scroll_speed;
173						if (scrollSpeed < 1000 && SiteParameters.constant_scroll == 'on') scrollSpeed = 1000;
174
175						if ( !UNCODE.isFullPage ) {
176							if (scrollSpeed == 0) {
177								$('html, body').scrollTop(calc_scroll);
178							} else {
179								$('html, body').animate({
180									scrollTop: calc_scroll
181								},{
182									easing: 'easeInOutQuad',
183									duration: scrollSpeed,
184									complete: function(){
185										UNCODE.scrolling = false;
186									}
187								});
188							}
189						}
190					}
191				}
192
193				loadCssGrid($(this), true);
194			});
195		}
196
197		$filters.on('click', 'a.grid-nav-link', function(evt) {
198			if ($(this).hasClass('no-grid-filter')) {
199				return;
200			}
201			var $filter = $(this),
202				filterContainer = $filter.closest('.cssgrid-filters'),
203				filterValue = $filter.attr('data-filter'),
204				containerSystem = $filter.closest('.cssgrid-system'),
205				container = containerSystem.find($('.cssgrid-layout')),
206				transitionDuration = containerSystem.data('transitionDuration'),
207				delay = 300,
208				filterItems = [],
209				all_thumbs = container.find('.tmb-grid');
210
211			var filter_items = function(){
212				if (filterValue !== undefined) {
213					$.each($('> .tmb-grid > .t-inside', container), function(index, val) {
214						var parent = $(val).parent(),
215							objTimeout = parent.data('objTimeout');
216						if (objTimeout) {
217							$(val).removeClass('zoom-reverse').removeClass('start_animation')
218							clearRequestTimeout(objTimeout);
219						}
220						if (transitionDuration == 0) {
221							if ($(val).hasClass('animate_when_almost_visible')) {
222								$(val).addClass('zoom-reverse').removeClass('start_animation');
223							} else {
224								$(val).addClass('animate_when_almost_visible zoom-reverse zoom-anim force-anim');
225							}
226						}
227					});
228					requestTimeout(function(){
229						if ( filterValue == '*' ) {
230							all_thumbs.show();
231							all_thumbs.each(function(index, val) {
232								$(val).find('[data-lbox^=ilightbox]').removeClass('lb-disabled');
233								filterItems.push($(this));
234							});
235						} else {
236							all_thumbs.each(function() {
237								var _tmb = $(this);
238								if (_tmb.hasClass(filterValue)) {
239									_tmb.show();
240									_tmb.find('[data-lbox^=ilightbox]').removeClass('lb-disabled');
241									filterItems.push(_tmb);
242								} else {
243									_tmb.find('[data-lbox^=ilightbox]').addClass('lb-disabled');
244									_tmb.hide();
245								}
246							});
247						}
248
249						$('.t-inside.zoom-reverse', container).removeClass('zoom-reverse');
250
251						var sequential = containerSystem.hasClass('cssgrid-animate-sequential') ? true : false;
252						UNCODE.animate_css_grids(containerSystem, filterItems, 0, sequential, true);
253						var lightboxElements = $('[data-lbox^=ilightbox]', container);
254						if (lightboxElements.length) {
255							container.data('lbox', $(lightboxElements[0]).data('lbox'));
256							if (typeof UNCODE.lightbox !== 'undefined' && !SiteParameters.lbox_enhanced) {
257								var getLightbox = UNCODE.lightboxArray['ilightbox_' + container.closest('.cssgrid-system').attr('id')];
258								if (typeof getLightbox === 'object') {
259									getLightbox.refresh();
260								} else {
261									UNCODE.lightbox();
262								}
263							}
264						}
265						container.trigger('more-items-loaded');
266						$(window).trigger('more-items-loaded');
267						window.dispatchEvent(new CustomEvent('uncode-more-items-loaded'));
268					}, delay);
269				} else {
270					$.each($('> .tmb-grid > .t-inside', container), function(index, val) {
271						var parent = $(val).parent(),
272							objTimeout = parent.data('objTimeout');
273						if (objTimeout) {
274							$(val).removeClass('zoom-reverse').removeClass('start_animation')
275							clearRequestTimeout(objTimeout);
276						}
277						if (transitionDuration == 0) {
278							if ($(val).hasClass('animate_when_almost_visible')) {
279								$(val).addClass('zoom-reverse').removeClass('start_animation');
280							} else {
281								$(val).addClass('animate_when_almost_visible zoom-reverse zoom-anim force-anim');
282							}
283						}
284					});
285					loadCssGrid($filter);
286				}
287			};
288
289			if (!$filter.hasClass('active')) {
290				/** Scroll top with filtering */
291				if (filterContainer.hasClass('filter-scroll')) {
292                    var calc_scroll = SiteParameters.index_pagination_scroll_to != false ? eval(SiteParameters.index_pagination_scroll_to) : container.closest('.row-parent').offset().top;
293                    calc_scroll -= UNCODE.get_scroll_offset();
294
295					var bodyTop = document.documentElement['scrollTop'] || document.body['scrollTop'],
296						delta = bodyTop - calc_scroll,
297						scrollSpeed = (SiteParameters.constant_scroll == 'on') ? Math.abs(delta) / parseFloat(SiteParameters.scroll_speed) : SiteParameters.scroll_speed,
298						filterTolerance = false,
299						filter_timeout;
300					if (scrollSpeed < 1000 && SiteParameters.constant_scroll == 'on') scrollSpeed = 1000;
301
302					if ( !UNCODE.isFullPage ) {
303						if (scrollSpeed == 0) {
304							$('html, body').scrollTop(calc_scroll);
305							UNCODE.scrolling = false;
306							filter_items();
307						} else {
308
309							if ( bodyTop <= (calc_scroll+20) && bodyTop >= (calc_scroll-20) ) {
310								filter_items();
311								filterTolerance = true;
312							}
313
314							$('html, body').animate({
315								scrollTop: calc_scroll
316							},{
317								easing: 'easeInOutQuad',
318								duration: scrollSpeed,
319								complete: function(){
320									UNCODE.scrolling = false;
321									if ( !filterTolerance ) {
322										filter_timeout = setTimeout(function(){
323											clearTimeout(filter_timeout);
324											filter_items();
325										}, 200);
326									}
327								}
328							});
329						}
330					}
331				} else {
332					filter_items();
333				}
334			}
335			evt.preventDefault();
336		});
337
338		$(window).off('popstate.cssgrid').on("popstate.cssgrid", function(e) {
339			var params = UNCODE.getURLParams(window.location);
340			var old_params = UNCODE.getURLParams(UNCODE.lastURL, true);
341
342			UNCODE.lastURL = window.location.href;
343
344			if (UNCODE.hasEqualURLParams(params, old_params) || ($.isEmptyObject(params) && $.isEmptyObject(old_params)) || params.form !== undefined) {
345				return;
346			}
347
348			if (params.id === undefined) {
349				$.each($('.cssgrid-system'), function(index, val) {
350					loadCssGrid($(val));
351				});
352			} else {
353				if (!params.hasOwnProperty(SiteParameters.ajax_filter_key_unfilter)) {
354					loadCssGrid($('#' + params.id));
355				}
356			}
357		});
358
359		var loadCssGrid = function($href, $paginating) {
360			var is_paginating = false;
361
362			if (undefined !== $paginating && $paginating) {
363				var is_paginating = $paginating;
364			}
365
366			var href = ($href.is("a") ? $href.attr('href') : location),
367				cssgridSystem = ($href.is("a") ? $href.closest($('.cssgrid-system')) : $href),
368				cssgridWrapper = cssgridSystem.find($('.cssgrid-wrapper')),
369				cssgridFooter = cssgridSystem.find($('.cssgrid-footer-inner')),
370				cssgridResultCount = cssgridSystem.find($('.woocommerce-result-count-wrapper')),
371				cssgridContainer = cssgridSystem.find($('.cssgrid-layout')),
372				cssgridId = cssgridSystem.attr('id');
373			if ( $href.is("a") && ! cssgridSystem.hasClass('un-no-history') ) {
374				UNCODE.lastURL = href;
375				history.pushState({
376					myCSSgrid: true
377				}, document.title, href);
378			}
379			cssgridWrapper.addClass('cssgrid-loading');
380			if (is_paginating) {
381				cssgridWrapper.addClass('grid-filtering');
382			}
383			$.ajax({
384				url: href
385			}).done(function(data) {
386				var $resultItems = $(data).find('#' + cssgridId + ' .cssgrid-layout').html(),
387					$resultPagination = $(data).find('#' + cssgridId + ' .pagination')[0],
388					$resultCount = $(data).find('#' + cssgridId + ' .woocommerce-result-count')[0];
389				requestTimeout(function() {
390					cssgridContainer.html($resultItems);
391					cssgridWrapper.removeClass('cssgrid-loading');
392					cssgridWrapper.removeClass('grid-filtering');
393					var sequential = cssgridSystem.hasClass('cssgrid-animate-sequential') ? true : false;
394					UNCODE.animate_css_grids(cssgridSystem, cssgridContainer.find('.tmb-grid'), 0, sequential, false);
395					UNCODE.adaptive();
396					if (SiteParameters.dynamic_srcset_active === '1') {
397						UNCODE.refresh_dynamic_srcset_size(cssgridContainer);
398					}
399					if (typeof UNCODE.lightbox !== 'undefined' && !SiteParameters.lbox_enhanced) {
400						var getLightbox = UNCODE.lightboxArray['ilightbox_' + cssgridContainer.closest('.cssgrid-system').attr('id')];
401						if (typeof getLightbox === 'object') {
402							getLightbox.refresh();
403						} else {
404							UNCODE.lightbox();
405						}
406					}
407					cssgridContainer.trigger('more-items-loaded');
408					$(window).trigger('more-items-loaded');
409					window.dispatchEvent(new CustomEvent('uncode-more-items-loaded'));
410				}, 300);
411
412				$('.pagination', cssgridFooter).remove();
413				cssgridFooter.append($resultPagination);
414
415				if (cssgridResultCount.length > 0) {
416					$('.woocommerce-result-count', cssgridResultCount).remove();
417					cssgridResultCount.append($resultCount);
418				}
419			});
420		};
421
422		$filters.each(function(i, buttonGroup) {
423			var $buttonGroup = $(buttonGroup);
424			$buttonGroup.on('click', 'a:not(.no-grid-filter)', function() {
425				$buttonGroup.find('.active').removeClass('active');
426				$(this).addClass('active');
427
428			});
429
430			var $cats_mobile_trigger = $('.menu-smart--filter-cats_mobile-toggle-trigger', $buttonGroup),
431				$cats_mobile_toggle = $('.menu-smart--filter-cats_mobile-toggle', $buttonGroup),
432				$cats_filters = $('.menu-smart--filter-cats', $buttonGroup);
433			$buttonGroup.on('click', 'a.menu-smart--filter-cats_mobile-toggle-trigger', function(e) {
434				e.preventDefault();
435				$cats_filters.slideToggle(400, 'easeInOutCirc');
436			});
437
438		});
439	};
440};
441
442
443})(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.