1jQuery(function($){ 2 "use strict"; 3 var on_touch = !$('body').hasClass('ts_desktop'); 4 5 setTimeout(function(){ 6 $('.footer-container.loading').removeClass('loading'); 7 $('.ts-custom-block-content').removeClass('hidden'); 8 }, 10); 9 10 /** CSS Global scrollbarWidth Variable **/ 11 if( typeof $.position != 'undefined' && typeof $.position.scrollbarWidth != 'undefined' ){ 12 document.documentElement.style.setProperty('--scrollbarWidth',$.position.scrollbarWidth() + 'px'); 13 } 14 15 /** Middle Navigation **/ 16 $(window).on('ts_slider_middle_navigation_position', function(e, swiper){ 17 if( swiper.parents('.ts-slider:not(.ts-product).middle-thumbnail.rows-1').length || swiper.parents('.ts-slider.ts-product-category-wrapper').length ){ 18 var thumbnail = swiper.find('.swiper-slide-active').first().find('.product-wrapper .thumbnail-wrapper, .product-wrapper > a, .article-content .thumbnail-content > a.thumbnail, .team-content > .image-thumbnail'); 19 var top = thumbnail.length ? thumbnail.height() / 2 : 0; 20 if( top ){ 21 swiper.find('.swiper-button-prev, .swiper-button-next').css('top', top); 22 } 23 } 24 }); 25 26 /* [wrapper selector, slider selector, slider options, extra settings] */ 27 var carousel_data = [ 28 ['.single-product .related .products, .single-product .upsells .products, .woocommerce .cross-sells .products', null, null, typeof merto_params != 'undefined' ? merto_params.slider_options : null] 29 ,['.single-post .related-posts .blogs', '.content-wrapper .blogs', {breakpoints:{0: { slidesPerView: 1 }, 600: { slidesPerView: 2 }, 900: { slidesPerView: 3 }, 1200: { slidesPerView: 4 }}}, typeof merto_params != 'undefined' ? merto_params.slider_options : null] 30 ,['.single-post figure.gallery, .list-posts .post-item .gallery figure, .ts-blogs-widget .thumbnail.gallery figure', null, {simulateTouch: false, effect: 'fade', fadeEffect: {crossFade: true}, breakpoints:{0:{slidesPerView:1}}}, {show_dots: true, auto_play: true}] 31 ]; 32 33 $.each(carousel_data, function( i, data ){ 34 $(data[0]).each(function( index ){ 35 var element = $(this); 36 if( typeof data[1] != 'undefined' && data[1] != null ){ 37 var swiper = element.find(data[1]); 38 } 39 else{ 40 var swiper = element; 41 } 42 43 if( swiper.find('> *').length <= 1 ){ 44 element.removeClass('loading'); 45 swiper.parent().removeClass('loading'); 46 return; 47 } 48 49 var unique_class = 'swiper-theme-' + Math.floor(Math.random() * 10000) + '-' + index; 50 51 swiper.addClass('swiper ' + unique_class); 52 swiper.find('> *').addClass('swiper-slide'); 53 swiper.wrapInner('<div class="swiper-wrapper"></div>'); 54 55 if( $('body').hasClass('rtl') ){ 56 swiper.attr('dir', 'rtl'); 57 } 58 59 var slider_options = { 60 loop: true 61 ,spaceBetween: 0 62 ,breakpointsBase: 'container' 63 ,breakpoints:{0:{slidesPerView:1},260:{slidesPerView:2},540:{slidesPerView:3},760:{slidesPerView:4},1000:{slidesPerView:5}} 64 ,on: { 65 init: function(){ 66 element.removeClass('loading'); 67 swiper.parent().removeClass('loading'); 68 $(window).trigger('ts_slider_middle_navigation_position', [swiper]); 69 } 70 ,resize: function(){ 71 $(window).trigger('ts_slider_middle_navigation_position', [swiper]); 72 } 73 } 74 }; 75 76 if( typeof data[2] != 'undefined' && data[2] != null ){ 77 $.extend( slider_options, data[2] ); 78 } 79 80 if( typeof data[3] != 'undefined' && data[3] != null ){ 81 var extra_settings = data[3]; 82 83 if( typeof extra_settings.loop != 'undefined' ){ 84 slider_options.loop = extra_settings.loop; 85 } 86 87 if( typeof extra_settings.show_nav != 'undefined' && extra_settings.show_nav ){ 88 swiper.append('<div class="swiper-button-prev"></div><div class="swiper-button-next"></div>'); 89 90 slider_options.navigation = { 91 prevEl: '.swiper-button-prev' 92 ,nextEl: '.swiper-button-next' 93 }; 94 } 95 96 if( typeof extra_settings.show_dots != 'undefined' && extra_settings.show_dots ){ 97 swiper.append('<div class="swiper-pagination"></div>'); 98 99 slider_options.pagination = { 100 el: '.swiper-pagination' 101 , clickable: true 102 }; 103 } 104 105 if( typeof extra_settings.auto_play != 'undefined' && extra_settings.auto_play ){ 106 slider_options.autoplay = { 107 delay: 5000 108 ,disableOnInteraction: false 109 ,pauseOnMouseEnter: true 110 }; 111 } 112 } 113 114 new Swiper( '.' + unique_class, slider_options ); 115 }); 116 }); 117 118 /** Mega menu **/ 119 ts_mega_menu_change_state(); 120 $('.elementor-widget-wp-widget-nav_menu .menu-item-has-children .sub-menu').before('<span class="ts-menu-drop-icon"></span>'); 121 122 /** Menu on IPAD **/ 123 ts_mobile_ipad_menu_handle(); 124 125 /** Sticky Menu **/
126 if( typeof merto_params != 'undefined' && merto_params.sticky_header == 1 ){ 127 ts_sticky_menu(); 128 } 129 130 /** Login Popup **/ 131 $('.ts-tiny-account-wrapper .login').on('click', function(e){ 132 if( $('#ts-login-popup-modal').length && $(window).width() > 768 ){ 133 $('#ts-login-popup-modal').addClass('show'); 134 setTimeout(function(){ 135 $('#ts-login-popup-modal form input:first').trigger('focus'); 136 }, 100); 137 e.preventDefault(); 138 } 139 }); 140 141 /** Store Notice **/ 142 $('.ts-store-notice .close').on('click', function(){ 143 $('.ts-store-notice').slideUp(); 144 if( typeof Cookies != 'undefined' ){ 145 Cookies.set('ts_store_notice', 'hidden', { expires: 1 }); 146 } 147 }); 148 149 /** Vertical Menu **/ 150 $('.vertical-menu-fixed .vertical-menu-heading').on('click', function(){ 151 $('.menu-sticky-wrapper').addClass('active disabled-pointer-event'); 152 setTimeout(function(){ 153 $('.menu-sticky-wrapper').removeClass('disabled-pointer-event'); 154 }, 600); 155 }); 156 $('.menu-sticky-wrapper .overlay').on('click', function(){ 157 $('.menu-sticky-wrapper').removeClass('active'); 158 }); 159 160 /** Menu Overlay **/ 161 if( typeof merto_params != 'undefined' && merto_params.menu_overlay == 1 ){ 162 $('.ts-header .ts-menu .main-menu > ul > li.parent').on('mouseenter', function(){ 163 $('body').addClass('menu-background-overlay'); 164 $('.ts-header > .overlay').css( 'height', $('body').height() ); 165 }).on('mouseleave', function(){ 166 $('body').removeClass('menu-background-overlay'); 167 }); 168 } 169 170 $('.icon-menu-sticky-header .icon').on('click', function(){ 171 if( $(this).hasClass('active') ){ 172 $('header .header-bottom').css('display', ''); 173 }else{ 174 $('header .header-bottom').fadeIn('fast'); 175 } 176 $(this).toggleClass('active'); 177 ts_mega_menu_change_state(); 178 }); 179 180 /** Device - Resize action **/ 181 $(window).on('resize orientationchange', function(){ 182 ts_mega_menu_change_state(); 183 }); 184 185 /* Tab Mobile Menu */ 186 $('.tab-mobile-menu li:not(.close)').on('click', function(){ 187 $('#group-icon-header li.parent, #group-icon-header .ts-menu-drop-icon').removeClass('active'); 188 $('#group-icon-header ul.sub-menu, #group-icon-header .mobile-menu-wrapper').css('overflow', ''); 189 $('#group-icon-header ul.sub-menu').css('z-index', ''); 190 if( $(this).attr('id') == 'main-menu' ){ 191 $('.tab-vertical-menu').css('display', 'none'); 192 $('.tab-menu-mobile').css('display', 'block'); 193 $('#main-menu').addClass('active'); 194 $('#vertical-menu').removeClass('active'); 195 } 196 else if( $(this).attr('id') == 'vertical-menu' ){ 197 $('.tab-menu-mobile').css('display', 'none'); 198 $('.tab-vertical-menu').css('display', 'block'); 199 $('#vertical-menu').addClass('active'); 200 $('#main-menu').removeClass('active'); 201 } 202 $('#group-icon-header .menu-title span').text($(this).text()); 203 }); 204 205 /** To Top button **/ 206 $(window).on('scroll', function(){ 207 if( $(this).scrollTop() > 100 ){ 208 $('#to-top').addClass('on'); 209 }else{ 210 $('#to-top').removeClass('on'); 211 } 212 }); 213 214 $('#to-top .scroll-button').on('click', function(){ 215 $('body,html').animate({ 216 scrollTop: '0px' 217 }, 1000); 218 return false; 219 }); 220 221 /** Quickshop **/ 222 $(document).on('click', 'a.quickshop', function(e){ 223 e.preventDefault(); 224 225 var product_id = $(this).data('product_id'); 226 if( product_id === undefined ){ 227 return; 228 } 229 230 var container = $('#ts-quickshop-modal'); 231 container.addClass('loading'); 232 container.find('.quickshop-content').html(''); 233 $.ajax({ 234 type: 'POST' 235 , url: merto_params.ajax_url 236 , data: { action: 'merto_load_quickshop_content', product_id: product_id, security: merto_params.quickshop_nonce } 237 , success: function(response){ 238 container.find('.quickshop-content').html(response); 239 240 setTimeout(function(){ 241 container.removeClass('loading').addClass('show'); 242 $('body').addClass('opening-quickshop'); 243 }, container.find('.product-type-variable').length ? 500 : 100); 244 245 var $target = container.find('.woocommerce-product-gallery.images'); 246 247 if( typeof $.fn.flexslider == 'function' ){ 248 var options = $.extend({ 249 selector: '.woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image', /* in target */ 250 start: function(){ 251 $target.css('opacity', 1); 252 }, 253 after: function(slider){ 254 quickshop_init_zoom(container.find('.woocommerce-product-gallery__image').eq(slider.currentSlide), $target); 255 } 256 }, merto_params.flexslider); 257 258 $target.flexslider(options); 259 260 container.find('.woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image:eq(0) .wp-post-image').one('load', function(){ 261 var $image = $(this); 262 263 if( $image ){ 264 setTimeout(function(){ 265 var setHeight = $image.closest('.woocommerce-product-gallery__image').height(); 266 var $viewport = $image.closest('.flex-viewport'); 267 268 if( setHeight && $viewport ){ 269 $viewport.height(setHeight); 270 } 271 }, 100); 272 } 273 }).each(function(){ 274 if( this.complete ){ 275 $(this).trigger('load'); 276 } 277 }); 278 } 279 else{ 280 $target.css('opacity', 1); 281 } 282 283 quickshop_init_zoom(container.find('.woocommerce-product-gallery__image').eq(0), $target); 284 285 $target.on('woocommerce_gallery_reset_slide_position', function(){ 286 if( typeof $.fn.flexslider == 'function' ){ 287 $target.flexslider(0); 288 } 289 }); 290 291 $target.on('woocommerce_gallery_init_zoom', function(){ 292 quickshop_init_zoom(container.find('.woocommerce-product-gallery__image').eq(0), $target); 293 }); 294 295 container.find('form.variations_form').wc_variation_form(); 296 container.find('form.variations_form .variations select').change(); 297 $('body').trigger('wc_fragments_loaded'); 298 299 container.find('form.variations_form').on('click', '.reset_variations', function(){ 300 $(this).parents('.variations').find('.ts-product-attribute .option').removeClass('selected'); 301 }); 302 } 303 }); 304 }); 305 306 function quickshop_init_zoom( zoomTarget, $target ){ 307 if( typeof $.fn.zoom != 'function' ){ 308 return; 309 } 310 311 var galleryWidth = $target.width(), zoomEnabled = false;
312 313 $(zoomTarget).each(function(index, target){ 314 var image = $(target).find('img'); 315 316 if( image.attr('data-large_image_width') > galleryWidth ){ 317 zoomEnabled = true; 318 return false; 319 } 320 }); 321 322 /* But only zoom if the img is larger than its container. */ 323 if( zoomEnabled ){ 324 var zoom_options = $.extend({ 325 touch: false 326 }, merto_params.zoom_options); 327 328 if( 'ontouchstart' in document.documentElement ){ 329 zoom_options.on = 'click'; 330 } 331 332 zoomTarget.trigger('zoom.destroy'); 333 zoomTarget.zoom(zoom_options); 334 335 setTimeout(function(){ 336 if( zoomTarget.find(':hover').length ){ 337 zoomTarget.trigger('mouseover'); 338 } 339 }, 100); 340 } 341 } 342 343 $(document).on('click', '.ts-popup-modal .close, .ts-popup-modal .overlay', function(){ 344 $('.ts-popup-modal').removeClass('show'); 345 $('.ts-popup-modal .quickshop-content').html(''); /* prevent conflict with lightbox on single product */ 346 $('body').removeClass('opening-quickshop'); 347 }); 348 349 /*** Color Swatch ***/ 350 $(document).on('click', '.products .product .color-swatch > div', function(){ 351 $(this).siblings().removeClass('active'); 352 $(this).addClass('active'); 353 /* Change thumbnail */ 354 var image_src = $(this).data('thumb'); 355 $(this).closest('.product').find('figure img:first').attr('src', image_src).removeAttr('srcset sizes'); 356 /* Change price */ 357 var term_id = $(this).data('term_id'); 358 var variable_prices = $(this).parent().siblings('.variable-prices'); 359 var price_html = variable_prices.find('[data-term_id="' + term_id + '"]').html(); 360 $(this).closest('.product').find('.meta-wrapper .price').html(price_html).addClass('variation-price'); 361 }); 362 363 /*** Product Stock - Variable Product ***/ 364 function single_variable_product_reset_stock(wrapper){ 365 var stock_html = wrapper.find('.availability').data('original'); 366 var classes = wrapper.find('.availability').data('class'); 367 if( classes == '' ){ 368 classes = 'in-stock'; 369 } 370 wrapper.find('.availability .availability-text').html(stock_html); 371 wrapper.find('.availability').removeClass('in-stock out-of-stock').addClass(classe
371s); 372 } 373 374 $(document).on('found_variation', 'form.variations_form', function(e, variation){ 375 var wrapper = $(this).parents('.summary'); 376 377 setTimeout(function(){ 378 if( wrapper.find('.single_variation .stock').length ){ 379 var stock_html = wrapper.find('.single_variation .stock').html(); 380 var classes = wrapper.find('.single_variation .stock').hasClass('out-of-stock') ? 'out-of-stock' : 'in-stock'; 381 wrapper.find('.availability .availability-text').html(stock_html); 382 wrapper.find('.availability').removeClass('in-stock out-of-stock').addClass(classes); 383 } 384 else{ 385 single_variable_product_reset_stock(wrapper); 386 } 387 }, 310); 388 389 if( typeof variation.discount_number != 'undefined' && variation.discount_number ){ 390 wrapper.find('.ts-discount-number').removeClass('hidden'); 391 wrapper.find('.ts-discount-number .number').html(variation.discount_number); 392 } 393 else{ 394 wrapper.find('.ts-discount-number').addClass('hidden'); 395 } 396 }); 397 398 $(document).on('reset_image', 'form.variations_form', function(){ 399 var wrapper = $(this).parents('.summary'); 400 single_variable_product_reset_stock(wrapper); 401 402 wrapper.find('.ts-discount-number').addClass('hidden'); 403 }); 404 405 /*** Variation attribute ***/ 406 $(document).on('change', '.product form.variations_form .variations select', function(){ 407 var data = $(this).val(); 408 var dataAttr = data.length ? $(this).find('option[value="' + data + '"]').text() : ''; 409 var attributes = $(this).parents('tr'); 410 var html = $('<span class="ts-value"></span>').text(dataAttr); 411 412 attributes.find('> .label .ts-value').remove(); 413 attributes.find('> .label').append(html); 414 }); 415 416 $('.product form.variations_form .variations select').trigger('change'); 417 418 /*** Variation price ***/ 419 $(document).on('found_variation', 'form.variations_form', function(e, variation){ 420 var summary = $(this).parents('.summary'); 421 if( variation.price_html ){ 422 summary.find('.ts-variation-price').html(variation.price_html).removeClass('hidden'); 423 summary.find('p.price').addClass('hidden'); 424 } 425 }); 426 427 $(document).on('reset_image', 'form.variations_form', function(){ 428 var summary = $(this).parents('.summary'); 429 summary.find('p.price').removeClass('hidden'); 430 summary.find('.ts-variation-price').addClass('hidden'); 431 }); 432 433 /*** Hide product attribute if not available ***/ 434 $(document).on('update_variation_values', 'form.variations_form', function(){ 435 if( $(this).find('.ts-product-attribute').length > 0 ){ 436 $(this).find('.ts-product-attribute').each(function(){ 437 var attr = $(this); 438 var values = []; 439 attr.siblings('select').find('option').each(function(){ 440 if( $(this).attr('value') ){ 441 values.push($(this).attr('value')); 442 } 443 }); 444 attr.find('.option').removeClass('hidden'); 445 attr.find('.option').each(function(){ 446 if( $.inArray( $(this).attr('data-value'), values ) == -1 ){ 447 $(this).addClass('hidden'); 448 } 449 }); 450 }); 451 } 452 }); 453 454 /*** Single ajax add to cart ***/ 455 if( typeof merto_params != 'undefined' && merto_params.ajax_add_to_cart == 1 && !$('body').hasClass('woocommerce-cart') ){ 456 $(document).on('submit', '.product:not(.product-type-external) .summary form.cart', function(e){ 457 e.preventDefault(); 458 459 var form = $(this); 460 var product_url = form.attr('action'); 461 var data = form.serialize(); 462 if( !form.hasClass('variations_form') && !form.hasClass('grouped_form') ){ 463 data += '&add-to-cart=' + form.find('[name="add-to-cart"]').val() 464 } 465 form.find('.single_add_to_cart_button').removeClass('added').addClass('loading'); 466 $.post(product_url, data, function(result){ 467 $(document.body).trigger('wc_fragment_refresh'); 468 var message_wrapper = $('#ts-ajax-add-to-cart-message'); 469 var error = ''; 470 result = $('<div>' + result + '</div>'); 471 if( result.find('.woocommerce-error').length ){ /* WooCommerce < 8.5 */ 472 error = result.find('.woocommerce-error li:first').html(); 473 } 474 if( result.find('.woocommerce-notices-wrapper .is-error').length ){ 475 error = result.find('.woocommerce-notices-wrapper .wc-block-components-notice-banner__content:first').html(); 476 } 477 form.find('.single_add_to_cart_button').removeClass('loading').addClass('added'); 478 message_wrapper.removeClass('error'); 479 if( error ){ 480 message_wrapper.addClass('error'); 481 message_wrapper.find('.error-message').html(error); 482 form.find('.single_add_to_cart_button').removeClass('added'); 483 } 484 485 message_wrapper.addClass('show'); 486 setTimeout(function(){ 487 message_wrapper.removeClass('show'); 488 }, 2000); 489 }); 490 }); 491 } 492 493 /*** Buy Now ***/ 494 $(document).on('click', '.ts-buy-now-button', function(e){ 495 e.preventDefault(); 496 var cart_form = $(this).parents('.summary').find('form.cart'); 497 if( cart_form.length ){ 498 if( !$(this).hasClass('disabled') ){ 499 $(document).off('submit', '.product:not(.product-type-external) .summary form.cart'); /* disable ajax add to cart */
500 cart_form.append('<input type="hidden" name="ts_buy_now" value="1" />'); 501 } 502 cart_form.find('.single_add_to_cart_button').trigger('click'); 503 } 504 }); 505 506 $(document).on('found_variation', 'form.variations_form', function(){ 507 $(this).parents('.summary').find('.ts-buy-now-button').removeClass('disabled'); 508 }); 509 510 $(document).on('reset_image', 'form.variations_form', function(){ 511 $(this).parents('.summary').find('.ts-buy-now-button').addClass('disabled'); 512 }); 513 514 /*** Custom Orderby on Product Page ***/ 515 $('form.woocommerce-ordering ul.orderby ul a').on('click', function(e){ 516 e.preventDefault(); 517 if( $(this).hasClass('current') ){ 518 return; 519 } 520 var form = $('form.woocommerce-ordering'); 521 var data = $(this).attr('data-orderby'); 522 form.find('select.orderby').val(data).trigger('change'); 523 }); 524 525 /*** Per page on Product page ***/ 526 $('form.product-per-page-form ul.perpage ul a').on('click', function(e){ 527 e.preventDefault(); 528 529 if( $(this).hasClass('current') ){ 530 return; 531 } 532 var form = $(this).parents('form.product-per-page-form'); 533 var data = $(this).attr('data-perpage'); 534 535 form.find('select.perpage').val(data); 536 form.submit(); 537 }); 538 539 /* Grid/List Toggle */ 540 $('.gridlist-toggle span').on('click', function(){ 541 var style = $(this).data('style'); 542 $(this).addClass('active').siblings().removeClass('active'); 543 $('.woocommerce.main-products').removeClass('grid list').addClass( style ); 544 }); 545 546 /*** Quantity on shop page ***/ 547 $(document).on('change', '.products .product input[name="quantity"]', function(){ 548 var add_to_cart_button = $(this).parents('.product').find('.add_to_cart_button'); 549 var quantity = parseInt($(this).val()); 550 add_to_cart_button.attr('data-quantity', quantity); 551 /* For non ajax */ 552 var href = '?add-to-cart=' + add_to_cart_button.eq(0).attr('data-product_id') + '&quantity=' + quantity; 553 add_to_cart_button.attr('href', href); 554 }); 555 556 /*** Widget toggle ***/ 557 $('.ts-sidebar .widget-title-wrapper .block-control').on('click', function(e){ 558 e.preventDefault(); 559 $(this).toggleClass('active'); 560 $(this).parent().siblings(':not(script)').toggleClass('active'); 561 }); 562 563 /*** Set Top Shop Elements ***/ 564 $(window).on('resize ts_set_top_shop_elements', function(){ 565 var top = 0; 566 top += $('.header-sticky.is-sticky').length ? $('.header-sticky.is-sticky').height() : 0; 567 top += $('#wpadminbar').length ? $('#wpadminbar').height() : 0; 568 569 if( $('.before-loop-wrapper').length ){ 570 $('.before-loop-wrapper').css( 'top', $(window).width() < 768 ? top : '' ); 571 } 572 573 if( $('.collapse-scroll-sidebar .ts-sidebar > aside').length ){ 574 top += 30; 575 $('.ts-sidebar > aside').css( 'top', top ); 576 } 577 578 /* Product Detail - Summary Scrolling */ 579 if( $('div.product.summary-scrolling div.summary, div.product.gallery-layout-grid div.summary').length ){ 580 top += 30; 581 $('div.product div.summary').css( 'top', top ); 582 } 583 }); 584 585 $(window).trigger('ts_set_top_shop_elements'); 586 587 /* Image Lazy Load */ 588 function lazyload_slider_middle_navigation_position( img ){ 589 if( img.parents('.swiper').length && !img.parents('.swiper.lazy-recalc-nav-pos').length && img.parents('.swiper-slide-active').length ){ 590 img.parents('.swiper').addClass('lazy-recalc-nav-pos'); 591 $(window).trigger('ts_slider_middle_navigation_position', [img.parents('.swiper')]); 592 img.on('load', function(){ /* recalc if image is not loaded */ 593 $(window).trigger('ts_slider_middle_navigation_position', [img.parents('.swiper')]); 594 }); 595 } 596 } 597 598 if( $('img.ts-lazy-load').length ){ 599 $(window).on('scroll ts_lazy_load', function(){ 600 var scroll_top = $(this).scrollTop(); 601 var window_height = $(this).height(); 602 $('img.ts-lazy-load:not(.loaded)').each(function(){ 603 if( $(this).data('src') && $(this).offset().top < scroll_top + window_height + 900 ){ 604 $(this).attr('src', $(this).data('src')).addClass('loaded'); 605 lazyload_slider_middle_navigation_position( $(this) ); 606 } 607 }); 608 }); 609 610 setTimeout(function(){ 611 if( $('img.ts-lazy-load:first').offset().top < $(window).scrollTop() + $(window).height() + 200 ){ 612 $(window).trigger('ts_lazy_load'); 613 } 614 }, 50); 615 } 616 617 /* WooCommerce Quantity Increment */ 618 $(document).on('click', '.plus, .minus', function(){ 619 var $qty = $(this).closest('.quantity').find('.qty'), 620 currentVal = parseFloat($qty.val()), 621 max = parseFloat($qty.attr('max')), 622 min = parseFloat($qty.attr('min')), 623 step = $qty.attr('step'); 624 625 if( !currentVal || currentVal === '' || currentVal === 'NaN' ) currentVal = 0; 626 if( max === '' || max === 'NaN' ) max = ''; 627 if( min === '' || min === 'NaN' ) min = 0; 628 if( step === 'any' || step === '' || step === undefined || parseFloat(step) === 'NaN' ) step
628= 1; 629 630 if( $(this).is('.plus') ){ 631 if( max && ( max == currentVal || currentVal > max ) ){ 632 $qty.val(max); 633 }else{ 634 $qty.val(currentVal + parseFloat(step)); 635 } 636 }else{ 637 if( min && ( min == currentVal || currentVal < min ) ){ 638 $qty.val(min); 639 }else if( currentVal > 0 ){ 640 $qty.val(currentVal - parseFloat(step)); 641 } 642 } 643 644 $qty.trigger('change'); 645 }); 646 647 /* Ajax Search */ 648 if( typeof merto_params != 'undefined' && merto_params.ajax_search == 1 ){ 649 ts_ajax_search(); 650 } 651 652 /* Shopping Cart Sidebar */ 653 $(document).on('click', '.search-button .icon, .shopping-cart-wrapper .cart-control', function(e){ 654 $('.ts-floating-sidebar .close').trigger('click'); 655 var is_cart = $(this).is('.cart-control'); 656 if( is_cart ){ 657 if( $('#ts-shopping-cart-sidebar').length ){ 658 e.preventDefault(); 659 $('#ts-shopping-cart-sidebar').addClass('active'); 660 $('body').addClass('floating-sidebar-active'); 661 } 662 } 663 else if( $('#ts-search-sidebar').length ){ 664 $('#ts-search-sidebar').addClass('active'); 665 $('body').addClass('floating-sidebar-active'); 666 setTimeout(function(){ 667 $('#ts-search-sidebar input[name="s"]').trigger('focus'); 668 }, 100); 669 } 670 }); 671 672 $('.ts-floating-sidebar .overlay, .ts-floating-sidebar .close').on('click', function(){ 673 $('.ts-floating-sidebar').removeClass('active'); 674 $('body').removeClass('floating-sidebar-active'); 675 676 $('body').removeClass('menu-mobile-active'); 677 $('.ts-mobile-icon-toggle .icon').removeClass('active'); 678 679 $('.filter-widget-area-button').removeClass('active'); 680 681 $('#main-content').removeClass('show-filter-sidebar'); 682 683 update_filter_area_main_content_height(); 684 }); 685 686 /* Add To Cart Effect */ 687 if( !$('body').hasClass('woocommerce-cart') ){ 688 $(document.body).on('adding_to_cart', function(e, $button, data){ 689 if( wc_add_to_cart_params.cart_redirect_after_add == 'no' ){ 690 if( typeof merto_params != 'undefined' && merto_params.add_to_cart_effect == 'show_popup' && typeof $button != 'undefined' ){ 691 var product_id = $button.attr('data-product_id'); 692 var container = $('#ts-add-to-cart-popup-modal'); 693 container.addClass('adding'); 694 $.ajax({ 695 type: 'POST' 696 , url: merto_params.ajax_url 697 , data: { action: 'merto_load_product_added_to_cart', product_id: product_id, security: merto_params.addtocart_nonce } 698 , success: function(response){ 699 container.find('.add-to-cart-popup-content').html(response); 700 if( container.hasClass('loading') ){ 701 container.removeClass('loading').addClass('show'); 702 } 703 container.removeClass('adding'); 704 } 705 }); 706 } 707 } 708 }); 709 710 $(document.body).on('added_to_cart', function(e, fragments, cart_hash, $button){ 711 /* Show Cart Sidebar */ 712 if( typeof merto_params != 'undefined' && merto_params.show_cart_after_adding == 1 ){ 713 $('.shopping-cart-wrapper .cart-control').trigger('click'); 714 return; 715 } 716 /* Cart Fly Effect */ 717 if( typeof merto_params != 'undefined' && typeof $button != 'undefined' ){ 718 if( merto_params.add_to_cart_effect == 'fly_to_cart' ){ 719 var cart = $('.shopping-cart-wrapper'); 720 if( cart.length == 2 ){ 721 if( $(window).width() > 767 ){ 722 cart = $('.shopping-cart-wrapper.hidden-phone'); 723 } 724 else{ 725 cart = $('.shopping-cart-wrapper.mobile-cart'); 726 } 727 } 728 if( cart.length == 1 ){ 729 var product_img = $button.closest('section.product').find('figure img').eq(0); 730 if( product_img.length == 1 ){ 731 var effect_time = 800; 732 var cart_in_sticky = $('.is-sticky .shopping-cart-wrapper').length; 733 if( cart_in_sticky ){ 734 effect_time = 500; 735 } 736 737 var imgclone_height = product_img.width() ? 150 * product_img.height() / product_img.width() : 150; 738 var imgclone_small_height = product_img.width() ? 60 * product_img.height() / product_img.width() : 60; 739 740 var imgclone = product_img.clone().offset({ top: product_img.offset().top, left: product_img.offset().left }) 741 .css({ 'opacity': '0.6', 'position': 'absolute', 'height': imgclone_height + 'px', 'width': '150px', 'z-index': '99999999' }) 742 .appendTo($('body')) 743 .animate({ 'top': cart.offset().top + cart.height() / 2, 'left': cart.offset().left + cart.width() / 2, 'width': 60, 'height': imgclone_small_height }, effect_time, 'linear'); 744 745 if( !cart_in_sticky ){ 746 $('body,html').animate({ 747 scrollTop: '0px' 748 }, effect_time); 749 } 750 751 imgclone.animate({ 752 'width': 0 753 , 'height': 0 754 }, function(){ 755 $(this).detach() 756 }); 757 } 758 } 759 } 760 if( merto_params.add_to_cart_effect == 'show_popup' ){ 761 var container = $('#ts-add-to-cart-popup-modal'); 762 if( container.hasClass('adding') ){ 763 container.addClass('loading'); 764 } 765 else{ 766 container.addClass('show'); 767 } 768 } 769 } 770 }); 771 } 772
773 /* Show cart after removing item */ 774 $(document.body).on('click', '.shopping-cart-wrapper .remove_from_cart_button', function(){ 775 $(this).parents('.shopping-cart-wrapper').addClass('updating'); 776 }); 777 $(document.body).on('removed_from_cart', function(){ 778 if( $('.shopping-cart-wrapper.updating').length && !$('.shopping-cart-wrapper.updating').is(':hover') ){ 779 $('.shopping-cart-wrapper').removeClass('updating'); 780 } 781 }); 782 783 /* Change cart item quantity */ 784 $(document).on('change', '.ts-tiny-cart-wrapper .qty', function(){ 785 var qty = parseFloat($(this).val()); 786 var max = parseFloat($(this).attr('max')); 787 if( max !== 'NaN' && max < qty ){ 788 qty = max; 789 $(this).val(max); 790 } 791 var cart_item_key = $(this).attr('name').replace('cart[', '').replace('][qty]', ''); 792 $(this).parents('.woocommerce-mini-cart-item').addClass('loading'); 793 $(this).parents('.shopping-cart-wrapper').addClass('updating'); 794 $('.woocommerce-message').remove(); 795 $.ajax({ 796 type: 'POST' 797 , url: merto_params.ajax_url 798 , data: { action: 'merto_update_cart_quantity', qty: qty, cart_item_key: cart_item_key, security: merto_params.update_cart_nonce } 799 , success: function(response){ 800 if( !response ){ 801 return; 802 } 803 $(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash]); 804 if( $('.shopping-cart-wrapper.updating').length && !$('.shopping-cart-wrapper.updating').is(':hover') ){ 805 $('.shopping-cart-wrapper').removeClass('updating'); 806 } 807 } 808 }); 809 }); 810 811 $(document).on('mouseleave', '.shopping-cart-wrapper.updating', function(){ 812 $(this).removeClass('updating'); 813 }); 814 815 /* Filter Widget Area */ 816 var filter_sidebar_interval = 0; 817 function update_filter_area_main_content_height(){ 818 if( !$('#ts-filter-widget-area').length || $('#main-content').hasClass('style-top') ){ 819 return; 820 } 821 822 if( $('#ts-filter-widget-area').hasClass('active') ){ 823 filter_sidebar_interval = setInterval(function(){ 824 $('#main-content').css('min-height', $('#ts-filter-widget-area .filter-widget-area').height() + ( $('.before-loop-wrapper').length ? $('.before-loop-wrapper').outerHeight(true) : 0 ) + 20); 825 }, 1000); 826 } 827 else{ 828 clearInterval(filter_sidebar_interval); 829 $('#main-content').css('min-height', ''); 830 } 831 } 832 833 update_filter_area_main_content_height(); 834 835 $('.filter-widget-area-button a, .filter-widget-area-button + .overlay, .ts-sidebar > .close').on('click', function(){ 836 837 $('#ts-filter-widget-area, .ts-sidebar').toggleClass('active'); 838 $('#main-content').toggleClass('show-filter-sidebar'); 839 $('.filter-widget-area-button').toggleClass('active'); 840 update_filter_area_main_content_height(); 841 842 return false; 843 }); 844 845 /* Product On Sale Checkbox */ 846 $('.product-on-sale-form input[type="checkbox"]').on('change', function(){ 847 $(this).parents('form').submit(); 848 }); 849 850 /* Single Product - Variable Product options */ 851 $(document).on('click', '.variations_form .ts-product-attribute .option a', function(){ 852 var _this = $(this); 853 var val = _this.closest('.option').data('value'); 854 var selector = _this.closest('.ts-product-attribute').siblings('select'); 855 if( selector.length ){ 856 if( selector.find('option[value="' + val + '"]').length ){ 857 selector.val(val).change(); 858 _this.closest('.ts-product-attribute').find('.option').removeClass('selected'); 859 _this.closest('.option').addClass('selected'); 860 } 861 } 862 return false; 863 }); 864 865 $('.variations_form').on('click', '.reset_variations', function(){ 866 $(this).closest('.variations').find('.ts-product-attribute .option').removeClass('selected'); 867 }); 868 869 /** Widget woocommerce nav link */ 870 $(document).on('click', '.woocommerce-widget-layered-nav-list .woocommerce-widget-layered-nav-list__item span.count', function(){ 871 $(this).prev('a')[0].click(); 872 }); 873 874 /** Add placeholder for login form */ 875 $('#ts-login-form #user_login').attr( 'placeholder', merto_params.placeholder_form.usernamePlaceholder ); 876 $('#ts-login-form #user_pass').attr( 'placeholder', merto_params.placeholder_form.passwordPlaceholder ); 877 878}); 879 880/*** Mega menu ***/ 881var ts_mega_menu_timeout = 0; 882function ts_mega_menu_change_state(){ 883 if( Math.max(window.outerWidth, jQuery(window).width()) > 767 ){ 884 885 var padding_left = 0, container_width = 0; 886 var container = jQuery('.header-sticky .container:first'); 887 var container_stretch = jQuery('.header-sticky'); 888 if( !container.length ){ 889 container = jQuery('.header-sticky'); 890 if( !container.length ){ 891 return; 892 } 893 container_width = container.outerWidth(); 894 } 895 else{ 896 container_width = container.width(); 897 padding_left = parseInt(container.css('padding-left')); 898 } 899 var container_offset = container.offset(); 900 901 var container_stretch_width = container_stretch.outerWidth(); 902 var container_stretch_offset = container_stretch.offset(); 903 904 clearTimeout(ts_mega_menu_timeout); 905 906 ts_mega_menu_timeout = setTimeout(function(){ 907 jQuery('.ts-menu nav.main-menu > ul.menu > .ts-megamenu-fullwidth').each(function(index, element){ 908 var current_offset = jQuery(element).offset(); 909 if( jQuery(element).hasClass('ts-megamenu-fullwidth-stretch') ){ 910 var left = current_offset.left - container_stretch_offset.left; 911 jQuery(element).children('ul.sub-menu').css({ 'width': container_stretch_width + 'px', 'left': -left + 'px', 'right': 'auto' }); 912 } 913 else{ 914 var left = current_offset.left - container_offset.left - padding_left; 915 jQuery(element).children('ul.sub-menu').css({ 'width': container_width + 'px', 'left': -left + 'px', 'right': 'auto' }); 916 } 917 }); 918 919 jQuery('.ts-menu nav.main-menu > ul.menu').children('.ts-megamenu-columns-1, .ts-megamenu-columns-2, .ts-megamenu-columns-3, .ts-megamenu-columns-4').each(function(index, element){ 920 jQuery(element).children('ul.sub-menu').css({ 'max-width': container_width + 'px' }); 921 var sub_menu_width = jQuery(element).children('ul.sub-menu').outerWidth(); 922 var item_width = jQuery(element).outerWidth(); 923 jQuery(element).children('ul.sub-menu').css({ 'left': '-' + (sub_menu_width / 2 - item_width / 2) + 'px', 'right': 'auto' }); 924 925 var container_left = container_offset.left; 926 var container_right = container_left + container_width; 927 var item_left = jQuery(element).offset().left; 928 929 var overflow_left = (sub_menu_width / 2 > (item_left + item_width / 2 - container_left)); 930 var overflow_right = ((sub_menu_width / 2 + item_left + item_width / 2) > container_right); 931 if( overflow_left ){ 932 var left = item_left - container_left - padding_left; 933 jQuery(element).children('ul.sub-menu').css({ 'left': -left + 'px', 'right': 'auto' }); 934 } 935 if( overflow_right && !overflow_left ){ 936 var left = item_left - container_left - padding_left; 937 left = left - (container_width - sub_menu_width); 938 jQuery(element).children('ul.sub-menu').css({ 'left': -left + 'px', 'right': 'auto' }); 939 } 940 }); 941 942 /* Remove hide class after loading */ 943 jQuery('ul.menu li.menu-item').removeClass('hide'); 944 945 }, 100); 946 } 947 else { /* Mobile menu action */ 948 jQuery('#wpadminbar').css('position', 'fixed'); 949 950 /* Remove hide class after loading */ 951 jQuery('ul.menu li.menu-item').removeClass('hide'); 952 } 953} 954 955function ts_mobile_ipad_menu_handle(){ 956 /* Mobile Menu One Page */
957 jQuery('.ts-mobile-icon-toggle .icon').on('click', function(){ 958 jQuery(this).toggleClass('active'); 959 jQuery('#group-icon-header').toggleClass('active'); 960 jQuery('body').toggleClass('menu-mobile-active'); 961 }); 962 963 /* Main Menu Drop Icon */ 964 jQuery('.ts-menu nav.main-menu .ts-menu-drop-icon').on('click', function(){ 965 966 var is_active = jQuery(this).hasClass('active'); 967 var sub_menu = jQuery(this).siblings('.sub-menu'); 968 969 jQuery('.ts-menu nav.main-menu .ts-menu-drop-icon').removeClass('active'); 970 jQuery('.ts-menu nav.main-menu .sub-menu').hide(); 971 972 jQuery(this).parents('.sub-menu').show(); 973 jQuery(this).parents('.sub-menu').siblings('.ts-menu-drop-icon').addClass('active'); 974 975 /* Reset Dropdown Cart */ 976 jQuery('header .shopping-cart-wrapper').removeClass('active'); 977 978 if( sub_menu.length ){ 979 if( is_active ){ 980 sub_menu.fadeOut(250); 981 jQuery(this).removeClass('active'); 982 } 983 else{ 984 sub_menu.fadeIn(250); 985 jQuery(this).addClass('active'); 986 } 987 } 988 }); 989 990 /* Mobile Menu Drop Icon */ 991 if( jQuery('.ts-menu nav.mobile-menu .ts-menu-drop-icon').length ){ 992 jQuery('.ts-menu nav.mobile-menu .sub-menu').hide(); 993 } 994 995 jQuery('.ts-menu.mobile-menu-wrapper .ts-menu-drop-icon').on('click', function(){ 996 var is_active = jQuery(this).hasClass('active'); 997 var sub_menu = jQuery(this).siblings('.sub-menu'); 998 var li_parent = jQuery(this).parent(); 999 var ul_submenu = jQuery(this).closest('.sub-menu'); 1000 jQuery('#group-icon-header').addClass('not-first-level'); 1001 1002 if( is_active ){ 1003 if( ul_submenu.length ){ 1004 var z_index = ul_submenu.css('z-index'); 1005 z_index = parseInt(z_index) - 1; 1006 ul_submenu.css('z-index', z_index); 1007 ul_submenu.css('overflow', 'scroll'); 1008 ul_submenu.css('bottom', '0'); 1009 } 1010 else{ 1011 jQuery('#group-icon-header .mobile-menu-wrapper').css('overflow', 'auto'); 1012 } 1013 1014 sub_menu.find('.ts-menu-drop-icon').removeClass('active'); 1015 li_parent.removeClass('active'); 1016 jQuery(this).removeClass('active'); 1017 1018 if( !ul_submenu.length ){ /* First level */ 1019 var menu_title_back = jQuery('.tab-mobile-menu li.active span').text(); 1020 jQuery('#group-icon-header').removeClass('not-first-level'); 1021 } 1022 else{ 1023 if( ul_submenu.siblings('a').find('.menu-label').length ){ 1024 var menu_title_back = ul_submenu.siblings('a').find('.menu-label').text(); 1025 } 1026 else{ 1027 var menu_title_back = ul_submenu.siblings('a').text(); 1028 } 1029 } 1030 jQuery('#group-icon-header .menu-title span').text(menu_title_back); 1031 } 1032 else{ 1033 if( ul_submenu.length ){ 1034 var z_index = ul_submenu.css('z-index'); 1035 z_index = parseInt(z_index) + 1; 1036 ul_submenu.css('z-index', z_index); 1037 ul_submenu.css('overflow', 'hidden'); 1038 ul_submenu.css('bottom', 'auto'); 1039 } 1040 else{ 1041 jQuery('#group-icon-header .mobile-menu-wrapper').scrollTop(0); 1042 jQuery('#group-icon-header .mobile-menu-wrapper').css('overflow', 'hidden'); 1043 } 1044 li_parent.addClass('active'); 1045 jQuery(this).addClass('active'); 1046 1047 if( li_parent.find('> a .menu-label').length ){ 1048 var menu_title = li_parent.find('> a .menu-label').text(); 1049 } 1050 else{ 1051 var menu_title = li_parent.find('> a').text(); 1052 } 1053 1054 jQuery('#group-icon-header .menu-title span').text(menu_title); 1055 } 1056 }); 1057 1058} 1059 1060/*** Sticky Menu ***/ 1061function ts_sticky_menu(){ 1062 var top_begin = jQuery('header.ts-header').height() + 300; 1063 var sub_menu = jQuery('header .main-menu > ul > li > ul.sub-menu'); 1064 1065 if( jQuery('body').hasClass('display-vertical-menu') && jQuery('.ts-header nav.vertical-menu').length ){ 1066 top_begin += jQuery('.ts-header nav.vertical-menu').height(); 1067 } 1068 1069 setTimeout(function(){ 1070 jQuery('.header-sticky').mysticky({ 1071 topBegin: top_begin 1072 , scrollOnTop: function(){ 1073 ts_mega_menu_change_state(); 1074 1075 /* RESET MENU STICKY */ 1076 jQuery('header .header-bottom').css('display', ''); 1077 jQuery('.icon-menu-sticky-header .icon').removeClass('active'); 1078 1079 sub_menu.css('display', 'none'); 1080 setTimeout(function(){ 1081 sub_menu.css('display', ''); 1082 }, 200); 1083 1084 jQuery(window).trigger('ts_set_top_shop_elements'); 1085 } 1086 , scrollOnBottom: function(){ 1087 ts_mega_menu_change_state(); 1088 1089 sub_menu.css('display', 'none'); 1090 setTimeout(function(){ 1091 sub_menu.css('display', ''); 1092 }, 200); 1093 1094 jQuery(window).trigger('ts_set_top_shop_elements'); 1095 } 1096 }); 1097 }, 100); 1098} 1099
1100/*** Ajax search ***/ 1101function ts_ajax_search(){ 1102 var search_string = ''; 1103 var search_previous_string = ''; 1104 var search_timeout; 1105 var search_delay = 700; 1106 var search_input; 1107 var search_result_container; 1108 var search_cache_data = {}; 1109 1110 jQuery('.ts-search-by-category input[name="s"]').on('focusin', function(){ 1111 jQuery(this).parents('.ts-search-by-category').addClass('focusing'); 1112 }).on('focusout', function(){ 1113 var wrapper = jQuery(this).parents('.ts-search-by-category'); 1114 setTimeout(function(){ 1115 if( !wrapper.hasClass('clicking') ){ 1116 wrapper.removeClass('focusing'); 1117 } 1118 }, 100); 1119 }); 1120 1121 jQuery(document).on('click', '.ts-search-by-category .search-dropdown a', function(){ 1122 jQuery(this).parents('.ts-search-by-category').addClass('clicking'); 1123 }); 1124 1125 jQuery('.ts-search-by-category input[name="s"]').on('keyup', function(e){ 1126 search_result_container = jQuery(this).parents('.ts-search-by-category').find('.ts-search-result-container'); 1127 1128 search_input = jQuery(this); 1129 1130 search_string = jQuery(this).val().trim(); 1131 if( search_string.length < 2 ){ 1132 search_input.parents('.search-content').removeClass('loading'); 1133 return; 1134 } 1135 1136 if( search_cache_data[search_string] ){ 1137 search_result_container.html(search_cache_data[search_string]); 1138 search_previous_string = ''; 1139 search_input.parents('.search-content').removeClass('loading'); 1140 1141 return; 1142 } 1143 1144 clearTimeout(search_timeout); 1145 search_timeout = setTimeout(function(){ 1146 if( search_string == search_previous_string || search_string.length < 2 ){ 1147 return; 1148 } 1149 1150 search_previous_string = search_string; 1151 1152 search_input.parents('.search-content').addClass('loading'); 1153 1154 /* check category */ 1155 var category = ''; 1156 var select_category = search_input.parents('.search-table').siblings('.select-category'); 1157 if( select_category.length ){ 1158 category = select_category.find(':selected').val(); 1159 } 1160 1161 jQuery.ajax({ 1162 type: 'POST' 1163 , url: merto_params.ajax_url 1164 , data: { action: 'merto_ajax_search', search_string: search_string, category: category, security: merto_params.search_nonce } 1165 , error: function(xhr, err){ 1166 search_input.parents('.search-content').removeClass('loading'); 1167 } 1168 , success: function(response){ 1169 if( response != '' ){ 1170 response = JSON.parse(response); 1171 1172 if( response.search_string == search_string ){ 1173 search_cache_data[search_string] = response.html; 1174 search_result_container.html(response.html); 1175 1176 search_input.parents('.search-content').removeClass('loading'); 1177 } 1178 } 1179 else{ 1180 search_input.parents('.search-content').removeClass('loading'); 1181 } 1182 } 1183 }); 1184 }, search_delay); 1185 }); 1186 1187 jQuery(document).on('click', '.search-content .view-all-wrapper a', function(e){ 1188 e.preventDefault(); 1189 jQuery(this).parents('.ts-search-by-category').find('form').trigger('submit'); 1190 }); 1191 1192 jQuery('.ts-search-by-category select.select-category').on('change', function(){ 1193 search_previous_string = ''; 1194 search_cache_data = {}; 1195 var wrapper = jQuery(this).parents('.ts-search-by-category'); 1196 if( wrapper.find('input[name="s"]').val() ){ 1197 wrapper.find('.ts-search-result-container').html(''); 1198 wrapper.find('input[name="s"]').trigger('focus').trigger('keyup'); 1199 } 1200 }); 1201}
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.