1/** 2 * « Les temps forts » â arrivée des vignettes et décompte des chiffres. 3 * 4 * Extrait de transactions.js le 28/08 : le bloc est désormais posé sur 5 * l'accueil aussi, où cette feuille-là n'est pas chargée. Autonome, donc, 6 * et sans dépendance â il ne partage plus que le CSS. 7 * 8 * UNE SEULE FOIS : une animation qui se rejoue à chaque passage devient 9 * un tic, pas un effet. Sans JavaScript ou avec les animations réduites, 10 * tout est déjà lisible â le CSS pose l'état final, le script ne fait 11 * que retarder son apparition. 12 */ 13(function () { 14 'use strict'; 15 /* La virgule décimale et « mrd » sont français ; la page anglaise écrit 16 2.70 bn (06/09/2026). La langue vient du <html lang>. */ 17 var R5_FR = /^fr/i.test(document.documentElement.lang || 'fr'); 18 var R5_DEC = R5_FR ? ',' : '.'; 19 var R5_MRD = R5_FR ? ' mrd' : ' bn'; 20 21 var bande = document.querySelector('.tx-forts'); 22 if (!bande) { return; } 23 24 /* Formats, identiques à ceux du serveur : le décompte doit atterrir 25 exactement sur le texte rendu, pas à côté. */ 26 function nb(n) { return Math.round(n).toString().replace(/\B(?=(\d{3})+(?!\d))/g, 'â'); } 27 function mio(n) { 28 if (!n) { return '0'; } 29 if (n >= 1e9) { return (n / 1e9).toFixed(2).replace('.', R5_DEC) + R5_MRD; } 30 if (n >= 1e6) { return (n / 1e6).toFixed(1).replace('.', R5_DEC) + 'M'; } 31 return Math.round(n / 1e3) + 'k'; 32 } 33 34 var doux = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 35 if (doux || !('IntersectionObserver' in window)) { return; } // déjà visible 36 37 // On masque seulement maintenant, et l'on garde un filet : si 38 // l'observateur ne se déclenche pas â onglet déclaré masqué, 39 // navigateur atypique â la bande s'affiche quand même au bout de deux 40 // secondes. Un contenu ne doit jamais dépendre d'un événement qui 41 // peut ne pas venir. 42 bande.classList.add('anim'); 43 var lance = false; 44 var filet = setTimeout(demarrer, 2000); 45 46 function demarrer() { 47 if (lance) { return; } 48 lance = true; 49 clearTimeout(filet); 50 bande.classList.add('vu'); 51 52 Array.prototype.forEach.call(bande.querySelectorAll('[data-tx-compteur]'), function (el, i) { 53 var cible = parseInt(el.dataset.txCompteur, 10); 54 var final = el.textContent; 55 if (!cible || cible > 1e12) { return; } 56 var format = (final.indexOf('M') !== -1 || final.indexOf('mrd') !== -1 || final.indexOf('k') !== -1) 57 ? mio : nb; 58 var debut = null, duree = 1100 + i * 120; 59 function pas(t) { 60 if (debut === null) { debut = t; } 61 var p = Math.min(1, (t - debut) / duree); 62 var adouci = 1 - Math.pow(1 - p, 3); 63 el.textContent = p < 1 ? format(Math.round(cible * adouci)) : final; 64 if (p < 1) { requestAnimationFrame(pas); } 65 } 66 requestAnimationFrame(pas); 67 }); 68 } 69 70 var obs = new IntersectionObserver(function (entrees) { 71 if (entrees[0].isIntersecting) { demarrer(); obs.disconnect(); } 72 }, { threshold: 0.2 }); 73 obs.observe(bande); 74})();
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.