PageSourceSearch

https://protectdefenders.eu/wp-content/themes/thegem/js/thegem-portfolio-grid-extended.js?ver=5.12.2

js protectdefenders.eu collected 2026-10-02 03:19:49 UTC 125,825 bytes, 3,393 lines download raw bytes

1(function ($) {
2	$(function () {
3
4		const isEditor = $('body').hasClass('elementor-editor-active');
5		let scrollTopPromise;
6
7		window.defaultSortPortfolioDataNew = {
8			date: '[data-sort-date] parseInt',
9			popularity: '[data-sort-popularity] parseInt',
10			rating: '[data-sort-rating] parseInt',
11			price: '[data-sort-price] parseInt',
12			title: '.title'
13		};
14
15		var localCache = {
16			data: {},
17			remove: function (url) {
18				delete localCache.data[url];
19			},
20			exist: function (url) {
21				return localCache.data.hasOwnProperty(url) && localCache.data[url] !== null;
22			},
23			get: function (url) {
24				return localCache.data[url];
25			},
26			set: function (url, cachedData, callback) {
27				localCache.remove(url);
28				localCache.data[url] = cachedData;
29				if ($.isFunction(callback)) callback(cachedData);
30			}
31		};
32
33		let youtubeInited = false;
34		let vimeoInited = false;
35		let selfInited = false;
36		let currentFilters = [];
37
38		function portfolioImagesLoaded($box, image_selector, immediately, callback) {
39			if (immediately) {
40				return callback();
41			}
42
43			function check_image_loaded(img) {
44				return img.getAttribute('loading') === 'lazy' || img.getAttribute('src') === '' || (img.complete && img.naturalWidth !== undefined && img.naturalWidth !== 0);
45			}
46
47			var $images = $(image_selector, $box).filter(function () {
48					return !check_image_loaded(this);
49				}),
50				images_count = $images.length;
51
52			if (images_count == 0) {
53				return callback();
54			}
55
56			if (window.gemBrowser.name == 'ie' && !isNaN(parseInt(window.gemBrowser.version)) && parseInt(window.gemBrowser.version) <= 10) {
57				function image_load_event() {
58					images_count--;
59					if (images_count == 0) {
60						callback();
61					}
62				}
63
64				$images.each(function () {
65					if (check_image_loaded(this)) {
66						return;
67					}
68
69					var proxyImage = new Image();
70					proxyImage.addEventListener('load', image_load_event);
71					proxyImage.addEventListener('error', image_load_event);
72					proxyImage.src = this.src;
73				});
74				return;
75			}
76
77			$images.on('load error', function () {
78				images_count--;
79				if (images_count == 0) {
80					callback();
81				}
82			});
83		}
84
85		function initPrevNextNavigatorButtons($portfolio) {
86			var current_page = $portfolio.data('current-page');
87			var pages_count = $portfolio.data('pages-count');
88			if (current_page <= 1) {
89				if ($portfolio.hasClass('portfolio-pagination-normal')) {
90					$('.portfolio-navigator a.prev', $portfolio).css('display', 'none');
91				} else {
92					$('.portfolio-navigator a.prev', $portfolio).addClass('disabled');
93				}
94			} else {
95				if ($portfolio.hasClass('portfolio-pagination-normal')) {
96					$('.portfolio-navigator a.prev', $portfolio).css('display', 'flex');
97				} else {
98					$('.portfolio-navigator a.prev', $portfolio).removeClass('disabled');
99				}
100			}
101
102			if (current_page >= pages_count) {
103				if ($portfolio.hasClass('portfolio-pagination-normal')) {
104					$('.portfolio-navigator a.next', $portfolio).css('display', 'none');
105				} else {
106					$('.portfolio-navigator a.next', $portfolio).addClass('disabled');
107				}
108			} else {
109				if ($portfolio.hasClass('portfolio-pagination-normal')) {
110					$('.portfolio-navigator a.next', $portfolio).css('display', 'flex');
111				} else {
112					$('.portfolio-navigator a.next', $portfolio).removeClass('disabled');
113				}
114			}
115		}
116
117		function initPortfolioPagesExtended($portfolio) {
118			var current_page = $portfolio.data('current-page');
119			var pages_count = $portfolio.data('pages-count');
120
121			if ($portfolio.hasClass('portfolio-pagination-normal')) {
122				if ($('.portfolio-navigator', $portfolio).length && pages_count > 1) {
123					let pagenavigator = '';
124					let end_size = 3;
125					let mid_size = 2;
126					let dots = false;
127					for (let i = 1; i <= pages_count; i++) {
128						if (i == current_page || i <= end_size || (current_page && i >= current_page - mid_size && i <= current_page + mid_size) || i > pages_count - end_size) {
129							pagenavigator += '<a href="#" data-page="' + i + '">' + i + '</a>';
130							dots = true;
131						} else if (dots) {
132							pagenavigator += '<span class="page-numbers dots">...</span>';
133							dots = false;
134						}
135					}
136					$('.portfolio-navigator', $portfolio).find('.pages').html(pagenavigator);
137					$('.portfolio-navigator', $portfolio).show();
138					$('.portfolio-set', $portfolio).css('margin-bottom', '');
139					$('.portfolio-navigator a[data-page="' + current_page + '"]', $portfolio).addClass('current');
140				} else {
141					$('.portfolio-navigator .pages', $portfolio).html('');
142					$('.portfolio-navigator', $portfolio).hide();
143					$('.portfolio-set', $portfolio).css('margin-bottom', 0);
144				}
145			}
146			initPrevNextNavigatorButtons($portfolio);
147
148			$('.portfolio-navigator', $portfolio).off('click', 'a');
149			$('.portfolio-navigator', $portfolio).on('click', 'a', function () {
150				if ($(this).hasClass('current'))
151					return false;
152				// var current_page = $(this).parents('.portfolio-navigator ').find('.current:first').data('page');
153				var current_page = $portfolio.data('current-page');
154				var page;
155				if ($(this).hasClass('prev')) {
156					page = current_page - 1;
157				} else if ($(this).hasClass('next')) {
158					page = current_page + 1
159				} else {
160					page = $(this).data('page');
161				}
162				if (page < 1)
163					page = 1;
164				if (page > pages_count)
165					page = pages_count;
166				$portfolio.data('next-page', page);
167				$(this).parents('.portfolio-navigator ').find('a').removeClass('current');
168				$(this).parents('.portfolio-navigator ').find('a[data-page="' + page + '"]').addClass('current');
169				$portfolio.data('current-page', page);
170				$portfolio.addClass('hide-loader');
171				scrollTopPortfolio($portfolio, true)
172				portfolioLoadCoreRequest($portfolio);
173				initPortfolioPagesExtended($portfolio);
174				return false;
175			});
176		}
177
178		let fixedHeight = 0;
179
180		if ($('#site-header.animated-header').length) {
181			let $header = $('#site-header')[0];
182			fixedHeight = $header.clientHeight;
183
184			$(window).scroll(function () {
185				if (fixedHeight > $header.clientHeight) {
186					fixedHeight = $header.clientHeight;
187				}
188			});
189		}
190
191		function scrollTopPortfolio($this, $preventCheck = false) {
192			let $portfolio;
193			if ($this.hasClass('portfolio')) {
194				$portfolio = $this;
195			} else {
196				$portfolio = $('.portfolio[data-portfolio-uid="' + $this.data('portfolio-uid') + '"]');
197			}
198			if (!$portfolio.length) return;
199			if ($portfolio.find('.portfolio-top-panel').hasClass('filters-top-sticky')) {
200				$(window).trigger('scroll');
201			}
202			if ($preventCheck || $this.find('.portfolio-filters-list').hasClass('scroll-top') || $this.find('.portfolio-sorting-select').hasClass('scroll-top') || $portfolio.find('.portfolio-top-panel').hasClass('sticky-fixed')) {
203				let offset = fixedHeight;
204				if ($portfolio.find('.portfolio-top-panel').hasClass('sticky-fixed')) {
205					offset = -1;
206				}
207				$("html, body").animate({scrollTop: $portfolio.offset().top - offset - 20}, 600);
208				scrollTopPromise = new Promise(resolve => {
209					setTimeout(() => resolve('animated'), 600);
210				});
211			}
212		}
213
214		function initPortfolioSorting($portfolio) {
215
216			$('.portfolio-sorting a.sorting-switcher', $portfolio).on('click', function (e) {
217				var $selected = $('label[data-value!="' + $(this).data('current') + '"]', $(this).parent());
218				$(this).data('current', $selected.data('value'));
219
220				if ($(this).next().is($selected)) {
221					$(this).addClass('right');
222				} else {
223					$(this).removeClass('right');
224				}
225
226				if ($portfolio.hasClass('category-grid')) {
227					return;
228				}
229
230				$portfolio.data('next-page', 1);
231				$portfolio.data('current-page', 1);
232				portfolioLoadCoreRequest($portfolio);
233
234				e.preventDefault();
235				return false;
236			});
237
238			$('.portfolio-sorting label', $portfolio).on('click', function (e) {
239				if ($(this).data('value') != $('.sorting-switcher', $(this).parent()).data('current')) {
240					$('.sorting-switcher', $(this).parent()).click();
241				}
242				e.preventDefault();
243				return false;
244			});
245		}
246
247		$.fn.initPortfolioSorting = function () {
248			let $portfolio,
249				$this = $(this),
250				portfolioUid = $this.data('portfolio-uid'),
251				$sortingSelect = $this.find('.portfolio-sorting-select');
252			if ($this.hasClass('portfolio')) {
253				$portfolio = $this;
254			} else {
255				$portfolio = $('.portfolio[data-portfolio-uid="' + portfolioUid + '"]').first();
256			}
257
258			if ($sortingSelect.hasClass('open-dropdown-click')) {
259				$sortingSelect.on('mouseleave', function () {
260					$(this).removeClass('active');
261				}).on('click', 'div.portfolio-sorting-select-current', function () {
262					$sortingSelect.toggleClass('active');
263				});
264			} else {
265				$sortingSelect.on('mouseover', function () {
266					$(this).addClass('active');
267				}).on('mouseout', function () {
268					$(this).removeClass('active');
269				});
270			}
271
272			$sortingSelect.on('click', 'li', function (e) {
273				$('.portfolio-sorting-select li', $this).removeClass('portfolio-sorting-select-current');
274				$('.portfolio-sorting-select div.portfolio-sorting-select-current .portfolio-sorting-select-name', $this).html($(this).html());
275				$(this).addClass('portfolio-sorting-select-current');
276				var selected = $(this).data('value');
277				$('.portfolio-sorting-select', $this).mouseout();
278
279				$portfolio.data('next-page', 1);
280				$portfolio.data('current-page', 1);
281				portfolioLoadCoreRequest($portfolio);
282				scrollTopPortfolio($this);
283
284				e.preventDefault();
285				return false;
286			});
287		}
288
289		function initFiltersMore($portfolio) {
290			if (!$('.portfolio-filters-more', $portfolio).length)
291				return false;
292
293			$('.portfolio-filters-more', $portfolio).on('mouseover', function () {
294				$(this).addClass('active');
295			}).on('mouseout', function () {
296				$(this).removeClass('active');
297			});
298
299			$('.portfolio-filters-more a', $portfolio).on('click', function (e) {
300				$('.portfolio-filters-more', $portfolio).mouseout();
301			});
302		}
303
304		var ajaxRequest;
305
306		function portfolioLoadCoreRequest($portfolio, $next_page_preload = false, $params = false, $get_query_params = false) {
307			if (!$portfolio.hasClass('portfolio') && !$get_query_params) return;
308			var uid = $portfolio.data('portfolio-uid');
309			var widget_settings_id = $portfolio.data('style-uid') ? $portfolio.data('style-uid') : uid;
310			var queryParams;
311			if ($get_query_params) {
312				queryParams = new URLSearchParams();
313			} else {
314				var queryParams = new URLSearchParams(window.location.search);
315				var delArr = [], cacheId = widget_settings_id;
316				for (var p of queryParams) {
317					if (uid.length) {
318						if (p[0].includes(uid)) {
319							delArr.push(p[0]);
320						}
321					} else {
322						if (p[0].includes('filter_') || ["s", "page", "category", "product_tag", "min_price", "max_price", "status"].includes(p[0])) {
323							delArr.push(p[0]);
324						}
325					}
326				}
327
328				for (var del of delArr) {
329					queryParams.delete(del);
330				}
331			}
332
333			if (!$next_page_preload && ajaxRequest != null) {
334				ajaxRequest.abort();
335				ajaxRequest = null;
336			}
337
338			var data = $.extend(true, {}, window['thegem_portfolio_ajax_' + widget_settings_id]);
339			if ($get_query_params) {
340				data['data'] = [];
341			} else if ($.isEmptyObject(data)) {
342				data = $.extend(true, {}, window['thegem_portfolio_ajax']);
343				data['data'] = widget_settings[widget_settings_id];
344				data['action'] = data['data']['action'];
345			}
346			if (uid != '') {
347				uid += '-';
348			}
349			if ($('.portfolio-count select', $portfolio).length > 0)
350				data['data']['more_count'] = $('.portfolio-count select', $portfolio).val();
351
352			data['data']['items_per_page'] = $portfolio.data('per-page');
353
354			var next_page = $portfolio.data('next-page');
355			if ($params) {
356				next_page = $params['next-page'];
357			}
358			data['data']['more_page'] = next_page || 1;
359
360			if (data['data']['more_page'] == 0)
361				return false;
362
363			if (!$next_page_preload) {
364				if ($portfolio.hasClass('reduce-size')) {
365					if (next_page === 2 || next_page === 1) {
366						data['data']['offset'] = data['data']['items_on_load'];
367						data['data']['items_per_page'] = data['data']['items_per_page'] - data['data']['items_on_load'];
368						data['data']['load_more_show_all'] = '';
369						data['data']['more_page'] = 1;
370						$portfolio.addClass('custom-scroll-loaded');
371						cacheId += 'csl';
372					}
373					$portfolio.removeClass('reduce-size');
374				} else {
375					$portfolio.removeClass('custom-scroll-loaded')
376				}
377			}
378
379			var portfolio_filter = $portfolio.data('portfolio-filter');
380			if ($params['portfolio-filter']) {
381				portfolio_filter = $params['portfolio-filter'];
382			}
383			if (portfolio_filter && portfolio_filter.length !== 0) {
384				if (!Array.isArray(portfolio_filter)) {
385					portfolio_filter = [portfolio_filter];
386				}
387				if ($portfolio.hasClass('news-grid')) {
388					data['data']['categories'] = portfolio_filter;
389				} else if ($portfolio.hasClass('products')) {
390					data['data']['content_products_cat'] = portfolio_filter;
391				} else {
392					data['data']['content_portfolios_cat'] = portfolio_filter;
393				}
394				data['data']['has_categories_filter'] = true;
395				if (!$('.portfolio-filters-list', $portfolio).hasClass('native')
396					&& !$('.portfolio-filter-item.cats', $portfolio).hasClass('reload')
397					&& !$('.portfolio-filter-tabs', $portfolio).length) {
398					queryParams.set(uid + 'category', portfolio_filter);
399					cacheId += 'category=' + portfolio_filter;
400				}
401			} else {
402				data['data']['has_categories_filter'] = false;
403			}
404			if (data['data']['content_products_cat']) {
405				data['data']['content_products_cat'] = data['data']['content_products_cat'].toString();
406			}
407
408			var attr_filter = $portfolio.data('portfolio-filter-attributes');
409			if ($params['portfolio-filter-attributes']) {
410				attr_filter = $params['portfolio-filter-attributes'];
411			}
412			data['data']['has_tags_filter'] = false;
413			if (attr_filter) {
414				data['data']['has_attributes_filter'] = true;
415				let filters_attr = $portfolio.hasClass('products') ? 'content_products_attr' : 'filters_attr';
416				data['data'][filters_attr] = [];
417				var i = 0;
418				for (var key in attr_filter) {
419					if (key == 'tax_product_tag') {
420						data['data']['content_products_tags'] = attr_filter[key];
421						data['data']['has_tags_filter'] = true;
422						queryParams.set(uid + 'product_tag', attr_filter[key]);
423						cacheId += 'product_tag' + '=' + attr_filter[key];
424					} else {
425						data['data'][filters_attr].push(key);
426						data['data'][filters_attr + '_val_' + key] = JSON.stringify(attr_filter[key]);
427						queryParams.set(uid + 'filter_' + key, attr_filter[key]);
428						cacheId += 'filter_' + key + '=' + attr_filter[key];
429						i++;
430					}
431				}
432				data['data'][filters_attr] = data['data'][filters_attr].toString();
433				if (i === 0) {
434					data['data']['has_attributes_filter'] = false;
435				}
436			} else {
437				data['data']['has_attributes_filter'] = false;
438			}
439
440			var portfolio_filter_status = $portfolio.data('portfolio-filter-status');
441			if ($params) {
442				portfolio_filter_status = $params['portfolio-filter-status'];
443			}
444			if (portfolio_filter_status) {
445				data['data']['content_products_status_filter'] = portfolio_filter_status;
446				if (!$('.portfolio-filter-tabs', $portfolio).length) {
447					queryParams.set(uid + 'status', portfolio_filter_status);
448					cacheId += 'status=' + portfolio_filter_status;
449				} else {
450					$activeFilterTab = $('.portfolio-filter-tabs-list-tab.active', $portfolio);
451					if($activeFilterTab.data('filter') === 'sales' && $activeFilterTab.data('filter-number')) {
452						data['data']['content_products_filter_number'] = $activeFilterTab.data('filter-number');
453					}
454				}
455			}
456
457			if ($portfolio.data('portfolio-filter-price')) {
458				data['data']['content_products_price_filter'] = $portfolio.data('portfolio-filter-price');
459				queryParams.set(uid + 'min_price', $portfolio.data('portfolio-filter-price')[0]);
460				queryParams.set(uid + 'max_price', $portfolio.data('portfolio-filter-price')[1]);
461				cacheId += 'min_price=' + $portfolio.data('portfolio-filter-price')[0];
462				cacheId += 'max_price=' + $portfolio.data('portfolio-filter-price')[1];
463			}
464
465			if ($portfolio.data('portfolio-filter-search')) {
466				data['data']['portfolio_search_filter'] = $portfolio.data('portfolio-filter-search');
467				queryParams.set(uid + 's', $portfolio.data('portfolio-filter-search'));
468				cacheId += 's=' + $portfolio.data('portfolio-filter-search');
469			}
470
471			var current_tab = $portfolio.data('current-tab');
472			if ($params) {
473				current_tab = $params['current-tab'];
474			}
475			if (current_tab && current_tab != 0) {
476				queryParams.set(uid + 'tab', current_tab);
477				cacheId += 'tab=' + current_tab;
478			}
479
480			if ($('.portfolio-sorting', $portfolio).length > 0) {
481				data['data']['orderby'] = $('.portfolio-sorting .orderby .sorting-switcher', $portfolio).data('current');
482				data['data']['order'] = $('.portfolio-sorting .order .sorting-switcher', $portfolio).data('current');
483				cacheId += 'orderby' + $('.portfolio-sorting .orderby .sorting-switcher', $portfolio).data('current');
484				cacheId += 'order' + $('.portfolio-sorting .order .sorting-switcher', $portfolio).data('current');
485			} else if ($('.portfolio-sorting-select', $portfolio).length > 0 || $('.extended-posts-sorting[data-portfolio-uid="' + $portfolio.data('portfolio-uid') + '"] .portfolio-sorting-select').length > 0) {
486				let $sortingSelect = $('.portfolio-sorting-select', $portfolio).length > 0 ? $('.portfolio-sorting-select', $portfolio) : $('.extended-posts-sorting[data-portfolio-uid="' + $portfolio.data('portfolio-uid') + '"] .portfolio-sorting-select'),
487					$sortingSelectCurrent = $sortingSelect.find('li.portfolio-sorting-select-current');
488
489				if (!$sortingSelect.find('li.default', $portfolio).hasClass('portfolio-sorting-select-current')) {
490					data['data']['orderby'] = $sortingSelectCurrent.data('orderby');
491					data['data']['order'] = $sortingSelectCurrent.data('order');
492					queryParams.set(uid + 'orderby', $sortingSelectCurrent.data('orderby'));
493					queryParams.set(uid + 'order', $sortingSelectCurrent.data('order'));
494					cacheId += 'orderby' + $sortingSelectCurrent.data('orderby');
495					cacheId += 'order' + $sortingSelectCurrent.data('order');
496				}
497			} else {
498				if ($portfolio.hasClass('news-grid')) {
499					data['data']['orderby'] = data['data']['orderby'] != 'default' ? data['data']['orderby'] : 'menu_order date';
500					data['data']['order'] = data['data']['order'] != 'default' ? data['data']['order'] : 'DESC';
501				} else if (!$portfolio.hasClass('extended-products-grid')) {
502					data['data']['orderby'] = data['data']['orderby'] && data['data']['orderby'] != 'default' ? data['data']['orderby'] : 'menu_order ID';
503					data['data']['order'] = data['data']['order'] && data['data']['order'] != 'default' ? data['data']['order'] : 'ASC';
504				}
505			}
506
507			if ($get_query_params) {
508				return queryParams.toString();
509			}
510
511			if (!$next_page_preload && !$portfolio.hasClass('custom-scroll-loaded')) {
512				let preloader;
513				if ($portfolio.hasClass('minimal-preloader')) {
514					preloader = '<div class="loading"><div class="preloader-spin-new"></div></div>';
515				} else {
516					preloader = '<div class="loading"><div class="preloader-spin"></div></div>';
517				}
518				if ($portfolio.hasClass('portfolio-pagination-more') && data['data']['more_page'] != 1) {
519					$('.portfolio-load-more .gem-button', $portfolio).before(preloader);
520				} else if ($portfolio.hasClass('portfolio-pagination-scroll') && data['data']['more_page'] != 1) {
521					$('.portfolio-scroll-pagination', $portfolio).addClass('active').html(preloader);
522				} else {
523					addFilterLoader($portfolio);
524
525					if ($portfolio.hasClass('portfolio-pagination-normal') || $portfolio.hasClass('portfolio-pagination-arrows')) {
526						if (data['data']['more_page'] > 1) {
527							queryParams.set(uid + 'page', data['data']['more_page']);
528						}
529						setTimeout(function () {
530							$portfolio.removeClass('hide-loader');
531						}, 600);
532					}
533				}
534			}
535
536			cacheId += 'page' + data['data']['more_page'];
537
538			if ($('.portfolio-filters-list', $portfolio).length > 0 && ($('.portfolio-filters-list', $portfolio).hasClass('style-hidden') || $(window).width() < 992)) {
539				$('.progress-bar .striped', $portfolio).show();
540				$('.progress-bar', $portfolio).fadeIn('slow');
541			}
542
543			if (!$next_page_preload && !$portfolio.hasClass('category-grid')) {
544				if (queryParams.toString().length > 0) {
545					history.replaceState(null, null, "?" + queryParams.toString().replace(/%2C/g, ','));
546				} else {
547					history.replaceState(null, null, location.href.split("?")[0]);
548				}
549			}
550
551			data['data'] = JSON.stringify(data['data']);
552			ajaxRequest = $.ajax({
553				type: 'post',
554				dataType: 'json',
555				url: data.url,
556				data: data,
557				beforeSend: function () {
558					if (localCache.exist(cacheId)) {
559						if (!$next_page_preload) {
560							ajaxSuccess($portfolio, localCache.get(cacheId));
561						}
562						return false;
563					}
564					return true;
565				},
566				success: function (response) {
567					if (response.status == 'success') {
568						if (!$next_page_preload) {
569							ajaxSuccess($portfolio, response);
570						}
571						localCache.set(cacheId, response);
572					} else {
573						alert(response.message);
574						$('.portfolio-load-more .gem-button .loading', $portfolio).remove();
575						$('.portfolio-scroll-pagination', $portfolio).removeClass('active').html('');
576					}
577				}
578			});
579		}
580
581		function ajaxSuccess($portfolio, response) {
582			var $set = $('.portfolio-set:not(.sub-categories)', $portfolio);
583			var minZIndex = $('.portfolio-item:last', $set).css('z-index') - 1;
584			var $newItems;
585			if (document.location.protocol == 'https:') {
586				$newItems = $(response.html.replaceAll("http:", "https:"));
587			} else {
588				$newItems = $(response.html);
589			}
590			if ($newItems.hasClass('woocommerce')) {
591				$newItems = $newItems.find('>div');
592			}
593			var $inserted_data = $('.portfolio-item', $newItems);
594			$inserted_data.addClass('paginator-page-1');
595			$inserted_data.each(function () {
596				$(this).css('z-index', minZIndex--);
597			});
598			var current_page = $newItems.data('page');
599			var next_page = $newItems.data('next-page');
600			$portfolio.data('current-page', current_page);
601			$portfolio.data('pages-count', $newItems.data('pages-count'));
602			if ($portfolio.hasClass('loading-animation')) {
603				if ($portfolio.itemsAnimations('instance').getAnimationName() != 'disabled') {
604					$inserted_data.addClass('item-animations-not-inited');
605				} else {
606					$inserted_data.removeClass('item-animations-not-inited');
607				}
608			}
609
610			if (response.counts) {
611				$('.portfolio-filter-item a', $portfolio).removeClass('disable');
612				for (var key in response.counts) {
613					$('.portfolio-filter-item a[data-filter-id=' + key + '] .count', $portfolio).html(response.counts[key]);
614					if (response.counts[key] == 0) {
615						$('.portfolio-filter-item a[data-filter-id=' + key + ']', $portfolio).addClass('disable');
616					}
617				}
618			}
619
620			if (($portfolio.hasClass('columns-2') || $portfolio.hasClass('columns-3') || $portfolio.hasClass('columns-4')) && $portfolio.hasClass('news-grid') && $portfolio.outerWidth() > 1170) {
621				$('.image-inner picture source', $inserted_data).remove();
622			}
623
624			var immediately = false;
625			if (($portfolio.hasClass('extended-products-grid') && $portfolio.hasClass('portfolio-style-justified')) || $portfolio.hasClass('without-image') || $portfolio.hasClass('disable-isotope')) {
626				immediately = true;
627			}
628
629			portfolioImagesLoaded($newItems, '.image-inner img', immediately, function () {
630				if (!$portfolio.hasClass('custom-scroll-loaded') && (current_page === 1 || $portfolio.hasClass('portfolio-pagination-normal') || $portfolio.hasClass('portfolio-pagination-arrows'))) {
631					if ($portfolio.hasClass('loading-animation')) {
632						$portfolio.itemsAnimations('instance').clear();
633					}
634					$set.html('');
635					if (!$portfolio.hasClass('disable-isotope')) {
636						$set.thegem_isotope('reloadItems');
637					}
638				}
639
640				$portfolio.removeClass('ready');
641
642				if (!$portfolio.hasClass('disable-isotope')) {
643					$set.thegem_isotope('insert', $inserted_data);
644					var items = $('.portfolio-item:not(.not-found)', $set);
645					itemsInit($portfolio, items);
646					imageSizesFix($portfolio);
647				} else {
648					$set.append($inserted_data);
649					var items = $('.portfolio-item:not(.not-found)', $set);
650					itemsInit($portfolio, items);
651					imageSizesFix($portfolio);
652					layoutComplete($portfolio, $set, items);
653					arrangeComplete($portfolio, $set, 'justified', items);
654				}
655
656				setTimeout(function () {
657					$portfolio.addClass('ready');
658				}, 500);
659
660				initCircularOverlay($portfolio, $inserted_data);
661
662				if (window.wp !== undefined && window.wp.mediaelement !== undefined) {
663					window.wp.mediaelement.initialize();
664				}
665
666				$portfolio.data('next-page', next_page);
667				if ($portfolio.hasClass('portfolio-pagination-more')) {
668					$('.portfolio-load-more .loading', $portfolio).remove();
669
670					if (next_page > 0) {
671						$('.portfolio-load-more', $portfolio).show();
672					} else {
673						$('.portfolio-load-more', $portfolio).hide();
674					}
675				} else if ($portfolio.hasClass('portfolio-pagination-scroll')) {
676					$('.portfolio-scroll-pagination', $portfolio).removeClass('active').html('');
677				} else if ($portfolio.hasClass('portfolio-pagination-normal') || $portfolio.hasClass('portfolio-pagination-arrows')) {
678					if (current_page === 1 && !$portfolio.hasClass('custom-scroll-loaded')) {
679						initPortfolioPagesExtended($portfolio);
680					}
681				}
682				if (scrollTopPromise) {
683					scrollTopPromise.then(function () {
684						$('.portfolio-row-outer', $portfolio).find('.preloader-new').remove();
685						$('.progress-bar .striped', $portfolio).fadeOut('slow');
686					});
687				} else {
688					$('.portfolio-row-outer', $portfolio).find('.preloader-new').remove();
689					$('.progress-bar .striped', $portfolio).fadeOut('slow');
690				}
691
692				if (typeof initPortfolioFancybox === 'function') {
693					$portfolio.initPortfolioFancybox();
694				}
695
696				customExtendedIcons($inserted_data);
697				categoryFilterClick($inserted_data);
698
699				if ($('.product-variations', $inserted_data).length) {
700					$('.gem-attribute-selector', $inserted_data).gemWooAttributeSelector();
701					$('.product-variations', $inserted_data).each(function () {
702						try {
703							$(this).wc_variation_form();
704						} catch(err) {
705							console.log(err);
706						}
707						initVariations($(this));
708					});
709				}
710
711				if ($portfolio.hasClass('next-page-preloading') && !isEditor) {
712					portfolioLoadCoreRequest($portfolio, true)
713				}
714
715				$('.portfolio-search-filter-form', $portfolio).removeClass('ajax-loading');
716
717				if ($('.zilla-likes', $inserted_data).length) {
718
719					$('.zilla-likes', $inserted_data).on('click', function() {
720						var link = $(this);
721						if (link.hasClass('active')) return false;
722
723						var id = $(this).attr('id'),
724							postfix = link.find('.zilla-likes-postfix').text();
725
726						$.ajax({
727							type: 'POST',
728							url: zilla_likes.ajaxurl,
729							data: {
730								action: 'zilla-likes',
731								likes_id: id,
732								postfix: postfix,
733							},
734							xhrFields: {
735								withCredentials: true,
736							},
737							success: function(data) {
738								link.html(data).addClass('active').attr('title','You already like this');
739							},
740						});
741
742						return false;
743					});
744				}
745			});
746		}
747
748		function addFilterLoader($portfolio) {
749			let pos_t;
750			if ($portfolio.find('.portfolio-filters-list').hasClass('scroll-top') || $portfolio.hasClass('hide-loader')) {
751				if ($portfolio.offset().top + $portfolio.height() < $portfolio.offset().top - 200 + window.innerHeight) {
752					pos_t = $portfolio.height() / 2;
753				} else {
754					pos_t = ($portfolio.offset().top - 200 + window.innerHeight - $portfolio.offset().top) / 2;
755				}
756			} else {
757				if ($portfolio.offset().top + $portfolio.height() < $(window).scrollTop() + window.innerHeight) {
758					if ($portfolio.offset().top > $(window).scrollTop()) {
759						pos_t = $portfolio.height() / 2;
760					} else {
761						pos_t = $(window).scrollTop() - $portfolio.offset().top + ($portfolio.offset().top + $portfolio.height() - $(window).scrollTop()) / 2;
762					}
763				} else {
764					if ($portfolio.offset().top > $(window).scrollTop()) {
765						pos_t = ($(window).scrollTop() + window.innerHeight - $('.portfolio-row-outer', $portfolio).offset().top) / 2;
766					} else {
767						pos_t = $(window).scrollTop() - $portfolio.offset().top + window.innerHeight / 2;
768					}
769				}
770			}
771
772			let preloader;
773			if ($portfolio.hasClass('minimal-preloader')) {
774				preloader = '<div class="preloader-new"><div class="preloader-spin-new"></div></div>';
775			} else {
776				preloader = '<div class="preloader-new"><div class="preloader-spin"></div></div>';
777			}
778			$('.portfolio-row-outer', $portfolio).prepend(preloader);
779			$('.portfolio-row-outer .preloader-new > div', $portfolio).css('top', pos_t);
780			if ($('.portfolio-filters-list', $portfolio).hasClass('style-sidebar')) {
781				let pos_r = ($('.portfolio-top-panel', $portfolio).outerWidth()) / 2;
782				if ($portfolio.closest('.panel-sidebar-position-right').length) {
783					$('.portfolio-row-outer .preloader-new > div', $portfolio).css('left', pos_r);
784				} else {
785					$('.portfolio-row-outer .preloader-new > div', $portfolio).css('right', pos_r);
786				}
787			}
788			if (!$portfolio.hasClass('custom-scroll-loaded')) {
789				scrollTopPortfolio($portfolio);
790			}
791		}
792
793		function initPortfolioScrollNextPage($portfolio) {
794			if ($('.portfolio-scroll-pagination', $portfolio).length == 0) {
795				return false;
796			}
797
798			var $pagination = $('.portfolio-scroll-pagination', $portfolio);
799			var watcher = scrollMonitor.create($pagination[0]);
800			watcher.enterViewport(function () {
801				if (this.watchItem.offsetTop > 0 && $portfolio.data('next-page') != 0) {
802					portfolioLoadCoreRequest($portfolio);
803				}
804			});
805		}
806
807		$('.portfolio-count select').combobox();
808
809		function initCircularOverlay($portfolio, $items) {
810			if (!$portfolio.hasClass('hover-circular') && !$portfolio.hasClass('hover-new-circular') && !$portfolio.hasClass('hover-default-circular')) {
811				return;
812			}
813
814			$items.on('mouseenter touchstart', function () {
815				var overlayWidth = $('.overlay', this).width(),
816					overlayHeight = $('.overlay', this).height(),
817					$overlayCircle = $('.overlay-circle', this),
818					maxSize = 0;
819
820				if (overlayWidth > overlayHeight) {
821					maxSize = overlayWidth;
822					$overlayCircle.height(overlayWidth)
823				} else {
824					maxSize = overlayHeight;
825					$overlayCircle.width(overlayHeight);
826				}
827				maxSize += overlayWidth * 0.3;
828
829				$overlayCircle.css({
830					marginLeft: -maxSize / 2,
831					marginTop: -maxSize / 2
832				});
833			});
834		}
835
836		function fixItemHiddenContent($portfolio) {
837			$('.slide-content-hidden', $portfolio).css('display', 'block');
838
839			$('.portfolio-item', $portfolio).each(function () {
840				let $hiddenContent = $(this).find('.slide-content-hidden');
841
842				if (!$hiddenContent.length) {
843					return;
844				}
845
846				$hiddenContent.css('margin-bottom', -$hiddenContent.outerHeight() + 'px');
847			});
848
849			$('.slide-content-hidden', $portfolio).css('display', '');
850		}
851
852		function fixHorizontalSlidingAuthor($portfolio) {
853			$('.slide-content-hidden', $portfolio).css('display', 'block');
854
855			$('.portfolio-item', $portfolio).each(function () {
856				let $visibleContent = $(this).find('.slide-content-visible'),
857					$hiddenContent = $(this).find('.slide-content-hidden'),
858					$authorContent = $(this).find('.caption .author');
859
860				if (!$authorContent.length || !$visibleContent.length || !$hiddenContent.length) {
861					return;
862				}
863
864				$authorContent.css('top', ($visibleContent.outerHeight() - $hiddenContent.outerHeight() - $authorContent.outerHeight()) + 'px');
865			});
866
867			$('.slide-content-hidden', $portfolio).css('display', '');
868		}
869
870		function initNewsGridItems($portfolio) {
871			if (!$portfolio.hasClass('news-grid')) {
872				return;
873			}
874
875			if (!$portfolio.hasClass('title-on-page')) {
876				$('.portfolio-item', $portfolio).each(function() {
877					var $item = $(this);
878
879					if ($item.width() < 260 || $item.height() < 300) {
880						$item.addClass('small-item');
881					}
882				});
883			}
884
885			if (typeof $.fn.buildSimpleGalleries === 'function') {
886				$portfolio.buildSimpleGalleries();
887			}
888
889			if (typeof $.fn.updateSimpleGalleries === 'function') {
890				$portfolio.updateSimpleGalleries();
891			}
892		}
893
894		function filterPortfolioExtended($portfolio, filterValue) {
895			resetSearch($portfolio);
896			$portfolio.data('portfolio-filter', filterValue || '');
897			$portfolio.data('next-page', 1);
898			portfolioLoadCoreRequest($portfolio);
899		}
900
901		function filterPortfolioAttributes($portfolio, filterValue) {
902			resetSearch($portfolio);
903			$portfolio.data('portfolio-filter-attributes', filterValue || '');
904			$portfolio.data('next-page', 1);
905			portfolioLoadCoreRequest($portfolio);
906		}
907
908		function filterPortfolioStatus($portfolio, filterValue) {
909			$portfolio.data('portfolio-filter-status', filterValue || '');
910			$portfolio.data('next-page', 1);
911			portfolioLoadCoreRequest($portfolio);
912		}
913
914		function filterPortfolioPrice($portfolio, filterValue) {
915			$portfolio.data('portfolio-filter-price', filterValue || '');
916			$portfolio.data('next-page', 1);
917			portfolioLoadCoreRequest($portfolio);
918		}
919
920		function filterPortfolioSearch($portfolio, filterValue) {
921			if ($('.portfolio-search-filter', $portfolio).hasClass('reset-filters')) {
922				resetFilters($portfolio);
923			}
924			$portfolio.data('portfolio-filter-search', filterValue || '');
925			$portfolio.data('next-page', 1);
926			portfolioLoadCoreRequest($portfolio);
927		}
928
929		function clearFilters($portfolio) {
930			if (!$('.portfolio-top-panel.filter-type-default', $portfolio).length) {
931				$portfolio.data('portfolio-filter', '');
932			}
933			$portfolio.data('portfolio-filter-attributes', '');
934			$portfolio.data('portfolio-filter-status', '');
935			$portfolio.data('portfolio-filter-price', '');
936			$portfolio.data('portfolio-filter-search', '');
937			$portfolio.data('next-page', 1);
938			portfolioLoadCoreRequest($portfolio);
939		}
940
941		function resetSearch($this) {
942			let $portfolio;
943			if ($this.hasClass('portfolio')) {
944				$portfolio = $this;
945			} else {
946				$portfolio = $('.portfolio[data-portfolio-uid="' + $this.data('portfolio-uid') + '"]');
947			}
948			if (!$portfolio.length) {
949				$portfolio = $this;
950			}
951			if ($('.portfolio-search-filter', $this).hasClass('reset-filters')) {
952				$portfolio.find(".portfolio-selected-filters .portfolio-selected-filter-item.search").remove();
953				$this.find(".portfolio-search-filter input").val('');
954				$portfolio.data('portfolio-filter-search', '');
955				$portfolio.data('next-page', 1);
956			}
957		}
958
959		function resetFilters($this) {
960			let $portfolio;
961			if ($this.hasClass('portfolio')) {
962				$portfolio = $this;
963			} else {
964				$portfolio = $('.portfolio[data-portfolio-uid="' + $this.data('portfolio-uid') + '"]');
965			}
966			if (!$portfolio.length) {
967				$portfolio = $this;
968			}
969			if ($('.portfolio-top-panel.filter-type-default', $this).length) {
970				$('.portfolio-filters a', $this).removeClass('active');
971				$('.portfolio-filters a:first-child', $this).addClass('active');
972			}
973
974			var $filtersList = $('.portfolio-filters-list', $this);
975			if (!$filtersList.length) {
976				$filtersList = $('.extended-posts-filter[data-portfolio-uid="' + $portfolio.data('portfolio-uid') + '"] .portfolio-filters-list');
977			}
978			$filtersList.find('.portfolio-filter-item:not(.reload) a').removeClass('active');
979			$filtersList.find('.portfolio-filter-item:not(.reload) a.all').addClass('active');
980			if ($filtersList.find(".slider-range").length) {
981				var min = $filtersList.find(".slider-range").slider("option", "min");
982				var max = $filtersList.find(".slider-range").slider("option", "max");
983				$filtersList.find(".slider-range").slider("values", [min, max]);
984			}
985			$filtersList.find('.selector-title span.name').each(function () {
986				if ($(this).data('title')) {
987					$(this).html('<span data-filter="*">' + $(this).data('title') + '</span>');
988				}
989			});
990			$portfolio.find(".portfolio-selected-filters .portfolio-selected-filter-item:not(.clear-filters, .search)").remove();
991			$portfolio.data('portfolio-filter', '');
992			$portfolio.data('portfolio-filter-attributes', '');
993			$portfolio.data('portfolio-filter-status', '');
994			$portfolio.data('portfolio-filter-price', '');
995			$portfolio.data('portfolio-filter-search', '');
996			$portfolio.data('next-page', 1);
997		}
998
999		function hasOnlyDoubleItems($set) {
1000			var $items = $('.portfolio-item', $set);
1001			return $items.length == $items.filter('.double-item-squared, .double-item-horizontal').length;
1002		}
1003
1004		function fixPortfolioWithDoubleItems($portfolio, needFix) {
1005			if (needFix) {
1006				$portfolio.addClass('porfolio-even-columns');
1007				imageSizesFix($portfolio);
1008			} else {
1009				$portfolio.removeClass('porfolio-even-columns');
1010			}
1011		}
1012
1013		function imageSizesFix($portfolio) {
1014
1015			if ($portfolio.hasClass('extended-carousel-grid')) {
1016				return;
1017			}
1018
1019			if ($portfolio.hasClass('extended-products-grid')) {
1020
1021				if ($portfolio.hasClass('disable-isotope') || $portfolio.hasClass('portfolio-style-masonry') || $portfolio.hasClass('list-style')) {
1022					return;
1023				}
1024
1025				$('.portfolio-item .image', $portfolio).css('height', '');
1026				$('.portfolio-item .wrap > .caption', $portfolio).css('height', '');
1027
1028				var maxImageHeight = 0,
1029					maxCaptionHeight = 0,
1030					maxImageHeightVertical;
1031
1032				$('.portfolio-item', $portfolio).each(function () {
1033					if ($(this).find('.wrap > .caption').outerHeight() > maxCaptionHeight) {
1034						maxCaptionHeight = $(this).find('.wrap > .caption').outerHeight();
1035					}
1036				});
1037
1038				$('.portfolio-item .wrap > .caption', $portfolio).css('height', maxCaptionHeight);
1039
1040				if ($portfolio.hasClass('portfolio-style-metro')) {
1041					if ($('.portfolio-set', $portfolio).data('thegem_isotope')) {
1042						$('.portfolio-set', $portfolio).thegem_isotope('layout');
1043					}
1044					return;
1045				}
1046
1047				var singleInnerWidth = $('.portfolio-item-size-container .portfolio-item', $portfolio).innerWidth();
1048				var singleWidth = $('.portfolio-item-size-container .portfolio-item', $portfolio).width();
1049				var gaps = singleInnerWidth - singleWidth;
1050
1051				if ($($portfolio).hasClass('aspect-ratio-portrait')) {
1052					maxImageHeight = parseInt(singleWidth * 1.25);
1053				} else if ($($portfolio).hasClass('aspect-ratio-custom')) {
1054					if ($('.portfolio-item:not(.double-item) .image', $portfolio).length) {
1055						maxImageHeight = parseInt($('.portfolio-item:not(.double-item) .image', $portfolio).height());
1056					} else if ($('.portfolio-item.double-item-horizontal .image', $portfolio).length) {
1057						maxImageHeight = parseInt($('.portfolio-item.double-item-horizontal .image', $portfolio).height());
1058					} else {
1059						maxImageHeight = parseInt($('.portfolio-item:first-child .image', $portfolio).height());
1060					}
1061				} else {
1062					maxImageHeight = parseInt(singleWidth);
1063				}
1064
1065				maxImageHeightVertical = 2 * maxImageHeight + gaps + maxCaptionHeight;
1066
1067				$('.portfolio-item', $portfolio).not('.not-found, .double-item-squared, .double-item-vertical').find('.image').css('height', maxImageHeight);
1068				$('.portfolio-item.double-item-squared, .portfolio-item.double-item-vertical', $portfolio).find('.image').css('height', maxImageHeightVertical);
1069
1070				if ($('.portfolio-item.double-item-squared', $portfolio).width() != singleWidth) {
1071					$('.portfolio-item.double-item-squared', $portfolio).find('.image').css('height', maxImageHeightVertical);
1072				}
1073			} else if ( $portfolio.hasClass('portfolio-grid') && $portfolio.hasClass('disable-isotope') && !$portfolio.hasClass('portfolio-list') && !$portfolio.hasClass('list-style') && !$portfolio.hasClass('news-grid')) {
1074				$('.portfolio-item .wrap .image', $portfolio).css('height', '').css('flex', '');
1075				$('.portfolio-item .wrap', $portfolio).css('height', '');
1076			}
1077
1078			if ($portfolio.hasClass('portfolio-style-creative') || ( !$portfolio.hasClass('portfolio-style-masonry') && !$portfolio.hasClass('disable-isotope'))) {
1079				$portfolio.addClass('hide-likes');
1080				$('.portfolio-item .wrap > .caption', $portfolio).css('min-height', '');
1081				let maxCaptionHeight = 0;
1082
1083				$('.portfolio-item', $portfolio).each(function () {
1084					if ($(this).find('.wrap > .caption').outerHeight() > maxCaptionHeight) {
1085						maxCaptionHeight = $(this).find('.wrap > .caption').outerHeight();
1086					}
1087				});
1088
1089				$('.portfolio-item .wrap > .caption', $portfolio).css('min-height', maxCaptionHeight);
1090				$portfolio.removeClass('hide-likes');
1091			}
1092
1093			if ($('.portfolio-set', $portfolio).data('thegem_isotope')) {
1094				$('.portfolio-set', $portfolio).thegem_isotope('layout');
1095			}
1096
1097			if ($portfolio.hasClass('products')) {
1098
1099				$('.portfolio-item', $portfolio).each(function () {
1100					if ($(this).outerWidth < 320) {
1101						$(this).addClass('item-small-size');
1102					} else {
1103						$(this).removeClass('item-small-size');
1104					}
1105				});
1106			}
1107
1108			if ($portfolio.hasClass('news-grid') && $portfolio.hasClass('version-new')) {
1109				if ($portfolio.hasClass('hover-new-default') || $portfolio.hasClass('hover-new-zooming-blur')) {
1110					fixItemHiddenContent($portfolio);
1111				}
1112
1113				if ($portfolio.hasClass('hover-new-horizontal-sliding')) {
1114					fixHorizontalSlidingAuthor($portfolio);
1115				}
1116			}
1117
1118			if ($portfolio.hasClass('version-alternative')) {
1119				fixItemHiddenContent($portfolio);
1120			}
1121
1122			if ($portfolio.hasClass('no-gaps') && !$portfolio.hasClass('portfolio-style-metro')) {
1123				$('.portfolio-item', $portfolio).css('width', '');
1124				$('.portfolio-set', $portfolio).css('margin-right', '');
1125
1126				let setOldWidth = $('.portfolio-set', $portfolio).outerWidth();
1127				let portfolioItemWidth;
1128				if ($portfolio.hasClass('portfolio-style-creative')) {
1129					portfolioItemWidth = Math.ceil($('.size-item', $portfolio).outerWidth());
1130				} else {
1131					portfolioItemWidth = Math.ceil($('.portfolio-item-size-container .portfolio-item', $portfolio).outerWidth());
1132					if (portfolioItemWidth == 0) {
1133						portfolioItemWidth = Math.ceil($('.portfolio-item:not(.double-item-squared, .double-item-horizontal)', $portfolio).outerWidth());
1134					}
1135					if (portfolioItemWidth == 0) {
1136						portfolioItemWidth = Math.ceil($('.portfolio-item', $portfolio).outerWidth() / 2);
1137					}
1138				}
1139
1140				if (portfolioItemWidth > 0) {
1141					$('.portfolio-item', $portfolio).each(function () {
1142						if (Math.round($(this).outerWidth() / portfolioItemWidth) === 2) {
1143							$(this).css('width', portfolioItemWidth * 2);
1144						} else {
1145							$(this).css('width', portfolioItemWidth);
1146						}
1147					});
1148
1149					let columns = Math.round(setOldWidth / portfolioItemWidth);
1150					let setNewWidth = columns * portfolioItemWidth;
1151
1152					if (setOldWidth !== setNewWidth) {
1153						$('.portfolio-set', $portfolio).css('margin-right', setOldWidth - setNewWidth);
1154					}
1155				}
1156			}
1157		}
1158
1159		function initExtendedPortfolioGrid() {
1160			if (window.tgpLazyItems !== undefined) {
1161				var isShowed = window.tgpLazyItems.checkGroupShowed(this, function (node) {
1162					initExtendedPortfolioGrid.call(node);
1163				});
1164				if (!isShowed) {
1165					return;
1166				}
1167			}
1168			var $portfolio = $(this);
1169			if ($portfolio.hasClass('inited')) {
1170				imageSizesFix($portfolio);
1171				return;
1172			}
1173			$portfolio.addClass('inited');
1174			setTimeout(function () {
1175				$portfolio.addClass('ready');
1176			}, 500);
1177			var $set = $('.portfolio-set', $portfolio);
1178			var $items = $('.portfolio-item', $set);
1179			var isNewsGrid = $portfolio.hasClass('news-grid');
1180
1181			if ($portfolio.data('next-page') == 0) {
1182				$('.portfolio-load-more', $portfolio).hide();
1183			}
1184
1185			initPortfolioSorting($portfolio);
1186			$portfolio.initPortfolioSorting();
1187			initFiltersMore($portfolio);
1188
1189			if ($portfolio.hasClass('portfolio-pagination-normal') || $portfolio.hasClass('portfolio-pagination-arrows')) {
1190				initPortfolioPagesExtended($portfolio);
1191			}
1192
1193			if (($portfolio.hasClass('columns-2') || $portfolio.hasClass('columns-3') || $portfolio.hasClass('columns-4')) && $portfolio.hasClass('news-grid') && $portfolio.outerWidth() > 1170) {
1194				$('.image-inner picture source', $set).remove();
1195			}
1196
1197			var immediately = false;
1198			if (($portfolio.hasClass('extended-products-grid') && $portfolio.hasClass('portfolio-style-justified')) || $portfolio.hasClass('without-image') || $portfolio.hasClass('disable-isotope')) {
1199				immediately = true;
1200			}
1201
1202			portfolioImagesLoaded($set, '.image-inner img', immediately, function () {
1203
1204				if ($portfolio.hasClass('loading-animation')) {
1205					var itemsAnimations = $portfolio.itemsAnimations({
1206						itemSelector: '.portfolio-item',
1207						scrollMonitor: true
1208					});
1209				}
1210
1211				initCircularOverlay($portfolio, $items);
1212
1213				initNewsGridItems($portfolio);
1214
1215				customExtendedIcons($portfolio);
1216
1217				imageSizesFix($portfolio);
1218
1219				var portfolioStyle = 'justified';
1220
1221				if (!$portfolio.hasClass('disable-isotope')) {
1222
1223					var layoutMode = 'masonry-custom';
1224					var titleOnPage = $portfolio.hasClass('title-on-page');
1225
1226					if ($portfolio.hasClass('portfolio-style-masonry')) {
1227						portfolioStyle = 'masonry';
1228					}
1229
1230					if ($portfolio.hasClass('portfolio-style-metro')) {
1231						layoutMode = 'metro';
1232						portfolioStyle = 'metro';
1233					}
1234
1235					if (portfolioStyle != 'metro') {
1236						fixPortfolioWithDoubleItems($portfolio, hasOnlyDoubleItems($set));
1237					}
1238
1239					var size_container = $('.portfolio-item-size-container .portfolio-item', $portfolio);
1240
1241					var isotope_options = {
1242						gridType: isNewsGrid ? 'news' : 'portfolio',
1243						itemSelector: '.portfolio-item',
1244						layoutMode: layoutMode,
1245						itemImageWrapperSelector: '.image-inner',
1246						fixHeightDoubleItems: portfolioStyle == 'justified',
1247						fixCaption: isNewsGrid && portfolioStyle == 'justified' && titleOnPage,
1248						'masonry-custom': {
1249							columnWidth: (size_container.length > 0) ? size_container[0] : '.portfolio-item:not(.double-item)'
1250						},
1251						transitionDuration: 0
1252					};
1253
1254					$set
1255						.on('layoutComplete', function (event, laidOutItems) {
1256							layoutComplete($portfolio, $set, laidOutItems);
1257						})
1258						.on('arrangeComplete', function (event, filteredItems) {
1259							arrangeComplete($portfolio, $set, portfolioStyle, filteredItems);
1260						})
1261						.thegem_isotope(isotope_options);
1262
1263					itemsInit($portfolio, $items);
1264
1265					if ($set.closest('.fullwidth-block').length > 0) {
1266						$set.closest('.fullwidth-block').bind('fullwidthUpdate', function () {
1267							if ($set.data('thegem_isotope')) {
1268								$set.thegem_isotope('layout');
1269								return false;
1270							}
1271						});
1272					} else {
1273						if ($set.closest('.vc_row[data-vc-stretch-content="true"]').length > 0) {
1274							$set.closest('.vc_row[data-vc-stretch-content="true"]').bind('VCRow
1274FullwidthUpdate', function () {
1275								if ($set.data('thegem_isotope')) {
1276									$set.thegem_isotope('layout');
1277									return false;
1278								}
1279							});
1280						}
1281					}
1282
1283					if (!window.gemSettings.lasyDisabled) {
1284						var elems = $('.portfolio-item:visible', $set);
1285						var items = [];
1286						for (var i = 0; i < elems.length; i++)
1287							items.push($set.thegem_isotope('getItem', elems[i]));
1288						$set.thegem_isotope('reveal', items);
1289					}
1290
1291					if ($set.closest('.gem_tab').length > 0) {
1292						$set.closest('.gem_tab').bind('tab-update', function () {
1293							if ($set.data('thegem_isotope')) {
1294								$set.thegem_isotope('layout');
1295							}
1296						});
1297					}
1298
1299					$(document).on('gem.show.vc.tabs', '[data-vc-accordion]', function () {
1300						var $tab = $(this).data('vc.accordion').getTarget();
1301						if ($tab.find($set).length) {
1302							if ($set.data('thegem_isotope')) {
1303								$set.thegem_isotope('layout');
1304							}
1305						}
1306					});
1307
1308					$(document).on('gem.show.vc.accordion', '[data-vc-accordion]', function () {
1309						var $tab = $(this).data('vc.accordion').getTarget();
1310						if ($tab.find($set).length) {
1311							if ($set.data('thegem_isotope')) {
1312								$set.thegem_isotope('layout');
1313							}
1314						}
1315					});
1316				} else {
1317					itemsInit($portfolio, $items);
1318					layoutComplete($portfolio, $set, $items);
1319					arrangeComplete($portfolio, $set, portfolioStyle, $items);
1320				}
1321
1322				var wishlistTarget;
1323				$(document).on('click', '.yith-icon a', function () {
1324					wishlistTarget = $(this).parents('.extended-products-grid');
1325				});
1326
1327				var notificationPopups = $('.thegem-popup-notification-wrap', $portfolio);
1328				$('#page').append(notificationPopups);
1329
1330				$(document).on('added_to_cart', function (e, fragments, cart_hash, this_button) {
1331					var parent = this_button.parents('.extended-products-grid, .extended-portfolio-grid');
1332					var popupSelector = parent.attr('id') ? '#style-notification-' + parent.data('style-uid') : '[data-style-uid="' + parent.data('style-uid') + '"]';
1333					var cartPopup = $('.thegem-popup-notification-wrap' + popupSelector + ' .thegem-popup-notification.cart');
1334					$('.thegem-popup-notification').removeClass('visible');
1335					cartPopup.addClass('visible');
1336					setTimeout(function () {
1337						cartPopup.removeClass('visible');
1338					}, cartPopup.data('timing'));
1339				});
1340
1341				$(document).on('added_to_wishlist', function (t, el_wrap) {
1342					customExtendedIcons($portfolio);
1343					if (wishlistTarget) {
1344						$('.thegem-popup-notification').removeClass('visible');
1345						var popupSelector = wishlistTarget.attr('id') ? '#style-notification-' + wishlistTarget.data('style-uid') : '[data-style-uid="' + wishlistTarget.data('style-uid') + '"]';
1346						var wishlistPopupAdd = $('.thegem-popup-notification-wrap' + popupSelector + ' .thegem-popup-notification.wishlist-add');
1347						wishlistPopupAdd.addClass('visible');
1348						setTimeout(function () {
1349							wishlistPopupAdd.removeClass('visible');
1350						}, wishlistPopupAdd.data('timing'));
1351					}
1352				});
1353
1354				$(document).on('removed_from_wishlist', function (t, el_wrap) {
1355					customExtendedIcons($portfolio);
1356					if (wishlistTarget) {
1357						$('.thegem-popup-notification').removeClass('visible');
1358						var popupSelector = wishlistTarget.attr('id') ? '#style-notification-' + wishlistTarget.data('style-uid') : '[data-style-uid="' + wishlistTarget.data('style-uid') + '"]';
1359						var wishlistPopupRemove = $('.thegem-popup-notification-wrap' + popupSelector + ' .thegem-popup-notification.wishlist-remove');
1360						wishlistPopupRemove.addClass('visible');
1361						setTimeout(function () {
1362							wishlistPopupRemove.removeClass('visible');
1363						}, wishlistPopupRemove.data('timing'));
1364					}
1365				});
1366
1367				$(document).on('yith_wcwl_fragments_loaded', function () {
1368					customExtendedIcons($portfolio);
1369				});
1370
1371				$(window).on('resize', function () {
1372					imageSizesFix($portfolio);
1373				});
1374
1375				$(window).on('load', function () {
1376					imageSizesFix($portfolio);
1377				});
1378
1379				if ($('.portfolio-filters', $portfolio).length) {
1380					$('.portfolio-filters, .portfolio-filters-resp ul li', $portfolio).on('click', 'a', function (e) {
1381						let thisFilter = $(this).data('filter');
1382						let filtersPanel = $(this).parents('.portfolio-top-panel-left');
1383						let filterBy = filtersPanel.data('filter-by');
1384						let isMultiple = filtersPanel.hasClass('multiple');
1385
1386						if (thisFilter) {
1387							e.preventDefault();
1388						} else {
1389							return;
1390						}
1391
1392						if (filterBy) {
1393							let attrData = $portfolio.data('portfolio-filter-attributes') ? $portfolio.data('portfolio-filter-attributes') : [];
1394							if (!attrData[filterBy]) {
1395								attrData[filterBy] = [];
1396							}
1397
1398							if (thisFilter == '*') {
1399								delete attrData[filterBy]
1400								filtersPanel.find('a').removeClass('active');
1401								$(this).addClass('active');
1402							} else if ($(this).hasClass('active')) {
1403								$(this).removeClass('active');
1404								if (attrData[filterBy]) {
1405									const index = attrData[filterBy].indexOf(thisFilter.substr(1));
1406									if (index > -1) {
1407										attrData[filterBy].splice(index, 1);
1408									}
1409									if (attrData[filterBy].length === 0) {
1410										delete attrData[filterBy];
1411										filtersPanel.find('a.all').addClass('active');
1412									}
1413								}
1414							} else {
1415								if (!isMultiple) {
1416									filtersPanel.find('a').removeClass('active');
1417									attrData[filterBy] = [];
1418								} else {
1419									filtersPanel.find('a.all').removeClass('active');
1420								}
1421								$(this).addClass('active');
1422								attrData[filterBy].push(thisFilter.substr(1));
1423							}
1424
1425							filterPortfolioAttributes($portfolio, attrData);
1426						} else {
1427							let filtersArr = $portfolio.data('portfolio-filter') ? $portfolio.data('portfolio-filter') : [];
1428
1429							if (thisFilter === '*') {
1430								filtersArr = [];
1431								filtersPanel.find('a').removeClass('active');
1432								$(this).addClass('active');
1433							} else if ($(this).hasClass('active')) {
1434								$(this).removeClass('active');
1435								if (filtersArr.includes(thisFilter.substr(1))) {
1436									const index = filtersArr.indexOf(thisFilter.substr(1));
1437									if (index > -1) {
1438										filtersArr.splice(index, 1);
1439									}
1440									if (filtersArr.length == 0) {
1441										filtersPanel.find('a.all').addClass('active');
1442									}
1443								}
1444							} else {
1445								if (!isMultiple) {
1446									filtersPanel.find('a').removeClass('active');
1447									filtersArr = [];
1448								} else {
1449									filtersPanel.find('a.all').removeClass('active');
1450								}
1451								$(this).addClass('active');
1452								filtersArr.push(thisFilter.substr(1));
1453							}
1454
1455							filterPortfolioExtended($portfolio, filtersArr);
1456						}
1457
1458						if ($('.portfolio-filters-resp', $portfolio).length > 0 && typeof $.fn.dlmenu === 'function') {
1459							$('.portfolio-filters-resp', $portfolio).dlmenu('closeMenu');
1460						}
1461
1462						return false;
1463					});
1464				}
1465
1466				if ($('.portfolio-filter-tabs', $portfolio).length) {
1467
1468					if ($('.portfolio-filter-tabs-list-tab.active', $portfolio).data('filter') == 'categories') {
1469						$portfolio.data('portfolio-filter', $('.portfolio-filter-tabs-list-tab.active', $portfolio).data('filter-cat'));
1470					} else {
1471						$portfolio.data('portfolio-filter-status', [$('.portfolio-filter-tabs-list-tab.active', $portfolio).data('filter')]);
1472					}
1473
1474					$('.portfolio-filter-tabs-list-tab', $portfolio).on('click', function (e) {
1475						if (!$(this).hasClass('active')) {
1476							$('.portfolio-filter-tabs-list-tab', $portfolio).removeClass('active');
1477							$(this).addClass('active');
1478							if ($(this).data('filter') == 'categories') {
1479								$portfolio.data('portfolio-filter', $(this).data('filter-cat'));
1480								$portfolio.data('portfolio-filter-status', '');
1481							} else {
1482								$portfolio.data('portfolio-filter', '');
1483								$portfolio.data('portfolio-filter-status', [$(this).data('filter')]);
1484							}
1485							$portfolio.data('current-tab', $(this).data('num'));
1486							$portfolio.data('next-page', 1);
1487							var uid = $portfolio.data('portfolio-uid');
1488							portfolioLoadCoreRequest($portfolio);
1489						}
1490					});
1491
1492					if ($portfolio.hasClass('tabs-preloading') && !isEditor) {
1493						$('.portfolio-filter-tabs-list-tab', $portfolio).each(function () {
1494							var $params = [];
1495							if ($(this).data('filter') == 'categories') {
1496								$params['portfolio-filter'] = $(this).data('filter-cat');
1497								$params['portfolio-filter-status'] = '';
1498							} else {
1499								$params['portfolio-filter'] = '';
1500								$params['portfolio-filter-status'] = [$(this).data('filter')];
1501							}
1502							$params['current-tab'] = $(this).data('num');
1503							$params['next-page'] = 1;
1504							portfolioLoadCoreRequest($portfolio, true, $params)
1505						})
1506					}
1507				}
1508
1509				if ($portfolio.hasClass('filters-preloading') && !isEditor) {
1510					$('.portfolio-filters a', $portfolio).each(function () {
1511						var $params = [];
1512						let filtersPanel = $(this).parents('.portfolio-top-panel-left');
1513						let filterBy = filtersPanel.data('filter-by');
1514						let thisFilter = $(this).data('filter');
1515
1516						if (!thisFilter) {
1517							return;
1518						}
1519
1520						if (filterBy) {
1521							let attrData = []
1522							attrData[filterBy] = [thisFilter.substr(1)];
1523							$params['portfolio-filter-attributes'] = attrData;
1524						} else {
1525							$params['portfolio-filter'] = thisFilter.substr(1);
1526						}
1527						$params['next-page'] = 1;
1528						portfolioLoadCoreRequest($portfolio, true, $params)
1529					})
1530				}
1531
1532				$portfolio.initPortfolioFiltersList();
1533
1534				if ($('.portfolio-selected-filters', $portfolio).length) {
1535
1536					if ($('.portfolio-filters-list.native-ajax-filters', $portfolio).length) {
1537						$('.portfolio-selected-filters', $portfolio).on('click', '.delete-filter', function () {
1538
1539							var $this = $(this),
1540								href;
1541
1542							href = window.location.href;
1543							href = href.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
1544
1545							var $filtersList = $('.portfolio-filters-list', $portfolio);
1546							var $selectedFilters = $('.portfolio-selected-filters', $portfolio);
1547							var item = $this.closest('.portfolio-selected-filter-item');
1548							if (item.hasClass('category')) {
1549								// href = updateUrlParams(href, 'category', '');
1550								// var params = '',
1551								// shopUrl = $('input.shop-page-url').val();
1552								// if (href.indexOf('?') > 1) {
1553								// 	params = '?'+href.split("?")[1];
1554								// }
1555								// nativeAjaxFiltering($portfolio, shopUrl+params);
1556							} else if (item.hasClass('attribute')) {
1557
1558								var attr = 'filter_' + item.data("attr"),
1559									filter = item.data("filter"),
1560									params,
1561									queryParams = new URLSearchParams(window.location.search);
1562								for (var p of queryParams) {
1563									if (p[0].includes(attr)) {
1564										params = p[1].split(",");
1565										var index = params.indexOf(filter);
1566										if (index > -1) {
1567											params.splice(index, 1);
1568										}
1569									}
1570								}
1571								href = updateUrlParams(href, attr, params.toString());
1572								nativeAjaxFiltering($portfolio, href);
1573
1574							} else if (item.hasClass('price')) {
1575								href = updateUrlParams(href, 'min_price', '');
1576								href = updateUrlParams(href, 'max_price', '');
1577								nativeAjaxFiltering($portfolio, href);
1578							} else if (item.hasClass('search')) {
1579								href = updateUrlParams(href, 's', '');
1580								nativeAjaxFiltering($portfolio, href);
1581							}
1582						}).on('click', '.clear-filters', function (e) {
1583							var shopUrl = $('input#shop-page-url').val();
1584							nativeAjaxFiltering($portfolio, shopUrl);
1585						});
1586					} else {
1587						let $this = $portfolio,
1588							$filtersList = $('.portfolio-filters-list', $portfolio);
1589						if (!$filtersList.length) {
1590							$this = $('.extended-posts-filter[data-portfolio-uid="' + $portfolio.data('portfolio-uid') + '"]');
1591							$filtersList = $this.find('.portfolio-filters-list');
1592						}
1593
1594						$('.portfolio-selected-filters', $portfolio).on('click', '.delete-filter', function () {
1595							var $selectedFilters = $('.portfolio-selected-filters', $portfolio);
1596							var item = $(this).closest('.portfolio-selected-filter-item');
1597							if (item.hasClass('category')) {
1598								if ($filtersList.find('a.all[data-filter-type="category"]').length) {
1599									$filtersList.find('a.all[data-filter-type="category"]').click();
1600								} else {
1601									$selectedFilters.find('.portfolio-selected-filter-item.category').remove();
1602									clearFilters($portfolio);
1603								}
1604							} else if (item.hasClass('attribute')) {
1605								if ($filtersList.find('a[data-attr="' + item.data("attr") + '"][data-filter="' + item.data("filter") + '"]').length) {
1606									$filtersList.find('a[data-attr="' + item.data("attr") + '"][data-filter="' + item.data("filter") + '"]').click();
1607								} else {
1608									let attr = item.data('attr');
1609									let thisFilter = item.data('filter');
1610									let attrData = $portfolio.data('portfolio-filter-attributes') ? $portfolio.data('portfolio-filter-attributes') : [];
1611									if (attrData[attr]) {
1612										const index = attrData[attr].indexOf(thisFilter.toString());
1613										if (index > -1) {
1614											attrData[attr].splice(index, 1);
1615										}
1616										if (attrData[attr].length === 0) {
1617											delete attrData[attr];
1618										}
1619										filterPortfolioAttributes($portfolio, attrData);
1620									}
1621									item.remove();
1622								}
1623							} else if (item.hasClass('price')) {
1624								if (item.data('attr')) {
1625									let attr = item.data('attr');
1626									let min = $this.find('.slider-range[data-attr="' + item.data("attr") + '"]').slider("option", "min");
1627									let max = $this.find('.slider-range[data-attr="' + item.data("attr") + '"]').slider("option", "max");
1628									$this.find('.slider-range[data-attr="' + item.data("attr") + '"]').slider("values", [min, max]);
1629									$selectedFilters.find('.portfolio-selected-filter-item.price[data-attr="' + item.data("attr") + '"]').remove();
1630									let attrData = $this.data('portfolio-filter-attributes') ? $this.data('portfolio-filter-attributes') : [];
1631									if (attrData[attr + '__range']) {
1632										delete attrData[attr + '__range'];
1633									}
1634									filterPortfolioAttributes($portfolio, attrData);
1635								} else {
1636									let min = $this.find(".slider-range").slider("option", "min");
1637									let max = $this.find(".slider-range").slider("option", "max");
1638									$this.find(".slider-range").slider("values", [min, max]);
1639									$selectedFilters.find('.portfolio-selected-filter-item.price').remove();
1640									filterPortfolioPrice($portfolio, '');
1641								}
1642							} else if (item.hasClass('status')) {
1643								$filtersList.find('a[data-filter-type="status"][data-filter="' + item.data("filter") + '"]').click();
1644							} else if (item.hasClass('search')) {
1645								$this.find(".portfolio-search-filter .portfolio-search-filter-form input").val('');
1646								$selectedFilters.find('.portfolio-selected-filter-item.search').remove();
1647								filterPortfolioSearch($portfolio, '');
1648							}
1649
1650							scrollTopPortfolio($this);
1651
1652							if (!$filtersList.length) {
1653								$selectedFilters.find('.clear-filters').click();
1654							}
1655
1656							$filtersList.find('.filters-apply-button .gem-button').click();
1657						}).on('click', '.clear-filters', function () {
1658							$this.find('.portfolio-filter-item:not(.reload) a').removeClass('active');
1659							$this.find('.portfolio-filter-item:not(.reload) a.all').addClass('active');
1660							$this.find(".slider-range").each(function (){
1661								var min = $(this).slider("option", "min");
1662								var max = $(this).slider("option", "max");
1663								$(this).slider("values", [min, max]);
1664							})
1665							$this.find(".portfolio-search-filter input").val('');
1666							$portfolio.find(".portfolio-selected-filters .portfolio-selected-filter-item:not(.clear-filters)").remove();
1667							clearFilters($portfolio);
1668							$filtersList.find('.selector-title span.name').each(function () {
1669								if ($(this).data('title')) {
1670									$(this).html('<span data-filter="*">' + $(this).data('title') + '</span>');
1671								}
1672							});
1673							scrollTopPortfolio($this);
1674						});
1675					}
1676				}
1677
1678				categoryFilterClick($portfolio);
1679
1680				$portfolio.on('click', '.info a:not(.zilla-likes, .additional-meta)', function () {
1681					var slug = $(this).data('slug') || '';
1682
1683					if (slug != '') {
1684						if ($('.portfolio-filters', $portfolio).length) {
1685							$('.portfolio-filters a[data-filter=".' + slug + '"]').click();
1686						} else {
1687							filterPortfolioExtended($portfolio, slug);
1688						}
1689						return false;
1690					}
1691				});
1692
1693				$portfolio.on('click', 'a.additional-meta', function () {
1694					let filterType = $(this).data('filter-type');
1695					let attr = $(this).data('attr');
1696					let filter = $(this).data('filter');
1697
1698					if (!$('.portfolio-top-panel.filter-type-default', $portfolio).length) {
1699						$portfolio.data('portfolio-filter', '');
1700					}
1701					$portfolio.data('portfolio-filter-attributes', '');
1702					$portfolio.data('portfolio-filter-status', '');
1703					$portfolio.data('portfolio-filter-price', '');
1704					$portfolio.data('portfolio-filter-search', '');
1705					$portfolio.data('next-page', 1);
1706
1707					if (filterType === 'taxonomies') {
1708						if ($('.portfolio-filters.filter-by-' + attr + ' a[data-filter=".' + filter + '"]', $portfolio).length) {
1709							$('.portfolio-filters.filter-by-' + attr + ' a', $portfolio).removeClass('active');
1710							$('.portfolio-filters.filter-by-' + attr + ' a[data-filter=".' + filter + '"]', $portfolio).addClass('active');
1711							if (attr === 'category' || attr === 'thegem_portfolios') {
1712								filterPortfolioExtended($portfolio, filter);
1713								return;
1714							}
1715						}
1716						attr = 'tax_' + attr;
1717					}
1718
1719					if ($('.portfolio-filters-extended a[data-attr="' + attr + '"][data-filter="' + filter + '"]', $portfolio).length) {
1720						let $filtersList = $('.portfolio-filters-list', $portfolio);
1721						if (!$filtersList.length) {
1722							$filtersList = $('.extended-posts-filter[data-portfolio-uid="' + $portfolio.data('portfolio-uid') + '"] .portfolio-filters-list');
1723						}
1724						$filtersList.find('.portfolio-filter-item:not(.reload) a').removeClass('active');
1725						$filtersList.find('.portfolio-filter-item:not(.reload) a.all').addClass('active');
1726						$portfolio.find(".portfolio-search-filter input").val('');
1727						$portfolio.find(".portfolio-selected-filters .portfolio-selected-filter-item:not(.clear-filters)").remove();
1728						$('.portfolio-filters-extended a[data-attr="' + attr + '"][data-filter="' + filter + '"]', $portfolio).click();
1729					} else {
1730						let $selectedFilters = $('.portfolio-selected-filters', $portfolio);
1731						$selectedFilters.find('.portfolio-selected-filter-item[data-attr="' + attr + '"]').remove();
1732						$selectedFilters.append('<div class="portfolio-selected-filter-item attribute" data-attr="' + attr + '" data-filter="' + filter + '">' + $(this).html() + '<i class="delete-filter"></i></div>');
1733						let attrData = [];
1734						attrData['' + attr] = [filter];
1735						scrollTopPortfolio($portfolio, true);
1736						filterPortfolioAttributes($portfolio, attrData);
1737					}
1738				});
1739
1740				$('.portfolio-load-more', $portfolio).on('click', function () {
1741					portfolioLoadCoreRequest($portfolio);
1742				});
1743
1744				if ($portfolio.hasClass('reduce-size') && $portfolio.data('next-page') !== 0) {
1745					let event = typeof TheGemDelayJavaScript == 'undefined' ? 'scroll' : 'thegem-load';
1746					window.addEventListener(event, function() {
1747						if ($portfolio.hasClass('reduce-size')) {
1748							portfolioLoadCoreRequest($portfolio);
1749						}
1750					});
1751					if(event === 'scroll' && $portfolio.data('next-page') === 1) {
1752						window.dispatchEvent(new Event('scroll'));
1753					}
1754				}
1755				if ($portfolio.hasClass('portfolio-pagination-scroll')) {
1756					initPortfolioScrollNextPage($portfolio);
1757				}
1758
1759				if (!$portfolio.hasClass('news-grid') && !$portfolio.hasClass('extended-products-grid')) {
1760					$portfolio.on('click', '.portfolio-item .image .overlay, .portfolio-item .wrap > .caption', function (event) {
1761
1762						if ($portfolio.hasClass('caption-position-hover') && $(this).parents('.portfolio-item').hasClass('hover-effect')) {
1763							if (!$(this).parents('.portfolio-item').hasClass('hover-effect-active')) {
1764								return
1765							}
1766						}
1767						var $target = $(event.target),
1768							$icons = $target.closest('.portfolio-item').find('.portfolio-icons'),
1769							$product_link = $target.closest('.portfolio-item').find('.product-link'),
1770							$portfolio_link = $target.closest('.portfolio-item').find('.portfolio-item-link');
1771
1772						if ($target.hasClass('portfolio-item-link') || $target.hasClass('product-link') || $target.hasClass('add_to_cart_button') ||
1773							$target.closest('.add_to_cart_button').length || $target.closest('.icon').length || $target.closest('.socials-sharing').length ||
1774							$target.closest('.post-footer-sharing').length || $target.closest('.quick-view-button').length || $target.closest('.set').length ||
1775							$target.closest('.read-more-button').length) {
1776							return;
1777						}
1778
1779						if (window.gemSettings.isTouch) {
1780							if ($(this).children('.product-link').length) {
1781								window.location.href = $product_link.attr('href');
1782								return false;
1783							}
1784							if ($target.closest('.overlay').length && !$target.closest('.portfolio-item').hasClass('touch-hover')) {
1785								$target.closest('.portfolio-item').addClass('touch-hover');
1786								$('*').one('click', function (event) {
1787									if (!$(event.target).closest('.portfolio-item').is($target.closest('.portfolio-item'))) {
1788										$target.closest('.portfolio-item').removeClass('touch-hover');
1789									}
1790								});
1791								return false;
1792							}
1793						}
1794
1795						if ($product_link.length) {
1796							window.open($product_link.attr('href'), "_self");
1797						} else if ($portfolio_link.length) {
1798							if ( $portfolio_link.hasClass('self-link')) {
1799								window.open($portfolio_link.attr('href'), $portfolio_link.attr('target'));
1800							} else {
1801								$portfolio_link.click();
1802							}
1803						} else if ($('.icon.self-link', $icons).length) {
1804							window.open(
1805								$('.icon.self-link', $icons).attr('href'),
1806								$('.icon.self-link', $icons).attr('target')
1807							);
1808						} else if ($('.icon.bottom-product-link', $icons).length) {
1809							window.open($('.icon.bottom-product-link', $icons).attr('href'), "_self");
1810						} else {
1811							var $firstIcon = $('.icon', $icons).first();
1812
1813							if ($firstIcon.hasClass('inner-link') || $firstIcon.hasClass('outer-link')) {
1814								window.open(
1815									$firstIcon.attr('href'),
1816									$firstIcon.attr('target')
1817								);
1818							} else {
1819								$firstIcon.click();
1820							}
1821						}
1822					});
1823				}
1824
1825				if ($portfolio.hasClass('next-page-preloading') && $portfolio.data('next-page') > 0 && !isEditor) {
1826					if ($portfolio.hasClass('portfolio-pagination-normal')) {
1827						portfolioLoadCoreRequest($portfolio, true, {'next-page': 1});
1828					}
1829					portfolioLoadCoreRequest($portfolio, true);
1830				}
1831
1832				if ($('.product-variations:not(.simple)', $portfolio).length) {
1833					$('.product-variations:not(.simple)', $portfolio).each(function () {
1834						initVariations($(this));
1835					});
1836				}
1837			});
1838
1839			if (typeof $.fn.dlmenu === 'function') {
1840				$('.portfolio-filters-resp', $portfolio).dlmenu({
1841					animationClasses: {
1842						classin: 'dl-animate-in',
1843						classout: 'dl-animate-out'
1844					}
1845				});
1846			}
1847		}
1848
1849		function initVariations($form) {
1850			let $price = $form.closest('.portfolio-item').find('.product-price'),
1851				variablePrice = $price.html(),
1852				$selectOptionsWrap = $form.closest('.portfolio-item').find('span.cart:not(.swatches-button)'),
1853				$cartWrap = $form.closest('.portfolio-item').find('span.cart.swatches-button'),
1854				$cart = $cartWrap.find('a'),
1855				$image = $form.closest('.portfolio-item').find('.image'),
1856				$productImg = $form.closest('.portfolio-item').find('img:not(.variation-image)'),
1857				$variationImg = $form.closest('.portfolio-item').find('.variation-image'),
1858				hideVariation = () => {
1859					$price.html(variablePrice);
1860					$cartWrap.hide();
1861					$selectOptionsWrap.show().insertBefore($cartWrap);
1862					$productImg.show();
1863					$variationImg.hide();
1864					$variationImg.attr('src', '');
1865					$variationImg.attr('srcset', '');
1866				};
1867
1868			hideVariation();
1869
1870			$form.on('hide_variation', function (e) {
1871				hideVariation();
1872			});
1873
1874			$form.on('show_variation', function (e, variation) {
1875				if (variation.is_purchasable) {
1876					if (variation.is_in_stock) {
1877						if (variation.price_html != '') {
1878							$price.html(variation.price_html);
1879						}
1880						$selectOptionsWrap.hide();
1881						$cart.data('variation_id', variation.variation_id);
1882						let variationsArray = $form.serializeArray();
1883						let variations = {};
1884						$.each(variationsArray, function () {
1885							variations[this.name] = this.value || "";
1886						});
1887						$cart.data('variation', variations);
1888						$cartWrap.show().insertBefore($selectOptionsWrap);
1889					} else {
1890						$price.html('<div class="price">'+variation.availability_html+'</div>');
1891					}
1892
1893					if (variation.image && variation.image.src) {
1894						$image.prepend('<div class="preloader-spin-new"></div>');
1895						$variationImg.attr('src', variation.image.src);
1896						$variationImg.attr('height', variation.image.src_h);
1897						$variationImg.attr('width', variation.image.src_w);
1898						$variationImg.attr('srcset', variation.image.srcset);
1899						$variationImg.attr('sizes', variation.image.sizes);
1900						$variationImg.attr('title', variation.image.title);
1901						$variationImg.attr('data-caption', variation.image.caption);
1902						$variationImg.attr('alt', variation.image.alt);
1903					} else {
1904						$productImg.show();
1905						$variationImg.hide();
1906						$variationImg.attr('src', '');
1907						$variationImg.attr('srcset', '');
1908					}
1909					$form.closest('.portfolio-item').find('.image .variations-notification').html('').hide();
1910				} else {
1911					hideVariation();
1912					if ($form.find('.single_variation > p').length) {
1913						$form.closest('.portfolio-item').find('.image .variations-notification').html('<span class="close"></span>'+$form.find('.single_variation > p').html()).css('display', 'flex');
1914					}
1915				}
1916			});
1917
1918			$form.on('reset_data', function (e, variation) {
1919				$form.closest('.portfolio-item').find('.image .variations-notification').html('').hide();
1920				setTimeout(checkVariables.bind(this, $form), 100);
1921			});
1922
1923			$cart.on('click', function (e) {
1924
1925				if ($cart.data('product_id')) {
1926					e.preventDefault();
1927
1928					let $thisButton = $(this);
1929
1930					let data = {
1931						action: 'woocommerce_ajax_add_to_cart'
1932					};
1933
1934					// Fetch changes that are directly added by calling $thisbutton.data( key, value )
1935					$.each( $thisButton.data(), function( key, value ) {
1936						data[ key ] = value;
1937					});
1938
1939					$(document.body).trigger('adding_to_cart', [$thisButton, data]);
1940
1941					$.ajax({
1942						type: 'post',
1943						url: wc_add_to_cart_params.ajax_url,
1944						data: data,
1945						success: function (response) {
1946							if ( ! response ) {
1947								return;
1948							}
1949
1950							if ( response.error && response.product_url ) {
1951								window.location = response.product_url;
1952								return;
1953							}
1954
1955							$(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $thisButton]);
1956						},
1957					});
1958
1959					return false;
1960				}
1961			});
1962
1963			$variationImg.on('load', function () {
1964				$productImg.hide();
1965				$variationImg.show();
1966				$image.find('.preloader-spin-new').remove();
1967			});
1968
1969			$('.variations-notification').on('click', '.close', function () {
1970				$(this).parent().hide();
1971			})
1972		}
1973
1974		function checkVariables($form) {
1975			if ($form.find('.wc-no-matching-variations').length) {
1976				$form.closest('.portfolio-item').find('.image .variations-notification').html('<span class="close"></span>'+$form.find('.wc-no-matching-variations').html()).css('display', 'flex');
1977			}
1978		}
1979
1980		function layoutComplete($portfolio, $set, laidOutItems) {
1981
1982			if ($portfolio.hasClass('news-grid')) {
1983
1984				if (!$portfolio.hasClass('disable-isotope')) {
1985					var setWidth = $set[0].offsetWidth;
1986
1987					for (var i = 0; i < laidOutItems.length; i++) {
1988						var item = laidOutItems[i];
1989
1990						if (item.element.classList.contains('double-item-style-alternative')) {
1991							var itemWidth = item.element.offsetWidth;
1992
1993							if (item.position.x != 0 && item.position.x + itemWidth > setWidth - 4) {
1994								item.element.classList.add('right-item');
1995							} else {
1996								item.element.classList.remove('right-item');
1997							}
1998						}
1999					}
2000				}
2001			}
2002		}
2003
2004		function arrangeComplete($portfolio, $set, portfolioStyle) {
2005
2006			if ($portfolio.hasClass('products')) {
2007				if ($portfolio.hasClass('columns-1') && $portfolio.hasClass('caption-position-zigzag')) {
2008					$('.portfolio-item .image', $portfolio).removeClass('col-md-push-4 col-md-push-5');
2009					$('.portfolio-item .caption', $portfolio).removeClass('col-md-pull-8 col-md-pull-7');
2010
2011					$('.portfolio-item', $portfolio).each(function (i){
2012						if (i % 2 == 1) {
2013							if ($(this).hasClass('portfolio-1x-fullwidth-item')) {
2014								$(this).find('.image').addClass('col-md-push-4');
2015								$(this).find('.caption').addClass('col-md-pull-8');
2016							} else {
2017								$(this).find('.image').addClass('col-md-push-5');
2018								$(this).find('.caption').addClass('col-md-pull-7');
2019							}
2020						}
2021					})
2022				}
2023			}
2024
2025			if ($portfolio.hasClass('news-grid')) {
2026
2027				if (typeof $.fn.buildSimpleGalleries === 'function') {
2028					$set.buildSimpleGalleries();
2029				}
2030
2031				if (typeof $.fn.updateSimpleGalleries === 'function') {
2032					$set.updateSimpleGalleries();
2033				}
2034			}
2035
2036			if (portfolioStyle != 'metro') {
2037				var onlyDoubleItems = hasOnlyDoubleItems($set);
2038
2039				if (onlyDoubleItems != $portfolio.hasClass('porfolio-even-columns')) {
2040					fixPortfolioWithDoubleItems($portfolio, onlyDoubleItems);
2041
2042					if ($set.data('thegem_isotope')) {
2043						$set.thegem_isotope('layout');
2044					}
2045				}
2046			}
2047
2048			$portfolio.closest('.portfolio-preloader-wrapper').prev('.preloader').remove();
2049		}
2050
2051		function itemsInit($portfolio, $items) {
2052
2053			let $set = $('.portfolio-set', $portfolio);
2054
2055			if ($portfolio.hasClass('products')) {
2056
2057				if ($portfolio.hasClass('title-on-hover') || $portfolio.hasClass('hover-gradient') || $portfolio.hasClass('hover-circular')) {
2058					$('.portfolio-icons-inner > a:not(.added_to_cart)', $items).addClass('icon');
2059				}
2060
2061				$('.product-bottom .yith-wcwl-wishlistexistsbrowse a', $items).addClass('icon wishlist');
2062
2063				// Fix problem with YITH loaded by ajax
2064				$('.product-bottom .yith-wcwl-add-to-wishlist', $items).each(function () {
2065					var wishlistItem = $(this);
2066					var classList = $(this).attr('class').split(/\s+/);
2067					$.each(classList, function (index, item) {
2068						var a = item.indexOf("wishlist-fragment");
2069						if (a !== -1 && a > 0) {
2070							var res = item.slice(0, a);
2071							wishlistItem.removeClass(item).addClass(res + ' wishlist-fragment');
2072						}
2073					});
2074				});
2075			}
2076
2077			if ($portfolio.hasClass('news-grid') && !$portfolio.hasClass('title-on-page')) {
2078				var needLayout = false;
2079
2080				$items.each(function () {
2081
2082					if ($(this).innerWidth() < 260 || $(this).innerHeight() < 260) {
2083						if (!$(this).hasClass('small-item')) {
2084							$(this).addClass('small-item');
2085							needLayout = true;
2086						}
2087					} else {
2088						if ($(this).hasClass('small-item')) {
2089							$(this).removeClass('small-item');
2090							needLayout = true;
2091						}
2092					}
2093
2094					if ($('mediaelementwrapper', this).length > 0) {
2095						$('mediaelementwrapper', this).trigger('resize');
2096					}
2097				})
2098
2099				if (needLayout && $set.data('thegem_isotope')) {
2100					$set.thegem_isotope('layout');
2101				}
2102			}
2103
2104			if ( $portfolio.hasClass('portfolio-grid') && $portfolio.hasClass('disable-isotope') && !$portfolio.hasClass('portfolio-list') && !$portfolio.hasClass('list-style') && !$portfolio.hasClass('news-grid')) {
2105
2106				$items.on('mouseenter', function () {
2107					$(this).addClass('hide-likes');
2108					if ($portfolio.hasClass('portfolio-style-creative') && $(this).hasClass('double-item')) {
2109						$(this).find('.wrap .image').css('height', '').css('flex', '').css('height', $(this).find('.wrap .image').outerHeight()).css('flex', 'none');
2110					}
2111					$(this).find('.wrap').css('height', '').css('height', $(this).find('.wrap').outerHeight());
2112					$(this).removeClass('hide-likes');
2113				})
2114			}
2115
2116			if ($portfolio.hasClass('loading-animation')) {
2117				if (scrollTopPromise) {
2118					scrollTopPromise.then(function () {
2119						$portfolio.itemsAnimations('instance').show($items)
2120					});
2121				} else {
2122					$portfolio.itemsAnimations('instance').show($items);
2123				}
2124			}
2125
2126			if (window.tgpLazyItems !== undefined) {
2127				window.tgpLazyItems.scrollHandle();
2128			}
2129
2130			$('img.image-hover', $items).show();
2131
2132			if ($('.gem-video-portfolio.run-embed-video', $items).length) {
2133				initApiVideos($('.gem-video-portfolio.run-embed-video', $items));
2134			}
2135
2136			if ( $portfolio.hasClass('portfolio-grid')) {
2137				$items.each(function (){
2138					if ($(this).hasClass('appearance-type-gallery')) {
2139						initPortfolioGallery($(this));
2140					}
2141
2142					if ($(this).find('.thegem-te-loop-featured-media.appearance-type-gallery')) {
2143						initPortfolioGallery($(this));
2144					}
2145				});
2146			}
2147
2148			$('.details span.format-locale', $items).each(function (){
2149				let loc = $(this).data('locale').replace('_', '-');
2150				let num = parseFloat($(this).html());
2151				$(this).html(num.toLocaleString(loc));
2152			});
2153		}
2154
2155		let autoScrolldelay = 0;
2156
2157		function initPortfolioGallery($item) {
2158			if ($item.hasClass('inited')) return;
2159			let $slider = $item.find(".portfolio-image-slider"),
2160				$slides = $item.find(".slide"),
2161				$btns = $item.find(".btn"),
2162				curSlide = 0,
2163				maxSlide = $slides.length - 1,
2164				autoplay;
2165
2166			$slides.each(function (i){
2167				$(this).css('transform', `translateX(${i * 100}%)`).css('opacity', '');
2168			});
2169
2170			$btns.on('click', function (){
2171				changeSlide($(this).data('direction'));
2172			});
2173
2174			const changeSlide = (direction) => {
2175				if (direction === "prev") {
2176					curSlide--;
2177					if (curSlide < 0 ) {
2178						let moveSlide = $slider.find(".slide")[maxSlide];
2179						$(moveSlide).css('transform', 'translateX(-100%)');
2180						$slider.prepend(moveSlide);
2181						curSlide = 0;
2182					}
2183				} else {
2184					curSlide++;
2185					if (curSlide > maxSlide) {
2186						let moveSlide = $slider.find(".slide")[0];
2187						$(moveSlide).css('transform', 'translateX(100%)');
2188						$slider.append(moveSlide);
2189						curSlide = maxSlide;
2190					}
2191				}
2192				setTimeout(function (){
2193					$slider.find(".slide").each(function (i){
2194						$(this).css('transform', `translateX(${100 * (i - curSlide)}%)`);
2195					});
2196				}, 0);
2197
2198			}
2199
2200			if ($slider.hasClass('autoscroll')) {
2201				setTimeout(function (){
2202					let interval = $slider.data('interval');
2203					autoplay = setInterval(() => changeSlide('next'), interval);
2204
2205					$item.on('mouseenter', function (){
2206						clearInterval(autoplay);
2207					}).on('mouseleave', function (){
2208						autoplay = setInterval(() => changeSlide('next'), interval);
2209					})
2210				}, autoScrolldelay * 1200);
2211				autoScrolldelay++;
2212			}
2213			$item.addClass('inited');
2214		}
2215
2216		function filtersListMobileView(filtersList, breakpoint) {
2217			if ($(window).outerWidth() < breakpoint) {
2218				if (filtersList.hasClass('style-standard')) {
2219					filtersList.addClass('style-standard-mobile');
2220				} else if (filtersList.hasClass('style-sidebar')) {
2221					filtersList.addClass('style-sidebar-mobile');
2222				}
2223			} else {
2224				if (filtersList.hasClass('style-standard')) {
2225					filtersList.removeClass('style-standard-mobile');
2226				} else if (filtersList.hasClass('style-sidebar')) {
2227					filtersList.removeClass('style-sidebar-mobile');
2228				}
2229			}
2230		}
2231
2232		function nativeAjaxFiltering($portfolio, href) {
2233			scrollTopPortfolio($portfolio);
2234			href = updateUrlParams(href, 'page', '');
2235			href = updateUrlParams(href, 'style_uid', $portfolio.data('style-uid'));
2236			href = updateUrlParams(href, 'ajax_filters', '1');
2237			href = href.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
2238
2239			addFilterLoader($portfolio);
2240
2241			$.ajax({
2242				url: href,
2243				type: "POST",
2244				success: function (response) {
2245					href = updateUrlParams(href, 'ajax_search', '');
2246					href = updateUrlParams(href, 'ajax_filters', '');
2247					href = updateUrlParams(href, 'style_uid', '');
2248					var $response = $(response);
2249					if ($response.find('.extended-products-grid.main-loop-grid').length) {
2250						let $wrapper = $portfolio.closest('.portfolio-preloader-wrapper');
2251						$wrapper.html($response.find('.extended-products-grid.main-loop-grid'))
2252							.find('.count').each(function () {
2253							$(this).html($(this).html().replace('(', '').replace(')', '')).css('opacity', 1);
2254						});
2255
2256						$('.extended-products-grid').initExtendedPortfolioGrids();
2257						refreshPriceSlider();
2258						refreshSelect2();
2259						$('.gem-attribute-selector', $wrapper).gemWooAttributeSelector();
2260						$('.product-variations', $wrapper).each(function () {
2261							try {
2262								$(this).wc_variation_form();
2263							} catch(err) {
2264								console.log(err);
2265							}
2266							initVariations($(this));
2267						});
2268						history.replaceState(null, null, href);
2269					} else {
2270						window.location.href = href;
2271					}
2272				}
2273			});
2274		}
2275
2276		function updateUrlParams(uri, key, value) {
2277			var params = '';
2278			if (uri.indexOf('?') > 1) {
2279				params = uri.split("?")[1];
2280			}
2281			var queryParams = new URLSearchParams(params);
2282			if (value !== '') {
2283				queryParams.set(key, value)
2284			} else {
2285				queryParams.delete(key);
2286			}
2287
2288			if (queryParams.toString().length > 0) {
2289				return uri.split("?")[0] + "?" + queryParams.toString();
2290			} else {
2291				return uri.split("?")[0];
2292			}
2293		}
2294
2295		function refreshSelect2() {
2296			var select2 = $('select.woocommerce-widget-layered-nav-dropdown');
2297			if (select2.length && jQuery().selectWoo) {
2298				select2.each(function () {
2299					$(this).selectWoo({
2300						placeholder: $(this).find('option').eq(0).text(),
2301						minimumResultsForSearch: 5,
2302						width: '100%',
2303						allowClear: typeof $(this).attr('multiple') != 'undefined' && $(this).attr('multiple') == 'multiple' ? 'false' : 'true'
2304					});
2305				});
2306			}
2307			$('body').children('span.select2-container').remove();
2308		}
2309
2310		function refreshPriceSlider() {
2311			var price_slider = $('.price_slider');
2312			if (price_slider.length) {
2313				if (typeof woocommerce_price_slider_params === 'undefined') {
2314					return false;
2315				}
2316
2317				$('input#min_price, input#max_price').hide();
2318				$('.price_slider, .price_label').show();
2319
2320				var min_price = $('.price_slider_amount #min_price').data('min'),
2321					max_price = $('.price_slider_amount #max_price').data('max'),
2322					current_min_price = parseInt($('.price_slider_amount #min_price').val() ? $('.price_slider_amount #min_price').val() : min_price, 10),
2323					current_max_price = parseInt($('.price_slider_amount #max_price').val() ? $('.price_slider_amount #max_price').val() : max_price, 10);
2324
2325				$('.price_slider').slider({
2326					range: true,
2327					animate: true,
2328					min: min_price,
2329					max: max_price,
2330					values: [current_min_price, current_max_price],
2331					create: function () {
2332						$('.price_slider_amount #min_price').val(current_min_price);
2333						$('.price_slider_amount #max_price').val(current_max_price);
2334						$(document.body).trigger('price_slider_create', [current_min_price, current_max_price]);
2335					},
2336					slide: function (event, ui) {
2337						$('input#min_price').val(ui.values[0]);
2338						$('input#max_price').val(ui.values[1]);
2339						$(document.body).trigger('price_slider_slide', [ui.values[0], ui.values[1]]);
2340					},
2341					change: function (event, ui) {
2342						$(document.body).trigger('price_slider_change', [ui.values[0], ui.values[1]]);
2343					},
2344					stop: function (event, ui) {
2345						var href = window.location.href;
2346						href = href.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
2347
2348						href = updateUrlParams(href, 'min_price', ui.values[0]);
2349						href = updateUrlParams(href, 'max_price', ui.values[1]);
2350
2351						let $portfolio = $(this).closest('.portfolio.extended-products-grid');
2352						$('.widget_price_filter', $portfolio).removeClass('yith-wcan-list-price-filter');
2353						if ($('.portfolio-filters-list', $portfolio).hasClass('native-ajax-filters')) {
2354							nativeAjaxFiltering($portfolio, href);
2355						} else {
2356							window.location.href = href;
2357						}
2358					}
2359				});
2360			}
2361			$('.price_slider_amount .button').addClass('gem-button gem-button-style-outline gem-button-size-tiny');
2362		}
2363
2364		function categoryFilterClick($portfolio) {
2365			if (!$portfolio.hasClass('extended-portfolio-grid')) {
2366				$portfolio = $portfolio.parents('.extended-portfolio-grid');
2367			}
2368			$('.categories', $portfolio).on('click', 'a', function (e) {
2369				var thisFilter = $(this).data('filter');
2370				if (!thisFilter) return;
2371				e.preventDefault();
2372				var $thisItem = $('.portfolio-filters-area', $portfolio).find('a[data-filter-type="category"][data-filter="' + thisFilter + '"]');
2373
2374				if ($thisItem.length) {
2375					$thisItem.click();
2376				} else {
2377					var $selectedFilters = $('.portfolio-selected-filters', $portfolio);
2378					$selectedFilters.find('.portfolio-selected-filter-item.category').remove();
2379					if (thisFilter !== '*') {
2380						$selectedFilters.append('<div class="portfolio-selected-filter-item category" data-filter="' + thisFilter + '">' + $(this).html() + '<i class="delete-filter"></i></div>');
2381						filterPortfolioExtended($portfolio, thisFilter);
2382					} else {
2383						filterPortfolioExtended($portfolio, '');
2384					}
2385				}
2386			});
2387		}
2388
2389		function closeFiltersPopup($portfolio) {
2390			$('.portfolio').removeClass('filters-opened');
2391			$('.portfolio-filters-outer', $portfolio).addClass('close-animation').removeClass('visible');
2392			setTimeout(function () {
2393				$('.portfolio-filters-outer', $portfolio).removeClass('close-animation');
2394				$('.progress-bar', $portfolio).hide();
2395			}, 300);
2396
2397		}
2398
2399		function toggleNewsGridSharing(button) {
2400			var $meta = $(button).closest('.grid-post-meta-inner'),
2401				$likes = $('.grid-post-meta-comments-likes', $meta),
2402				$icons = $('.portfolio-sharing-pane', $meta);
2403
2404			if ($meta.hasClass('active')) {
2405				$meta.removeClass('active');
2406
2407				$('.socials-sharing', $meta).animate({
2408					width: 'toggle'
2409				}, 300, function () {
2410					$meta.removeClass('animation');
2411				});
2412			} else {
2413				$meta.css('min-width', $meta.outerWidth());
2414
2415				$meta.addClass('active animation');
2416
2417				$('.socials-sharing', $meta).animate({
2418					width: 'toggle'
2419				}, 200);
2420			}
2421		}
2422
2423		function customExtendedIcons($portfolio) {
2424			if (!$portfolio.hasClass('extended-portfolio-grid')) {
2425				$portfolio = $portfolio.parents('.extended-portfolio-grid');
2426			}
2427			$portfolio.find('.post-meta-likes, .portfolio-likes, .portfolio-list-likes').each(function () {
2428				if ($(this).find('i').length) {
2429					if (!$(this).find('a').children('i').length) {
2430						var icon = $(this).children('i');
2431						$(this).find('a').prepend(icon.clone());
2432					}
2433				} else if ($(this).find('svg').length) {
2434					if (!$(this).find('a').children('svg').length) {
2435						var icon_svg = $(this).children('svg');
2436						$(this).find('a').prepend(icon_svg.clone());
2437					}
2438				}
2439			});
2440
2441			$portfolio.find('.comments-link').each(function () {
2442				if ($(this).find('i').length) {
2443					var icon = $(this).find('i');
2444					$(this).find('i').remove();
2445					$(this).find('a').prepend(icon);
2446				} else if ($(this).find('svg').length) {
2447					var icon_svg = $(this).find('svg');
2448					$(this).find('svg').remove();
2449					$(this).find('a').prepend(icon_svg);
2450				}
2451			});
2452
2453			$portfolio.find('.yith-icon a').css('transition', 'none');
2454			setTimeout(function () {
2455				$portfolio.find('.yith-icon a').css('transition', '');
2456			}, 300);
2457
2458			if ($portfolio.hasClass('extended-products-grid')) {
2459				$portfolio.find('.yith-icon').each(function () {
2460					if (!$(this).find('a').hasClass('icon')) {
2461						var addIcon = $(this).children('.add-wishlist-icon').clone();
2462						var addedIcon = $(this).children('.added-wishlist-icon').clone();
2463						$(this).find('a i').remove();
2464						$(this).find('a svg').remove();
2465						$(this).find('.yith-wcwl-add-button a:not(.delete_item)').prepend(addIcon);
2466						$(this).find('.yith-wcwl-add-button a.delete_item').prepend(addedIcon);
2467						$(this).find('.yith-wcwl-wishlistexistsbrowse a').prepend(addedIcon);
2468						$(this).find('a').addClass('icon');
2469						$(this).find('a.gem-button').removeAttr('class').removeAttr('style').removeAttr('onmouseleave').removeAttr('onmouseenter').addClass('icon');
2470						$(this).find('.yith-wcwl-wishlistaddedbrowse a').prepend(addedIcon);
2471					}
2472				});
2473				$portfolio.find('.cart.icon').each(function () {
2474					if (!$(this).find('i').length) {
2475						$(this).find('a').prepend('<i class="default variable"></i>');
2476					}
2477				});
2478			} else {
2479				$portfolio.find('.yith-icon').each(function () {
2480					if ($(this).find('i').length) {
2481						if (!$(this).find('.yith-wcwl-add-button a').children('i').length) {
2482							var icon = $(this).children('i');
2483							$(this).find('.yith-wcwl-add-button a').prepend(icon.clone());
2484						}
2485					} else if ($(this).find('svg').length) {
2486						if (!$(this).find('.yith-wcwl-add-button a').children('svg').length) {
2487							var icon_svg = $(this).children('svg');
2488							$(this).find('.yith-wcwl-add-button a').prepend(icon_svg.clone());
2489						}
2490					}
2491				});
2492			}
2493
2494		}
2495
2496		$.fn.initPortfolioFiltersList = function () {
2497			let $portfolio,
2498				$this = $(this),
2499				portfolioUid = $this.data('portfolio-uid'),
2500				$filtersList = $this.find('.portfolio-filters-list'),
2501				filterUrl = $this.data('url');
2502			if ($this.hasClass('portfolio')) {
2503				$portfolio = $this;
2504			} else if (!filterUrl) {
2505				$portfolio = $('.portfolio[data-portfolio-uid="' + portfolioUid + '"]').first();
2506			}
2507			if ($filtersList.hasClass('filtering-type-external') && !$portfolio.length) {
2508				filterUrl = true;
2509			}
2510
2511			if (filterUrl) {
2512				currentFilters[portfolioUid] = [];
2513				currentFilters[portfolioUid]['portfolio-uid'] = portfolioUid;
2514			}
2515
2516			let filterLater = $filtersList.hasClass('filtering-type-button') || $filtersList.hasClass('filtering-type-external');
2517			if (filterLater && !filterUrl && !$portfolio.find('.portfolio-selected-filters-clone').length) {
2518				$portfolio.find('.portfolio-selected-filters').clone().addClass('portfolio-selected-filters-clone').prependTo($portfolio);
2519			}
2520
2521			if ($('.portfolio-filters-list', $this).length) {
2522
2523				$this.closest('#main').addClass('over-header');
2524
2525				$(this).find('.portfolio-filters-list:not(.native) .portfolio-filter-item').on('click', 'a', function (e) {
2526					var $thisItem = $(this).parents('.portfolio-filter-item');
2527					if ($(this).hasClass('disable') || $(this).parent('.filters-apply-button').length) {
2528						return;
2529					}
2530					var typeFilter = $(this).data('filter-type');
2531					var thisFilter = $(this).data('filter').toString();
2532					var $selectedFilters = $('.portfolio-selected-filters', $portfolio);
2533					if (filterLater) {
2534						$selectedFilters = $('.portfolio-selected-filters-clone', $portfolio);
2535					} else if ($('.portfolio-selected-filters-clone', $portfolio).length) {
2536						$('.portfolio-selected-filters', $portfolio).html($('.portfolio-selected-filters-clone', $portfolio).html());
2537					}
2538					let selectorTitle = $thisItem.find('.selector-title span.name');
2539
2540					if (typeFilter) {
2541						e.preventDefault();
2542					} else {
2543						return;
2544					}
2545
2546					resetSearch($this);
2547
2548					if (!$thisItem.hasClass('multiple')) {
2549						$thisItem.find('.dropdown-selector').removeClass('collapsed');
2550					}
2551
2552					if (typeFilter === 'category') {
2553						if ($thisItem.hasClass('reload')) {
2554							var shopUrl = $('input#shop-page-url').val();
2555							if (thisFilter !== '*') {
2556								shopUrl = $(this).attr("href");
2557							}
2558							var href = window.location.href;
2559							if (href.indexOf('?') > 1) {
2560								var queryParams = new URLSearchParams(href.split("?")[1]);
2561								queryParams.delete('page');
2562								shopUrl += '?' + queryParams.toString();
2563							}
2564
2565							shopUrl = shopUrl.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
2566							window.location.href = shopUrl;
2567							return;
2568						} else {
2569							$thisItem.find('a').removeClass('active');
2570							$thisItem.find('a[data-filter="' + thisFilter + '"]').addClass('active').parents('li').find(' > a').addClass('active');
2571							$selectedFilters.find('.portfolio-selected-filter-item.category').remove();
2572							if (selectorTitle.length) {
2573								selectorTitle.html($(this).find('.title').html());
2574								if (thisFilter == '*' && selectorTitle.data('title')) {
2575									selectorTitle.html('<span data-filter="*">' + selectorTitle.data('title') + '</span>');
2576								} else {
2577									selectorTitle.html('<span data-filter="' + thisFilter + '">' + $(this).find('.title').html() + '</span>');
2578								}
2579							}
2580							if (thisFilter !== '*') {
2581								if (!$filtersList.hasClass('single-filter')) {
2582									$selectedFilters.append('<div class="portfolio-selected-filter-item category" data-filter="' + thisFilter + '">' + $(this).find('.title').html() + '<i class="delete-filter"></i></div>');
2583								}
2584
2585								if (filterLater) {
2586									if (filterUrl) {
2587										currentFilters[portfolioUid]['portfolio-filter'] = thisFilter;
2588									} else {
2589										$portfolio.data('portfolio-filter', thisFilter);
2590									}
2591								} else {
2592									filterPortfolioExtended($portfolio, thisFilter);
2593								}
2594							} else {
2595								if (filterLater) {
2596									if (filterUrl) {
2597										currentFilters[portfolioUid]['portfolio-filter'] = '';
2598									} else {
2599										$portfolio.data('portfolio-filter', '');
2600									}
2601								} else {
2602									filterPortfolioExtended($portfolio, '');
2603								}
2604							}
2605						}
2606					} else if (['attribute', 'products_attributes', 'taxonomies', 'details', 'custom_fields', 'acf_fields', 'manual_key'].includes(typeFilter)) {
2607						let attr = $(this).data('attr');
2608						let attrData;
2609						if (filterUrl) {
2610							attrData = currentFilters[portfolioUid]['portfolio-filter-attributes'] ? currentFilters[portfolioUid]['portfolio-filter-attributes'] : [];
2611						} else {
2612							attrData = $portfolio.data('portfolio-filter-attributes') ? $portfolio.data('portfolio-filter-attributes') : []
2613						}
2614						if (!attrData[attr]) {
2615							attrData[attr] = [];
2616						}
2617
2618						if ($(this).hasClass('all')) {
2619							delete attrData[attr];
2620							$thisItem.find('a').removeClass('active');
2621							$(this).addClass('active');
2622							$selectedFilters.find('.portfolio-selected-filter-item[data-attr="' + attr + '"]').remove();
2623							if (selectorTitle.length) {
2624								if (selectorTitle.data('title')) {
2625									selectorTitle.html('<span data-filter="*">' + selectorTitle.data('title') + '</span>');
2626								} else {
2627									selectorTitle.html('<span data-filter="*">' + $(this).find('.title').html() + '</span>');
2628								}
2629							}
2630						} else if ($(this).hasClass('active')) {
2631							$(this).removeClass('active');
2632							if (attrData[attr]) {
2633								const index = attrData[attr].indexOf(thisFilter.toString());
2634								if (index > -1) {
2635									attrData[attr].splice(index, 1);
2636								}
2637								if (attrData[attr].length === 0) {
2638									delete attrData[attr];
2639									$thisItem.find('a.all').addClass('active');
2640									if (selectorTitle.length) {
2641										if (selectorTitle.data('title')) {
2642											selectorTitle.html('<span data-filter="*">' + selectorTitle.data('title') + '</span>');
2643										} else {
2644											selectorTitle.html('<span data-filter="*">' + $thisItem.find('a.all .title').html() + '</span>');
2645										}
2646									}
2647								}
2648							}
2649							$selectedFilters.find('.portfolio-selected-filter-item[data-attr="' + attr + '"][data-filter="' + thisFilter + '"]').remove();
2650							if (selectorTitle.length) {
2651								selectorTitle.find('span[data-filter="' + thisFilter + '"]').remove();
2652							}
2653						} else {
2654							if (!$thisItem.hasClass('multiple')) {
2655								$thisItem.find('a').removeClass('active');
2656								attrData[attr] = [];
2657								$selectedFilters.find('.portfolio-selected-filter-item[data-attr="' + attr + '"]').remove();
2658								if (selectorTitle.length) {
2659									selectorTitle.html('');
2660								}
2661							} else {
2662								$thisItem.find('a.all').removeClass('active');
2663								if (selectorTitle.length) {
2664									selectorTitle.find('span[data-filter="*"]').remove();
2665								}
2666							}
2667							$(this).addClass('active');
2668							attrData[attr].push(thisFilter);
2669							$selectedFilters.append('<div class="portfolio-selected-filter-item attribute" data-attr="' + attr + '" data-filter="' + thisFilter + '">' + $(this).find('.title').html() + '<i class="delete-filter"></i></div>');
2670							if (selectorTitle.length) {
2671								selectorTitle.append('<span data-filter="' + thisFilter + '">' + $(this).find('.title').html() + '<span class="separator">, </span></span>');
2672							}
2673						}
2674						if (filterLater) {
2675							if (filterUrl) {
2676								currentFilters[portfolioUid]['portfolio-filter-attributes'] = attrData;
2677							} else {
2678								$portfolio.data('portfolio-filter-attributes', attrData);
2679							}
2680						} else {
2681							filterPortfolioAttributes($portfolio, attrData);
2682						}
2683					} else if (typeFilter === 'status') {
2684						let statusData;
2685						if (filterUrl) {
2686							statusData = currentFilters[portfolioUid]['portfolio-filter-status'] ? currentFilters[portfolioUid]['portfolio-filter-status'] : [];
2687						} else {
2688							statusData = $portfolio.data('portfolio-filter-status') ? $portfolio.data('portfolio-filter-status') : [];
2689						}
2690						if ($(this).hasClass('all')) {
2691							statusData = '';
2692							$thisItem.find('a').removeClass('active');
2693							$(this).addClass('active');
2694							$selectedFilters.find('.portfolio-selected-filter-item.status').remove();
2695							if (selectorTitle.length) {
2696								if (selectorTitle.data('title')) {
2697									selectorTitle.html('<span data-filter="*">' + selectorTitle.data('title') + '</span>');
2698								} else {
2699									selectorTitle.html('<span data-filter="*">' + $(this).find('.title').html() + '</span>');
2700								}
2701							}
2702						} else if ($(this).hasClass('active')) {
2703							$(this).removeClass('active');
2704							const index = statusData.indexOf(thisFilter);
2705							if (index > -1) {
2706								statusData.splice(index, 1);
2707							}
2708							if (statusData.length === 0) {
2709								$thisItem.find('a.all').addClass('active');
2710								statusData = '';
2711								if (selectorTitle.length) {
2712									if (selectorTitle.data('title')) {
2713										selectorTitle.html('<span data-filter="*">' + selectorTitle.data('title') + '</span>');
2714									} else {
2715										selectorTitle.html('<span data-filter="*">' + $thisItem.find('a.all .title').html() + '</span>');
2716									}
2717								}
2718							}
2719							$selectedFilters.find('.portfolio-selected-filter-item.status[data-filter="' + thisFilter + '"]').remove();
2720							if (selectorTitle.length) {
2721								selectorTitle.find('span[data-filter="' + thisFilter + '"]').remove();
2722							}
2723						} else {
2724							$thisItem.find('a.all').removeClass('active');
2725							if (selectorTitle.length) {
2726								selectorTitle.find('span[data-filter="*"]').remove();
2727							}
2728							$(this).addClass('active');
2729							statusData.push(thisFilter);
2730							$selectedFilters.append('<div class="portfolio-selected-filter-item status" data-filter="' + thisFilter + '">' + $(this).find('.title').html() + '<i class="delete-filter"></i></div>');
2731							if (selectorTitle.length) {
2732								selectorTitle.append('<span data-filter="' + thisFilter + '">' + $(this).find('.title').html() + '<span class="separator">, </span></span>');
2733							}
2734						}
2735						if (filterLater) {
2736							if (filterUrl) {
2737								currentFilters[portfolioUid]['portfolio-filter-status'] = statusData;
2738							} else {
2739								$portfolio.data('portfolio-filter-status', statusData);
2740							}
2741						} else {
2742							filterPortfolioStatus($portfolio, statusData);
2743						}
2744					}
2745
2746					if (!filterLater) {
2747						scrollTopPortfolio($this);
2748					}
2749
2750					return false;
2751				});
2752
2753				$('.portfolio-filters-list', $this).on('click', '.portfolio-show-filters-button', function () {
2754					$portfolio.addClass('filters-opened');
2755					$(this).next().addClass('visible');
2756				}).on('click', '.portfolio-close-filters', function () {
2757					closeFiltersPopup($this);
2758				}).on('click', '.portfolio-filters-outer', function () {
2759					closeFiltersPopup($this);
2760				}).on('click', '.portfolio-filters-area', function (e) {
2761					e.stopPropagation();
2762				});
2763
2764				$('.progress-bar', $portfolio).on('click', '.show', function () {
2765					closeFiltersPopup($portfolio);
2766				});
2767
2768				if ($('.portfolio-filters-list', $portfolio).hasClass('native-ajax-filters')) {
2769
2770					$('.widget_layered_nav, .widget_rating_filter, .widget_layered_nav_filters', $portfolio).off('click', 'a').on('click', 'a', function (e) {
2771						e.preventDefault();
2772						var href = $(this).attr('href');
2773						nativeAjaxFiltering($portfolio, href);
2774					});
2775
2776					$('.widget_layered_nav select').off('change').on('change', function (e) {
2777						e.preventDefault();
2778
2779						var $this = $(this),
2780							name = $this.closest('form').find('input[type=hidden]').length ? $this.closest('form').find('input[type=hidden]').attr('name').replace('filter_', '') : $this.attr('class').replace('dropdown_layered_nav_', ''),
2781							slug = $this.val(),
2782							href;
2783
2784						href = window.location.href;
2785						href = href.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
2786
2787						href = updateUrlParams(href, 'filter_' + name, slug);
2788
2789						nativeAjaxFiltering($portfolio, href);
2790					});
2791
2792					$('.widget_product_search, .wc-block-product-search').on('submit', 'form', function (e) {
2793						e.preventDefault();
2794
2795						var $this = $(this),
2796							search = $this.find('input[type=search]').val(),
2797							href;
2798
2799						href = window.location.href;
2800						href = href.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
2801						href = updateUrlParams(href, 's', search);
2802
2803						if ( $('input#shop-page-url').hasClass('is-shop-home')) {
2804							href = updateUrlParams(href, 'post_type', 'product');
2805						}
2806
2807						nativeAjaxFiltering($portfolio, href+"&ajax_search=1");
2808					});
2809
2810
2811					$('.widget_price_filter .price_slider_wrapper').off('click', '.button').on('click', '.button', function (e) {
2812						e.preventDefault();
2813
2814						var form = $(this).closest('form'),
2815							action = form.attr('action'),
2816							href = action + (-1 === action.indexOf('?') ? '?' : '&') + form.serialize();
2817						$('.widget_price_filter').removeClass('yith-wcan-list-price-filter');
2818
2819						nativeAjaxFiltering($portfolio, href);
2820					});
2821				}
2822
2823				$('.portfolio-filters-list:not(.native) .filters-collapsible-arrow', $this).on('click', function (e) {
2824					e.preventDefault();
2825					e.stopPropagation();
2826					$(this).parent().toggleClass('collapsed');
2827					$(this).parent().next().slideToggle('slow');
2828				});
2829
2830				$(this).find('.price-range-slider').each(function () {
2831					var $range = $(this).find('.slider-range');
2832					if ($range.length === 0) return;
2833					var $thisItem = $(this).parents('.portfolio-filter-item');
2834					var $amount = $thisItem.find('.slider-amount-value');
2835					var minValue = Math.floor(parseFloat($range.data('min')));
2836					var maxValue = Math.ceil(parseFloat($range.data('max')));
2837					var currency = $range.data('currency') ? $range.data('currency') : '';
2838					var attr = $range.data('attr');
2839					var prefix = $range.data('prefix') ? $range.data('prefix') : '';
2840					var suffix = $range.data('suffix') ? $range.data('suffix') : '';
2841					var $selectedFilters = $('.portfolio-selected-filters', $portfolio);
2842					if (filterLater) {
2843						$selectedFilters = $('.portfolio-selected-filters-clone', $portfolio);
2844					} else if ($('.portfolio-selected-filters-clone', $portfolio).length) {
2845						$('.portfolio-selected-filters', $portfolio).html($('.portfolio-selected-filters-clone', $portfolio).html());
2846					}
2847					var values;
2848					if (!attr) {
2849						if (filterUrl) {
2850							values = currentFilters[portfolioUid]['portfolio-filter-price'] ? currentFilters[portfolioUid]['portfolio-filter-price'] : null;
2851						} else {
2852							values = $portfolio.data('portfolio-filter-price');
2853						}
2854					}
2855					if (values == null) {
2856						let attrData;
2857						if (filterUrl) {
2858							attrData = currentFilters[portfolioUid]['portfolio-filter-attributes'] ? currentFilters[portfolioUid]['portfolio-filter-attributes'] : [];
2859						} else {
2860							attrData = $portfolio.data('portfolio-filter-attributes') ? $portfolio.data('portfolio-filter-attributes') : [];
2861						}
2862						if (attrData[attr+'__range']) {
2863							values = attrData[attr+'__range'];
2864						} else {
2865							values = [minValue, maxValue];
2866						}
2867					}
2868
2869					var currencyPosition = $range.data('currency-position');
2870					var space = '';
2871					if (currencyPosition == 'left_space' || currencyPosition == 'right_space') {
2872						space = ' ';
2873					}
2874					var thousandSeparator = $range.data('thousand-separator');
2875					var locale = $range.data('locale');
2876					function formatNumber(num, sep = thousandSeparator, loc = locale) {
2877						if (thousandSeparator) {
2878							return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, sep);
2879						} else if (loc) {
2880							loc = loc.replace('_', '-');
2881							return num.toLocaleString(loc);
2882						} else {
2883							return num.toString();
2884						}
2885					}
2886
2887					if (locale && $selectedFilters.find('.portfolio-selected-filter-item.price[data-attr="'+attr+'"]').length) {
2888						$selectedFilters.find('.portfolio-selected-filter-item.price[data-attr="'+attr+'"] span').each(function (){
2889							$(this).html(formatNumber(parseInt($(this).html())));
2890						});
2891					}
2892
2893					$range.slider({
2894						range: true,
2895						min: minValue,
2896						max: maxValue,
2897						values: values,
2898						slide: function (event, ui) {
2899							var from = formatNumber(ui.values[0]),
2900								to = formatNumber(ui.values[1]);
2901							if (currencyPosition == 'left' || currencyPosition == 'left_space') {
2902								$amount.html(prefix + currency + space + from + suffix + " - " + prefix + currency + space + to + suffix);
2903							} else {
2904								$amount.html(prefix + from + space + currency + suffix + " - " + prefix + to + space + currency + suffix);
2905							}
2906						},
2907						stop: function (event, ui) {
2908							var from = formatNumber(ui.values[0]),
2909								to = formatNumber(ui.values[1]);
2910
2911							resetSearch($this);
2912
2913							if (attr) {
2914								let attrData;
2915								if (filterUrl) {
2916									attrData = currentFilters[portfolioUid]['portfolio-filter-attributes'] ? currentFilters[portfolioUid]['portfolio-filter-attributes'] : [];
2917								} else {
2918									attrData = $portfolio.data('portfolio-filter-attributes') ? $portfolio.data('portfolio-filter-attributes') : []
2919								}
2920								if (!attrData[attr+'__range']) {
2921									attrData[attr+'__range'] = [];
2922								}
2923
2924								if (from == minValue && to == maxValue) {
2925									delete attrData[attr+'__range'];
2926								} else {
2927									attrData[attr+'__range'] = ui.values;
2928								}
2929
2930								if (filterLater) {
2931									if (filterUrl) {
2932										currentFilters[portfolioUid]['portfolio-filter-attributes'] = attrData;
2933									} else {
2934										$portfolio.data('portfolio-filter-attributes', attrData);
2935									}
2936								} else {
2937									filterPortfolioAttributes($portfolio, attrData);
2938								}
2939								$selectedFilters.find('.portfolio-selected-filter-item.price[data-attr="'+attr+'"]').remove();
2940							} else {
2941
2942								if (filterLater) {
2943									if (filterUrl) {
2944										currentFilters[portfolioUid]['portfolio-filter-price'] = ui.values;
2945									} else {
2946										$portfolio.data('portfolio-filter-price', ui.values);
2947									}
2948								} else {
2949									filterPortfolioPrice($portfolio, ui.values);
2950								}
2951								$selectedFilters.find('.portfolio-selected-filter-item.price').remove();
2952							}
2953							let dataAttr = attr ? 'data-attr="' + attr + '"' : '';
2954
2955							if ($range.data('currency-position') == 'left' || currencyPosition == 'left_space') {
2956								$selectedFilters.append('<div class="portfolio-selected-filter-item price" ' + dataAttr + '>' + prefix + currency + space + from + suffix + " - " + prefix + currency + space + to + suffix + '<i class="delete-filter"></i></div>');
2957							} else {
2958								$selectedFilters.append('<div class="portfolio-selected-filter-item price" ' + dataAttr + '>' + prefix + from + space + currency + suffix + " - " + prefix + to + space + currency + suffix + '<i class="delete-filter"></i></div>');
2959							}
2960
2961							if (!filterLater) {
2962								scrollTopPortfolio($this);
2963							}
2964						},
2965						change: function (event, ui) {
2966							var from = formatNumber(ui.values[0]),
2967								to = formatNumber(ui.values[1]);
2968							if (currencyPosition == 'left' || currencyPosition == 'left_space') {
2969								$amount.html(prefix + currency + space + from + suffix + " - " + prefix + currency + space + to + suffix);
2970							} else {
2971								$amount.html(prefix + from + space + currency + suffix + " - " + prefix + to + space + currency + suffix);
2972							}
2973						}
2974					});
2975
2976					var from = formatNumber($range.slider("values", 0)),
2977						to = formatNumber($range.slider("values", 1));
2978					if (currencyPosition == 'left' || currencyPosition == 'left_space') {
2979						$amount.html(prefix + currency + space + from + suffix + " - " + prefix + currency + space + to + suffix);
2980					} else {
2981						$amount.html(prefix + from + space + currency + suffix + " - " + prefix + to + space + currency + suffix);
2982					}
2983				});
2984
2985				$(".portfolio-filters-list", $this).each(function () {
2986					if (!$(this).hasClass("style-hidden") && !$(this).hasClass("prevent-hidden-mobile")) {
2987						let filtersList = $(this),
2988							breakpoint = filtersList.data("breakpoint") ? filtersList.data("breakpoint") : 992;
2989						filtersListMobileView(filtersList, breakpoint);
2990						$(window).on("resize", function () {
2991							filtersListMobileView(filtersList, breakpoint)
2992						})
2993					}
2994				});
2995			}
2996
2997			if ($('.portfolio-search-filter', $this).length) {
2998				let isLiveSearch = $('.portfolio-search-filter', $this).hasClass('live-search');
2999				var $selectedFilters = $('.portfolio-selected-filters', $portfolio);
3000				if (filterLater) {
3001					$selectedFilters = $('.portfolio-selected-filters-clone', $portfolio);
3002				} else if ($('.portfolio-selected-filters-clone', $portfolio).length) {
3003					$('.portfolio-selected-filters', $portfolio).html($('.portfolio-selected-filters-clone', $portfolio).html());
3004				}
3005				$('.portfolio-search-filter', $this).on('click', '.portfolio-search-filter-button', function () {
3006					if (!filterLater) {
3007						if ($(this).parents('.portfolio-search-filter').hasClass('active')) {
3008							$(this).parents('.portfolio-search-filter').submit();
3009						} else {
3010							$(this).parents('.portfolio-search-filter').addClass('active');
3011						}
3012					}
3013				}).on('change', 'input', function () {
3014					$(this).parents('.portfolio-search-filter').addClass('changed');
3015				}).on('keyup', 'input', function () {
3016					if (isLiveSearch && !filterLater) {
3017						if ($(this).val().length == 0 || $(this).val().length > 2) {
3018							$(this).parents('.portfolio-search-filter').addClass('changed');
3019							$(this).closest('.portfolio-search-filter').submit();
3020						}
3021					}
3022				}).on('mouseenter', function () {
3023					if ("ontouchstart" in document.documentElement) {
3024					} else {
3025						$(this).addClass('active');
3026					}
3027				}).on('mouseleave', function (e) {
3028					$(this).removeClass('active');
3029				}).on('submit', function (e) {
3030					e.preventDefault();
3031					if ($(this).hasClass('changed')) {
3032						var value = $(this).find('input').val();
3033						$selectedFilters.find('.portfolio-selected-filter-item.search').remove();
3034						if (value != '') {
3035							$selectedFilters.append('<div class="portfolio-selected-filter-item search">' + value + '<i class="delete-filter"></i></div>');
3036						}
3037						if (isLiveSearch && !filterLater) {
3038							$('.portfolio-search-filter-form', $this).addClass('ajax-loading');
3039							if ($selectedFilters.hasClass('portfolio-selected-filters-clone')) {
3040								$('.portfolio-selected-filters', $portfolio).html($('.portfolio-selected-filters-clone', $portfolio).html());
3041							}
3042						}
3043						if ($('.portfolio-search-filter', $this).hasClass('reset-filters')) {
3044							resetFilters($this);
3045						}
3046						if (filterLater) {
3047							if (filterUrl) {
3048								currentFilters[portfolioUid]['portfolio-filter-search'] = value;
3049							} else {
3050								$portfolio.data('portfolio-filter-search', value);
3051							}
3052						} else {
3053							filterPortfolioSearch($portfolio, value);
3054						}
3055						if (!isLiveSearch) {
3056							$('.portfolio-search-filter', $portfolio).removeClass('changed');
3057							closeFiltersPopup($portfolio);
3058						}
3059					}
3060					if (!isLiveSearch) {
3061						$(this).find('input').blur();
3062						$('.portfolio-search-filter', $portfolio).removeClass('active');
3063					}
3064				});
3065			}
3066
3067			if ($this.find('.filters-apply-button').length) {
3068				$this.find('.filters-apply-button').on('click', '.gem-button', function (e) {
3069					e.preventDefault();
3070					$('.extended-posts-filter[data-portfolio-uid="' + portfolioUid + '"] .portfolio-search-filter').submit();
3071					if (filterUrl) {
3072						let $params = $('<div></div>');
3073						for (var key in currentFilters[portfolioUid]) {
3074							$params.data(key, currentFilters[portfolioUid][key]);
3075						}
3076						let queryParams = portfolioLoadCoreRequest($params, false, false, true);
3077						let fullUrl = filterUrl + '?' + queryParams.toString();
3078						fullUrl = fullUrl.replace(/\/page\/\d+/, "").replace("&amp;", '&').replace("%2C", ',');
3079						window.location.href = fullUrl;
3080					} else {
3081						$portfolio.data('next-page', 1);
3082						$('.portfolio-selected-filters', $portfolio).html($('.portfolio-selected-filters-clone', $portfolio).html());
3083						portfolioLoadCoreRequest($portfolio);
3084						scrollTopPortfolio($this);
3085					}
3086					closeFiltersPopup($this);
3087				})
3088			}
3089
3090			if ($('.display-type-dropdown', $this).length) {
3091
3092				$(window).on('click', function (){
3093					$('.display-type-dropdown .dropdown-selector', $this).removeClass('collapsed');
3094				});
3095
3096				$('.portfolio-filters-area', $this).on('click', function (){
3097					$('.display-type-dropdown .dropdown-selector', $this).removeClass('collapsed');
3098				});
3099
3100				$('.display-type-dropdown.open-dropdown-click', $this).on('mouseleave', function (){
3101					$(this).find('.dropdown-selector').removeClass('collapsed');
3102				}).on('click', '.selector-title', function (e){
3103					e.stopPropagation();
3104					if ($(this).parent().hasClass('collapsed')) {
3105						$(this).parent().removeClass('collapsed');
3106					} else {
3107						$('.display-type-dropdown').removeClass('collapsed');
3108						$(this).parent().addClass('collapsed');
3109					}
3110				});
3111
3112				$('.display-type-dropdown.open-dropdown-hover', $this).on('mouseenter', function (){
3113					$(this).find('.dropdown-selector').addClass('collapsed');
3114				}).on('mouseleave', function (){
3115					$(this).find('.dropdown-selector').removeClass('collapsed');
3116				}).on('click', '.selector-title', function (e){
3117					e.stopPropagation();
3118				});
3119			}
3120		}
3121
3122		// Api videos init
3123		function initApiVideos($videos) {
3124
3125			$videos.each(function (){
3126				let $video = $(this);
3127				if ($(this).data("video-type") === 'youtube') {
3128					if (!youtubeInited) {
3129						$.getScript("https://www.youtube.com/iframe_api", function() {
3130							youtubeInited = true;
3131							onYouTubeVideoInit($video);
3132						});
3133					} else {
3134						onYouTubeVideoInit($video);
3135					}
3136				} else if ($(this).data("video-type") === 'vimeo') {
3137					if (!vimeoInited) {
3138						vimeoInited = true;
3139						$.getScript("https://player.vimeo.com/api/player.js", function() {
3140							onVimeoVideoInit($video);
3141						});
3142					} else {
3143						onVimeoVideoInit($video);
3144					}
3145				} else {
3146					selfInited = true;
3147					onSelfVideoInit($video);
3148				}
3149			});
3150		}
3151
3152		// Init youtube api video
3153		function onYouTubeVideoInit($video) {
3154			let videoId = $video.data('video-id');
3155			let blockId = $video.find('.video-embed').attr('id');
3156			let $portfolioItem = $video.closest('.portfolio-item');
3157
3158			if (videoId !== undefined && videoId !== null) {
3159				window.YT.ready(function(){
3160					let currentPlayer = new YT.Player(blockId, {
3161						videoId: videoId,
3162						playerVars: {
3163							'playsinline': 1,
3164							'controls': 0,
3165							'autoplay': 0,
3166							'loop': 1,
3167							'rel': 0,
3168							'fs': 0,
3169							'mute': 1,
3170						},
3171						events: {
3172							onReady: () => {
3173								if ($video.hasClass('play-on-hover')) {
3174
3175									$portfolioItem.on('mouseenter touchstart', function (){
3176										if (currentPlayer) {
3177											currentPlayer.playVideo();
3178										}
3179									}).on('mouseleave', function (){
3180										if (currentPlayer) {
3181											currentPlayer.pauseVideo();
3182										}
3183									});
3184								} else {
3185									currentPlayer.mute();
3186									currentPlayer.playVideo();
3187								}
3188							},
3189						}
3190					});
3191				});
3192			}
3193		}
3194
3195		// Init vimeo api video
3196		function onVimeoVideoInit($video) {
3197			let videoId = $video.data('video-id');
3198			let blockId = $video.find('.video-embed').attr('id');
3199			let $portfolioItem = $video.closest('.portfolio-item');
3200
3201			if (videoId !== undefined && videoId !== null){
3202				let options = {
3203					id: videoId,
3204					loop: true,
3205					muted: true,
3206					playsinline: true,
3207					controls: false,
3208					title: false,
3209					portrait: false,
3210					byline: false,
3211				};
3212
3213				let currentPlayer = new Vimeo.Player(blockId, options);
3214
3215				currentPlayer.ready().then(() => {
3216					if ($video.hasClass('play-on-hover')) {
3217						$portfolioItem.on('mouseenter touchstart', function (){
3218							playPromise = currentPlayer.play();
3219						}).on('mouseleave', function (){
3220							if (playPromise !== undefined) {
3221								playPromise.then(_ => {
3222									currentPlayer.pause();
3223								});
3224							}
3225						});
3226					} else {
3227						currentPlayer.play();
3228					}
3229				});
3230			}
3231		}
3232
3233		// Init self api video
3234		function onSelfVideoInit($video) {
3235			let videoId = $video.data('video-id');
3236			let $portfolioItem = $video.closest('.portfolio-item');
3237
3238			if (videoId !== undefined && videoId !== null){
3239				let currentPlayer = $video.find('video').get(0);
3240				currentPlayer.disablePictureInPicture = true;
3241
3242				if ($video.hasClass('play-on-hover')) {
3243					$portfolioItem.on('mouseenter touchstart', function (){
3244						currentPlayer.play();
3245					}).on('mouseleave', function (){
3246						currentPlayer.pause();
3247					});
3248				} else {
3249					currentPlayer.play();
3250				}
3251			}
3252		}
3253
3254		$('body').on('click', '.portfolio.portfolio-grid.extended-products-grid a.icon.share', function (e) {
3255			e.preventDefault();
3256			e.stopPropagation();
3257			$(this).next('.sharing-popup').removeClass('right').removeClass('left');
3258			var offsetLeft = $(this).offset().left;
3259			var offsetRight = ($(window).width() - (offsetLeft + $(this).outerWidth()));
3260			if (offsetLeft < 100) {
3261				$(this).next('.sharing-popup').addClass('left');
3262			} else if (offsetRight < 100) {
3263				$(this).next('.sharing-popup').addClass('right');
3264			}
3265			if ($(this).closest('.links').find('.portfolio-sharing-pane').hasClass('active') ||
3266				$(this).closest('.post-footer-sharing').find('.sharing-popup').hasClass('active')) {
3267				$('.portfolio-sharing-pane').removeClass('active');
3268				$('.sharing-popup').removeClass('active');
3269			} else {
3270				$('.portfolio-sharing-pane').removeClass('active');
3271				$('.sharing-popup').removeClass('active');
3272				$(this).closest('.links').find('.portfolio-sharing-pane').addClass('active');
3273				$(this).closest('.post-footer-sharing').find('.sharing-popup').addClass('active');
3274			}
3275			return false;
3276		});
3277
3278		$('body').on('click', function () {
3279			$('.portfolio-sharing-pane').removeClass('active');
3280			$('.sharing-popup').removeClass('active');
3281		}).on('touchstart', function (e) {
3282			$('.extended-products-grid .portfolio-item').removeClass('hover-effect');
3283			$('.extended-products-grid .portfolio-item').removeClass('hover-effect-active');
3284		});
3285
3286		$('.extended-products-grid .portfolio-item').each(function() {
3287
3288			this.addEventListener('touchstart', function(e) {
3289				$('.extended-products-grid .portfolio-item').not(this).removeClass('hover-effect');
3290				$('.extended-products-grid .portfolio-item').not(this).removeClass('hover-effect-active');
3291				$(this).addClass('hover-effect');
3292				let item = $(this);
3293				setTimeout(function () {
3294					item.addClass('hover-effect-active');
3295				}, 500);
3296			}, { passive: true });
3297		});
3298
3299		/*$('body').on('DOMSubtreeModified', '.zilla-likes', function () {
3300			if (!$(this).children('i').length) {
3301				var icon = $(this).siblings('i');
3302				$(this).prepend(icon.clone());
3303			}
3304		});*/
3305
3306		function updateZillaLikesIcons(mutationsList, observer) {
3307			mutationsList.forEach(function(mutation) {
3308				if (mutation.type === 'childList' || mutation.type === 'subtree') {
3309					mutation.addedNodes.forEach(function(node) {
3310						if (node.nodeType === Node.ELEMENT_NODE) {
3311							var $element = $(node).closest('.zilla-likes').length ? $(node).closest('.zilla-likes') : $(node);
3312							if($element.is('.zilla-likes')) {
3313								if (!$element.children('i').length) {
3314									var icon = $element.siblings('i');
3315									$element.prepend(icon.clone());
3316								}
3317							}
3318						}
3319					});
3320				}
3321			});
3322		}
3323		const targetNode = document.body;
3324		const config = { childList: true, subtree: true };
3325		const observer = new MutationObserver(updateZillaLikesIcons);
3326		observer.observe(targetNode, config);
3327
3328		$('body').on('click', '.portfolio.portfolio-grid:not(.news-grid):not(.extended-products-grid) a.icon.share', function (e) {
3329			e.preventDefault();
3330			$(this).closest('.links').find('.portfolio-sharing-pane').toggleClass('active');
3331			$(this).closest('.post-footer-sharing').find('.sharing-popup').toggleClass('active');
3332			return false;
3333		});
3334
3335		$('body').on('click', '.portfolio.news-grid a.icon.share', function (e) {
3336			e.preventDefault();
3337
3338			if ($(this).closest('.portfolio').hasClass('version-new') ||
3339				($(this).closest('.portfolio').hasClass('version-default') &&
3340					$(this).closest('.portfolio').hasClass('title-on-hover'))
3341			) {
3342				toggleNewsGridSharing(this);
3343			} else {
3344				$(this).closest('.links').find('.portfolio-sharing-pane').toggleClass('active');
3345			}
3346			return false;
3347		});
3348
3349		$('body').on('mouseleave', '.portfolio.portfolio-grid .portfolio-item', function () {
3350			$('.portfolio-sharing-pane').removeClass('active');
3351		});
3352
3353		$('body').on('click', '.portfolio.portfolio-grid .portfolio-item', function () {
3354			// $(this).mouseover();
3355		});
3356
3357		$(document).on('mouseenter', '.gif-load-on-hover', function (){
3358			let $gif = $(this).find('.gem-gif-portfolio');
3359			$gif.on('load', function () {
3360				$(this).closest('.image').removeClass('gif-load-on-hover');
3361			});
3362			$gif.attr('src', $gif.data('src'));
3363		})
3364
3365		if (typeof $.fn.scSticky === 'function') {
3366			$('.sticky-sidebar > .filter-sidebar').scSticky();
3367			$('.filters-top-sticky').scSticky({hideStickyHeader: true, fullWidth: true});
3368		}
3369
3370		$.fn.initExtendedPortfolioGrids = function () {
3371			$(this).each(initExtendedPortfolioGrid);
3372		};
3373
3374		$(document).ready(function () {
3375			$('body:not(.elementor-editor-active) .extended-portfolio-grid:not(.extended-carousel-grid)').initExtendedPortfolioGrids();
3376			refreshPriceSlider();
3377
3378			$('body:not(.elementor-editor-active) .extended-posts-filter').each(function () {
3379				$(this).initPortfolioFiltersList();
3380			});
3381
3382			$('body:not(.elementor-editor-active) .extended-posts-sorting').each(function () {
3383				$(this).initPortfolioSorting();
3384			});
3385		});
3386
3387		$(window).on('load', function () {
3388			if (window.tgpLazyItems !== undefined) {
3389				window.tgpLazyItems.scrollHandle();
3390			}
3391		})
3392	});
3393})(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.