1(function () { 2 "use strict"; 3 4 console.log("[CCO Vimeo] Initialisation du script. Paramétrez vos préférences dans Code fixes dans l'admin"); 5 6 // 1. Optimisation des liens Vimeo (class + param autoplay) 7 document.querySelectorAll('a[href*="player.vimeo.com"]').forEach(function (a) { 8 if (!a.classList.contains("grve-video-popup")) { 9 a.classList.add("grve-video-popup"); 10 console.log("[CCO Vimeo] Classe grve-video-popup ajoutée au lien :", a); 11 } 12 let href = a.getAttribute("href"); 13 let optimized = reorderAutoplayParam(href); 14 if (optimized !== href) { 15 a.setAttribute("href", optimized); 16 console.log("[CCO Vimeo] Param autoplay replacé en premier dans le lien :", optimized); 17 } 18 }); 19 20 // 2. Optimisation de l'intégration des iframes Vimeo (fluid-width-video-wrapper) 21 function processFluidWidthWrappers() { 22 document.querySelectorAll(".fluid-width-video-wrapper").forEach(function (wrapper) { 23 const parent = wrapper.parentElement; 24 if (parent && parent.nodeName === "DIV" && parent.hasAttribute("style") && parent.getAttribute("style").replace(/\s/g, "").toLowerCase().startsWith("padding:56.25%")) { 25 parent.removeAttribute("style"); 26 parent.classList.add("cco-vimeo-container"); 27 console.log("[CCO Vimeo] Style supprimé et classe cco-vimeo-container ajoutée au parent :", parent); 28 } 29 }); 30 } 31 32 // Premier check au chargement 33 processFluidWidthWrappers(); 34 35 // Observer les ajouts dynamiques de nodes dans le body 36 if (window.MutationObserver) { 37 const observer = new MutationObserver(function (mutationsList) { 38 let found = false; 39 for (const mutation of mutationsList) { 40 if (mutation.type === "childList") { 41 mutation.addedNodes.forEach(function (node) { 42 if (node.nodeType === 1 && node.classList && node.classList.contains("fluid-width-video-wrapper")) { 43 found = true; 44 } 45 // On regarde aussi si des enfants pourraient contenir la class 46 if (node.nodeType === 1 && node.querySelector && node.querySelector(".fluid-width-video-wrapper")) { 47 found = true; 48 } 49 }); 50 } 51 } 52 if (found) { 53 processFluidWidthWrappers(); 54 } 55 }); 56 observer.observe(document.body, { childList: true, subtree: true }); 57 console.log("[CCO Vimeo] MutationObserver initialisé pour .fluid-width-video-wrapper"); 58 } else { 59 // Fallback lent (pour les très vieux navigateurs) 60 setInterval(processFluidWidthWrappers, 10000); 61 console.log("[CCO Vimeo] Pas de MutationObserver, fallback avec interval 10s"); 62 } 63 64 // 3. Optimisation des iframes Vimeo embed (position param autoplay) 65 document.querySelectorAll('iframe[src*="player.vimeo.com"]').forEach(function (iframe) { 66 const src = iframe.getAttribute("src"); 67 const optimizedSrc = reorderAutoplayParam(src); 68 if (optimizedSrc !== src) { 69 iframe.setAttribute("src", optimizedSrc); 70 console.log("[CCO Vimeo] Param autoplay replacé en premier dans le src iframe :", optimizedSrc); 71 } 72 }); 73 74 /** 75 * Déplace le param autoplay=1 en premier dans l'URL (GET), gère & et & 76 */ 77 function reorderAutoplayParam(url) { 78 if (!url) return url; 79 let tmp = url.replace(/&/g, "&"); 80 const urlParts = tmp.split("?"); 81 if (urlParts.length < 2) return url; 82 let base = urlParts[0] + "?"; 83 let params = urlParts[1].split("&"); 84 const paramsNoAutoplay = []; 85 let autoplayVal = null; 86 87 params.forEach(function (p) { 88 if (p.indexOf("autoplay=") === 0) { 89 autoplayVal = p; 90 } else { 91 paramsNoAutoplay.push(p); 92 } 93 }); 94 if (!autoplayVal) return url; // rien à faire 95 96 const reordered = [autoplayVal].concat(paramsNoAutoplay).join("&"); 97 let rebuilt = base + reordered; 98 console.log("[CCO Vimeo] reorderAutoplayParam:", rebuilt); 99 return rebuilt; 100 } 101})();
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.