Update v2026.5.40 — structure repo, sélecteur groupe EV, édition domaines, suppression Statuts

2026-04-27 01:02:29 +02:00
parent 84efed130e
commit 077c7a05a3
+45 -13
@@ -4,15 +4,18 @@
``` ```
Planification/ Planification/
├── manifest.json # Manifest V3 (Chrome) + gecko_settings (Firefox) ├── .gitignore
├── background.js # Service worker (~1 350 lignes) ├── build.sh # Génère dist/chromium/, dist/firefox/, .zip, .xpi
├── viewer.html # Interface principale ├── CHANGELOG.md
├── viewer.js # Logique (~9 300 lignes)
├── viewer.css # Styles + thèmes clair/sombre
├── icons/ # icon16, icon48, icon128
├── README.md
├── LICENSE # MIT ├── LICENSE # MIT
── CHANGELOG.md ── README.md
└── 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)
├── viewer.html # Interface principale
├── viewer.js # Logique (~9 500 lignes)
├── viewer.css # Styles + thèmes clair/sombre
└── icons/ # icon16, icon48, icon128
``` ```
## Composants principaux ## Composants principaux
@@ -20,20 +23,24 @@ Planification/
### `background.js` — Service worker (Manifest V3) ### `background.js` — Service worker (Manifest V3)
Worker de fond responsable de : Worker de fond responsable de :
- Récupération de la session EasyVista (PHPSESSID) - Récupération de la session EasyVista (PHPSESSID)
- Fetch du XML `calendar_block` (planning du jour pour les 8 techs) - Fetch du XML `calendar_block` (planning du jour pour les techs configurés)
- Fetch des fiches détaillées (HTML) - Fetch des fiches détaillées (HTML)
- Fetch du timeline JSON (texte action complet) - Fetch du timeline JSON (texte action complet)
- Détection contexte réseau (interne / externe via SSO) - Détection contexte réseau (interne / externe via SSO)
- Détection automatique des **groupes EasyVista** disponibles (depuis v2026.5.40) en parsant le `<select id="plan_group_id">` de la page Planning EV
- Détection automatique des **membres d'un groupe** (paramétrable par `groupId` depuis v2026.5.40)
- Gestion du cache local (`chrome.storage.local`) - Gestion du cache local (`chrome.storage.local`)
- Nettoyage des vieux caches (cron) - Nettoyage des vieux caches (cron)
### `viewer.js` — Interface principale ### `viewer.js` — Interface principale
- Parsing du XML calendar_block - Parsing du XML calendar_block
- Construction des cards / rows par tech - Construction des cards / rows par tech
- Timeline visuelle avec segments - Timeline visuelle avec segments (depuis v2026.5.40 : barre couleur catégorie + référence + ville en vue horizontale)
- Tooltips détaillés (épinglables, draggables) - Tooltips détaillés (épinglables, draggables)
- 2 modes d'affichage (classique / horizontale) - 2 modes d'affichage (classique / horizontale)
- Panel admin (Apparence / Équipe / EasyVista / Statuts / Diagnostics / À propos) - Panel admin (Apparence / Équipe / EasyVista / Diagnostics / À propos) — section "Statuts" retirée en v2026.5.40
- Onglet **Équipe** : sélecteur de groupe EV (SI-CSS, SI-EXT, …) avec rafraîchissement auto de la liste de membres au changement de groupe (v2026.5.40)
- Onglet **EasyVista** : édition manuelle des deux domaines interne / externe (v2026.5.40)
- Module LOG unifié (debug toggle) - Module LOG unifié (debug toggle)
- Handlers globaux d'erreur - Handlers globaux d'erreur
- `sendMessage` avec timeout - `sendMessage` avec timeout
@@ -54,7 +61,7 @@ Utilisateur clique sur l'icône
├─> findEasyVistaSession (via background) ├─> findEasyVistaSession (via background)
├─> fetchPlanningXml -> parseXML ├─> fetchPlanningXml -> parseXML
├─> Pour chaque intervention : fetchFiche + parseHtml ├─> Pour chaque intervention : fetchFiche + parseHtml
├─> renderFromData() -> buildCard() x 8 techs ├─> renderFromData() -> buildCard() x N techs
└─> writeCache() └─> writeCache()
``` ```
@@ -65,7 +72,7 @@ Utilisateur clique sur l'icône
| Manifest | V3 | | Manifest | V3 |
| Browser support | Chrome / Edge / Firefox 140+ | | Browser support | Chrome / Edge / Firefox 140+ |
| Pas de framework | JS vanilla | | Pas de framework | JS vanilla |
| Pas de build step | les fichiers sont chargés tels quels | | Pas de build step navigateur | les fichiers sont chargés tels quels (un script `build.sh` empaquette les sources en `.zip` / `.xpi`) |
| Stockage | `chrome.storage.local` (cache + admin_config) + `localStorage` (préfs UI) | | Stockage | `chrome.storage.local` (cache + admin_config) + `localStorage` (préfs UI) |
| Réseau | `fetch` avec credentials (cookies EV) | | Réseau | `fetch` avec credentials (cookies EV) |
| Logs | console (préfixé + timestamp + version) | | Logs | console (préfixé + timestamp + version) |
@@ -86,6 +93,10 @@ Utilisateur clique sur l'icône
| `positionTooltipAnchored` | v2026.5.34 | Positionnement tooltip (4 candidats) | | `positionTooltipAnchored` | v2026.5.34 | Positionnement tooltip (4 candidats) |
| `LOG.error/warn/info` | v2026.5.38 | Logger unifié | | `LOG.error/warn/info` | v2026.5.38 | Logger unifié |
| `_applyTextZoom` | v2026.5.39 | Zoom global du texte (slider Apparence) | | `_applyTextZoom` | v2026.5.39 | Zoom global du texte (slider Apparence) |
| `renderAdminSectionTeam` | v5.0.0 | Onglet admin Équipe (sélecteur de groupe EV depuis v2026.5.40, tri inclus + alpha) |
| `renderAdminSectionEV` | v5.0.0 | Onglet admin EasyVista (édition domaines depuis v2026.5.40) |
| `paintGroupOptions` / `refreshTeamForGroup` | v2026.5.40 | Helpers du sélecteur de groupe (peuplement + refresh auto de la liste équipe) |
| `_normalizeOrigin` | v2026.5.40 | Normalisation des URLs des domaines EV éditées dans l'admin |
## Fonctions clés (background.js) ## Fonctions clés (background.js)
@@ -97,4 +108,25 @@ Utilisateur clique sur l'icône
| `fetchTimelineApi` | Fetch JSON timeline d'une fiche (texte action complet) | | `fetchTimelineApi` | Fetch JSON timeline d'une fiche (texte action complet) |
| `fetchCurrentUser` | Identifie l'user EV connecté | | `fetchCurrentUser` | Identifie l'user EV connecté |
| `detectNetworkContext` | Interne (etat-de-vaud.ch) ou externe (vd.ch) | | `detectNetworkContext` | Interne (etat-de-vaud.ch) ou externe (vd.ch) |
| `detectGroupsFromEV` (v2026.5.40) | Parse le `<select id="plan_group_id">` de la page Planning → liste `[{id, name}, …]` des groupes disponibles |
| `detectTeamFromEV` (paramétrable depuis v2026.5.40) | Liste les membres d'un groupe ; accepte un `groupId` en argument pour basculer entre SI-CSS / SI-EXT |
| `evFetch` | Wrapper fetch avec headers EV (Referer, X-Requested-With) | | `evFetch` | Wrapper fetch avec headers EV (Referer, X-Requested-With) |
## Configuration persistée
`chrome.storage.local["admin_config"]` :
| Clé | Type | Rôle | Introduite |
|---|---|---|---|
| `team` | `{id: name}` | Liste des techniciens inclus | v5.0.0 |
| `recurringAbsences` | `{id: [days]}` | Jours de la semaine d'absence récurrente | v5.0.0 |
| `groupId` | string | ID du groupe EV sélectionné | v5.0.0 |
| `groupName` | string | Nom du groupe sélectionné (cache d'affichage) | v2026.5.40 |
| `detectedGroups` | `[{id, name}]` | Cache de la dernière détection des groupes | v2026.5.40 |
| `evOrigins` | `[interne, externe]` | Domaines EasyVista éditables dans l'admin | v2026.5.40 |
| `theme` | `auto`/`light`/`dark` | Préférence thème | v2026.5.39 |
| `textZoom` | `-2..+2` | Niveau de zoom du texte | v2026.5.39 |
| `cacheDays` | number | Durée de rétention du cache (défaut 7) | v2026.5.39 |
| `dayStart` / `dayEnd` | number | Plage horaire de la timeline (défaut 8-18) | v2026.5.39 |
`localStorage["view_mode"]` : `classic` ou `horizontal` (depuis v2026.5.32).