// viewer.js — Logique de la vue claire // // Étapes : // 1. Lire le HTML capturé depuis chrome.storage.local // 2. Parser les techniciens (emp_XXXXX dans le DOM) // 3. Parser les événements (g_arr_player[N] dans le JS inline) // 4. Calculer : pompier du jour, absents, interventions par tech // 5. Afficher tout ça // 6. Au survol / clic : charger la fiche détaillée via fetch() // ========================================================================== // Configuration // ========================================================================== // Règles fixes (techs avec horaires particuliers) const RULES = { // Pillonel, Olivier (ID 40944) est absent tous les vendredis "40944": { alwaysAbsentOn: [5], // 5 = vendredi (JS: 0=dim, 1=lun, ..., 5=ven, 6=sam) reason: "Absent fixe le vendredi" } }; // Cache des fiches détaillées (persiste pour la session) const detailsCache = new Map(); // Fetch en cours (pour éviter de lancer 2x la même requête) const detailsPromises = new Map(); // ========================================================================== // Init // ========================================================================== document.addEventListener("DOMContentLoaded", async () => { document.getElementById("btn-refresh").addEventListener("click", refresh); document.getElementById("btn-preload").addEventListener("click", preloadAll); await loadFromStorage(); }); async function loadFromStorage() { const data = await chrome.storage.local.get([ "planningHtml", "planningUrl", "planningCapturedAt", "planningError" ]); if (data.planningError) { showError(data.planningError); return; } if (!data.planningHtml) { showError( "Aucune donnée de planning disponible. " + "Va sur la page du planning des techniciens sur itsma.vd.ch puis clique sur l'icône de l'extension." ); return; } try { const parsed = parsePlanning(data.planningHtml, data.planningUrl); render(parsed, data.planningCapturedAt); } catch (err) { console.error(err); showError("Erreur lors du parsing du planning : " + err.message); } } async function refresh() { document.getElementById("subtitle").textContent = "Retour sur EasyVista pour actualiser…"; // Inviter l'utilisateur à revenir sur l'onglet EasyVista et re-cliquer sur l'icône // (on ne peut pas re-capturer automatiquement depuis le viewer) showError( "Pour actualiser : va sur l'onglet EasyVista, recharge le planning (F5), " + "puis clique à nouveau sur l'icône de l'extension." ); } // ========================================================================== // Parsing // ========================================================================== function parsePlanning(html, sourceUrl) { // Parser le HTML dans un DOM isolé pour pouvoir utiliser les sélecteurs CSS const parser = new DOMParser(); const doc = parser.parseFromString(html, "text/html"); // --- 1. Extraire les techniciens depuis