Architecture
Cette page s'adresse à qui veut lire, construire ou modifier le code de l'extension. Elle décrit la version publiée 2026.5.50.
Structure du dépôt
Planification/
├── src/ Sources de l'extension, chargées telles quelles par le navigateur
│ ├── manifest.json Manifest V3 (version, permissions, domaines EasyVista)
│ ├── background.js Service worker : session, requêtes EasyVista, hôte natif
│ ├── viewer.html Page du planning
│ ├── viewer.js Interface : lecture, rendu, bulles, déplacements, paramètres
│ ├── viewer.css Styles, thèmes clair et sombre
│ └── icons/ Icônes 16, 48 et 128 px
├── native-host/ Script Windows de synchronisation (PowerShell)
│ ├── Gerer.cmd Point d'entrée : installer, réparer, désinstaller
│ └── bin/ host.ps1, manage.ps1, tray.ps1, tray.vbs
├── build.sh Construction des paquets Chromium et Firefox
├── firefox-updates.json Manifeste de mise à jour lu par Firefox
├── CHANGELOG.md
├── LICENSE MIT
└── README.md
Le code est du JavaScript sans framework ni bundler. Le navigateur charge src/ sans transformation.
Construire
Prérequis : bash, python3 et zip.
./build.sh
Le script lit la version dans src/manifest.json et produit :
dist/chromium/etdist/planification-vX.Y.Z-chromium.zip;dist/firefox/etdist/planification-vX.Y.Z-firefox.xpi, avec les réglages propres à Firefox (identifiant de l'extension, version minimale 140, adresse de mise à jour) ;- une entrée pour cette version dans
firefox-updates.json.
Pour essayer une modification : charge dist/chromium/ comme extension non empaquetée dans Chrome, ou dist/firefox/ comme module temporaire dans Firefox (about:debugging).
Publier une version
- Version dans
src/manifest.json, entrée dansCHANGELOG.md, puis./build.sh. - Commit, tag
vX.Y.Zet publication Gitea avec le.zipChromium et le.xpi. - Mozilla signe le
.xpi(distribution hors catalogue). Le.xpisigné remplace celui de la publication, puis son empreinte sha256 va dansfirefox-updates.jsonsurmain.
Firefox lit firefox-updates.json sur la branche main pour proposer la mise à jour : ce fichier et les .xpi publiés servent en production.
Composants
Service worker (background.js)
- Trouve la session EasyVista (cookie
PHPSESSID) sur les domaines configurés et détecte le contexte réseau, interne ou Internet. - Envoie toutes les requêtes vers EasyVista : planning du jour, fiches, historique des actions, utilisateur connecté, groupes et membres d'un groupe.
- Envoie les modifications demandées par la page : déplacement ou changement d'horaire, création et suppression d'absences et de réservations, envoi sur la douchette, prolongation de session.
- Ouvre la page du planning au clic sur l'icône de l'extension.
Page du planning (viewer.html, viewer.js, viewer.css)
- Lit le planning EasyVista et le range dans le store du jour.
- Affiche les deux vues, les bulles, le dock, la recherche et les Paramètres.
- Parle au script de synchronisation par messagerie native (
ch.netaplaid.planification).
Données stockées
Dans chrome.storage.local, sur le poste :
| Clé | Contenu |
|---|---|
admin_config |
Réglages : groupe, équipe, absences récurrentes, domaines, apparence, emails, dossier partagé |
planv2_AAAA-MM-JJ |
Store d'un jour : techniciens et interventions, chacune avec un verdict unique (live, done, suspended, closed, gone, moved, unknown) |
reservation_meta |
Informations de réservation en attente d'enregistrement dans le store |
pompier_assignments |
Périodes de service pompier |
network_context_v2 |
Contexte réseau détecté (interne ou Internet) |
debug_logs |
Journal détaillé activé ou non (côté service worker) |
Dans localStorage de la page : view_mode (vue classique ou horizontale) et debug_logs.
L'extension efface les jours plus vieux que la durée du cache (7 jours par défaut). Elle identifie une intervention par son requestId, sinon son actionId, sinon sa référence.
Synchronisation entre postes
Le script native-host s'installe dans le profil Windows de l'utilisateur, sans droits administrateur, et s'enregistre comme hôte de messagerie native. L'extension lui confie la lecture et l'écriture des fichiers de jour dans le sous-dossier v2 du dossier partagé, classés par année et par mois. Chaque écriture compare le fichier avant de le remplacer et prend un verrou : deux postes ne s'écrasent pas.
Réseau
L'extension ne contacte que :
- les domaines EasyVista configurés (
itsma.etat-de-vaud.ch,itsma.vd.chpar défaut), avec la session de l'utilisateur ; - le portail de connexion du Canton, ouvert dans un onglet pour se reconnecter ;
- Gitea, pour télécharger le script de synchronisation sur clic de l'utilisateur.
Firefox, de son côté, consulte firefox-updates.json sur Gitea pour les mises à jour.
Journaux
Chaque ligne de la console porte l'heure, la version, le module et le niveau. Les étapes détaillées n'apparaissent qu'avec « Logs verbeux (debug) » (onglet Diagnostics).
Planification
Planification v2026.5.50 · Licence MIT · Signaler un problème