PageSourceSearch

https://www.produits-normandie.fr/themes/wineshop/js/global.js

js produits-normandie.fr collected 2026-10-02 17:09:14 UTC 19,324 bytes, 627 lines download raw bytes

1/*
2* 2007-2016 PrestaShop
3*
4* NOTICE OF LICENSE
5*
6* This source file is subject to the Academic Free License (AFL 3.0)
7* that is bundled with this package in the file LICENSE.txt.
8* It is also available through the world-wide-web at this URL:
9* http://opensource.org/licenses/afl-3.0.php
10* If you did not receive a copy of the license and are unable to
11* obtain it through the world-wide-web, please send an email
12* to [email protected] so we can send you a copy immediately.
13*
14* DISCLAIMER
15*
16* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
17* versions in the future. If you wish to customize PrestaShop for your
18* needs please refer to http://www.prestashop.com for more information.
19*
20*  @author PrestaShop SA <[email protected]>
21*  @copyright  2007-2016 PrestaShop SA
22*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
23*  International Registered Trademark & Property of PrestaShop SA
24*/
25//global variables
26var responsiveflag = false;
27
28$(document).ready(function(){
29	highdpiInit();
30	responsiveResize();
31	$(window).resize(responsiveResize);
32	if (navigator.userAgent.match(/Android/i))
33	{
34		var viewport = document.querySelector('meta[name="viewport"]');
35		viewport.setAttribute('content', 'initial-scale=1.0,maximum-scale=1.0,user-scalable=0,width=device-width,height=device-height');
36		window.scrollTo(0, 1);
37	}
38	if (typeof quickView !== 'undefined' && quickView)
39		quick_view();
40	dropDown();
41
42	if (typeof page_name != 'undefined' && !in_array(page_name, ['index', 'product']))
43	{
44		bindGrid();
45
46		$(document).on('change', '.selectProductSort', function(e){
47			if (typeof request != 'undefined' && request)
48				var requestSortProducts = request;
49			var splitData = $(this).val().split(':');
50			var url = '';
51			if (typeof requestSortProducts != 'undefined' && requestSortProducts)
52			{
53				url += requestSortProducts ;
54				if (typeof splitData[0] !== 'undefined' && splitData[0])
55				{
56					url += ( requestSortProducts.indexOf('?') < 0 ? '?' : '&') + 'orderby=' + splitData[0] + (splitData[1] ? '&orderway=' + splitData[1] : '');
57					if (typeof splitData[1] !== 'undefined' && splitData[1])
58						url += '&orderway=' + splitData[1];
59				}
60				document.location.href = url;
61			}
62		});
63
64		$(document).on('change', 'select[name="n"]', function(){
65			$(this.form).submit();
66		});
67
68		$(document).on('change', 'select[name="currency_payment"]', function(){
69			setCurrency($(this).val());
70		});
71	}
72
73	$(document).on('change', 'select[name="manufacturer_list"], select[name="supplier_list"]', function(){
74		if (this.value != '')
75			location.href = this.value;
76	});
77
78	$(document).on('click', '.back', function(e){
79		e.preventDefault();
80		history.back();
81	});
82
83	jQuery.curCSS = jQuery.css;
84	if (!!$.prototype.cluetip)
85		$('a.cluetip').cluetip({
86			local:true,
87			cursor: 'pointer',
88			dropShadow: false,
89			dropShadowSteps: 0,
90			showTitle: false,
91			tracking: true,
92			sticky: false,
93			mouseOutClose: true,
94			fx: {
95				open:       'fadeIn',
96				openSpeed:  'fast'
97			}
98		}).css('opacity', 0.8);
99
100	if (typeof(FancyboxI18nClose) !== 'undefined' && typeof(FancyboxI18nNext) !== 'undefined' && typeof(FancyboxI18nPrev) !== 'undefined' && !!$.prototype.fancybox)
101		$.extend($.fancybox.defaults.tpl, {
102			closeBtn : '<a title="' + FancyboxI18nClose + '" class="fancybox-item fancybox-close" href="javascript:;"></a>',
103			next     : '<a title="' + FancyboxI18nNext + '" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
104			prev     : '<a title="' + FancyboxI18nPrev + '" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
105		});
106
107	// Close Alert messages
108	$(".alert.alert-danger").on('click', this, function(e){
109		if (e.offsetX >= 16 && e.offsetX <= 39 && e.offsetY >= 16 && e.offsetY <= 34)
110			$(this).fadeOut();
111	});
112});
113
114function highdpiInit()
115{
116	if (typeof highDPI === 'undefined')
117		return;
118	if(highDPI && $('.replace-2x').css('font-size') == "1px")
119	{
120		var els = $("img.replace-2x").get();
121		for(var i = 0; i < els.length; i++)
122		{
123			src = els[i].src;
124			extension = src.substr( (src.lastIndexOf('.') +1) );
125			src = src.replace("." + extension, "2x." + extension);
126
127			var img = new Image();
128			img.src = src;
129			img.height != 0 ? els[i].src = src : els[i].src = els[i].src;
130		}
131	}
132}
133
134
135// Used to compensante Chrome/Safari bug (they don't care about scroll bar for width)
136function scrollCompensate()
137{
138	var inner = document.createElement('p');
139	inner.style.width = "100%";
140	inner.style.height = "200px";
141
142	var outer = document.createElement('div');
143	outer.style.position = "absolute";
144	outer.style.top = "0px";
145	outer.style.left = "0px";
146	outer.style.visibility = "hidden";
147	outer.style.width = "200px";
148	outer.style.height = "150px";
149	outer.style.overflow = "hidden";
150	outer.appendChild(inner);
151
152	document.body.appendChild(outer);
153	var w1 = inner.offsetWidth;
154	outer.style.overflow = 'scroll';
155	var w2 = inner.offsetWidth;
156	if (w1 == w2) w2 = outer.clientWidth;
157
158	document.body.removeChild(outer);
159
160	return (w1 - w2);
161}
162
163function responsiveResize()
164{
165	compensante = scrollCompensate();
166	if (($(window).width()+scrollCompensate()) <= 767 && responsiveflag == false)
167	{
168		accordion('enable');
169		accordionFooter('enable');
170		responsiveflag = true;
171	}
172	else if (($(window).width()+scrollCompensate()) >= 768)
173	{
174		accordion('disable');
175		accordionFooter('disable');
176		responsiveflag = false;
177		if (typeof bindUniform !=='undefined')
178			bindUniform();
179	}
180	blockHover();
181}
182
183function blockHover(status)
184{
185	var screenLg = $('body').find('.container').width() == 1170;
186
187	if ($('.product_list').is('.grid'))
188		if (screenLg)
189			$('.product_list .button-container').hide();
190		else
191			$('.product_list .button-container').show();
192
193	$(document).off('mouseenter').on('mouseenter', '.product_list.grid li.ajax_block_product .product-container', function(e){
194		if (screenLg)
195		{
196			var pcHeight = $(this).parent().outerHeight();
197			var pcPHeight = $(this).parent().find('.button-container').outerHeight() + $(this).parent().find('.comments_note').outerHeight() + $(this).parent().find('.functional-buttons').outerHeight();
198			/*$(this).parent().addClass('hovered').css({'height':pcHeight + pcPHeight, 'margin-bottom':pcPHeight * (-1)});*/
199			$(this).find('.button-container').show();
200		}
201	});
202
203	$(document).off('mouseleave').on('mouseleave', '.product_list.grid li.ajax_block_product .product-container', function(e){
204		if (screenLg)
205		{
206			$(this).parent().removeClass('hovered').css({'height':'auto', 'margin-bottom':'0'});
207			$(this).find('.button-container').hide();
208		}
209	});
210}
211
212function quick_view()
213{
214	$(document).on('click', '.quick-view:visible, .quick-view-mobile:visible', function(e){
215		e.preventDefault();
216		var url = this.rel;
217		var anchor = '';
218
219		if (url.indexOf('#') != -1)
220		{
221			anchor = url.substring(url.indexOf('#'), url.length);
222			url = url.substring(0, url.indexOf('#'));
223		}
224
225		if (url.indexOf('?') != -1)
226			url += '&';
227		else
228			url += '?';
229
230		if (!!$.prototype.fancybox)
231			$.fancybox({
232				'padding':  0,
233				'width':    1087,
234				'height':   610,
235				'type':     'iframe',
236				'href':     url + 'content_only=1' + anchor
237			});
238	});
239}
240
241function bindGrid()
242{
243	var storage = false;
244	if (typeof(getStorageAvailable) !== 'undefined') {
245		storage = getStorageAvailable();
246	}
247	if (!storage) {
248		return;
249	}
250
251	var view = $.totalStorage('display');
252
253	if (!view && (typeof displayList != 'undefined') && displayList)
254		view = 'list';
255
256	if (view && view != 'grid')
257		display(view);
258	else
259		$('.display').find('li#grid').addClass('selected');
260
261	$(document).on('click', '#grid', function(e){
262		e.preventDefault();
263		display('grid');
264	});
265
266	$(document).on('click', '#list', function(e){
267		e.preventDefault();
268		display('list');
269	});
270}
271
272function display(view)
273{
274	if (view == 'list')
275	{
276		$('ul.product_list').removeClass('grid').addClass('list row');
277		$('.product_list > li').removeClass('col-xs-12 col-sm-6 col-md-4').addClass('col-xs-12');
278		$('.product_list > li').each(function(index, element) {
279			var html = '';
280			html = '<div class="product-container"><div class="row">';
281			html += '<div class="left-block col-xs-4 col-sm-5 col-md-4">' + $(element).find('.left-block').html() + '</div>';
282			html += '<div class="center-block col-xs-4 col-sm-7 col-md-4">';
283			html += '<div class="product-flags">'+ $(element).find('.product-flags').html() + '</div>';
284			html += '<h5 itemprop="name">'+ $(element).find('h5').html() + '</h5>';
285			var hookReviews = $(element).find('.hook-reviews');
286			if (hookReviews.length) {
287				html += hookReviews.clone().wrap('<div>').parent().html();
288			}
289			html += '<p class="product-desc">'+ $(element).find('.product-desc').html() + '</p>';
290			var colorList = $(element).find('.color-list-container').html();
291			if (colorList != null) {
292				html += '<div class="color-list-container">'+ colorList +'</div>';
293			}
294			var availability = $(element).find('.availability').html();	// check : catalog mode is enabled
295			if (availability != null) {
296				html += '<span class="availability">'+ availability +'</span>';
297			}
298			html += '</div>';
299			html += '<div class="right-block col-xs-4 col-sm-12 col-md-4"><div class="right-block-content row">';
300			var price = $(element).find('.content_price').html();       // check : catalog mode is enabled
301			if (price != null) {
302				html += '<div class="content_price col-xs-5 col-md-12">'+ price + '</div>';
303			}
304			html += '<div class="button-container col-xs-7 col-md-12">'+ $(element).find('.button-container').html() +'</div>';
305			html += '<div class="functional-buttons clearfix col-sm-12">' + $(element).find('.functional-buttons').html() + '</div>';
306			html += '</div>';
307			html += '</div></div>';
308			$(element).html(html);
309		});
310		$('.display').find('li#list').addClass('selected');
311		$('.display').find('li#grid').removeAttr('class');
312		$.totalStorage('display', 'list');
313	}
314	else
315	{
316		$('ul.product_list').removeClass('list').addClass('grid row');
317		$('.product_list > li').removeClass('col-xs-12').addClass('col-xs-12 col-sm-6 col-md-4');
318		$('.product_list > li').each(function(index, element) {
319			var html = '';
320			html += '<div class="product-container">';
321			html += '<div class="left-block">' + $(element).find('.left-block').html() + '</div>';
322			html += '<div class="right-block">';
323			html += '<div class="product-flags">'+ $(element).find('.product-flags').html() + '</div>';
324			html += '<h5 itemprop="name">'+ $(element).find('h5').html() + '</h5>';
325			var hookReviews = $(element).find('.hook-reviews');
326			if (hookReviews.length) {
327				html += hookReviews.clone().wrap('<div>').parent().html();
328			}
329			html += '<p itemprop="description" class="product-desc">'+ $(element).find('.product-desc').html() + '</p>';
330			var price = $(element).find('.content_price').html(); // check : catalog mode is enabled
331			if (price != null) {
332				html += '<div class="content_price">'+ price + '</div>';
333			}
334			html += '<div itemprop="offers" itemscope itemtype="https://schema.org/Offer" class="button-container">'+ $(element).find('.button-container').html() +'</div>';
335			var colorList = $(element).find('.color-list-container').html();
336			if (colorList != null) {
337				html += '<div class="color-list-container">'+ colorList +'</div>';
338			}
339			var availability = $(element).find('.availability').html(); // check : catalog mode is enabled
340			if (availability != null) {
341				html += '<span class="availability">'+ availability +'</span>';
342			}
343			html += '</div>';
344		//	html += '<div class="functional-buttons clearfix">' + $(element).find('.functional-buttons').html() + '</div>';
345			html += '</div>';
346			$(element).html(html);
347		});
348		$('.display').find('li#grid').addClass('selected');
349		$('.display').find('li#list').removeAttr('class');
350		$.totalStorage('display', 'grid');
351	}
352}
353
354function dropDown()
355{
356	elementClick = '#header .current';
357	elementSlide =  'ul.toogle_content';
358	activeClass = 'active';
359
360	$(elementClick).on('click', function(e){
361		e.stopPropagation();
362		var subUl = $(this).next(elementSlide);
363		if(subUl.is(':hidden'))
364		{
365			subUl.slideDown();
366			$(this).addClass(activeClass);
367		}
368		else
369		{
370			subUl.slideUp();
371			$(this).removeClass(activeClass);
372		}
373		$(elementClick).not(this).next(elementSlide).slideUp();
374		$(elementClick).not(this).removeClass(activeClass);
375		e.preventDefault();
376	});
377
378	$(elementSlide).on('click', function(e){
379		e.stopPropagation();
380	});
381
382	$(document).on('click', function(e){
383		e.stopPropagation();
384		var elementHide = $(elementClick).next(elementSlide);
385		$(elementHide).slideUp();
386		$(elementClick).removeClass('active');
387	});
388}
389
390function accordionFooter(status)
391{
392	if(status == 'enable')
393	{
394		$('#footer .footer-block h4').on('click', function(e){
395			$(this).toggleClass('active').parent().find('.toggle-footer').stop().slideToggle('medium');
396			e.preventDefault();
397		})
398		$('#footer').addClass('accordion').find('.toggle-footer').slideUp('fast');
399	}
400	else
401	{
402		$('.footer-block h4').removeClass('active').off().parent().find('.toggle-footer').removeAttr('style').slideDown('fast');
403		$('#footer').removeClass('accordion');
404	}
405}
406
407function accordion(status)
408{
409	if(status == 'enable')
410	{
411		var accordion_selector = '#right_column .block .title_block, #left_column .block .title_block, #left_column #newsletter_block_left h4,' +
412								'#left_column .shopping_cart > a:first-child, #right_column .shopping_cart > a:first-child';
413
414		$(accordion_selector).on('click', function(e){
415			$(this).toggleClass('active').parent().find('.block_content').stop().slideToggle('medium');
416		});
417		$('#right_column, #left_column').addClass('accordion').find('.block .block_content').slideUp('fast');
418		if (typeof(ajaxCart) !== 'undefined')
419			ajaxCart.collapse();
420	}
421	else
422	{
423		$('#right_column .block .title_block, #left_column .block .title_block, #left_column #newsletter_block_left h4').removeClass('active').off().parent().find('.block_content').removeAttr('style').slideDown('fast');
424		$('#left_column, #right_column').removeClass('accordion');
425	}
426}
427
428function bindUniform()
429{
430	if (!!$.prototype.uniform)
431		$("select.form-control,input[type='radio'],input[type='checkbox']").not(".not_uniform").uniform();
432}
433
434$(document).ready(function(){
435	//Homeslider
436/*	function resize(){
437	var containerW = $('.homeslider-description').outerWidth()/2;
438	$('.homeslider-description').css('marginLeft',-1*containerW);
439	}
440	resize();
441	$(window).resize(resize); */
442
443	//Search
444	$('.search-toggle').toggle(function(){
445		$('#search_block_top').fadeIn(500);
446	},
447	function(){
448		$('#search_block_top').fadeOut(500);
449	});
450
451	//Breadcrumb
452	$('.navigation-pipe').html('&#8594;');
453
454	$('.comments_advices .reviews').click(function(){
455		$('.info-wrapper').find('.active').removeClass('active');
456		$('#product .nav-tabs').find('.active').removeClass('active');
457		$('a[href="#prod-reviews"]').parent().addClass('active');
458		$('#prod-reviews').addClass('active');
459	});
460
461});
462
463
464//manufacturer , ludo le 18-02-21
465
466function displaymanufacturerFunction() {
467  var element = document.getElementById("text_manufacturer");
468  element.classList.toggle("toggle-manufacturer");
469}
470
471
472$(".toggle-manufacturer").click(function()
473{
474	$(this).html("En voir moins");
475});
476
477//Ancre en savoir plus manufactrurer - ludo le 18-02-21
478$(document).ready(function(){
479        $('.ancre-manu').on('click',function(){
480            $('html, body').animate({scrollTop: $("#text_manufacturer").offset().top - 90 + 'px'}, 300);
481        });
482    });
483
484
485// Afficher-cacher pout texte en fonction des queries déterminés.
486	document.addEventListener('DOMContentLoaded', function()
487	{
488					var button = document.querySelector('#toggle-pn');
489					if (!button) return;
490					var appears = document.querySelector('#text-pn');
491					var bool =1;
492					button.addEventListener('click', function(onClickButton) {
493							appears.classList.toggle('hide');
494							if(bool == 0)
495								{
496									button.innerHTML = 'En voir plus <i class="fa-solid fa-arrow-down"></i>';
497									bool = 1;
498								}
499							else
500								{
501									button.innerHTML = 'En voir moins <i class="fa-solid fa-arrow-up"></i>';
502									bool = 0;
503								}
504						});
505
506				});
507
508
509// Afficher-cacher tout le texte tout le temps 1
510				document.addEventListener('DOMContentLoaded', function()
511	{
512					var button = document.querySelector('#toggle-pn_full');
513					if (!button) return;
514					var appears = document.querySelector('#text-pn_full');
515					var bool =1;
516					button.addEventListener('click', function(onClickButton) {
517							appears.classList.toggle('hide');
518							if(bool == 0)
519								{
520									button.innerHTML = 'En voir plus <i class="fa-solid fa-arrow-down"></i>';
521									bool = 1;
522								}
523							else
524								{
525									button.innerHTML = 'En voir moins <i class="fa-solid fa-arrow-up"></i>';
526									bool = 0;
527								}
528						});
529				});
530
531				document.addEventListener('DOMContentLoaded', function()
532				{
533								var button2 = document.querySelector('#toggle-pn_full2');
534								if (!button2) return;
535								var appears2 = document.querySelector('#text-pn_full2');
536								var bool =1;
537
538				button2.addEventListener('click', function(onClickButton) {
539					appears2.classList.toggle('hide');
540					if(bool == 0)
541						{
542							button2.innerHTML = 'En voir plus <i class="fa-solid fa-arrow-down"></i>';
543							bool = 1;
544						}
545					else
546						{
547							button2.innerHTML = 'En voir moins <i class="fa-solid fa-arrow-up"></i>';
548							bool = 0;
549						}
550				});
551			});
552
553
554			document.addEventListener('DOMContentLoaded', function()
555			{
556							var button3 = document.querySelector('#toggle-pn_full3');
557							if (!button3) return;
558							var appears3 = document.querySelector('#text-pn_full3');
559							var bool =1;
560
561			button3.addEventListener('click', function(onClickButton) {
562				appears3.classList.toggle('hide');
563				if(bool == 0)
564					{
565						button3.innerHTML = 'En voir plus <i class="fa-solid fa-arrow-down"></i>';
566						bool = 1;
567					}
568				else
569					{
570						button3.innerHTML = 'En voir moins <i class="fa-solid fa-arrow-up"></i>';
571						bool = 0;
572					}
573			});
574		});
575
576
577
578		$(window).load(function(){
579			// Cache selectors
580			var lastId,
581			topMenu = $("#menu-ancre"),
582			topMenuHeight = topMenu.outerHeight()+15,
583			// All list items
584			menuItems = topMenu.find("a"),
585			// Anchors corresponding to menu items
586			scrollItems = menuItems.map(function(){
587			var item = $($(this).attr("href"));
588			if (item.length) { return item; }
589			});
590
591			// Bind click handler to menu items
592			// so we can get a fancy scroll animation
593			menuItems.click(function(e){
594			var href = $(this).attr("href"),
595			offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1;
596			$('html, body').stop().animate({
597			scrollTop: offsetTop
598			}, 300);
599			e.preventDefault();
600			});
601
602			// Bind to scroll
603			$(window).scroll(function(){
604			// Get container scroll position
605			var fromTop = $(this).scrollTop()+topMenuHeight;
606
607			// Get id of current scroll item
608			var cur = scrollItems.map(function(){
609			if ($(this).offset().top < fromTop)
610			return this;
611			});
612			// Get the id of the current element
613			cur = cur[cur.length-1];
614			var id = cur && cur.length ? cur[0].id : "";
615
616			if (lastId !== id) {
617			lastId = id;
618			// Set/remove active class
619			menuItems
620			.parent().removeClass("active")
621			.end().filter("[href$="+id+"]").parent().addClass("active");
622			}
623			});
624			});//]]>
625
626
627

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.