PageSourceSearch

https://xxxxlmousepadnearby.com/wp-content/themes/merto/js/main.js?ver=1.3.4

js xxxxlmousepadnearby.com collected 2026-10-06 06:47:47 UTC 42,012 bytes, 1,201 lines download raw bytes

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.