From a1d9a80a6252d19de59f2f0c7fc22c509df6d40e Mon Sep 17 00:00:00 2001 From: Quentin Rouiller Date: Mon, 27 Apr 2026 05:33:32 +0200 Subject: [PATCH] =?UTF-8?q?line=20counts=20=C3=A0=20jour,=20ajout=20flow?= =?UTF-8?q?=20ASCII=20d=C3=A9taill=C3=A9,=20layout=20repo=20enrichi=20(fir?= =?UTF-8?q?efox-updates.json=20+=20CLAUDE.md)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Architecture.md | 56 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/Architecture.md b/Architecture.md index 68e93c5..c22b56b 100644 --- a/Architecture.md +++ b/Architecture.md @@ -5,16 +5,18 @@ ``` Planification/ ├── .gitignore -├── build.sh # Génère dist/chromium/, dist/firefox/, .zip, .xpi +├── build.sh # Génère dist/chromium/, dist/firefox/, .zip, .xpi, met à jour firefox-updates.json +├── firefox-updates.json # Manifest auto-update Firefox (servi via update_url) ├── CHANGELOG.md ├── LICENSE # MIT ├── README.md +├── CLAUDE.md # Workflow pour Claude Code └── src/ # Sources de l'extension (chargées par le navigateur) - ├── manifest.json # Manifest V3 (Chrome) + gecko_settings (Firefox) - ├── background.js # Service worker (~1 500 lignes) + ├── manifest.json # Manifest V3 (Chrome) + browser_specific_settings (Firefox) + ├── background.js # Service worker (~1 600 lignes) ├── viewer.html # Interface principale - ├── viewer.js # Logique (~9 500 lignes) - ├── viewer.css # Styles + thèmes clair/sombre + ├── viewer.js # Logique UI (~10 700 lignes) + ├── viewer.css # Styles + thèmes clair/sombre (~4 800 lignes) └── icons/ # icon16, icon48, icon128 ``` @@ -54,17 +56,43 @@ Worker de fond responsable de : ## Flux principal ``` -Utilisateur clique sur l'icône - └─> background.js : ouvre viewer.html - └─> viewer.js : init() - ├─> readCache(date) -> render si dispo - ├─> findEasyVistaSession (via background) - ├─> fetchPlanningXml -> parseXML - ├─> Pour chaque intervention : fetchFiche + parseHtml - ├─> renderFromData() -> buildCard() x N techs - └─> writeCache() +┌────────────────┐ clic icône ┌─────────────────────┐ +│ Navigateur │ ───────────────> │ background.js │ +│ (Chrome / │ │ (service worker) │ +│ Firefox) │ <─── viewer.html │ │ +└────────────────┘ └──────────┬──────────┘ + │ │ + │ chrome.runtime.sendMessage │ findEasyVistaSession() + │ {type: "fetchPlanning"} │ ↓ + ▼ ▼ +┌────────────────────────┐ ┌────────────────────┐ +│ viewer.js (UI) │ │ EasyVista server │ +│ ─ init() │ │ itsma.vd.ch / │ +│ ─ loadForDate(iso) │ ◄── XML ── │ etat-de-vaud.ch │ +│ ─ parseXML │ fiches │ │ +│ ─ buildCard() x N │ │ planning_xhr.php │ +│ ─ buildTooltipHTML │ │ index.php (fiches) │ +│ ─ renderFromData │ │ etc. │ +│ ─ writeCache │ └────────────────────┘ +└──────────┬─────────────┘ + │ + ▼ +┌────────────────────────────────────────────────┐ +│ chrome.storage.local │ +│ ─ admin_config (groupe, équipe, domaines, …) │ +│ ─ planning_cache_YYYY-MM-DD (par jour) │ +│ localStorage │ +│ ─ view_mode (classic / horizontal) │ +└────────────────────────────────────────────────┘ ``` +**Étapes clés** (de `init()` à l'affichage) : +1. `init()` → charge le thème + la config admin + les bornes de la journée + l'équipe. +2. `refreshSessionAndLoad()` → cherche la session EV via `background.js`. +3. `loadForDate(isoDate)` → essaye d'abord le cache local (`readCache`), puis fetche le XML calendar_block via `background.fetchPlanningXml`. +4. Pour chaque intervention présente dans le XML : on en `buildCard()` immédiatement avec les attributs déjà enrichis (contact/lieu/catégorie). Pour les statuts détaillés, on lance des `fetchFiche` séquentiels en arrière-plan qui mettent à jour le DOM au fur et à mesure. +5. À la fin du fetch complet : `writeCache()` sauvegarde tout dans `chrome.storage.local["planning_cache_YYYY-MM-DD"]`. + ## Stack technique | Élément | Détail |