1 2/* 3 script de chargement des logos (avec title et lien de redirection) et des labels du ministère 4 @author [email protected] 05-2017 5 6 Dernière mà j 05-05-2026 7 ## sont des tags de remplacements 8 9 */ 10 11Logo = {}; 12 13Logo.execute = (function () { 14 /* 15 ##imgManifests## et ##labelManifests## sont des tags qui seront remplacés par des objets json 16 */ 17 18 const othersParamsList = [{"followTarget":true,"addLink":false,"scriptVersion":"1"}]; 19 const labelManifests = []; 20 const imgManifests = [{"alt":"Minist\u00e8re de l'agriculture, de l'agro-alimentaire et de la souverainet\u00e9 alimentaire; Libert\u00e9, Egalit\u00e9, Fraternit\u00e9","title":"Minist\u00e8re de l'agriculture, de l'agro-alimentaire et de la souverainet\u00e9 alimentaire; Libert\u00e9, Egalit\u00e9, Fraternit\u00e9","description":"Logo couleur medium, sans marge, Minist\u00e8re charg\u00e9 de l'Agriculture ; en transparence","target":"https:\/\/agriculture.gouv.fr","extension":"png","src":"\/\/api-web.educagri.fr\/apis\/logo\/images\/agriculture2_medium_couleur.png","selector":"ministerefooter"}]; 21 const availableVersionsList = {"VERSION_1":"1","VERSION_2":"2"} 22 const parser = new DOMParser(); 23 24 imgManifests.forEach((imgManifest, i) => { 25 const params = othersParamsList[i]; 26 const isSvg = String(imgManifest.isSvg) === "true"; 27 const version = params.scriptVersion; 28 let el = version !== availableVersionsList["VERSION_1"] 29 ? document.querySelector(imgManifest.selector) 30 : document.getElementById(imgManifest.selector); 31 if (!el) return; 32 33 if (version !== availableVersionsList["VERSION_1"] && isSvg) { 34 const doc = parser.parseFromString(imgManifest.svgRaw, 'image/svg+xml'); 35 const newSvg = doc.querySelector('svg'); 36 const labelledbyId = "svg-title-" + Date.now().toString(36) + Math.random().toString(36).substring(2); 37 38 if (newSvg) { 39 Array.from(el.attributes).forEach(attr => { 40 const name = attr.name.toLowerCase(); 41 if (name !== 'src' && name !== 'viewbox') { 42 newSvg.setAttribute(attr.name, attr.value); 43 } 44 }); 45 46 newSvg.setAttribute("role", "img"); 47 newSvg.setAttribute("aria-labelledby", labelledbyId); 48 newSvg.setAttribute("focusable", "false"); 49 newSvg.removeAttribute('width'); 50 newSvg.removeAttribute('height'); 51 newSvg.classList.add("preserve-aspect-ratio"); 52 53 const newTitle = document.createElementNS("http://www.w3.org/2000/svg", "title"); 54 newTitle.textContent = imgManifest.title; 55 newTitle.setAttribute("id", labelledbyId); 56 newSvg.prepend(newTitle); 57 58 el.replaceWith(newSvg); 59 el = newSvg; 60 } 61 } else { 62 el.title = imgManifest.title; 63 el.alt = imgManifest.alt; 64 el.src = imgManifest.src; 65 } 66 67 const target = imgManifest.target; 68 if (params.followTarget) { 69 el.classList.add('clickable-logo'); 70 el.addEventListener("click", () => window.open(target, '_blank'), false); 71 } 72 73 if (params.addLink) { 74 const a = document.createElement("a"); 75 a.href = target; 76 a.target = '_blank'; 77 if (!isSvg) { 78 a[version !== availableVersionsList["VERSION_1"] ? "ariaLabel" : "title"] = imgManifest.title || el.title || ""; 79 } 80 if (version !== availableVersionsList["VERSION_1"]) { 81 a.setAttribute("rel", "noopener noreferrer"); 82 } 83 el.replaceWith(a); 84 a.appendChild(el); 85 } 86 }); 87 88 labelManifests.forEach(label => { 89 const targetLabel = document.getElementById(label.textSelector); 90 if (targetLabel) targetLabel.textContent = label.text; 91 }); 92 93 return true; 94})();
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.