https://leboisdesbuttes.fr/plugins/auto/auto-update-main/javascript/auto_update_alerte.js?1789391616
1(function () { 2 'use strict'; 3 4 const script = document.currentScript; 5 if (!script) { 6 return; 7 } 8 9 const url = script.dataset.autoUpdateUrl; 10 const message = script.dataset.autoUpdateMessage; 11 const connexion = script.dataset.autoUpdateConnexion; 12 // Le rythme est celui du serveur : la bascule attend un sondage entier 13 // avant de fermer les sessions, et doit savoir combien de temps cela dure. 14 const intervalle = (Number.parseInt(script.dataset.autoUpdateIntervalle, 10) || 15) * 1000; 15 const id = 'auto-update-alerte'; 16 let partie = false; 17 18 function afficher() { 19 if (document.getElementById(id)) { 20 return; 21 } 22 23 const alerte = document.createElement('div'); 24 alerte.id = id; 25 alerte.className = 'msg-alert notice auto-update-alerte'; 26 alerte.setAttribute('role', 'alert'); 27 28 const texte = document.createElement('div'); 29 texte.className = 'msg-alert__text clearfix'; 30 texte.textContent = message; 31 alerte.appendChild(texte); 32 document.body.appendChild(alerte); 33 } 34 35 function masquer() { 36 document.getElementById(id)?.remove(); 37 } 38 39 // La mise à jour a commencé : les sessions vont être fermées et ecrire/ 40 // renommé. L'onglet quitte aussitôt la page pour la connexion ; tant que 41 // la mise à jour dure, le serveur y répond par une page d'attente qui se 42 // recharge d'elle-même, puis par le formulaire. 43 function deconnecter() { 44 if (partie) { 45 return; 46 } 47 partie = true; 48 49 const ici = window.location.href; 50 if (!connexion || ici.indexOf(connexion) === 0) { 51 // Déjà sur la connexion : la recharger, sans imbriquer son adresse. 52 window.location.replace(ici); 53 return; 54 } 55 window.location.replace( 56 connexion + (connexion.indexOf('?') === -1 ? '?' : '&') + 'url=' + encodeURIComponent(ici) 57 ); 58 } 59 60 async function verifier() { 61 try { 62 const reponse = await fetch(url, { 63 cache: 'no-store', 64 credentials: 'same-origin', 65 }); 66 // Seul un 503 marqué par le plugin déconnecte : une panne du 67 // serveur n'est pas une mise à jour. 68 if (reponse.status === 503 && reponse.headers.get('X-Auto-Update-Barrier')) { 69 deconnecter(); 70 return; 71 } 72 if (!reponse.ok) { 73 return; 74 } 75 const etat = await reponse.json(); 76 etat.active === true ? afficher() : masquer(); 77 } catch (erreur) { 78 // Une panne passagère ne doit pas rassurer à tort l'utilisateur. 79 } 80 } 81 82 verifier(); 83 setInterval(verifier, intervalle); 84 // Un onglet en arrière-plan est ralenti par le navigateur : il sonde 85 // avant qu'on puisse y cliquer. 86 document.addEventListener('visibilitychange', () => { 87 if (document.visibilityState === 'visible') { 88 verifier(); 89 } 90 }); 91})();
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.