1/* global appopt, jQuery, wpcf7, FWP */ 2jQuery(document).ready(function ($) { 3 //https://stackoverflow.com/questions/47599704/cf7-refill-issue 4 wpcf7.cached = 0; 5 6 $('[data-fancybox]').fancybox({ 7 toolbar : true, 8 parentEl : '.header__navbar', 9 }); 10 11 $('body').on('keypress', 'input[name="yourname"],input[name="billing_first_name"],input[name="billing_last_name"],input[name="billing_city"],input[name="billing_address_1"],[name="author"]', function () { 12 var that = this; 13 14 setTimeout(function () { 15 var res = /[^a-zA-Zа-ÑÑÐ-ЯР]/g.exec(that.value); 16 that.value = that.value.replace(res, ''); 17 }, 0); 18 }); 19 20 $('body').on('keypress', '#user-name,#billing_first_name,#billing_last_name,input[name="yourname"],[name="author"]', function () { 21 var that = this; 22 23 setTimeout(function () { 24 var res = /[^a-zA-Zа-ÑÑÐ-ЯР]/g.exec(that.value); 25 that.value = that.value.replace(res, ''); 26 }, 0); 27 }); 28 29 if (appopt.app_table_prod) { 30 setInterval(function () { 31 var cont = jQuery(document).find('.cat_loop ul.products'); 32 if (cont.length) { 33 if (!cont.hasClass('complete')) { 34 jQuery('.cat_loop ul.products .seria').sort(function (a, b) { 35 var el1 = $(a).attr('attr_sort'); 36 var el2 = $(b).attr('attr_sort'); 37 return el1 - el2; 38 }).appendTo('.cat_loop ul.products'); 39 cont.addClass('complete'); 40 } 41 } 42 }); 43 } 44 45 /** 46 * hide '<li>СÑÑаниÑа 1</li>' in breadcrumbs on filters page 47 */ 48 if ($('.breadcrums li:last-child').text() == 'СÑÑаниÑа 1') { 49 $('.breadcrums li:last-child').html(''); 50 } 51 52 53 if (appopt.app_dist_spmm2) { 54 /** 55 * spamm filter #2: 56 */ 57 $(document).on('focus', 'input[name="yourname"]', function () { 58 59 if (!$(this).hasClass('spmm-added')) { 60 $(this).parents('form').find('input.spmm').val(666); 61 } 62 }); 63 } 64 65 /** 66 * Change category menu: 67 */ 68 $('#category_catalog > .menu-item-has-children > a').each(function (indx, element) { 69 $(element).addClass('dropdown'); 70 $(element).html($(element).html() + '<span class="toggle"></span>'); 71 $(element).siblings('.sub-menu').addClass('widget_catalog__sublist'); 72 }); 73 $('.menu-item-has-children .menu-item-has-children .sub-menu').each(function (indx, element) { 74 $(element).addClass('widget_catalog__sub_sublist'); 75 }); 76 $('.current-product_cat-ancestor > a').addClass('active'); 77 78 79 /** 80 * Change seria title: 81 */ 82 function changeSeriaTitle() { 83 84 if (window.innerWidth <= 767) { 85 86 $('.seria').each(function (indx, element) { 87 $(element).find('.seria__header-left').prepend($(element).find('.seria__title')); 88 }); 89 } else { 90 91 $('.seria').each(function (indx, element) { 92 $(element).find('.seria__header-right').prepend($(element).find('.seria__title')); 93 }); 94 } 95 } 96 97 98 /** 99 * Change mobile cart table: 100 */ 101 function changeCartTable() { 102 103 if (window.innerWidth <= 767) { 104 105 $('.cart_table:not(.mobile) .cart_table__row').each(function (indx, element) { 106 107 $(element).find('.product-thumbnail').append($(element).find('.product-name')); 108 }); 109 110 $('.cart_table').addClass('mobile'); 111 112 } else { 113 114 $('.cart_table.mobile .cart_table__row').each(function (indx, element) { 115 116 $(element).find('.product-thumbnail').after($(element).find('.product-thumbnail .product-name')); 117 }); 118 119 $('.cart_table').removeClass('mobile'); 120 } 121 } 122 123 124 /** 125 * Change product page features block: 126 */ 127 function changeFeaturesProductPage() { 128 129 if (window.innerWidth <= 1400) { 130 131 $('.product_features_block').append($('.product_features')); 132 133 } else { 134 135 $('.section__product_summary .product_summary_wrp').append($('.product_features')); 136 137 } 138 } 139 140 141 /** 142 * Change product page Titles: 143 */ 144 function changeTitlesProductPage() { 145 146 if (window.innerWidth <= 991) { 147 148 $('.section__product_summary .product_summary_wrp').prepend($('.sku_wrapper')); 149 $('.section__product_summary .product_summary_wrp').prepend($('.product_title')); 150 151 } else { 152 153 $('.section__product_summary .entry-summary').prepend($('.product_title')); 154 $('.section__product_summary .product_meta').prepend($('.sku_wrapper')); 155 156 } 157 } 158 159 /** 160 * Change product page Titles: 161 */ 162 function changeTabsProductPage() { 163 164 if (window.innerWidth <= 768) { 165 166 $('.wc-tabs > li').each((index, element) => { 167 168 $(element).after($('#' + $(element).attr('aria-controls'))); 169 }); 170 171 } else { 172 173 $('.wc-tabs .woocommerce-Tabs-panel').each((index, element) => { 174 175 $('.section_tabs_panel .container').append($(element)); 176 }); 177 178 } 179 } 180 181 if ($('.wc-tabs').length) { 182 $('.wc-tabs li a').each(function () { 183 const target = $($(this).attr('href')); 184 const content = $.trim(target.text()); 185 186 if (content.length === 0) { 187 $(this).parent().remove(); 188 target.remove(); 189 } 190 }); 191 } 192 193 /** 194 * Hide dots contain 1 dot in the scopes slider: 195 */ 196 function toggleDotsScopesSlider() { 197 if ($('#slider_scopes .slick-dots li').length <= 1) { 198 $('#slider_scopes .slick-dots').css('opacity', '0').css('height', '0'); 199 } else { 200 $('#slider_scopes .slick-dots').css('opacity', '1').css('height', 'auto'); 201 } 202 } 203 204 205 function initCompare() { 206 $('.berocket_compare_widget_start a.berocket_show_compare_toolbar').append('<span></span>'); 207 208 updateAllCompare(); 209 210 $(document).off('click', '.br_compare_button').on('click', '.br_compare_button', function (e) { 211 const $parent = $(this).closest('.product-card__add-compare'); 212 const $tooltip = $parent.find('.tooltip'); 213 const isMobile = $(window).width() <= 768; 214 215 if (!$(this).hasClass('br_compare_added')) { 216 addItemCompare($(this).data('id')); 217 $(this).addClass('br_compare_added'); 218 $parent.addClass('added'); 219 $tooltip.text(isMobile ? $parent.attr('data-tooltip-added_mob') : $parent.attr('data-tooltip-added')); 220 } else { 221 removeItemCompare($(this).data('id')); 222 $(this).removeClass('br_compare_added'); 223 $parent.removeClass('added'); 224 $tooltip.text(isMobile ? $parent.attr('data-tooltip_mob') : $parent.attr('data-tooltip')); 225 } 226 227 if (isMobile) { 228 $tooltip.css('display', 'block'); 229 $(document).on('touchstart', function (event) { 230 if (!$(event.target).closest('.product-card__add-compare').length) { 231 $tooltip.css('display', 'none'); 232 $(document).off('touchstart'); 233 } 234 }); 235 setTimeout(()=> { 236 $tooltip.css('display', 'none'); 237 }, 3000); 238 } 239 240 e.preventDefault(); 241 return false;
242 }).addClass('br_compare_button_inited'); 243 244 $(document).on('click', '.berocket_show_compare_toolbar', e => { 245 location.href = $('.compare-link').attr('href'); 246 }); 247 } 248 249 function getCompareCookieProducts() { 250 let products = $.cookie('br_products_compare'); 251 if (!products) { 252 // fallback еÑли cookie пиÑалÑÑ Ð±ÐµÐ· domain 253 products = document.cookie.replace(/(?:(?:^|.*;\s*)br_products_compare\s*\=\s*([^;]*).*$)|^.*$/, '$1'); 254 products = products ? decodeURIComponent(products) : ''; 255 } 256 if (!products) return []; 257 return products.split(',').map(function (id) { 258 return String(id).trim(); 259 }).filter(Boolean); 260 } 261 262 function setCompareCookie(products) { 263 $.cookie('br_products_compare', products, { path: '/', expires: 7 }); 264 } 265 266 function updateAllCompare() { 267 const a_products = getCompareCookieProducts(); 268 let $br_compare_button = $('.br_compare_button'); 269 let not_added = $br_compare_button.find('span.br_compare_button_text').data('not_added'); 270 let added = $br_compare_button.find('span.br_compare_button_text').data('added'); 271 272 $br_compare_button.removeClass('br_compare_added'); 273 $br_compare_button.closest('.product-card__add-compare').removeClass('added'); 274 if (not_added) { 275 $br_compare_button.find('span.br_compare_button_text').text(not_added); 276 } 277 278 a_products.forEach(function (el) { 279 let $el = $('.br_product_' + el); 280 if (!$el.length) return; 281 282 $el.addClass('br_compare_added'); 283 if (added) { 284 $el.find('span.br_compare_button_text').text(added); 285 } 286 const $parent = $el.closest('.product-card__add-compare'); 287 $parent.addClass('added'); 288 const isMobile = $(window).width() <= 768; 289 $parent.find('.tooltip').text(isMobile ? $parent.attr('data-tooltip-added_mob') : $parent.attr('data-tooltip-added')); 290 }); 291 292 if (a_products.length) { 293 $('.header__compare').addClass('active'); 294 } else { 295 $('.header__compare').removeClass('active'); 296 } 297 } 298 299 function addItemCompare(product) { 300 product = String(product); 301 let $product = $('.br_product_' + product); 302 $product.addClass('br_compare_added'); 303 $product.closest('.product-card__add-compare').addClass('added'); 304 $product.find('span.br_compare_button_text').text($product.find('span.br_compare_button_text').data('added')); 305 306 let products = getCompareCookieProducts(); 307 if (products.indexOf(product) === -1) { 308 products.push(product); 309 setCompareCookie(products.join(',')); 310 } 311 $('.header__compare').addClass('active'); 312 } 313 314 function removeItemCompare(product) { 315 product = String(product); 316 let products = getCompareCookieProducts().filter(function (id) { 317 return id !== product; 318 }); 319 320 let $product = $('.br_product_' + product); 321 $product.removeClass('br_compare_added'); 322 $product.find('span.br_compare_button_text').text($product.find('span.br_compare_button_text').data('not_added')); 323 $product.closest('.product-card__add-item').removeClass('added'); 324 setCompareCookie(products.join(',')); 325 326 if (!products.length) { 327 $('.header__compare').removeClass('active'); 328 } 329 } 330 331 function toggleWishlistText($button) { 332 const $tooltip = $button.find('.wish-tooltip'); 333 if (!$tooltip.length) return; // Ensure tooltip exists 334 335 if ($button.hasClass('added')) { 336 $tooltip.text($button.data('tooltip')); 337 } else { 338 $tooltip.text($button.data('tooltip-added')); 339 } 340 } 341 342 function setupWishlistButton() { 343 const $wishlistButton = $('.product-card__add-item.product-card__liked'); 344 if (!$wishlistButton.length) return; // Ensure button exists 345 346 const toggleText = () => toggleWishlistText($wishlistButton); 347 348 $wishlistButton.on('click touchend', toggleText); 349 } 350 351 // Initialize the wishlist button setup 352 $(document).ready(function() { 353 updateHeaderCompare(); 354 setupWishlistButton(); 355 }); 356 function updateHeaderCompare() { 357 $('.br_compare_button').on('click', function () { 358 const compareCookie = $.cookie('br_products_compare'); 359 if (compareCookie === '' ) { 360 $('.header__compare').removeClass('active'); 361 } 362 else { 363 $('.header__compare').addClass('active'); 364 } 365 }); 366 } 367 368
369 initCompare(); 370 updateHeaderCompare(); 371 changeSeriaTitle(); 372 changeCartTable(); 373 changeFeaturesProductPage(); 374 changeTitlesProductPage(); 375 changeTabsProductPage(); 376 toggleDotsScopesSlider(); 377 378 $(window).on('resize', function () { 379 380 changeSeriaTitle(); 381 changeCartTable(); 382 changeFeaturesProductPage(); 383 changeTitlesProductPage(); 384 changeTabsProductPage(); 385 toggleDotsScopesSlider(); 386 }); 387 388 389 /** 390 * Facetwp product filters => hide empty filters 391 */ 392 let shouldScrollToHeader = false; 393 394 $(document).on('click', '.aside_widget .facetwp-facet', function () { 395 shouldScrollToHeader = true; 396 }); 397 398 document.addEventListener('facetwp-loaded', function () { 399 $.each(FWP.settings.num_choices, function (key, val) { 400 var $facet = $('.facetwp-facet-' + key); 401 var $parent = $facet.closest('.widget_filter'); 402 if ($parent.length && val === 0) { 403 $parent.remove(); 404 } 405 }); 406 407 // Initialize compare and update header 408 initCompare(); 409 updateHeaderCompare(); 410 restoreProductCardStates(); 411 412 // Scroll to the .woocommerce-products-header block if the filter was clicked in aside_widget 413 if (shouldScrollToHeader) { 414 $('html, body').animate({ 415 scrollTop: $('.woocommerce-products-header').offset().top 416 }, 500); // Adjust the duration as needed 417 418 // Reset the flag 419 shouldScrollToHeader = false;
420 } 421 }); 422 423 /** 424 * Sticky widget_filters 425 */ 426 function toggleFilterSticky() { 427 428 if ($(window).width() < 992) { 429 430 $('.widget_filters.filters_sticky').removeAttr('style'); 431 $('.widget_filters.filters_sticky').removeClass('filters_sticky'); 432 433 if ($('.widget_filters__overlay').css('display') == 'block') { 434 $('.widget_filters').css({'left': '10px'}); 435 } 436 437 return; 438 } 439 440 let widget_filters = $('.widget_filters'), 441 headerHeight = $('#header_navbar').outerHeight(); 442 443 widget_filters.addClass('filters_sticky'); 444 445 if (($('#header').css('top') == '0px') && ($('#header').css('position') == 'sticky')) { 446 headerHeight += $('#header').outerHeight(); 447 } 448 449 headerHeight += 10; 450 widget_filters.css({ 451 'top': headerHeight + 'px' 452 }); 453 454 let filtersWrpHeight = $(window).height() - headerHeight - 10; 455 let filtersOriginHeight = $('.widget_filters__title').outerHeight() + $('.widget_filters__wrp').outerHeight() + $('.widget_filters__bottom').outerHeight(); 456 457 if( filtersOriginHeight > 0 ) { 458 if ((filtersOriginHeight > filtersWrpHeight) || (filtersOriginHeight != widget_filters.outerHeight())) { 459 460 widget_filters.css({ 461 'height': filtersWrpHeight + 'px', 462 'overflow-y': 'auto' 463 }); 464 465 } 466 } 467 } 468 469 toggleFilterSticky(); 470 $(window).on('scroll', { passive: true }, function (n) { 471 toggleFilterSticky(); 472 }); 473 $(window).on('resize', function () { 474 toggleFilterSticky(); 475 }); 476 477 478 /** 479 * Sticky headers: 480 */ 481 let docCurrentTop = $(document).scrollTop(); 482 $(document).on('scroll', { passive: true }, function (e) { 483 484 let docEventTop = $(document).scrollTop(), 485 headerHeight = $('#header').outerHeight(), 486 headerNavbarHeight = $('#header_navbar').outerHeight(), 487 styleTransition = '0.25s'; 488 489 if (docCurrentTop > docEventTop) { 490 491 // if scroll to Top: 492 $('#header').css({'position': 'sticky', 'top': '0', 'transition': styleTransition}); 493 $('#header_navbar').css({'top': headerHeight + 'px', 'transition': styleTransition}); 494 495 setTimeout(() => toggleFilterSticky(), 100); 496 497 $('body').data('sticky-header', (headerHeight + headerNavbarHeight)); 498 499 } else if (docCurrentTop < docEventTop) { 500 501 // if scroll to Down: 502 $('#header').css({'top': '-' + headerHeight + 'px', 'transition': styleTransition}); 503 $('#header_navbar').css({'top': '0', 'transition': styleTransition}); 504 505 $('body').data('sticky-header', headerNavbarHeight); 506 } 507 508 docCurrentTop = docEventTop; 509 }); 510 511 512 /** 513 * Open/Close product filters on mobile: 514 */ 515 // Close: 516 $(document).on('click', '.widget_filters__overlay, .widget_filters__close', function () { 517 $('.widget_filters__overlay').fadeOut(200); 518 $('.widget_filters').animate({left: '-412px'}, 300); 519 $('.widget_filters__open').fadeIn(200); 520 }); 521 // Open: 522 $(document).on('click', '.widget_filters__open', function () { 523 $('.widget_filters__open').fadeOut(200); 524 $('.widget_filters__overlay').fadeIn(200); 525 $('.widget_filters').animate({left: '10px'}, 300); 526 }); 527 528 529 /** 530 * Open more content on the home page: 531 */ 532 $(document).on('click', '[data-more]', function () { 533 let moreContent = $('[data-more]').data('more'); 534 $(this).hide(); 535 $('#' + moreContent).show(); 536 }); 537 538 539 /** 540 * Open more serija content: 541 */ 542 $(document).on('click', '.seria__more', function () { 543 let moreContent = $(this).parent().siblings('.seria__desc'); 544 if ($(this).hasClass('open')) { 545 $(this).removeClass('open'); 546 $(this).text('Ðолное опиÑание'); 547 moreContent.hide(); 548 } else { 549 $(this).addClass('open'); 550 $(this).text('СкÑÑÑÑ Ð¾Ð¿Ð¸Ñание'); 551 moreContent.show(); 552 } 553 }); 554 555 556 /** 557 * Phone input validation: 558 */ 559 $('input[type=tel]').on('keypress', function (e) { 560 let keys; 561 return (keys = ['+', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', '-', '(', ')']), keys.indexOf(e.key) > -1; 562 }); 563 564 565 /** 566 * Sliders implements: 567 */ 568 569 $('#slider_sale, #slider_viewed, #slider_similar, #slider_soput, #slider_hits_category').slick({ 570 infinite: true,
571 arrows: false, 572 slidesToShow: 4, 573 slidesToScroll: 1, 574 dots: true, 575 prevArrow: 576 '<button class="slider-arrow prev"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.292893 8.70711C-0.0976295 8.31659 -0.0976296 7.68342 0.292892 7.2929L6.65685 0.928936C7.04738 0.538411 7.68054 0.538411 8.07107 0.928936C8.46159 1.31946 8.46159 1.95262 8.07107 2.34315L2.41422 8L8.07107 13.6569C8.46159 14.0474 8.46159 14.6805 8.07107 15.0711C7.68054 15.4616 7.04738 15.4616 6.65685 15.0711L0.292893 8.70711ZM48 9L1 9L1 7L48 7L48 9Z" fill="#434343"/></svg></button>', 577 nextArrow: 578 '<button class="slider-arrow next"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M47.7071 8.70711C48.0976 8.31659 48.0976 7.68342 47.7071 7.2929L41.3431 0.928936C40.9526 0.538411 40.3195 0.538411 39.9289 0.928936C39.5384 1.31946 39.5384 1.95262 39.9289 2.34315L45.5858 8L39.9289 13.6569C39.5384 14.0474 39.5384 14.6805 39.9289 15.0711C40.3195 15.4616 40.9526 15.4616 41.3431 15.0711L47.7071 8.70711ZM-8.74228e-08 9L47 9L47 7L8.74228e-08 7L-8.74228e-08 9Z" fill="#434343"/></svg></button>', 579 responsive: [ 580 {breakpoint: 1440, settings: {slidesToShow: 3}}, 581 {breakpoint: 1100, settings: {slidesToShow: 2}}, 582 {breakpoint: 768, settings: {slidesToShow: 1}}, 583 ], 584 }); 585 586 $('#slider_blog').slick({ 587 infinite: true, 588 arrows: false, 589 slidesToShow: 1, 590 slidesToScroll: 1, 591 dots: true, 592 responsive: [ 593 {breakpoint: 1e4, settings: 'unslick'}, 594 {breakpoint: 1440, settings: {slidesToShow: 3}}, 595 {breakpoint: 1100, settings: {slidesToShow: 2}}, 596 {breakpoint: 768, settings: {slidesToShow: 1}}, 597 ], 598 }); 599 600 601 if ((window.location.href.indexOf('#tab-reviews') > -1) || ($('#slider_questions').closest('.woocommerce-Tabs-panel').length == 0)) { 602 603 $('#slider_questions').slick({ 604 infinite: true, 605 slidesToShow: 3, 606 slidesToScroll: 1, 607 dots: true, 608 prevArrow: 609 '<button class="slider-arrow prev"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.292893 8.70711C-0.0976295 8.31659 -0.0976296 7.68342 0.292892 7.2929L6.65685 0.928936C7.04738 0.538411 7.68054 0.538411 8.07107 0.928936C8.46159 1.31946 8.46159 1.95262 8.07107 2.34315L2.41422 8L8.07107 13.6569C8.46159 14.0474 8.46159 14.6805 8.07107 15.0711C7.68054 15.4616 7.04738 15.4616 6.65685 15.0711L0.292893 8.70711ZM48 9L1 9L1 7L48 7L48 9Z" fill="#434343"/></svg></button>', 610 nextArrow: 611 '<button class="slider-arrow next"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M47.7071 8.70711C48.0976 8.31659 48.0976 7.68342 47.7071 7.2929L41.3431 0.928936C40.9526 0.538411 40.3195 0.538411 39.9289 0.928936C39.5384 1.31946 39.5384 1.95262 39.9289 2.34315L45.5858 8L39.9289 13.6569C39.5384 14.0474 39.5384 14.6805 39.9289 15.0711C40.3195 15.4616 40.9526 15.4616 41.3431 15.0711L47.7071 8.70711ZM-8.74228e-08 9L47 9L47 7L8.74228e-08 7L-8.74228e-08 9Z" fill="#434343"/></svg></button>', 612 responsive: [{breakpoint: 768, settings: {slidesToShow: 1, slidesToScroll: 1}}], 613 }); 614 } 615 616 $('#tab-title-questions').click(function () { 617 618 if ($(window).width() < 766) { 619 setTimeout(() => { 620 $('html, body').animate({ 621 scrollTop: jQuery('#tab-questions').offset().top - 200 622 }, 2000); 623 }, '1000'); 624 } 625 626 $('#slider_questions:not(.slick-initialized)').slick({ 627 infinite: true, 628 slidesToShow: 3, 629 slidesToScroll: 1, 630 dots: true, 631 prevArrow: 632 '<button class="slider-arrow prev"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.292893 8.70711C-0.0976295 8.31659 -0.0976296 7.68342 0.292892 7.2929L6.65685 0.928936C7.04738 0.538411 7.68054 0.538411 8.07107 0.928936C8.46159 1.31946 8.46159 1.95262 8.07107 2.34315L2.41422 8L8.07107 13.6569C8.46159 14.0474 8.46159 14.6805 8.07107 15.0711C7.68054 15.4616 7.04738 15.4616 6.65685 15.0711L0.292893 8.70711ZM48 9L1 9L1 7L48 7L48 9Z" fill="#434343"/></svg></button>', 633 nextArrow: 634 '<button class="slider-arrow next">
634<svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M47.7071 8.70711C48.0976 8.31659 48.0976 7.68342 47.7071 7.2929L41.3431 0.928936C40.9526 0.538411 40.3195 0.538411 39.9289 0.928936C39.5384 1.31946 39.5384 1.95262 39.9289 2.34315L45.5858 8L39.9289 13.6569C39.5384 14.0474 39.5384 14.6805 39.9289 15.0711C40.3195 15.4616 40.9526 15.4616 41.3431 15.0711L47.7071 8.70711ZM-8.74228e-08 9L47 9L47 7L8.74228e-08 7L-8.74228e-08 9Z" fill="#434343"/></svg></button>', 635 responsive: [{breakpoint: 768, settings: {slidesToShow: 1, slidesToScroll: 1}}], 636 }); 637 }); 638 639 if ((window.location.href.indexOf('#tab-reviews') > -1) || ($('#slider_reviews').closest('.woocommerce-Tabs-panel').length == 0)) { 640 641 $('#slider_reviews').slick({ 642 infinite: true, 643 slidesToShow: 2, 644 slidesToScroll: 1, 645 dots: true, 646 prevArrow: 647 '<button class="slider-arrow prev"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.292893 8.70711C-0.0976295 8.31659 -0.0976296 7.68342 0.292892 7.2929L6.65685 0.928936C7.04738 0.538411 7.68054 0.538411 8.07107 0.928936C8.46159 1.31946 8.46159 1.95262 8.07107 2.34315L2.41422 8L8.07107 13.6569C8.46159 14.0474 8.46159 14.6805 8.07107 15.0711C7.68054 15.4616 7.04738 15.4616 6.65685 15.0711L0.292893 8.70711ZM48 9L1 9L1 7L48 7L48 9Z" fill="#434343"/></svg></button>', 648 nextArrow: 649 '<button class="slider-arrow next"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M47.7071 8.70711C48.0976 8.31659 48.0976 7.68342 47.7071 7.2929L41.3431 0.928936C40.9526 0.538411 40.3195 0.538411 39.9289 0.928936C39.5384 1.31946 39.5384 1.95262 39.9289 2.34315L45.5858 8L39.9289 13.6569C39.5384 14.0474 39.5384 14.6805 39.9289 15.0711C40.3195 15.4616 40.9526 15.4616 41.3431 15.0711L47.7071 8.70711ZM-8.74228e-08 9L47 9L47 7L8.74228e-08 7L-8.74228e-08 9Z" fill="#434343"/></svg></button>', 650 responsive: [{breakpoint: 768, settings: {slidesToShow: 1, slidesToScroll: 1}}], 651 }); 652 } 653 654 $('#tab-title-reviews').click(function () { 655 656 if ($(window).width() < 766) { 657 setTimeout(() => { 658 $('html, body').animate({ 659 scrollTop: jQuery('#tab-reviews').offset().top - 200 660 }, 2000); 661 }, '1000'); 662 } 663 664 $('#slider_reviews:not(.slick-initialized)').slick({ 665 infinite: true, 666 slidesToShow: 2, 667 slidesToScroll: 1, 668 dots: true, 669 prevArrow: 670 '<button class="slider-arrow prev"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.292893 8.70711C-0.0976295 8.31659 -0.0976296 7.68342 0.292892 7.2929L6.65685 0.928936C7.04738 0.538411 7.68054 0.538411 8.07107 0.928936C8.46159 1.31946 8.46159 1.95262 8.07107 2.34315L2.41422 8L8.07107 13.6569C8.46159 14.0474 8.46159 14.6805 8.07107 15.0711C7.68054 15.4616 7.04738 15.4616 6.65685 15.0711L0.292893 8.70711ZM48 9L1 9L1 7L48 7L48 9Z" fill="#434343"/></svg></button>', 671 nextArrow: 672 '<button class="slider-arrow next"><svg width="48" height="16" viewBox="0 0 48 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M47.7071 8.70711C48.0976 8.31659 48.0976 7.68342 47.7071 7.2929L41.3431 0.928936C40.9526 0.538411 40.3195 0.538411 39.9289 0.928936C39.5384 1.31946 39.5384 1.95262 39.9289 2.34315L45.5858 8L39.9289 13.6569C39.5384 14.0474 39.5384 14.6805 39.9289 15.0711C40.3195 15.4616 40.9526 15.4616 41.3431 15.0711L47.7071 8.70711ZM-8.74228e-08 9L47 9L47 7L8.74228e-08 7L-8.74228e-08 9Z" fill="#434343"/></svg></button>', 673 responsive: [{breakpoint: 768, settings: {slidesToShow: 1, slidesToScroll: 1}}], 674 }); 675 }); 676 677 $('.category_content #slider_scopes').slick({ 678 infinite: false, 679 slidesToShow: 1, 680 slidesToScroll: 1, 681 dots: true, 682 arrows: false, 683 responsive: [ 684 {breakpoint: 1e4, settings: {slidesToShow: 4}}, 685 {breakpoint: 1440, settings: {slidesToShow: 3}}, 686 {breakpoint: 1100, settings: {slidesToShow: 2}}, 687 {breakpoint: 768, settings: {slidesToShow: 1}}, 688 ], 689 }); 690 691 $('#tab-title-areas').click(function () { 692 693 $('.scopes #slider_scopes:not(.slick-initialized)').slick({ 694 infinite: false, 695 slidesToShow: 1, 696 slidesToScroll: 1, 697 dots: true,
698 arrows: false, 699 responsive: [ 700 {breakpoint: 1e4, settings: {slidesToShow: 4}}, 701 {breakpoint: 1440, settings: {slidesToShow: 3}}, 702 {breakpoint: 1100, settings: {slidesToShow: 2}}, 703 {breakpoint: 768, settings: {slidesToShow: 1}}, 704 ], 705 }); 706 }); 707 708 709 /** 710 * About section title replaced: 711 */ 712 window.screen.width >= 1300 && $('.section__about-text').prepend($('.section__about .title_1')); 713 714 715 /** 716 * Modals functionality: 717 */ 718 function modalOpen(modal, overlay = true) { 719 720 let scrollWidth = window.innerWidth - $(document).width(); 721 if (overlay) { 722 $('.overlay').addClass('active'); 723 } 724 $('body').addClass('overlay-body').css('margin-right', scrollWidth + 'px'); 725 $('[data-modal="' + modal + '"]').addClass('active'); 726 } 727 728 function modalClose(overlay = true) { 729 730 if (overlay) { 731 $('.overlay').removeClass('active'); 732 } 733 $('.active[data-modal]').removeClass('active'); 734 setTimeout(function () { 735 $('body').removeClass('overlay-body').css('margin-right', '0'); 736 }, 200); 737 } 738 739 $(document).on('click', '[data-modal-open]', function (e) { 740 e.preventDefault(); 741 let modalName = $(this).data('modal-open'); 742 743 // if OneClick: 744 if ((modalName == 'modal_oneclick') || (modalName == 'modal_order') || (modalName == 'modal_lizing' ) ) { 745 let $quantityInput = $('[name="quantity"]')[0]; 746 if ($quantityInput) { 747 $(this).data('quantity', $('[name="quantity"]')[0].value); 748 } 749 let prodName = $(this).data('name'), 750 prodPrice = $(this).data('price'), 751 prodQuantity = $(this).data('quantity'), 752 prodPriceText = '', 753 prodModel = ''; 754 755 if (prodQuantity > 1000) { 756 prodQuantity = 1000; 757 } 758 759 // if product Price exist: 760 if (prodPrice) { 761 prodPriceText = prodPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') + ' \u20bd Ñ ' + prodQuantity + 'ÑÑ.'; 762 } else { 763 prodPriceText = 'Цена по запÑоÑÑ'; 764 } 765 prodModel = prodName + ' : ' + prodPriceText; 766 767 $('[data-modal=' + modalName + '] .form-model__title').text(prodName); // change product name 768 $('[data-modal=' + modalName + '] .form-model__value').text(prodPriceText); // change product price 769 $('[data-modal=' + modalName + '] input[name=model]').val(prodModel); 770 771 let priceInput = $('[data-modal=' + modalName + '] input[name=model]'); 772 773 if (priceInput.length > -1) { 774 prodPriceText = prodPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') + ' \u20bd'; 775 $('[data-modal=' + modalName + '] input[name=model]').val(prodName); 776 $('[data-modal=' + modalName + '] input[name=price]').val(prodPriceText); 777 $('[data-modal=' + modalName + '] input[name=count]').val(prodQuantity); 778 } 779 } 780 if ((modalName === 'modal_chipper') ) { 781 let prodName = $(this).data('name'); 782 $('[data-modal=' + modalName + '] input[name=yourmodel]').val(prodName); 783 } 784 modalOpen(modalName); 785 }); 786 787 $('.overlay, [data-modal-close]').click(function (e) { 788 e.preventDefault(); 789 modalClose(); 790 }); 791 792 793 /** 794 * Mobile menu open/close menu items: 795 */ 796 $('#header_mobmenu .menu-item-has-children > a').append('<span class="toggle"></span>'); 797 $('#header_mobmenu .toggle').click(function (e) { 798 e.preventDefault(); 799 let t = $(this).parent(); 800 t.toggleClass('open'), t.siblings('ul').slideToggle(300); 801 }); 802 $('#category_catalog .toggle').click(function (e) { 803 e.preventDefault(); 804 let t = $(this).parent(); 805 t.hasClass('open') ? t.siblings('ul').slideUp(300) : $(this).hasClass('first') ? (t.siblings('ul').slideDown(0), $(this).removeClass('first')) : t.siblings('ul').slideDown(300), t.toggleClass('open'); 806 }); 807 $('#category_catalog .active .toggle').addClass('first').click(); 808 809 810 $('#header_mobmenu .menu-item-has-children > a::after').click(function (e) { 811 e.preventDefault(); 812 let t = $(this).parent(); 813 t.toggleClass('open'); 814 t.siblings('ul').slideToggle(300); 815 }); 816 $('#category_catalog .menu-item-has-children > a::after').click(function (e) { 817 e.preventDefault(); 818 let t = $(this).parent(); 819 t.hasClass('open') ? t.siblings('ul').slideUp(300) : $(this).hasClass('first') ? (t.siblings('ul').slideDown(0), $(this).removeClass('first')) : t.siblings('ul').slideDown(300), t.toggleClass('open'); 820 }); 821 $('#category_catalog .menu-item-has-children > a.active').addClass('first').click(); 822 823 824 /**
825 * Search open/close: 826 */ 827 $('#header_search_btn, #header_search_close').click(function (e) { 828 e.preventDefault(); 829 $('#header_search').toggleClass('open'); 830 }); 831 832 833 /** 834 * Hide slick-dots if too low elements: 835 */ 836 $('.slick-slider').each((index, element) => { 837 838 if (!$(element).find('.slick-dots li:not(.slick-active)').length) { 839 $(element).find('.slick-dots').hide(); 840 } 841 }); 842 843 /** 844 * Remove areas tab remove if empty: 845 */ 846 if (!$('#tab-areas #slider_scopes').length) { 847 848 $('#tab-areas').remove(); 849 $('#tab-title-areas').remove(); 850 } 851 852 853 document.addEventListener('wpcf7beforesubmit', function (event) { 854 const form = event.target; 855 const tokenInput = form.querySelector('input[name="smart-token"]'); 856 let captchaField = form.querySelector('input[name="form-captcha"]'); 857 858 if (!captchaField) { 859 captchaField = document.createElement('input'); 860 captchaField.type = 'hidden'; 861 captchaField.name = 'form-captcha'; 862 captchaField.className = 'form-captcha-input'; 863 form.appendChild(captchaField); 864 } 865 866 if (tokenInput && tokenInput.value) { 867 captchaField.value = tokenInput.value; 868 } 869 }, false); 870 871 /** 872 * Forms event success submit: 873 */ 874 document.addEventListener('wpcf7submit', function (event) { 875 if (event.detail.status === 'mail_sent') { 876 if ($('#' + event.detail.unitTag).parents('[data-modal]').length) { 877 modalClose(); 878 } 879 let $target = $(event.target); 880 881 setTimeout(() => { 882 if ($target.hasClass('wpcf7-podpiska-na-rassylku')) { 883 modalOpen('modal_thanks_podpiska'); 884 } else { 885 modalOpen('modal_thanks'); 886 } 887 888 setTimeout(() => { 889 modalClose(); 890 }, 4000); 891 892 }, 500); 893 } 894 }, false); 895 896 897 /** 898 * Tooltips: 899 */ 900 $(document).on({ 901 mouseenter: function () { 902 let text = ''; 903 904 if ($(this).find('.br_compare_added').length > 0) { 905 text = $(this).data('tooltip-added'); 906 } else { 907 text = $(this).data('tooltip'); 908 } 909 910 $(this).find('.tooltip').text(text); 911 912 $(this).find('.tooltip').fadeIn(150); 913 }, 914 915 mouseleave: function () { 916 $(this).find('.tooltip').fadeOut(150); 917 } 918 }, '[data-tooltip]'); 919 920 921 /** 922 * Wishlist: 923 */ 924 // возвÑаÑÐ°ÐµÑ cookie еÑли еÑÑÑ Ð¸Ð»Ð¸ undefined 925 function getCookie(name) { 926 927 var matches = document.cookie.match(new RegExp( 928 '(?:^|; )' + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + '=([^;]*)' 929 )); 930 return matches ? decodeURIComponent(matches[1]) : undefined; 931 } 932 933 function getWishlistIds() { 934 var ids = getCookie('wishlist_ids'); 935 if (!ids) return []; 936 return ids.split(',').map(function (id) { 937 return String(id).trim(); 938 }).filter(Boolean); 939 } 940 941 function setWishlistCookie(ids) { 942 document.cookie = 'wishlist_ids=' + ids.join(',') + '; path=/; max-age=2592000; SameSite=Lax'; 943 } 944 945 function getCartIds() { 946 // РеалÑÐ½Ð°Ñ ÐºÐ¾Ñзина из PHP â иÑÑоÑник пÑÐ°Ð²Ð´Ñ (в Ñ.Ñ. пÑÑÑÐ°Ñ Ð¿Ð¾Ñле ÑдалениÑ) 947 if (typeof appopt !== 'undefined' && Array.isArray(appopt.cart_product_ids)) { 948 return appopt.cart_product_ids.map(function (id) { 949 return String(id).trim(); 950 }).filter(Boolean); 951 } 952 953 // fallback ÑолÑко еÑли appopt недоÑÑÑпен (жÑÑÑкий HTML-кÑÑ) 954 var ids = []; 955 var cookieIds = getCookie('gpo_cart_ids'); 956 if (cookieIds) { 957 cookieIds.split(',').forEach(function (id) { 958 id = String(id).trim(); 959 if (id && ids.indexOf(id) === -1) ids.push(id); 960 }); 961 } 962 return ids; 963 } 964 965 function getCartUrl() { 966 if (typeof appopt !== 'undefined' && appopt.cart_url) { 967 return appopt.cart_url; 968 } 969 if (typeof wc_add_to_cart_params !== 'undefined' && wc_add_to_cart_params.cart_url) { 970 return wc_add_to_cart_params.cart_url; 971 } 972 var $headerCart = $('.header__cart a, a.header__cart').first(); 973 return $headerCart.length ? $headerCart.attr('href') : '/cart/'; 974 } 975 976 function setCartIds(ids) { 977 var unique = []; 978 ids.forEach(function (id) { 979 id = String(id).trim(); 980 if (id && unique.indexOf(id) === -1) unique.push(id); 981 }); 982 document.cookie = 'gpo_cart_ids=' + unique.join(',') + '; path=/; max-age=2592000; SameSite=Lax'; 983 } 984 985 function addCartId(productId) { 986 productId = String(productId); 987 var ids = []; 988 var cookieIds = getCookie('gpo_cart_ids'); 989 if (cookieIds) { 990 cookieIds.split(',').forEach(function (id) { 991 id = String(id).trim(); 992 if (id && ids.indexOf(id) === -1) ids.push(id); 993 }); 994 } 995 if (typeof appopt !== 'undefined' && Array.isArray(appopt.cart_product_ids)) { 996 appopt.cart_product_ids.forEach(function (id) { 997 id = String(id).trim(); 998 if (id && ids.indexOf(id) === -1) ids.push(id); 999 }); 1000 } 1001 if (ids.indexOf(productId) === -1) { 1002 ids.push(productId); 1003 } 1004 if (typeof appopt !== 'undefined') { 1005 appopt.cart_product_ids = ids.map(Number); 1006 } 1007 setCartIds(ids); 1008 } 1009 1010 function removeCartId(productId) { 1011 productId = String(productId); 1012 var ids = getCartIds().filter(function (id) { 1013 return id !== productId; 1014 }); 1015 if (typeof appopt !== 'undefined') { 1016 appopt.cart_product_ids = ids.map(Number); 1017 } 1018 setCartIds(ids); 1019 } 1020 1021 function resetCartButton($btn) { 1022 $btn = $($btn); 1023 if (!$btn.length) return; 1024 1025 // PHP-only «Ðобавлено» без ajax-кнопки â не ÑÑогаем (поÑле F5 оÑÑиÑÑÐµÑ ÑеÑвеÑ) 1026 if ($btn.hasClass('custom_added_to_cart') && !$btn.hasClass('ajax_add_to_cart') && !$btn.hasClass('product-card__add-cart')) { 1027 return; 1028 } 1029 1030 $btn.removeClass('added custom_added_to_cart'); 1031 $btn.addClass('ajax_add_to_cart add_to_cart_button'); 1032 1033 var origHref = $btn.attr('data-gpo_orig_href'); 1034 if (origHref) { 1035 $btn.attr('href', origHref); 1036 } 1037 1038 var $span = $btn.children('span').first(); 1039 if ($span.length) {
1040 $span.text('РкоÑзинÑ'); 1041 } 1042 1043 var $wrap = $btn.closest('.product-card__btns, .seria__add, .product-card__bottom, .product-card'); 1044 // ÑбиÑаем ÑолÑко View cart / дÑбликаÑÑ, не ÑÐ°Ð¼Ñ ÐºÐ½Ð¾Ð¿ÐºÑ 1045 $wrap.find('a.added_to_cart.wc-forward, a.custom_added_to_cart').not($btn).remove(); 1046 } 1047 1048 function restoreWishlistStates() { 1049 var ids = getWishlistIds(); 1050 $('.product-card__liked').removeClass('added'); 1051 ids.forEach(function (id) { 1052 $('.product-card__liked[data-product="' + id + '"]').addClass('added'); 1053 }); 1054 if (ids.length) { 1055 $('.header__liked').addClass('active'); 1056 } else { 1057 $('.header__liked').removeClass('active'); 1058 } 1059 } 1060 1061 function ensureAddedCartButton($button) { 1062 $button = $($button); 1063 if (!$button.length) return; 1064 1065 var cartUrl = getCartUrl(); 1066 var $wrap = $button.closest('.product-card__btns, .seria__add, .product-card__bottom, .product-card'); 1067 1068 // Уже ÑÑÑлка «Ðобавлено» из PHP â ÑолÑко подÑиÑÑим View cart 1069 if ($button.hasClass('custom_added_to_cart') && !$button.hasClass('ajax_add_to_cart')) { 1070 $wrap.find('a.added_to_cart.wc-forward').not($button).remove(); 1071 return; 1072 } 1073 1074 if (!$button.attr('data-gpo_orig_href')) { 1075 $button.attr('data-gpo_orig_href', $button.attr('href') || ''); 1076 } 1077 1078 $button 1079 .removeClass('loading add_to_cart_button') 1080 .addClass('added ajax_add_to_cart custom_added_to_cart') 1081 .attr('href', cartUrl); 1082 1083 var $span = $button.children('span').first(); 1084 if ($span.length) { 1085 $span.text('Ðобавлено'); 1086 } else { 1087 $button.append('<span>Ðобавлено</span>'); 1088 } 1089 1090 // УбиÑаем ÑÑандаÑÑнÑй View cart â ÑекÑÑ Ñже на Ñамой кнопке 1091 $wrap.find('a.added_to_cart.wc-forward, a.added_to_cart:not(.custom_added_to_cart)').not($button).remove(); 1092 $button.siblings('a.custom_added_to_cart').remove(); 1093 } 1094 1095 function restoreCartStates() { 1096 var ids = getCartIds(); 1097 setCartIds(ids); // ÑÐ¸Ð½Ñ ÑонизиÑÑем cookie Ñ ÑеалÑной коÑзиной 1098 1099 // СбÑаÑÑваем «Ðобавлено» Ñ ÑоваÑов, коÑоÑÑÑ Ñже Ð½ÐµÑ Ð² коÑзине 1100 $('.ajax_add_to_cart.added, .product-card__add-cart.added').each(function () { 1101 var $btn = $(this); 1102 var id = String($btn.data('product_id') || $btn.attr('data-product_id') || ''); 1103 if (!id || ids.indexOf(id) === -1) { 1104 resetCartButton($btn); 1105 } 1106 }); 1107 1108 // ÐиÑние ÑоÑедние «Ðобавлено» / View cart 1109 $('.product-card__btns a.custom_added_to_cart, .product-card__bottom a.custom_added_to_cart').each(function () { 1110 var $added = $(this); 1111 // PHP-ваÑианÑ: ÑолÑко ÑÑÑлка без ajax â оÑÑавлÑем, еÑли ÑÐ¾Ð²Ð°Ñ Ð² коÑзине неизвеÑÑен по data-id 1112 var $btn = $added.siblings('.ajax_add_to_cart, .product-card__add-cart').first(); 1113 if ($btn.length) { 1114 var id = String($btn.data('product_id') || $btn.attr('data-product_id') || ''); 1115 if (!id || ids.indexOf(id) === -1) { 1116 $added.remove(); 1117 resetCartButton($btn); 1118 } 1119 } 1120 }); 1121 1122 ids.forEach(function (id) { 1123 var $btns = $('.ajax_add_to_cart[data-product_id="' + id + '"], .product-card__add-cart[data-product_id="' + id + '"]'); 1124 $btns.each(function () { 1125 ensureAddedCartButton($(this)); 1126 }); 1127 }); 1128 } 1129 1130 function restoreProductCardStates() { 1131 updateAllCompare(); 1132 restoreWishlistStates(); 1133 restoreCartStates(); 1134 } 1135 1136 function addWishlistId(productId) { 1137 1138 productId = String(productId); 1139 let ids = getWishlistIds(); 1140 1141 if (ids.indexOf(productId) !== -1) { 1142 return; 1143 } 1144 1145 ids.push(productId); 1146 setWishlistCookie(ids); 1147 } 1148 1149 function removeWishlistId(productId) { 1150 1151 productId = String(productId); 1152 let ids = getWishlistIds().filter(function (id) { 1153 return id !== productId; 1154 }); 1155 setWishlistCookie(ids); 1156 } 1157 1158 $('.woocommerce-store-notice__dismiss-link').on('click', function(){ 1159 $('.woocommerce-store-notice.demo_store').remove(); 1160 }); 1161 1162 $(document).on('click touchend', '.product-card__liked', function (e) { 1163 e.preventDefault(); // Prevent default behavior 1164 1165 let productId = $(this).data('product'); 1166 const isMobile = $(window).width() <= 768; 1167 const $tooltip = $(this).find('.tooltip'); 1168 1169 if ($(this).hasClass('added')) { 1170 // Remove product ID from wishlist 1171 removeWishlistId(productId); 1172 $(this).removeClass('added'); 1173 $tooltip.text(isMobile ? $(this).data('tooltip_mob') : $(this).data('tooltip')); 1174 } else { 1175 // Add product ID to wishlist 1176 addWishlistId(productId); 1177 $(this).addClass('added'); 1178 $tooltip.text(isMobile ? $(this).data('tooltip-added_mob') : $(this).data('tooltip-added')); 1179 } 1180 1181 if (isMobile) { 1182 $tooltip.css('display', 'block'); 1183 $(document).on('touchstart', function (event) { 1184 if (!$(event.target).closest('.product-card__liked').length) { 1185 $tooltip.css('display', 'none'); 1186 $(document).off('touchstart'); 1187 } 1188 }); 1189 setTimeout(()=> { 1190 $tooltip.css('display', 'none'); 1191 }, 3000); 1192 } 1193 1194 if (!getWishlistIds().length && $('.header__liked').hasClass('active')) { 1195 $('.header__liked').removeClass('active'); 1196 } else if (getWishlistIds().length && !$('.header__liked').hasClass('active')) { 1197 $('.header__liked').addClass('active'); 1198 } 1199 1200 if ($(this).parents('.wishlist_page').length) { 1201 document.location.reload(); 1202 } 1203 }); 1204 1205 // Ensure tooltip text remains consistent on hover 1206 $(document).on('mouseenter', '.product-card__liked', function () { 1207 const $tooltip = $(this).find('.tooltip'); 1208 const isMobile = $(window).width() <= 768; 1209 1210 if ($(this).hasClass('added')) { 1211 $tooltip.text(isMobile ? $(this).data('tooltip-added_mob') : $(this).data('tooltip-added')); 1212 } else { 1213 $tooltip.text(isMobile ? $(this).data('tooltip_mob') : $(this).data('tooltip')); 1214 } 1215 }); 1216 1217 restoreProductCardStates(); 1218 1219 function markButtonAdded($button) { 1220 $button = $($button); 1221 if (!$button.length) return; 1222 1223 var productId = $button.data('product_id') || $button.attr('data-product_id'); 1224 if (productId) { 1225 addCartId(productId); 1226 } 1227 ensureAddedCartButton($button); 1228 } 1229 1230 $(document.body).on('added_to_cart', function (e, fragments, cart_hash, $button) { 1231 markButtonAdded($button); 1232 setTimeout(function () { markButtonAdded($button); }, 50); 1233 setTimeout(function () { markButtonAdded($button); }, 200); 1234 }); 1235 1236 $(document.body).on('wc_cart_button_updated', function (e, $button) { 1237 markButtonAdded($button); 1238 }); 1239 1240 $(document.body).on('removed_from_cart', function (e, fragments, cart_hash, $button) { 1241 $button = $($button); 1242 var productId = null; 1243 if ($button.length) { 1244 productId = $button.data('product_id') || $button.attr('data-product_id'); 1245 } 1246 if (productId) { 1247 removeCartId(productId); 1248 } 1249 restoreCartStates(); 1250 }); 1251 1252 $(document.body).on('updated_cart_totals', function () { 1253 if (typeof appopt !== 'undefined' && Array.isArray(appopt.cart_product_ids)) { 1254 var ids = []; 1255 $('.woocommerce-cart-form .cart_item a.remove').each(function () { 1256 var id = String($(this).data('product_id') || ''); 1257 if (id && ids.indexOf(id) === -1) ids.push(id); 1258 }); 1259 appopt.cart_product_ids = ids.map(Number); 1260 setCartIds(ids); 1261 } 1262 }); 1263 1264 // if has liked products: 1265 if (getWishlistIds().length && !$('.header__liked').hasClass('active')) { 1266 $('.header__liked').addClass('active'); 1267 } 1268 1269 1270 /** 1271 * Compare products â клаÑÑ .added на ÑодиÑеле обновлÑеÑÑÑ Ð² .br_compare_button 1272 */ 1273 1274 1275 1276 1277 /** 1278 * Sales modal 1279 */ 1280 if ($('[data-modal=modal_sales]').length != 0) { 1281 1282 if ((getCookie('sales_hide') == null) || ($('#block_sales_img').attr('src') != getCookie('sales_hide'))) { 1283 setTimeout(function () { 1284 modalOpen('modal_sales');
1285 // add cookie 1286 document.cookie = 'sales_hide=' + $('#block_sales_img').attr('src') + '; path=/; max-age=2592000'; 1287 }, 2000); 1288 } 1289 } 1290 1291 1292 /** 1293 * Comments / Reviews config: 1294 */ 1295 // Check the accept checkbox: 1296 $('#review-accept,#question-accept,#accept-person-data').change(function () { 1297 1298 if (this.checked != true) { 1299 $(this).closest('.comment-form').find('#submit').attr('disabled', 'disabled'); 1300 } else { 1301 $(this).closest('.comment-form').find('#submit').removeAttr('disabled'); 1302 } 1303 }); 1304 1305 $('#commentform, #questionform').submit(function (e) { 1306 e.preventDefault(); 1307 1308 const form = $(this); 1309 let noValid = false; 1310 1311 const fields = { 1312 name: form.find('input[name=author]'), 1313 email: form.find('input[name=email]'), 1314 rating: form.find('.comment-form-rating'), 1315 ratingSelect: form.find('select[name=rating]'), 1316 text: form.find('textarea[name=comment]'), 1317 captchaWrap: form.find('.form-captcha-position'), 1318 captchaToken: form.find('input[name=smart-token]'), 1319 captchaCF7: form.find('.form-captcha-input'), 1320 accept: form.find('input[name=accept-person-data]') 1321 }; 1322 1323 const emailFilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z]{2,8})+$/; 1324 const nameFilter = /(?!.*\s{2})[a-zA-Zа-ÑÐ-Я0-9]{2,30}$/; 1325 1326 const showError = (el, msg) => { 1327 el.find('.input_error').remove(); 1328 el.append(`<p class="input_error">${msg}</p>`); 1329 }; 1330 1331 const clearError = el => { 1332 el.find('.input_error').remove(); 1333 }; 1334 1335 const tokenValue = $('input[name=smart-token]').first().val(); 1336 1337 if (!tokenValue) { 1338 showError(fields.captchaWrap, 'ÐодÑвеÑдиÑе, ÑÑо Ð²Ñ Ð½Ðµ ÑобоÑ.'); 1339 noValid = true; 1340 } else { 1341 clearError(fields.captchaWrap); 1342 fields.captchaCF7.val(tokenValue); 1343 } 1344 1345 if (appopt.app_dist_comment_validation_name) { 1346 if (!fields.name.val()) { 1347 showError(fields.name.closest('.form-input'), 'Ðоле обÑзаÑелÑно Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ.'); 1348 noValid = true; 1349 } else if (!nameFilter.test(fields.name.val())) { 1350 showError(fields.name.closest('.form-input'), 'Ðоле заполнено некоÑÑекÑно.'); 1351 noValid = true; 1352 } else { 1353 clearError(fields.name.closest('.form-input')); 1354 } 1355 } 1356 1357 if (appopt.app_dist_comment_validation_email) { 1358 if (!fields.email.val()) { 1359 showError(fields.email.closest('.form-input'), 'Ðоле обÑзаÑелÑно Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ.'); 1360 noValid = true; 1361 } else if (!emailFilter.test(fields.email.val())) { 1362 showError(fields.email.closest('.form-input'), 'Ðоле заполнено некоÑÑекÑно.'); 1363 noValid = true; 1364 } else { 1365 clearError(fields.email.closest('.form-input')); 1366 } 1367 } 1368 1369 if (appopt.app_dist_comment_validation_rating) { 1370 if (!fields.ratingSelect.val()) { 1371 showError(fields.rating, 'УкажиÑе ÑейÑинг.'); 1372 noValid = true; 1373 } else { 1374 clearError(fields.rating); 1375 } 1376 } 1377 1378 if (appopt.app_dist_comment_validation_text || form.attr('id') === 'questionform') { 1379 if (!fields.text.val()) { 1380 showError(fields.text.closest('.form-input'), 'Ðоле обÑзаÑелÑно Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ.'); 1381 noValid = true; 1382 } else { 1383 clearError(fields.text.closest('.form-input')); 1384 } 1385 } 1386 1387 if (fields.accept.length) { 1388 const label = fields.accept.closest('.comment-form-accept'); 1389 1390 if (!fields.accept.is(':checked')) { 1391 showError(label, 'ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑоглаÑие на обÑабоÑÐºÑ Ð´Ð°Ð½Ð½ÑÑ .'); 1392 noValid = true; 1393 } else { 1394 clearError(label); 1395 } 1396 } 1397 1398 if (noValid) return false;
1399 1400 $.ajax({ 1401 type: 'POST', 1402 url: form.attr('action'), 1403 data: form.serialize() + '&action=customaddcomment', 1404 1405 beforeSend: () => form.addClass('submitting'), 1406 1407 error: function (request, status) { 1408 form.removeClass('submitting'); 1409 1410 if (status === 500) alert('ÐÑибка пÑи добавлении комменÑаÑиÑ'); 1411 else if (status === 'timeout') alert('ÐÑибка: СеÑÐ²ÐµÑ Ð½Ðµ оÑвеÑаеÑ, попÑобÑй еÑÑ.'); 1412 else { 1413 let msg = request.responseText.split('<p>')[1].split('</p>')[0] || 'ÐеизвеÑÑÐ½Ð°Ñ Ð¾Ñибка'; 1414 alert(msg); 1415 } 1416 }, 1417 1418 success: function (result) { 1419 form.removeClass('submitting'); 1420 1421 if (result.success === false) { 1422 showError(fields.captchaWrap, result.data.message); 1423 return; 1424 } 1425 1426 $('.modal__review .modal__close').click(); 1427 1428 form[0].reset(); 1429 $('.stars.selected').removeClass('selected').find('a.active').removeClass('active'); 1430 1431 if (window.smartCaptcha && typeof window.smartCaptcha.reset === 'function') { 1432 window.smartCaptcha.reset(); 1433 } 1434 1435 setTimeout(() => { 1436 modalOpen(form.attr('id') === 'questionform' 1437 ? 'modal_thanks_vopros' 1438 : 'modal_thanks_comment'); 1439 }, 300); 1440 } 1441 }); 1442 1443 return false; 1444 }); 1445 1446}); 1447 1448 1449/** 1450 * JS functions: 1451 */ 1452function dropdownToggle(e, t) { 1453 (e.onmouseenter = function (e) { 1454 e.target.classList.toggle('active', true), t.classList.toggle('active', true); 1455 }), 1456 (t.onmouseenter = function (t) { 1457 t.target.classList.toggle('active', true), e.classList.toggle('active', true); 1458 }), 1459 (e.onmouseleave = function (e) { 1460 e.target.classList.toggle('active', false), t.classList.toggle('active', false); 1461 }), 1462 (t.onmouseleave = function (t) { 1463 t.target.classList.toggle('active', false), e.classList.toggle('active', false); 1464 }); 1465} 1466 1467/** 1468 * Main menu open/close: 1469 */ 1470dropdownToggle(header_catalog_btn, header_catalog); 1471 1472header_mobmenu_btn.onclick = function () { 1473 header_layout.classList.toggle('active', true); 1474 header_mobmenu.classList.toggle('active', true); 1475}; 1476header_layout.onclick = function (e) { 1477 e.target.classList.toggle('active', false), header_mobmenu.classList.toggle('active', false); 1478}; 1479 1480jQuery(function ($) { 1481 let mask; 1482 if (appopt.exchange_rate_url === 'by') { 1483 mask = '+375(99) 999-99-99'; 1484 } else { 1485 mask = '+7(999) 999-99-99'; 1486 } 1487 $('input[type=\'tel\']').mask(mask); 1488 $('input[name=\'phone\']').mask(mask); 1489 $('#billing_phone').mask(mask); 1490 $('.qty').mask('99'); 1491}); 1492 1493jQuery(function ($) { 1494 $('input[name="quantity"]').on('input', function () { 1495 var max = parseInt($(this).attr('max')); 1496 var val = parseInt($(this).val()); 1497 if (val > max) { 1498 $('.qty').mask('99'); 1499 } 1500 }); 1501}); 1502 1503jQuery(function ($) { 1504 $('.nojq').on('click', '.start__reindex-product', function () { 1505 let $btn = $(this).children('div'), 1506 url = '/wp-admin/admin-ajax.php?action=', 1507 nameBtn = $btn.text(); 1508 1509 $.ajax({ 1510 method: 'POST', 1511 async: false, 1512 cache: false, 1513 processData: false, 1514 url: url + 'get__ProductsIds', 1515 success: function (data) { 1516 data = JSON.parse(data); 1517 let startIndexProducts = prompt('ÐведиÑе ÑÑаÑÑовÑй Ð¸Ð½Ð´ÐµÐºÑ ÑоваÑа', '1'); 1518 1519 if (startIndexProducts == null) { 1520 startIndexProducts = 1; 1521 } 1522 1523 console.log('ÐндекÑаÑÐ¸Ñ Ð½Ð°ÑинаеÑÑÑ Ñ ' + startIndexProducts); 1524 1525 data.PRODUCTS_ID.forEach((productID, index, productList) => { 1526 if ((index + 1) >= startIndexProducts) { 1527 upload__IndexProducts(productID, index, productList, $btn, url); 1528 } 1529 }); 1530 } 1531 }).done(function (data) { 1532 data = JSON.parse(data); 1533 $btn.text(nameBtn); 1534 alert('ÐндекÑаÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑена. ' + data.COUNT + ' / ' + data.COUNT); 1535 }); 1536 }); 1537 1538 function upload__IndexProducts(productID, index, productList, $btn, url) { 1539 try { 1540 $.ajax({ 1541 method: 'POST', 1542 async: false, 1543 cache: false, 1544 processData: false, 1545 url: url + 'takeIndexProducts&post_id=' + productID, 1546 }).done(function (result) { 1547 console.log(result); 1548 $btn.text('ÐавеÑÑено: ' + (index + 1) + ' / ' + productList.length); 1549 }); 1550 } catch (e) { 1551 console.log('Bad request. Trying again.'); 1552 upload__IndexProducts(productID, index, productList, $btn, url); 1553 } 1554 } 1555 1556 jQuery(document).ready(function($) { 1557 if ($('li.facet-wrapper-slider').length > 0) { 1558 $('li.facet-wrapper-slider').each(function() { 1559 var labelText = $(this).find('.facetwp-slider-label').text().trim(); 1560 1561 if (labelText === '0 Ñ.') { 1562 $(this).hide(); 1563 } 1564 }); 1565 } 1566 }); 1567 1568 jQuery(document).ready(function($) { 1569 // Replace all occurrences of "Reset" with "СбÑоÑ" 1570 $('input[type="button"][value="Reset"]').val('СбÑоÑ'); 1571 1572 // ÐÑли еÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки загÑÑжаемÑе ÑлеменÑÑ, можно иÑполÑзоваÑÑ MutationObserver 1573 const observer = new MutationObserver(function(mutations) { 1574 mutations.forEach(function(mutation) { 1575 if (mutation.addedNodes.length) { 1576 $('input[type="button"][value="Reset"]').val('СбÑоÑ'); 1577 } 1578 }); 1579 }); 1580 1581 observer.observe(document.body, { 1582 childList: true, 1583 subtree: true 1584 }); 1585 }); 1586 1587 $(document).on('facetwp-loaded', function() { 1588 $('.qty').mask('99'); 1589 }); 1590 1591 $(document).on('click', '.woocommerce-cart-form .remove', function(e) { 1592 const $row = $(this).closest('.cart_table__row'); 1593
1594 const qtyInput = $row.find('.qty').first(); 1595 const qtyValue = parseInt(qtyInput.val() || qtyInput.attr('value'), 10); 1596 1597 const removeCount = isNaN(qtyValue) ? 1 : qtyValue; 1598 1599 $(document.body).one('updated_cart_totals', function() { 1600 const $countEl = $('.header__cart-count.count'); 1601 const currentCount = parseInt($countEl.text(), 10); 1602 1603 if (!isNaN(currentCount) && currentCount >= removeCount) { 1604 $countEl.text(currentCount - removeCount); 1605 } else if (!isNaN(currentCount)) { 1606 $countEl.text(0); 1607 } 1608 }); 1609 }); 1610 1611 /** 1612 * СкÑÐ¸Ð¿Ñ Ð²ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ Ð²ÑÑоÑÑ ÐºÐ°ÑÑоÑек ÑоваÑов по макÑималÑной в каждом блоке 1613 * @param blockSelector 1614 * @param elementSelector 1615 */ 1616 function setEqualHeightsInBlock(blockSelector, elementSelector) { 1617 let maxHeight = 0; 1618 1619 $(blockSelector + ' ' + elementSelector).css('height', 'auto'); 1620 1621 $(blockSelector + ' ' + elementSelector).each(function() { 1622 const height = $(this).outerHeight(); 1623 if (height > maxHeight) { 1624 maxHeight = height; 1625 } 1626 }); 1627 1628 $(blockSelector + ' ' + elementSelector).height(maxHeight); 1629 } 1630 1631 function updateHeights() { 1632 setEqualHeightsInBlock('.related.products', '.product-card'); 1633 setEqualHeightsInBlock('#slider_viewed', '.product-card'); 1634 setEqualHeightsInBlock('.soput.products', '.product-card'); 1635 setEqualHeightsInBlock('#slider_similar', '.product-card'); 1636 } 1637 1638 $(document).ready(function() { 1639 updateHeights(); 1640 }); 1641 1642 $(window).on('resize', function() { 1643 updateHeights(); 1644 }); 1645 1646 /** 1647 * РазблокиÑоваÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ "ÐбновиÑÑ ÐºÐ¾ÑзинÑ" пÑи изменении колиÑеÑÑва ÑоваÑа 1648 * 1649 * ÐÑи изменении знаÑÐµÐ½Ð¸Ñ Ð² инпÑÑе колиÑеÑÑва ÑоваÑа (.quantity .qty), 1650 * кнопка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾ÑÐ·Ð¸Ð½Ñ (button[name="update_cart"]) ÑÑановиÑÑÑ Ð°ÐºÑивной: 1651 * - ÑдалÑеÑÑÑ Ð°ÑÑибÑÑ disabled, 1652 * - обновлÑеÑÑÑ aria-disabled Ð´Ð»Ñ Ð´Ð¾ÑÑÑпноÑÑи. 1653 */ 1654 $(document).ready(function() { 1655 const $updateButton = $('button[name="update_cart"]'); 1656 1657 let debounceTimer; 1658 $('.quantity .qty').on('input change', function() { 1659 clearTimeout(debounceTimer); 1660 debounceTimer = setTimeout(() => { 1661 $updateButton.prop('disabled', false).attr('aria-disabled', 'false'); 1662 }, 200); 1663 }); 1664 }); 1665 1666 /** 1667 * ÐоÑле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾ÑÐ·Ð¸Ð½Ñ (ÑобÑÑие 'updated_cart_totals'), 1668 * оÑпÑавлÑеÑÑÑ AJAX запÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ колиÑеÑÑва ÑоваÑов в коÑзине. 1669 * ÐаÑем обновлÑеÑÑÑ ÑÑеÑÑик в Ñапке ÑайÑа: 1670 * - еÑли колиÑеÑÑво > 99, показÑваем "99+" Ñ Ð¼ÐµÐ»ÐºÐ¸Ð¼ плÑÑом, 1671 * - инаÑе показÑваем ÑоÑное ÑиÑло. 1672 * Ð ÑлÑÑае оÑибки вÑводим оÑÐ¸Ð±ÐºÑ Ð² конÑолÑ. 1673 */ 1674 jQuery(function($) { 1675 const $cartCount = $('span.header__cart-count.count'); 1676 const $body = $(document.body); 1677 1678 $body.on('updated_cart_totals', function() { 1679 setTimeout(() => { 1680 $.ajax({ 1681 url: '/wp-admin/admin-ajax.php', 1682 method: 'POST', 1683 data: { action: 'update_cart_count' }, 1684 success: function(response) { 1685 if (response.success) { 1686 const cartCount = response.data; 1687 const displayCount = cartCount > 99 ? '99<small>+</small>' : cartCount; 1688 $cartCount.html(displayCount); 1689 } else { 1690 console.warn('ÐÑибка в оÑвеÑе ÑеÑвеÑа:', response); 1691 } 1692 }, 1693 error: function(jqXHR, textStatus, errorThrown) { 1694 console.error('AJAX Error:', textStatus, errorThrown); 1695 } 1696 }); 1697 }, 300); 1698 }); 1699 1700 // Tooltip 1701 1702 const $tooltip = $('<div class="tooltip-text"></div>').appendTo('body'); 1703 let isVisible = false;
1704 1705 function hideTooltip() { 1706 $tooltip.hide(); 1707 isVisible = false; 1708 } 1709 1710 $('.table-head-tooltip').on('click', function(e) { 1711 e.stopPropagation(); 1712 if ($(window).width() >= 700) return; 1713 1714 const $el = $(this); 1715 const tooltipText = $el.data('tooltip'); 1716 1717 if (!tooltipText) return; 1718 1719 if (isVisible) { 1720 hideTooltip(); 1721 } else { 1722 const offset = $el.offset(); 1723 $tooltip 1724 .text(tooltipText) 1725 .css({ 1726 top: offset.top - $tooltip.outerHeight() - 8, 1727 left: offset.left + $el.outerWidth() / 2 - $tooltip.outerWidth() / 2 1728 }) 1729 .show(); 1730 isVisible = true; 1731 1732 setTimeout(hideTooltip, 3000); 1733 } 1734 }); 1735 1736 $(document).on('click', function() { 1737 if (isVisible) hideTooltip(); 1738 }); 1739 1740 }); 1741 1742 /** 1743 * ÐниÑиализаÑÐ¸Ñ Ð³Ð°Ð»ÐµÑеи пÑодÑкÑа Ñ Ð¸ÑполÑзованием Slick Slider и Fancybox. 1744 * 1745 * СкÑÐ¸Ð¿Ñ ÑÐ¸Ð½Ñ ÑонизиÑÑÐµÑ Ð¾Ñновной ÑÐ»Ð°Ð¹Ð´ÐµÑ Ð¸Ð·Ð¾Ð±Ñажений WooCommerce-пÑодÑкÑа 1746 * Ñ Ð¼Ð¸Ð½Ð¸Ð°ÑÑÑами (thumbnails) и Fancybox. 1747 * 1748 * ФÑнкÑионалÑноÑÑÑ: 1749 * - ÐÑновной ÑÐ»Ð°Ð¹Ð´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð¾Ð´Ð½Ð¾ изобÑажение пÑодÑкÑа. 1750 * - ÐиниаÑÑÑнÑй ÑÐ»Ð°Ð¹Ð´ÐµÑ ÑÐ¸Ð½Ñ ÑонизиÑÑеÑÑÑ Ñ Ð¾ÑновнÑм. 1751 * - Fancybox оÑкÑÑÐ²Ð°ÐµÑ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² модалÑном окне Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой: 1752 * ÑвелиÑÐµÐ½Ð¸Ñ (zoom), пÑедпÑоÑмоÑÑа (thumbs), и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñами. 1753 * - ÐÑи закÑÑÑии Fancybox ÑÐ»Ð°Ð¹Ð´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ Ðº ÑекÑÑÐµÐ¼Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ. 1754 * 1755 * ÐавиÑимоÑÑи: 1756 * - jQuery 1757 * - Slick Slider 1758 * - Fancybox v3.5.7 1759 * 1760 * @example 1761 * HTML-ÑÑÑÑкÑÑÑа: 1762 * <div class="product-gallery" id="product-gallery-123"> 1763 * <div class="product-gallery__slider">...</div> 1764 * <button class="product-gallery__prev"></button> 1765 * <button class="product-gallery__next"></button> 1766 * <div class="product-gallery__nav">...</div> 1767 * </div> 1768 */ 1769 $(document).ready(function() { 1770 const $galleries = $('.product-gallery'); 1771 if (!$galleries.length) return; 1772 1773 $galleries.each(function() { 1774 const $gallery = $(this); 1775 const $slider = $gallery.find('.product-gallery__slider'); 1776 const $thumbs = $gallery.find('.product-gallery__nav'); 1777 const slidesCount = $slider.children().length; 1778 const galleryId = $gallery.attr('id') || ''; 1779 1780 // ÐниÑиализаÑÐ¸Ñ Slick, еÑли изобÑажений болÑÑе одного 1781 if (slidesCount > 1) { 1782 const totalThumbs = $thumbs.children('div').length; 1783 const slidesToShow = Math.min(totalThumbs, 6); 1784 1785 // ÐÑновной ÑÐ»Ð°Ð¹Ð´ÐµÑ 1786 $slider.slick({ 1787 slidesToShow: 1, 1788 slidesToScroll: 1, 1789 arrows: true, 1790 asNavFor: '#' + galleryId + ' .product-gallery__nav', 1791 adaptiveHeight: false, 1792 infinite: false, 1793 prevArrow: $gallery.find('.product-gallery__prev'), 1794 nextArrow: $gallery.find('.product-gallery__next') 1795 }); 1796 1797 // Ð¡Ð»Ð°Ð¹Ð´ÐµÑ Ð¼Ð¸Ð½Ð¸Ð°ÑÑÑ 1798 if (totalThumbs > 0) { 1799 const slidesToScroll = totalThumbs === 1 ? 1 : totalThumbs === 2 ? 2 : totalThumbs > 6 ? 1 : slidesToShow; 1800 1801 $thumbs.slick({ 1802 slidesToShow: slidesToShow, 1803 slidesToScroll: slidesToScroll, 1804 asNavFor: '#' + galleryId + ' .product-gallery__slider', 1805 focusOnSelect: true,
1806 arrows: false, 1807 infinite: false, 1808 variableWidth: false, 1809 adaptiveHeight: true, 1810 responsive: [ 1811 { breakpoint: 768, settings: { slidesToShow: Math.min(slidesToShow, 3), slidesToScroll: 1 } }, 1812 { breakpoint: 480, settings: { slidesToShow: Math.min(slidesToShow, 2), slidesToScroll: 1 } } 1813 ] 1814 }); 1815 } 1816 } else { 1817 // ÐÑли ÑолÑко одно изобÑажение â ÑкÑÑваем ÑÑÑелки 1818 $gallery.find('.product-gallery__prev, .product-gallery__next').hide(); 1819 } 1820 1821 // Fancybox: оÑкÑÑÑие изобÑажений в модалÑном окне 1822 const $links = $slider.find('a[data-fancybox-trigger]'); 1823 if (typeof $.fancybox === 'undefined' || !$links.length) return; 1824 1825 $links.on('click', function(e) { 1826 e.preventDefault(); 1827 1828 const $clicked = $(this).closest('.slick-slide'); 1829 const startIndex = $clicked.data('slick-index') || 0; 1830 1831 // ÐодгоÑавливаем маÑÑив изобÑажений Ð´Ð»Ñ Fancybox 1832 const items = $links.map(function() { 1833 const $link = $(this); 1834 const src = $link.attr('href'); 1835 const caption = $link.find('img').attr('alt') || ''; 1836 return { 1837 src: src, 1838 opts: { 1839 caption: caption, 1840 thumb: $link.find('img').attr('src') 1841 } 1842 }; 1843 }).get(); 1844 1845 // ÐниÑиализаÑÐ¸Ñ Fancybox Ñ ÑÐ¸Ð½Ñ ÑонизаÑией Ñо ÑлайдеÑом 1846 $.fancybox.open(items, { 1847 loop: false, 1848 animationEffect: 'fade', 1849 transitionEffect: 'slide', 1850 buttons: ['zoom', 'slideShow', 'thumbs', 'close'], 1851 clickContent: function(current, event) { 1852 return current.type === 'image' ? 'zoom' : false; 1853 }, 1854 wheel: false, 1855 animationDuration: 300, 1856 transitionDuration: 300, 1857 afterShow: function(instance, current) { 1858 const currentIndex = current.index; 1859 if ($slider.hasClass('slick-initialized')) { 1860 $slider.slick('slickGoTo', currentIndex, false); 1861 } 1862 }, 1863 afterClose: function(instance, current) { 1864 if (current && $slider.hasClass('slick-initialized')) { 1865 $slider.slick('slickGoTo', current.index, false); 1866 } 1867 } 1868 }, startIndex); 1869 }); 1870 }); 1871 }); 1872 1873 /** 1874 * ÐзменÑÐµÑ id, name и аÑÑибÑÑ for Ñ ÑекбокÑа ÑоглаÑÐ¸Ñ 1875 * внÑÑÑи ÑоÑÐ¼Ñ #question_form_wrapper. 1876 * 1877 * ÐенÑеÑ: 1878 * - accept-person-data -> question-accept-person-data 1879 */ 1880 $(document).ready(function() { 1881 $('#question_form_wrapper input#accept-person-data') 1882 .attr('id', 'question-accept-person-data') 1883 .attr('name', 'question-accept-person-data'); 1884 1885 $('#question_form_wrapper label[for="accept-person-data"]') 1886 .attr('for', 'question-accept-person-data'); 1887 }); 1888 1889 /** 1890 * ÐÑÑавнивание вÑÑоÑÑ ÐºÐ°ÑÑоÑек ÑоваÑов внÑÑÑи #slider_hits_category. 1891 * 1892 * СкÑÐ¸Ð¿Ñ Ð¿ÑÐ¾Ñ Ð¾Ð´Ð¸Ñ Ð¿Ð¾ вÑем ÑлеменÑам .product-card, опÑеделÑÐµÑ Ð¼Ð°ÐºÑималÑнÑÑ 1893 * вÑÑоÑÑ Ð¸ ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐµÑ Ð²Ñем каÑÑоÑкам Ð´Ð»Ñ ÐµÐ´Ð¸Ð½Ð¾Ð¾Ð±Ñазного оÑобÑажениÑ. 1894 * 1895 * @selector #slider_hits_category .product-card ЦелевÑе каÑÑоÑки ÑоваÑов 1896 * @event document.ready ÐÑполнÑеÑÑÑ Ð¿Ð¾Ñле полной загÑÑзки DOM 1897 */ 1898 $(document).ready(function() { 1899 1900 /** @var {number} maxCardHeight ÐакÑималÑÐ½Ð°Ñ Ð¾Ð±Ð½Ð°ÑÑÐ¶ÐµÐ½Ð½Ð°Ñ Ð²ÑÑоÑа каÑÑоÑки */ 1901 let maxCardHeight = 0; 1902 1903 /** @var {jQuery} $cards ÐоллекÑÐ¸Ñ ÐºÐ°ÑÑоÑек ÑоваÑов */ 1904 const $cards = $('#slider_hits_category .product-card'); 1905 1906 /** 1907 * ÐÑÐ¾Ñ Ð¾Ð´ по каждой каÑÑоÑке Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑималÑной вÑÑоÑÑ. 1908 * 1909 * @callback checkCardHeight 1910 * @param {HTMLElement} this ТекÑÑий ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÐºÐ°ÑÑоÑки 1911 */ 1912 $cards.each(function() { 1913 /** @var {number} currentCardHeight ÐÑÑоÑа ÑекÑÑей каÑÑоÑки */ 1914 const currentCardHeight = $(this).outerHeight(); 1915 1916 if (currentCardHeight > maxCardHeight) { 1917 maxCardHeight = currentCardHeight; 1918 } 1919 }); 1920 1921 /** 1922 * ÐÑименение макÑималÑной вÑÑоÑÑ ÐºÐ¾ вÑем каÑÑоÑкам. 1923 * 1924 * @action applyMaxHeight 1925 */ 1926 $cards.css('height', maxCardHeight); 1927 1928 }); 1929}); 1930 1931 1932if (jQuery('.compare-page').length) { 1933 window.jQuery = window.$ = jQuery; 1934 (function ($) { 1935 var App = { 1936 apphlp: 0, 1937 page: '', 1938 search_suggest_method:'', search_request_method:'', 1939 1940 setSession: (key, value) => { 1941 sessionStorage.setItem(key, value); 1942 }, 1943 1944 getSession: (key) => { 1945 return sessionStorage.getItem(key); 1946 }, 1947 1948 clearCompareProducts: () => { 1949 var $length = $('.compras_blok_parem .compras_char').length, 1950 $length_prod = $('.compras_blok_poduct').length, 1951 $count = 3; 1952 1953 while ($length) { 1954 var $compare_products = $('.compras_blok_poduct .compras_char:nth-child(' + $count + ')'); 1955 var $compare_params = $('.compras_blok_parem .compras_char:nth-child(' + $count + ')'); 1956 1957 var $key = 0; 1958 $compare_products.each(function () {
1959 var $name = $(this).text(), 1960 $name_trim = $name.replace(/\s+/g, ' ').trim(); 1961 if ($name_trim == '-') { 1962 $key++; 1963 } 1964 }); 1965 1966 if ($key == $length_prod) { 1967 $compare_products.css('display', 'none'); 1968 $compare_params.css('display', 'none'); 1969 } 1970 $count++; 1971 $length--; 1972 } 1973 }, 1974 1975 initGpoCompare: () => { 1976 App.apphlp.initCompare( { 1977 page: App.page, 1978 cookie: 'br_products_compare', 1979 target: '.i-product, .adv-product', 1980 target_btn: '.product-card__block_nav_comparison', 1981 target_lnk: '.compare-link', 1982 clrear_all: '.compare-products__clear', 1983 target_qty: '.count', 1984 target_sticky: '.block_button_srav', 1985 } ); 1986 }, 1987 1988 initCookie: () => { 1989 jQuery(document).ready(function($) { 1990 if (!getCookie('cookies_accepted')) { 1991 setTimeout(function() { 1992 $('.cookies-modal:not(.cookies-modal--options)').fadeIn(); 1993 }, 2000); 1994 } 1995 1996 $('.cookies-button__accept').on('click', function() { 1997 setCookie('cookies_accepted', 'true', 365); 1998 $('.cookies-modal').fadeOut(); 1999 }); 2000 2001 $('.cookies-button__cancel').on('click', function() { 2002 setCookie('cookies_accepted', 'false', 365); 2003 $('.cookies-modal:not(.cookies-modal--options)').fadeOut(); 2004 }); 2005 2006 $('.cookies-button__options').on('click', function() { 2007 $('.cookies-modal:not(.cookies-modal--options)').fadeOut(); 2008 $('.cookies-modal--options').fadeIn(); 2009 }); 2010 2011 $('.cookies-button__back').on('click', function() { 2012 $('.cookies-modal:not(.cookies-modal--options)').fadeIn(); 2013 $('.cookies-modal--options').fadeOut(); 2014 }); 2015 2016 function setCookie(name, value, days) { 2017 let expires = ''; 2018 if (days) { 2019 const date = new Date(); 2020 date.setTime(date.getTime() + (days*24*60*60*1000)); 2021 expires = '; expires=' + date.toUTCString(); 2022 } 2023 document.cookie = name + '=' + (value || '') + expires + '; path=/'; 2024 } 2025 function getCookie(name) { 2026 const nameEQ = name + '='; 2027 const ca = document.cookie.split(';'); 2028 for(let i=0; i < ca.length; i++) { 2029 let c = ca[i]; 2030 while (c.charAt(0)===' ') c = c.substring(1,c.length); 2031 if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length); 2032 } 2033 return null; 2034 } 2035 }); 2036 }, 2037 2038 init: () => { 2039 App.page = new (eval(pageopt.page))(App); 2040 App.page.Init($); 2041 2042 App.apphlp = AppHlp.init(); 2043 2044 App.apphlp.initCompare({ 2045 page: App.page, 2046 cookie: 'br_products_compare', 2047 target: '.i-product', 2048 target_btn: '.main_page_slid_block_nav_comparison', 2049 target_lnk: '.target_sravnenie', 2050 target_qty: '.block_button_srav_count', 2051 clrear_all: '.compare-products__clear', 2052 target_sticky: '.block_button_srav', 2053 tooltipTouch: { toggle: 'on' , off: 'Ðз ÑÑавнениÑ', on: 'Ð ÑÑавнение' }, 2054 tooltipMouse: { toggle: 'on' , off: 'Ð ÑÑавнение' , on: 'Ð ÑÑавнении' } 2055 }); 2056 2057 App.apphlp.updatePage(); 2058 2059 App.clearCompareProducts(); 2060 App.initGpoCompare(); 2061 App.initCookie(); 2062 }, 2063 }; 2064 2065 window.App = App; 2066 2067 $(document).ready(() => { 2068 App.init(); 2069 }); 2070 2071 })(jQuery); 2072} 2073
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.