Planification — Extension EasyVista Canton de Vaud

Extension Chrome / Firefox pour visualiser de manière claire et rapide le planning des techniciens DGNSI (Canton de Vaud) dans EasyVista.

Aperçu rapide

  • Auteur : Quentin Rouiller (QRO)
  • Cible : techniciens DGNSI (Canton de Vaud), EasyVista (itsma.etat-de-vaud.ch / itsma.vd.ch)
  • Démarrage projet : jeudi 16 avril 2026
  • Version actuelle : v2026.5.43
  • Contact : voir page wiki Contact
  • Manifest : V3 (Chrome/Edge/Firefox)
  • Format : .zip (Chromium) + .xpi signé (Firefox)

Fonctionnalités principales

Vue planning

  • Affichage des interventions et réservations groupées par technicien
  • Horaires, contact, lieu, catégorie, statut visibles d'un coup d'œil
  • Équipe configurable depuis le panel admin (détection automatique via EasyVista)
  • Cache local pour réduire les requêtes serveur

Modes d'affichage

  • Vue classique (depuis v1.0.0) : cards en grille, mode compact écran 24" (depuis v2026.5.30)
  • Vue horizontale (depuis v2026.5.32) : timeline par tech, sidebar verticale (depuis v2026.5.36)
    • Depuis v2026.5.40 : barre couleur catégorie + référence + ville sur chaque segment timeline
  • Toggle Vue classique ↔ Vue horizontale via bouton ⊞ dans popup user-badge
  • Persistance localStorage (view_mode)

Tooltips et popups

  • Tooltips au survol (hover) sur chaque intervention
  • Popups épinglables (📌) pour garder ouvert (depuis v4.1.3)
  • Popups timeline persistantes au clic (depuis v4.2.3)
  • Drag-and-drop des popups épinglés (depuis v2026.5.19)
  • Safe area : popups jamais cachés sous topbar/dock (depuis v2026.5.20)
  • Position auto adaptative (4 candidats : droite/gauche/dessous/dessus)

Classification des absences (depuis v2026.5.27)

  • Maladie/Accident : indigo #4338ca
  • Congé / Congés : cyan #06b6d4 (suffixe s adaptatif)
  • Pompier : rouge #b03030
  • Badge + barre gauche colorée + dégradé fond
  • Absences récurrentes (configurées par tech) : cyan (depuis v2026.5.30)

User et session

  • Badge user avec photo/initiales en topbar
  • Badge cliquable (depuis v2026.5.26) : popup avec ⚙ Paramètres + ⊞ Vue + compteur session MM:SS
  • Retry automatique en cas d'échec fetch user (60s, max 10 essais)
  • Compteur de session EasyVista (tick 1s, depuis v5.0.0)
  • Reconnexion automatique

Admin et configuration

  • Mode admin : bouton ⚙ Paramètres dans popup user-badge (depuis v2026.5.25)
  • Configuration persistée dans chrome.storage.local (admin_config)
  • Sélecteur de groupe EasyVista (SI-CSS, SI-EXT, …) en tête de l'onglet Équipe (depuis v2026.5.40) — détection automatique via le <select id="plan_group_id"> de la page Planning EV, robuste aux ajouts/renommages côté EV
  • Édition manuelle des domaines EasyVista interne / externe (depuis v2026.5.40)
  • Tri des techniciens : actifs d'abord, puis exclus, alphabétique dans chaque groupe (depuis v2026.5.40)

Versionning — historique et conventions

L'extension a connu 3 systèmes de versionning successifs :

Période Format Exemple
16-17 avril 2026 Versions de base 1.0.0, 2.0.0, 3.0.0
18-20 avril 2026 SemVer classique 4.1.3, 4.2.8, 5.0.12
21 avril 2026 → maintenant ANNÉE.MAJEURE.PATCH 2026.5.162026.5.40

Format actuel : ANNÉE.MAJEURE.PATCH

À partir de la v2026.5.16 (21 avril 2026), l'extension utilise le schéma suivant :

Position Sens Quand ça change
2026 Année À chaque nouvelle année calendaire
5 Majeure À chaque gros changement / ajout important (refonte, nouvelle feature majeure, bump volontaire)
40 Patch À chaque livraison dans la majeure courante (corrections, ajustements, petites features)

Exemples :

  • 2026.5.162026.5.17 : petite correction ou ajustement (patch)
  • 2026.5.402026.6.0 : refonte majeure (par exemple nouvelle vue, nouvelle architecture)
  • 2026.x.y2027.0.0 : passage à la nouvelle année

Le numéro de majeure n'est pas un mois et pas un chiffre lié au calendrier — c'est un compteur de versions importantes propre au projet (la 5 actuelle continue le 5.x qui précédait, repris tel quel lors du passage au format annuel).

⚠️ Important : v2026.5.16 succède chronologiquement à v5.0.12, malgré le numéro qui semble plus petit. Le préfixe 2026 indique l'année.

Versions notables

v2026.5.43 (latest, 27 avril 2026) — Fix Firefox : menu dock + stabilité popup pin/unpin

  • Firefox : le menu hover sur les pastilles du dock (popup réduit) se positionne désormais correctement au-dessus de la pastille.
  • Pin/unpin : la popup épinglée ne bouge plus et garde la même taille quand on la dé-épingle / re-épingle.

v2026.5.42 — Nettoyage de commentaires + exemples génériques

  • Uniformisation des exemples utilisés dans les commentaires de viewer.js (parsing contacts/lieux/références/codes-barres) en placeholders abstraits. Comportement runtime strictement inchangé.

v2026.5.41 — Suppression des hardcodes + UX admin + thème unifié

  • Plus aucun hardcode runtime pour le groupe EV, les domaines, la liste de techniciens ou les absences récurrentes. Tout est piloté par admin_config (chrome.storage.local), persisté entre les mises à jour.
  • Au 1er install : aucun tech sélectionné, aucune absence récurrente. Le viewer affiche un message "Aucun technicien sélectionné" tant que l'utilisateur n'a rien configuré dans Paramètres → Équipe.
  • Édition des domaines : chrome.permissions.request() au save quand l'utilisateur saisit un domaine custom (au-delà des 2 défauts). Manifest optional_host_permissions: ["https://*/*"] pour accepter n'importe quel domaine HTTPS après accord du navigateur.
  • Heures de la journée : bouton ✓ Appliquer explicite (au lieu de save direct), toast de confirmation, refetch automatique du planning. Synchronisation effective avec les requêtes EV (day_start_hour / day_end_hour / begin_hour / end_hour) — avant, l'affichage changeait mais les requêtes restaient sur 8h-19h hardcodés.
  • Thème unifié : le toggle 🌙 de la topbar et le sélecteur Apparence du panel admin écrivent dans la même clé (cfg.theme). Le mode "Automatique" est résolu en JS via prefers-color-scheme (le CSS n'avait pas de bloc @media, ce qui faisait retomber sur le clair même quand l'OS était en sombre). Listener matchMedia pour bascule live en mode auto.
  • Conflit absence/réservation × intervention : si une intervention est planifiée pendant qu'un tech a une absence (toute la journée ou demi-journée) ou une réservation au même créneau, sa carte est peinte en rouge plein (intervention conflictuelle). Logique : full-day → toutes en rouge ; partiel → seules celles en chevauchement.
  • Absences récurrentes génériques : suppression de la fonction hardcodée isXXXAbsentFriday(). L'absence récurrente est désormais générique : RECURRING_ABSENCES[tech.id] lit cfg.recurringAbsences et le label "Absent le X" est calculé dynamiquement depuis le jour de la semaine.
  • Notifications au-dessus du flou : z-index .toast-stack relevé à 11000 (le panel admin est à 10000) pour que les toasts de feedback restent visibles quand l'admin est ouvert.
  • Vue horizontale : popups au survol/clic limités aux candidats dessous/dessus (la sidebar à gauche et la timeline pleine largeur rendent gauche/droite peu praticables).
  • Tri équipe : inclus d'abord, puis exclus, alphabétique dans chaque sous-groupe (ne saute plus quand on coche/décoche).
  • Auto-refresh à l'enregistrement : ajouter/retirer un tech, changer de groupe, modifier les domaines → le planning se met à jour immédiatement (plus besoin de recharger l'extension manuellement).
  • Onglet Statuts retiré (placeholder lecture-seule, jamais utilisé).
  • Ménage de code : suppression de CACHE_DAYS (inutilisée), LS_THEME (clé localStorage obsolète), commentaire historique sur initAdminMenu(). Aucun symbole orphelin restant.

v2026.5.40 — Sélection groupe EV + édition domaines + tri équipe + vue horizontale enrichie

  • Onglet Équipe : sélecteur de groupe EasyVista (SI-CSS, SI-EXT, …) en tête de section, détecté automatiquement à l'ouverture du panel via le <select id="plan_group_id"> de la page Planning EV. Robuste aux ajouts/renommages côté EV.
  • Onglet Équipe : sélecteur de groupe EasyVista (SI-CSS, SI-EXT, …) en tête de section, détecté automatiquement à l'ouverture du panel via le <select id="plan_group_id"> de la page Planning EV. Robuste aux ajouts/renommages côté EV.
  • ID groupe affiché en italique (ex: ID groupe : 191).
  • Quand on change de groupe, la liste d'équipe se rafraîchit automatiquement avec les membres du nouveau groupe.
  • Plus de bouton "Détecter" : tout est auto à l'ouverture.
  • Tri double des techniciens : inclus d'abord, puis exclus, alphabétique dans chaque sous-groupe.
  • Onglet EasyVista : édition manuelle des deux domaines (interne DGNSI / externe Internet), bouton Réinitialiser, normalisation auto des URLs.
  • Onglet Statuts retiré (placeholder lecture-seule).
  • Vue horizontale enrichie : chaque segment timeline contient désormais une barre verticale couleur catégorie à gauche, la référence (ex: SYYMMDD_NNNNN) en gras, et la ville en gris muted. Hauteur passée de 22px à 32px.
  • Réorganisation interne du repo : src/ pour les sources, dist/ généré, Autres/ pour build.sh + meta files (LICENSE, README, CHANGELOG), Builds/ pour les artefacts distribués.

v2026.5.39 — Séparation Matin / Après-midi + Apparence

  • Pills "MATIN" / "APRÈS-MIDI" entre les interventions de chaque tech
  • Section Apparence dans les paramètres : thème, taille du texte, durée du cache, heures de la journée
  • Section À propos (version, auteur, licence)

v2026.5.38 — Attribution auteur + nettoyage + observabilité

  • Module LOG unifié + handlers globaux d'erreur
  • Toggle "Logs verbeux (debug)" dans le panel admin
  • En-têtes copyright dans tous les fichiers source

v2026.5.37 — Refonte vue horizontale (sidebar complète)

  • Topbar entièrement déplacée en sidebar verticale

v2026.5.36 — Sidebar verticale en vue horizontale

  • Wrapper flex-row #horizontal-wrapper [sidebar 200px] + [main]

v2026.5.32 — Vue horizontale togglable

  • Bouton ⊞ "Vue" dans popup user-badge

v2026.5.27 — Classification absences

  • Maladie indigo, Congé cyan, Pompier rouge

v4.2.3 — Grande popup timeline persistante

  • Clic segment timeline = popup persistante

v4.1.3 — Tooltips épinglables

  • Introduction de pinTooltip

v1.0.0 (16 avril 2026) — Initiale

  • Premier viewer EasyVista pour le canton

Voir CHANGELOG.md pour l'historique complet (40+ versions taggées).

Architecture technique

Planning/
├── src/                       # Sources de l'extension (chargées par le navigateur)
│   ├── manifest.json          # Manifest V3 (Chrome) + gecko_settings (Firefox)
│   ├── background.js          # Service worker : fetch planning XML, gestion session, fetch fiches
│   ├── viewer.html            # Interface principale
│   ├── viewer.js              # Logique (~9 500 lignes)
│   ├── viewer.css             # Styles + thèmes clair/sombre
│   └── icons/                 # icon16, icon48, icon128
├── Autres/                    # Méta : build script + docs (depuis v2026.5.40)
│   ├── build.sh               # Génère dist/chromium/, dist/firefox/, .zip, .xpi
│   ├── CHANGELOG.md
│   ├── LICENSE
│   └── README.md
├── Builds/                    # Artefacts distribués aux techniciens
│   ├── Chromium/
│   ├── Firefox/
│   ├── planification-vYYYY.M.PATCH-chromium.zip
│   └── planification-vYYYY.M.PATCH-firefox.xpi
└── dist/                      # Sortie de build (gitignoré)

viewer.js — fonctions clés

Fonction Introduite Rôle
loadForDate v1.0.0 Fetch + parse planning pour une date donnée
buildTooltipHTML v1.0.0 Construction HTML du tooltip d'intervention
pinTooltip v4.1.3 Épingler un tooltip (le rendre permanent)
bindTimelinePopover v4.2.3 Lier popover timeline aux segments
showTimelinePopover v4.2.3 Afficher popover persistante
openPersistentTimelinePopup v4.2.3 Grande popup détaillée
setTooltipViewportPosition v4.2.4 Détection auto fixed/abs
_softUnpinPopup v4.3.3 Désépinglage mou (popup reste visible)
initAppClock v5.0.0 Horloge HH:MM topbar
initSessionTimer v5.0.0 Compteur session EV (tick 1s)
_applyViewMode v2026.5.32 Toggle vue classique/horizontale
_maybeRetryFetchUser v2026.5.34 Relance opportuniste fetch user
positionTooltipAnchored v2026.5.34 Positionnement unifié (4 candidats)
renderAdminSectionTeam v5.0.0 Onglet admin Équipe (sélecteur groupe EV depuis v2026.5.40)
renderAdminSectionEV v5.0.0 Onglet admin EasyVista (édition domaines depuis v2026.5.40)

background.js — fonctions clés

Fonction Rôle
findEasyVistaSession Trouve l'onglet EV ouvert + extrait PHPSESSID
fetchPlanningXml Fetch XML calendar_block du planning
fetchFicheHtml Fetch HTML d'une fiche EV (avec retry SSO)
fetchCurrentUser Identifie l'user EV connecté
detectGroupsFromEV (v2026.5.40) Parse le <select id="plan_group_id"> → liste des groupes EV
detectTeamFromEV Liste les membres d'un groupe (paramétrable depuis v2026.5.40)
evFetch Wrapper fetch avec headers EV (Referer, X-Requested-With)

Constantes / valeurs hardcodées (toutes versions)

  • Group ID EV par défaut : 191 (SI-CSS) — surchargeable via le sélecteur depuis v2026.5.40
  • Absences récurrentes par tech : configurables via Paramètres → Équipe (depuis v2026.5.41)
  • GUIDs forms EV :
    • Demande : S={C99ECD05-3D48-4C62-ABF0-66292053AED6}
    • Incident : I={07ED9C68-6172-48EA-8A58-90912B0A283E}
  • SSO : Canton ForgeRock OpenAM
  • Storage keys : admin_config, view_mode
  • Domaines : itsma.etat-de-vaud.ch (interne), itsma.vd.ch (externe)

Installation

Firefox

Télécharger le .xpi depuis Builds/ ou le serveur de mises à jour interne, puis drag-and-drop dans about:addons.

Chrome / Edge

Mode développeur : décompresser Builds/planification-vYYYY.M.PATCH-chromium.zip (ou utiliser directement dist/chromium/) et charger en tant qu'extension non empaquetée.

Développement

git clone https://gitea.netaplaid.ch/FroSteel/Planification.git
cd Planification

# Modifier les sources dans src/
# Bumper la version dans src/manifest.json + ajouter une entrée dans Autres/CHANGELOG.md
# Builder :
./Autres/build.sh
# → produit dist/chromium/, dist/firefox/, dist/*.zip, dist/*.xpi

# Copier dans Builds/ pour distribution :
cp -r dist/chromium Builds/Chromium
cp -r dist/firefox  Builds/Firefox
cp dist/*.zip dist/*.xpi Builds/

git add -A
git commit -m "vYYYY.M.PATCH — description"
git tag vYYYY.M.PATCH
git push origin main
git push --tags

Licence

MIT License — Copyright (c) 2026 Quentin Rouiller

Auteur

Quentin Rouiller (QRO) Technicien DGNSI — Canton de Vaud Contact : voir page wiki Contact

S
Description
Extension Chrome/Firefox : vue claire et rapide du planning EasyVista pour coordinateurs DGNSI (Canton de Vaud).
https://gitea.netaplaid.ch/FroSteel/Planification/wiki
Readme MIT 4.5 MiB
v2026.5.45 Latest
2026-05-08 16:31:09 +02:00
Languages
JavaScript 78.6%
CSS 20.1%
HTML 0.9%
Shell 0.4%