1/* 2 * Custom code goes here. 3 * A template should always ship with an empty custom.js 4 */ 5var images = document.querySelectorAll('img'); 6images.forEach(function (img) { 7 if (img.hasAttribute('datasrc')) { 8 img.src = img.getAttribute('datasrc'); 9 } 10}); 11var obfuque = { 12 current: "", 13 14 obscurermenu: function () { 15 currenturl = window.location.href; 16 host = window.location.host; 17 protocol = "https://"; 18 $(".st_mega_menu").find("a").each(function (index) { 19 20 if ($(this).hasClass('is_parent')) { 21 $(this).addClass('non_obs') 22 23 } 24 if ($(this).parents('li').eq(0).hasClass('ml_level_2')) { 25 elem = "<span class='l-obf ma_level_2 ma_item ' onClick='obfuque.obscurer(this)' data-o='" + btoa($(this).attr('href')) + "' > <i class='fto-angle-right list_arrow'></i>" + $(this).text() + "</span>" 26 $(this).parents('li').eq(0).html(elem); 27 } 28 29 30 }); 31 32 }, 33 34 35 36 obscurer: function (elem) { 37 var link = atob(elem.dataset.o); 38 window.location.href = link; 39 } 40} 41 42$(document).ready(function () { 43 $(' .careManufacturer-container').slick({ 44 dots: false, 45 arrows: true, 46 infinite: false, 47 speed: 300, 48 slidesToShow: 4, 49 slidesToScroll: 1, 50 prevArrow: '<button type="button" class="slick-prev"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg></button>', 51 nextArrow: '<button type="button" class="slick-next"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg> </button>', 52 responsive: [ 53 { 54 breakpoint: 1024, 55 settings: { 56 slidesToShow: 3, 57 slidesToScroll: 3, 58 infinite: true, 59 dots: true, 60 arrows: false 61 } 62 }, 63 { 64 breakpoint: 767, 65 settings: { 66 slidesToShow: 2, 67 slidesToScroll: 1, 68 dots: true, 69 //centerMode: true, 70 //centerPadding: '60px', 71 arrows: false 72 } 73 } 74 ] 75 }); 76 if (/Mobi/.test(navigator.userAgent)) { 77 /*$('.product_features').slick({ 78 dots: false, 79 arrows: true, 80 infinite: false, 81 speed: 300, 82 slidesToShow: 4, 83 slidesToScroll: 1, 84 prevArrow : '<button type="button" class="slick-prev"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg></button>', 85 nextArrow : '<button type="button" class="slick-next"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg> </button>', 86 responsive: [ 87 { 88 breakpoint: 1024, 89 settings: { 90 slidesToShow: 4, 91 slidesToScroll: 1, 92 infinite: true, 93 dots: true 94 } 95 }, 96 { 97 breakpoint: 767, 98 settings: { 99 slidesToShow: 2, 100 slidesToScroll: 1, 101 dots: true, 102 //centerMode: true, 103 centerPadding: '60px', 104 arrows: false 105 } 106 } 107 ] 108 });*/ 109 $(' .bloc_container_categ').slick({ 110 dots: false, 111 arrows: true, 112 infinite: false, 113 speed: 300, 114 slidesToShow: 4, 115 slidesToScroll: 1, 116 prevArrow: '<button type="button" class="slick-prev"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg></button>', 117 nextArrow: '<button type="button" class="slick-next"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg> </button>', 118 responsive: [ 119 { 120 breakpoint: 1024, 121 settings: { 122 slidesToShow: 3, 123 slidesToScroll: 1, 124 infinite: true, 125 dots: false,
126 arrows: false 127 } 128 }, 129 { 130 breakpoint: 767, 131 settings: { 132 slidesToShow: 2, 133 slidesToScroll: 1, 134 dots: false, 135 //centerMode: true, 136 //centerPadding: '10px', 137 arrows: false 138 } 139 } 140 ] 141 }); 142 } 143 144 145 //obscution listing 146 var obf = document.querySelectorAll(".l-obf"); 147 for (var i = 0; i < obf.length; i++) { 148 obf[i].addEventListener('click', function () { 149 150 var link = atob(this.dataset.o); 151 window.location.href = link; 152 }); 153 } 154 if (prestashop.page.page_name != 'index' && $('#footer-js').length) { 155 setTimeout(function () { 156 $.ajax({ 157 url: prestashop.urls.base_url + "ajax.php?action=getFooter" 158 }).done(function (data) { 159 $('#footer-js').html(data); 160 }); 161 }, 1000); 162 } 163 164 //Blog stop propagation of the event 165 $(".module-stblog-category ul.pagination .page-item>a").click(function (event) { 166 if ($(this).hasClass('disabled')) 167 return false; 168 169 event.stopImmediatePropagation(); 170 }); 171 172 /* 173 * F&C hack for Atos buttons when CGV not chekced 174 */ 175 if ($('.js-payment-atos3x').length) { 176 if ($('.js-payment-atos3x').hasClass('disabled')) { 177 $('.js-payment-atos3x input[type="IMAGE"]').attr('disabled', 'disabled'); 178 } 179 } 180 181 /* 182 * F&C => Preorder : hide add to cart buttons 183 */ 184 setTimeout(function () { 185 if ($("#fmmPreOrder:visible").length > 0) { 186 $(".product-add-to-cart.mb-3").remove(); 187 // $(".pro_cart_block .qty.qty_wrap").addClass('force-hide'); 188 } 189 }, 1500); 190 191 $(document).on('change', '#conditions-to-approve input[type="checkbox"]', function (e) { 192 if ($(this).prop('checked')) { 193 if ($('.js-payment-atos3x').length) { 194 $('.js-payment-atos3x input[type="IMAGE"]').removeAttr('disabled'); 195 } 196 $('.cgv-confirmation-msg').hide(); 197 } else { 198 if ($('.js-payment-atos3x').hasClass('disabled')) { 199 $('.js-payment-atos3x input[type="IMAGE"]').attr('disabled', 'disabled'); 200 } 201 $('.cgv-confirmation-msg').show(); 202 } 203 }); 204 205 if ($('#care__video').length) { 206 207 var elem = document.getElementById("care__video"); 208 209 $(document).on('click', '#banner_box_13 .st_banner_image', function () { 210 $(this).hide(); 211 elem.play(); 212 }); 213 214 elem.onpause = function () { 215 $('#banner_box_13 .st_banner_image').show(); 216 }; 217 } 218 219 if ($('.support__results').length) { 220 $(document).on('click', '.js-product__line', function (e) { 221 $elem = $(this).data('id'); 222 223 //if( !$('.product__attachment').hasClass('hidden') ) 224 $('.product__attachment').addClass('hidden'); 225 226 $('#' + $elem).removeClass('hidden') 227 }); 228 } 229 230 if ($('.atout').length) { 231 redimensionner('.atout'); 232 verticalAlign('.atout'); 233 } 234 235 if ($('#subcategories li.active').length) { 236 $('#subcategories .subcate_grid_view li').removeClass('parentCateg'); 237 } 238 239 $('body.univer .new__products .block .title_block .title_block_inner').html($('body.univer .new__products .block .title_block .title_block_inner').text()); 240 $('body.univer .best__sales .block .title_block .title_block_inner').html($('body.univer .best__sales .block .title_block .title_block_inner').text()); 241 242 $(window).resize(function () { 243 if ($('.atout').length) { 244 $('.atout').height(''); 245 redimensionner('.atout'); 246 verticalAlign('.atout'); 247 } 248 249 initSwiper(); 250 251 resizeHomeSliderToSquare(); 252 }); 253 254 initSwiper(); 255 256 resizeHomeSliderToSquare(); 257 258 if ($(window).width() <= 991) { 259 $('.page-product .product_left_column .easyzoom--overlay > a').on('click', function (event) { 260 event.preventDefault(); 261 $('.page-product .product_left_column .pro_popup_trigger_box .st_popup_image.st_active').trigger('click'); 262 }); 263 264 $('body').on('click', '#footer .title_block .opener', function () { 265 if (!$('body').hasClass('index')) { 266 var open_status = $(this).parent('.title_block').parent('.footer_block').hasClass('st_open'); 267 $('#footer .footer_block').removeClass('st_open'); 268 if (open_status == false) { 269 $(this).parent('.title_block').parent('.footer_block').addClass('st_open'); 270 } 271 } 272 }); 273 } 274 275 setTimeout(() => { 276 $("iframe").each(function () { 277 var src = $(this).attr('src'); 278 if (typeof src === 'string' && (src.includes("youtube.com") || src.includes("youtu.be"))) { 279 var youtube_id = youtube_parser(src); 280 var new_src = "https://www.youtube.com/embed/" + youtube_id + "?playlist=" + youtube_id + "&loop=1&rel=0"; 281 $(this).attr('src', new_src); 282 } 283 }); 284 }, 1000); 285 286 $(document).on('click', '.js-address-form #update-postcode', function (e) { 287 updatePostcodeAction(); 288 }); 289 290 $(document).on('keyup', '.js-address-form .form-postcode', function (e) { 291 var codepostal = $(this).val().replace(/\s/g, ''); 292 if (codepostal.length == 0) { 293 $('.js-address-form .form-postcode-message').html(''); 294 $('.js-address-form .form-select-city').html("<option value selected>-- veuillez choisir --</option>"); 295 } 296 }); 297 298 $(document).on('keypress', '.js-address-form .form-postcode', function (e) { 299 var keyCode = e.keyCode || e.which; 300 if (keyCode === 13) { 301 e.preventDefault(); 302 $('.js-address-form #update-postcode').trigger('click'); 303 return false;
304 } 305 }); 306 307 $(document).on('click', '.js-address-form button[type="submit"]', function (e) { 308 var codepostal = $('.js-address-form .form-postcode').val().replace(/\s/g, ''); 309 if (codepostal.length != 0 && $('.js-address-form .form-select-city').val() === '') { 310 e.preventDefault(); 311 $('.js-address-form #update-postcode').trigger('click'); 312 $('.js-address-form .form-city-message').html('Veuillez sélectionner une ville dans la liste.'); 313 return false; 314 } 315 }); 316 317 $(document).on('change', '.js-address-form .form-select-city', function (e) { 318 if ($(this).val() !== '') { 319 $('.js-address-form .form-city-message').html(''); 320 } 321 }); 322 obfuque.obscurermenu(); 323}); 324 325// Return youtube video ID from url 326function youtube_parser(url) { 327 var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/; 328 var match = url.match(regExp); 329 return (match && match[7].length == 11) ? match[7] : false; 330} 331 332// resize home slider on mobile to be square 333function resizeHomeSliderToSquare() { 334 if ($(window).width() <= 425) { 335 var slider_height = $(window).width(); 336 $('body.index #body_wrapper .swiper_wraper_out .swiper-container').attr('style', 'height: ' + slider_height + 'px !important; min-height: ' + slider_height + 'px !important;'); 337 } else { 338 $('body.index #body_wrapper .swiper_wraper_out .swiper-container').attr('style', ''); 339 } 340} 341 342function initSwiper() { 343 if ($(window).width() <= 991) { 344 var mySwiper = new Swiper('#category_blogs_container_2 .swiper-container', { 345 loop: true, 346 slidesPerView: 1, 347 createPagination: true, 348 pagination: '.swiper-pagination', 349 }); 350 //mySwiper.init(); 351 } 352} 353 354function redimensionner(selecteur) { 355 var hauteur = 0; 356 $(selecteur).each(function () { 357 358 if ($(this).outerHeight() > hauteur) { 359 360 hauteur = $(this).outerHeight(); 361 } 362 }); 363 $(selecteur).each(function () { 364 $(this).innerHeight(hauteur); 365 }); 366} 367 368function verticalAlign(selecteur) { 369 var hauteur = 0; 370 $(selecteur).each(function () { 371 var hauteurAtout = $(this).height(); 372 $(selecteur).children('p').each(function () { 373 var marginTop = hauteurAtout - $(this).height(); 374 $(this).attr("style", 'margin-top:' + marginTop / 2 + 'px'); 375 }); 376 }); 377 378} 379 380function updatePostcodeAction() { 381 var codepostal = $('.js-address-form .form-postcode').val(); 382 codepostal = codepostal.replace(/\s/g, ''); 383 var api_username = 'carefitness'; 384 $('.js-address-form .form-postcode-message').html(''); 385 $('.js-address-form .form-city-message').html(''); 386 if (codepostal.length > 0) { 387 $('.js-address-form .btn-form-postcode').addClass('loading'); 388 $('.js-address-form .form-select-city').attr('disabled', true); 389 $.getJSON('https://secure.geonames.org/postalCodeLookupJSON?postalcode=' + codepostal + '&country=FR&username=' + api_username, function (data) { 390 if (data.postalcodes.length > 0) { 391 var selected = false; 392 if (data.postalcodes.length == 1) { 393 var selected = true; 394 } 395 $('.js-address-form .form-select-city').html("<option value selected>-- veuillez choisir --</option>"); 396 for (var i = 0; i < data.postalcodes.length; i++) { 397 $('.js-address-form .form-select-city').append($('<option>', { 398 value: data.postalcodes[i].placeName, 399 text: data.postalcodes[i].placeName, 400 selected: selected 401 })); 402 } 403 } else { 404 $('.js-address-form .form-select-city').html("<option value selected>-- veuillez choisir --</option>"); 405 $('.js-address-form .form-postcode-message').html('Ce code postal n\'existe pas en France Métropolitaine ou Corse.'); 406 } 407 }); 408 setTimeout(() => { 409 $('.js-address-form .btn-form-postcode').removeClass('loading'); 410 $('.js-address-form .form-select-city').attr('disabled', false); 411 }, 500); 412 } else { 413 $('.js-address-form .form-select-city').html("<option value selected>-- veuillez choisir --</option>"); 414 $('.js-address-form .form-postcode-message').html('Veuillez entrer un code postal (France Métropolitaine ou Corse) valide.'); 415 } 416} 417 418 419$(document).on("click", "#search_filter_toggler", function () { 420 $("#search_filters_wrapper").removeClass("hidden-sm-down"); 421 $("#content-wrapper").addClass("hidden-sm-down"); 422 $("#footer").addClass("hidden-sm-down"); 423 $(".categ_list_footer").addClass("hidden-sm-down"); 424 $(".top-category-header").addClass("hidden-sm-down"); 425 $(".categ_list_before_footer").addClass("hidden-sm-down"); 426 $("#page_banner_container_1").addClass("hidden-sm-down"); 427 $("#footer-js").addClass("hidden-sm-down") 428}); 429 430$("#search_filter_controls .clear").on("click", function () { 431 $("#search_filters_wrapper").addClass("hidden-sm-down"); 432 $("#content-wrapper").removeClass("hidden-sm-down"); 433 $("#footer").removeClass("hidden-sm-down"); 434 $(".categ_list_footer").removeClass("hidden-sm-down"); 435 $(".top-category-header").removeClass("hidden-sm-down"); 436 $(".categ_list_before_footer").removeClass("hidden-sm-down"); 437 $("#page_banner_container_1").removeClass("hidden-sm-down"); 438 $("#footer-js").removeClass("hidden-sm-down") 439}); 440 441$("#search_filter_controls .ok").on("click", function () { 442 $("#search_filters_wrapper").addClass("hidden-sm-down"); 443 $("#content-wrapper").removeClass("hidden-sm-down"); 444 $("#footer").removeClass("hidden-sm-down"); 445 $(".categ_list_footer").removeClass("hidden-sm-down"); 446 $(".top-category-header").removeClass("hidden-sm-down"); 447 $(".categ_list_before_footer").removeClass("hidden-sm-down"); 448 $("#page_banner_container_1").removeClass("hidden-sm-down"); 449 $("#footer-js").removeClass("hidden-sm-down") 450}); 451 452$('#btn_read_less').click(function () { 453 $('#easycontent_13 #more').css('display', 'none'); 454 $('#easycontent_13 #btn_read_less').css('display', 'none'); 455 $('#btn_read_more').css('display', 'block'); 456}); 457$('#btn_read_more').click(function () { 458 $('#easycontent_13 #more').css('display', 'block'); 459 $('#easycontent_13 #btn_read_less').css('display', 'block'); 460 $('#btn_read_more').css('display', 'none'); 461}); 462$('#toggle-button').click(function (e) { 463 e.preventDefault(); 464 $('#c-panel').toggleClass('collapsed'); 465}); 466$('#toggle-button1').click(function (e) { 467 e.preventDefault(); 468 $('#c-panel1').toggleClass('collapsed'); 469}); 470 471$('#toggle-button2').click(function (e) { 472 e.preventDefault(); 473 $('#c-panel2').toggleClass('collapsed'); 474}); 475$('#toggle-button3').click(function (e) { 476 e.preventDefault(); 477 $('#c-panel3').toggleClass('collapsed'); 478}); 479$('#toggle-button4').click(function (e) { 480 e.preventDefault(); 481 $('#c-panel4').toggleClass('collapsed'); 482}); 483$('#toggle-button5').click(function (e) { 484 e.preventDefault(); 485 $('#c-panel5').toggleClass('collapsed'); 486}); 487$('#toggle-button6').click(function (e) { 488 e.preventDefault(); 489 $('#c-panel6').toggleClass('collapsed'); 490}); 491$('#toggle-button7').click(function (e) { 492 e.preventDefault(); 493 $('#c-panel7').toggleClass('collapsed'); 494}); 495$('#toggle-button8').click(function (e) { 496 e.preventDefault(); 497 $('#c-panel8').toggleClass('collapsed'); 498}); 499$('#toggle-button9').click(function (e) { 500 e.preventDefault(); 501 $('#c-panel9').toggleClass('collapsed'); 502}); 503$('#toggle-button10').click(function (e) { 504 e.preventDefault(); 505 $('#c-panel10').toggleClass('collapsed'); 506}); 507$('#toggle-button11').click(function (e) { 508 e.preventDefault(); 509 $('#c-panel11').toggleClass('collapsed'); 510}); 511$('#toggle-button12').click(function (e) { 512 e.preventDefault(); 513 $('#c-panel12').toggleClass('collapsed'); 514}); 515$('#toggle-button13').click(function (e) { 516 e.preventDefault(); 517 $('#c-panel13').toggleClass('collapsed'); 518}); 519$('#toggle-button14').click(function (e) { 520 e.preventDefault(); 521 $('#c-panel14').toggleClass('collapsed'); 522}); 523$('#toggle-button15').click(function (e) { 524 e.preventDefault(); 525 $('#c-panel15').toggleClass('collapsed'); 526}); 527$('#toggle-button16').click(function (e) { 528 e.preventDefault(); 529 $('#c-panel16').toggleClass('collapsed'); 530}); 531/**menu page CMS insert in Category menu */ 532$("#st_menu_block_64 .ml_level_2.granditem_0.p_granditem_1").insertAfter("#st_menu_block_54 .col-md-6:nth-child(1) .mu_level_2.p_granditem_1"); 533$("#st_menu_block_65 .ml_level_2.granditem_0.p_granditem_1").insertAfter("#st_menu_block_54 .col-md-6:nth-child(3) .mu_level_2.p_granditem_1"); 534$("#st_menu_block_66 .ml_level_2.granditem_0.p_granditem_1").insertAfter("#st_menu_block_54 .col-md-6:nth-child(2) .mu_level_2.p_granditem_1"); 535$("#st_menu_block_67 .ml_level_2.granditem_0.p_granditem_1").insertAfter("#st_menu_block_37 .col-md-6:nth-child(1) .mu_level_2.p_granditem_1"); 536$("#st_menu_block_68 .ml_level_2.granditem_0.p_granditem_1").insertAfter("#st_menu_block_31 .col-md-6:nth-child(1) .mu_level_2.p_granditem_1"); 537$("#st_menu_block_69 .ml_level_2.granditem_0.p_granditem_1").insertAfter("#st_menu_block_31 .col-md-6:nth-child(3) .mu_level_2.p_granditem_1"); 538 539 540/**table feature division*/ 541 542 543k = 3; 544numitem = $('.product-features').children('.main_bloc').length; 545for (var $i = 0; $i < numitem; $i++) { 546 $id = $i; 547 548 bloc = '#main_bloc_' + $i + ' .data-sheet.flex_container'; 549 blocc = $(bloc).length; 550 if (blocc % 2 == 0) { 551 $position = Math.trunc(blocc / 2); 552 } else { 553 $position = Math.trunc((blocc / 2)); 554 555 } 556 557 blocavantfinal = '#main_bloc_' + $i; 558 blocfinal = '#main_bloc_' + $i + ' .data-sheet.flex_container' + ':nth-child(' + $position + ')'; 559 560 $("</div><div class='main_bloc new'>").insertAfter(blocavantfinal); 561 562 for (var $j = $position; $j < blocc; $j++) { 563 564 /* $(".main_bloc").append($('#main_bloc_'+$i +' .data-sheet.flex_container'+':nth-child('+$j +')')); */ 565 $p = $position + 2; 566 $('.product-features .main_bloc.new' + ':nth-child(' + k + ')').append($('#main_bloc_' + $i + ' .data-sheet.flex_container' + ':nth-child(' + $p + ')')); 567 } 568 k = k + 2; 569} 570 571 572if (typeof ($("#main_bloc_1 .data-sheet.flex_container.feature_box"))) { 573 $("#main_bloc_1 .data-sheet.flex_container.feature_box").insertBefore("#main_bloc_1"); 574 575} 576if (typeof ($("#main_bloc_0 .data-sheet.flex_container.feature_box"))) { 577 $("#main_bloc_0 .data-sheet.flex_container.feature_box").insertBefore("#main_bloc_0"); 578 579} 580if (typeof ($("#main_bloc_2 .data-sheet.flex_container.feature_box"))) { 581 $("#main_bloc_2 .data-sheet.flex_container.feature_box").insertBefore("#main_bloc_2"); 582 583} 584 585//obfuscation v2024 586function obsucrerlink(elem) { 587 $(elem).click(function (e) { 588 e.preventDefault(); // Empêche le comportement par défaut du lien <a> 589 590 var href = $(elem).attr('href'); // Récupère l'attribut href de l'élément <a> passé en paramètre 591 592 var parentid = $(elem).closest('li.ml_level_0').attr("id"); // Récupère l'ID du parent <li> 593 localStorage.setItem('parentLi', parentid); // Stocke l'ID dans le localStorage 594 // Redirection vers l'URL spécifiée dans l'attribut href 595 window.location.href = href; 596 }); 597} 598 599$(document).ready(function () { 600 $('a.ma_level_0.is_parent').on('click', function (e) { 601 e.preventDefault(); 602 var parentid = $(this).closest('li.ml_level_0').attr("id"); 603 localStorage.setItem('parentLi', parentid); 604 var href = $(this).attr('href'); 605 window.location.href = href; 606 }); 607 $('span.l-obf').on('click', function (e) { 608 var parentid = $(this).closest('li.ml_level_0').attr("id"); 609 localStorage.setItem('parentLi', parentid); 610 }); 611 612 613 var parentId = localStorage.getItem('parentLi'); 614 615 616 var parentElement = $('#' + parentId); 617 618 619 if (parentElement.length > 0) { 620 621 var spanElements = parentElement.find('span.l-obf'); 622 623 624 spanElements.each(function () { 625 626 var dataOValue = $(this).attr('data-o'); 627 var decodedUrl = atob(dataOValue); 628 629 630 var spanText = $(this).text(); 631 var spanClass = $(this).attr('class'); 632 633 var newLink = $('<a>', { 634 href: decodedUrl, 635 text: spanText, 636 class: 'alink_obs ' + spanClass, 637 onClick: "obsucrerlink((this));" 638 }); 639 640 $(this).replaceWith(newLink); 641 }); 642 } 643 /* show country selection popup */ 644 const storagePopup = 'ets_geo_popup_shown'; 645 const popupTrigger = document.querySelector('.ets_click_show'); 646 if (!popupTrigger) return; 647 try { 648 if (!localStorage.getItem(storagePopup)) { 649 popupTrigger.click(); 650 localStorage.setItem(storagePopup, 'true'); 651 } 652 } catch (e) { 653 if (!document.cookie.includes(storagePopup + '=true')) { 654 popupTrigger.click(); 655 document.cookie = storagePopup + '=true; path=/; max-age=' + (60 * 60 * 24 * 365); 656 } 657 } 658}); 659 660/* CAR-1086 : facade YouTube (lazy). Remplace les iframes YouTube par une vignette cliquable ; 661 l'iframe (et le JS lourd de YouTube) n'est chargee qu'au clic. Gain TBT/perf, pas de CLS (ratio 16/9). */ 662$(document).ready(function () { 663 var iframes = document.querySelectorAll('iframe[src*="youtube.com/embed/"], iframe[src*="youtube-nocookie.com/embed/"]'); 664 Array.prototype.forEach.call(iframes, function (ifr) { 665 var m = (ifr.getAttribute('src') || '').match(/embed\/([A-Za-z0-9_-]{6,})/); 666 if (!m) return; 667 var vid = m[1]; 668 var f = document.createElement('div'); 669 f.className = 'cf-yt-facade'; 670 f.style.cssText = 'position:relative;cursor:pointer;max-width:100%;aspect-ratio:16/9;' 671 + 'background:#000 center/cover no-repeat url(https://i.ytimg.com/vi/' + vid + '/hqdefault.jpg);'; 672 f.innerHTML = '<span style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);' 673 + 'width:68px;height:48px;background:rgba(0,0,0,.65);border-radius:12px;"></span>' 674 + '<span style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);' 675 + 'border-style:solid;border-width:11px 0 11px 19px;border-color:transparent transparent transparent #fff;"></span>'; 676 f.addEventListener('click', function () { 677 var n = document.createElement('iframe'); 678 n.src = 'https://www.youtube.com/embed/' + vid + '?autoplay=1'; 679 n.setAttribute('frameborder', '0'); 680 n.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'); 681 n.setAttribute('allowfullscreen', ''); 682 n.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;'; 683 f.innerHTML = ''; 684 f.appendChild(n); 685 }); 686 ifr.parentNode.replaceChild(f, ifr); 687 }); 688});
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.