https://protectdefenders.eu/wp-content/themes/thegem/js/thegem-portfolio-grid-extended.js?ver=5.12.2
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("&", '&').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("&", '&').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("&", '&').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("&", '&').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("&", '&').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("&", '&').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("&", '&').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.