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 |