# CHANGELOG — Extension Planification EasyVista Canton de Vaud > Ce changelog documente l'évolution de l'extension Chrome/Firefox "Planification" > développée par Quentin Rouiller pour les techniciens DGNSI (Canton de Vaud). > > Les versions documentées ci-dessous sont celles dont les détails sont connus. > Pour les versions plus anciennes, Claude Code se basera sur l'analyse du code > source pour déterminer un message de commit pertinent. --- ## v2026.5.40 — Sélection groupe EV + édition domaines + tri équipe + vue horizontale enrichie **Branche** : main ### Onglet Équipe (panel admin) - Nouveau **sélecteur de groupe EasyVista** (SI-CSS, SI-EXT, …) en tête de section, détecté automatiquement à l'ouverture du panel via le ``. - `detectTeamFromEV()` accepte désormais un `groupId` en argument → permet de basculer entre SI-CSS / SI-EXT depuis l'admin. - ⚠ Le fetch du planning continue d'utiliser `group_id=191` codé en dur — sera retiré quand on validera que `cfg.groupId` est bien alimenté par le sélecteur en terrain réel. ## v2026.5.39 — Séparation Matin / Après-midi + Apparence (thème, zoom, cache) **Branche** : current ### Séparation matin / après-midi - Séparateur visuel "MATIN" / "APRÈS-MIDI" entre les interventions dans la vue classique : pill grise neutre, ligne 3px épaisse. - Affiché aussi entre les absences partielles (demi-journée). - Si une période est vide, son séparateur n'est pas affiché. - Caché en vue horizontale (les rows sont masquées de toute façon). ### Timeline — coupure midi très visible - Bande verticale composée d'un trait massif central (couleur --text) + stripes diagonales en arrière-plan (effet "césure"). 6 px de large (7 px en vue horizontale). Visible immédiatement, pas de label superflu. ### Vue horizontale (sidebar) - Boutons (Absence, Douchette, Actualiser, Tout recharger, Vider cache, Thème) maintenant **vraiment** poussés en bas via `min-height: 100vh` sur la sidebar. - Bouton "Aujourd'hui" : style cohérent avec les flèches ◀ ▶ (même padding, font-size, hauteur), texte centré, libellé complet "Aujourd'hui" (au lieu de "Auj."). - Espace visuel entre `Actualisé à HH:MM` et le bouton Absence (fine bordure top + padding). ### Vue classique (topbar) - Ordre verrouillé via CSS `order` : badge user → titre → date-nav → capture-info → refresh-check. Évite les déplacements au retour de vue horizontale. ### Section Apparence (admin) — refondue + en première position - **Thème** : sélecteur Auto / Clair / Sombre (s'enregistre direct). - **Durée du cache (jours)** : configurable, défaut 7 jours, range 1-365. Lue par viewer.js (purge auto) ET background.js (au boot). - **Taille du texte** : 5 niveaux (-20%, -10%, 100%, +10%, +20%) via CSS `zoom` sur body. Persisté dans admin_config.textZoom et appliqué dès le boot. - Section "Apparence" est maintenant **la première** dans le panel admin. ## v2026.5.38 — Attribution auteur + nettoyage code **Branche** : current ### Attribution auteur - Ajout en-têtes copyright dans tous les fichiers source (viewer.js, viewer.html, viewer.css, background.js) - Ajout `@author Quentin Rouiller` sur les fonctions principales (loadForDate, buildCard, buildTooltipHTML, pinTooltip, _softUnpinPopup, positionTooltipAnchored, _applyViewMode, _moveElementsToSidebar, _restoreElementsToTopbar, fetchAndShowCurrentUser, _maybeRetryFetchUser, initAppClock, initAppFooter, bindTimelinePopover, openPersistentTimelinePopup, showTooltip, _findFreePopupPosition, _clampPopupInSafeArea, findEasyVistaSession, fetchPlanningXml, fetchCurrentUser, detectNetworkContext) - Ajout signature "Développé par Quentin Rouiller" en bas du popup user-badge (style cohérent avec footer version : 11px, italique, gris atténué, séparateur fin) - Mise à jour `description` du manifest pour mentionner DGNSI ### Nettoyage et optimisation - Retrait fonction vide `initAdminMenu()` (inutile depuis v2026.5.25, l'admin passe par le bouton ⚙ Paramètres du popup user-badge) - Retrait classe CSS orpheline `.date-picker-day` (déjà remplacée par `.date-custom` en v2026.5.17) - Retrait anciens styles CSS `.intervention` (layout v1, jamais générés depuis le passage à `.intervention-v2`) - Retrait commentaire orphelin `.intervention-v2.is-ghost` (classe retirée en v4.3.3) - Retrait 14× `console.log("[viewMode]")` debug verbose (gardé uniquement les `console.warn` utiles pour erreurs) - Retrait 5× `console.log("[bg]")` debug verbose dans fetchPlanningXml / fetchFicheHtml / fetchSessionTimeRemaining / extendSessionKeepAlive (gardé warnings + logs critiques) - Remplacement `extendBtn.onclick` par `addEventListener("click", ...)` pour plus de cohérence ### Builds - `dist/chromium/` et `dist/firefox/` prêts à charger en mode dev - `planification-v2026.5.38-chromium.zip` (~144 Ko) - `planification-v2026.5.38-firefox.xpi` (~144 Ko, à signer sur AMO) ## v2026.5.37 — Refonte vue horizontale (sidebar complète) - Topbar en haut supprimée en vue horizontale - User-badge + titre déplacés tout en haut de la sidebar - Bouton "Aujourd'hui" pleine largeur avec icône ↺ - Date + heure centrés sous le bouton - Séparateur visuel - Sélecteur de date pleine largeur - Flèches ◀ ▶ côte à côte (wrapper #sidebar-arrows) - Stats empilées - Synchronisé à HH:MM - Espace vide intentionnel - Boutons du bas vers le haut (margin-top: auto sur Absence) - Barre de rafraîchissement en overlay top-left - Banderole pompier masquée en vue horizontale (badge + barre rouge à gauche conservés) ## v2026.5.36 — Sidebar verticale en vue horizontale - Création wrapper flex-row #horizontal-wrapper contenant [sidebar] + [main] - Sidebar 200px (170px sur <1400px), sticky, bg-muted - Déplacement physique des éléments via JS (ELEMENTS_TO_RELOCATE) - Mémorisation parents d'origine (data-orig-parent + data-orig-index) - Restauration propre en vue classique - Zone nom tech : 140px → 120px ## v2026.5.35 — Fix popup épinglé position vue horizontale + stats gauche - Fix popup épinglé qui partait en haut à gauche en vue horizontale - Cause : rows .intervention-v2 cachées (display: none) → getBoundingClientRect (0,0,0,0) - Solution : priorité 1 tooltip visible, priorité 2 segment timeline, fallback srcEl - Stats globales en colonne verticale 200px à gauche en vue horizontale - Position sticky, fond bg-muted, séparateurs · masqués - Zone nom tech 200px → 140px (vue horizontale) ## v2026.5.34 — Bouton 📌 restauré + badge user cliquable - HTML : badge user toujours visible avec "?" par défaut (retiré class hidden) - _softUnpinPopup refait en 8 étapes loggées - Popup reste visible après désépinglage (plus de suppression auto au mouseleave) - Restauration du bouton 📌 dans .tooltip-actions - Handler click ré-attaché : clic 📌 = ré-épingle, clic ↻ = recharge - _ensureSoftUnpinnedCleanupHandler : handler global clic hors popup - _maybeRetryFetchUser : relance opportuniste après succès planning et reconnexion session - Logs abondants : [currentUser], [softUnpin], [positionTooltip], [persistentTimeline], [showTooltip] - Fonction positionTooltipAnchored unifiée (4 candidats droite/gauche/dessous/dessus) - popup._linkedIv stocké pour ré-épinglage ## v2026.5.33 — Interactions vue horizontale différenciées - Hover segment timeline en vue horizontale → grande popup directement (openPersistentTimelinePopup) - Clic segment timeline en vue horizontale → ouvre fiche EasyVista - Popup absence en vue horizontale : hover uniquement sur badge .card-tech-badge (pas sur carte entière) - Vue classique : comportement inchangé ## v2026.5.32 — Vue horizontale togglable - Bouton ⊞ "Vue" dans popup user-badge (à côté ⚙ Paramètres) - Toggle Vue classique ↔ Vue horizontale persisté localStorage "view_mode" - HTML class "view-classic" ou "view-horizontal" sur - Chaque tech = 1 ligne horizontale compacte en mode horizontal - Card header devient barre latérale gauche fixe 200px - Interventions détaillées masquées (display: none) - Timeline horizontale pleine largeur - Stats rapides .tech-row-stats ajoutés au header (nb interv, Xm · Ya) ## v2026.5.31 — Sarcelle pour absence récurrente (REJETÉ par utilisateur) - Couleur Pillonel vendredi : sarcelle foncée #0f766e / soft #ccfbf1 - Variables --c-recurring, --c-recurring-soft - Layout 4 colonnes forcées + scroll interne cartes (REJETÉ : "scroll en continu") ## v2026.5.30 — Absence récurrente cyan + mode compact 24" - Absence récurrente Pillonel vendredi en cyan - Mode compact @media (max-width: 1920px) avec grid-template-columns: repeat(4, 1fr) ## v2026.5.29 — Contraste++ + footer - Contrastes encore plus forts (text-muted #d0d5de dark, #2e3642 light) - Footer QRO/version : 13px badge avec fond bg-muted + bordure - Fix highlight row : selector .intervention-v2[data-iv-idx] - Scroll-into-view automatique au hover segment timeline ## v2026.5.28 — Ajustements visuels absences - Retrait pastille ronde (.tech-name-dot supprimée) — barre gauche + badge suffisent - "Maladie" → "Maladie/Accident" - Contraste textes secondaires +30% - Popups épinglés width fixe 520px (ne rétrécit plus au resize fenêtre) - _clampPopupInSafeArea ne rétrécit plus si popup > zone dispo ## v2026.5.27 — Classification absences (Maladie/Congé/Pompier) - Topbar une ligne : "Jeudi 23.04.26 • 21:55" (gros point •, même taille 22px) - Fermeture auto popups non-épinglés au survol autre popup/carte - Texte +20% topbar/stats/boutons - Icône thème ☀/🌙 plus contrastée (bordure 1.5px, fond bg-muted, ombre) - Classification absences (ABSENCE_LABELS) + absenceCategory : "maladie"|"conge"|"pompier"|null - Couleurs : Maladie #4338ca indigo foncé, Congé #06b6d4 cyan, Pompier #b03030 rouge - Badge + barre gauche + dégradé fond pour catégorie - Libellé "Absent du DD.MM au DD.MM — Maladie/Accident" - Suffixe `s` adaptatif (Congé/Congés) ## v2026.5.26 — Badge user inconnu cliquable + retry - En cas d'échec fetch user, afficher rond gris "?" cliquable - Bouton ⚙ Paramètres accessible même quand user inconnu - Retry automatique 60s (max 10 essais = 10 min) - Reset compteur au succès ## v2026.5.25 — Bouton Paramètres dans popup user-badge - Remplace les 5 clics sur le titre pour ouvrir admin - Bouton ⚙ Paramètres explicite dans le popup user-badge ## v2026.5.16-v2026.5.24 — Évolutions diverses (à compléter) - v2026.5.17 : popup user-badge avec ligne session (MM:SS), couleur selon seuil - v2026.5.18 : dock pastilles popups épinglés avec couleur catégorie - v2026.5.19 : drag popup épinglé - v2026.5.20 : safe area popups (topbar + dock) - v2026.5.22 : régénération tooltip hover après softUnpin - v2026.5.23 : reset bulleState.pinned + iv._reloading --- ## Versions antérieures (v5.x et v4.x) > Ces versions sont à analyser par Claude Code à partir des fichiers source. > Indices clés à chercher dans le viewer.js : > > - Présence de `pinTooltip` → version >= v4.x > - Présence de `_softUnpinPopup` → version >= v4.3.3 > - Présence de `initSessionTimer` → version >= v5.0.9 > - Présence de `initAppClock` → version >= v5.0.0 > - Présence de `_applyViewMode` → version >= v2026.5.32 > - Présence de `bindTimelinePopover` → version >= v4.2.3 > - Présence de `openPersistentTimelinePopup` → version >= v4.2.3 > - Commentaires `// vX.Y.Z` au-dessus des fonctions = version d'introduction ### v5.0.0 — Refonte topbar (horloge, menu admin) - initAppClock : horloge HH:MM au milieu topbar - initAdminMenu : menu admin caché (5 clics sur titre) - initSessionTimer : compteur de session EV (tick 1s) ### v4.x — Fonctions tooltip avancées - v4.1.12 : moveTooltip devenu no-op (popup statique) - v4.1.15 : pendant épinglage, ne pas remplacer contenu sur hover autre iv - v4.2.3 : grande popup timeline persistante (clic), suit-souris (hover) - v4.2.3 : bindTimelinePopover, showTimelinePopover, moveTimelineTooltip - v4.2.4 : setTooltipViewportPosition (détection auto fixed/abs) - v4.2.9 : pied de page discret QRO/version - v4.2.9 : initModalScrollLock (bloquer scroll arrière modal) - v4.3.0 : tooltip live libéré après épinglage (réutilisable autres survols) - v4.3.3 : _softUnpinPopup (désépinglage mou) ### v3.x et antérieures — Versions de base - À analyser par Claude Code --- ## Notes techniques persistantes (toutes versions) - 8 techs hardcodés : "76272,83725,66635,92235,90070,40944,72485,86874" - Pillonel Olivier (ID 40944) absent tous les vendredis (hardcodé) - Group ID EasyVista : 191 - Domaines cibles : itsma.etat-de-vaud.ch (interne), itsma.vd.ch (externe) - SSO : Canton ForgeRock OpenAM - ABSENCE_LABELS = /^(cong[ée]s|maladie|pompier)$/i - ADMIN_CONFIG_KEY = "admin_config" - VIEW_MODE_KEY = "view_mode" (depuis v2026.5.32) - DAY_NAMES_FULL = ["Dimanche", "Lundi", ..., "Samedi"] - GUIDs forms EV : S={C99ECD05-3D48-4C62-ABF0-66292053AED6} demande, I={07ED9C68-6172-48EA-8A58-90912B0A283E} incident - Couleurs catégories : livraison #2563eb, recup #16a34a, remplacement #ea580c, incident #8b5cf6, rollout #92400e, reservation #f59e0b, autre #6b7280 ## Auteur **Quentin Rouiller** (QRO) Technicien DGNSI — Canton de Vaud Email pour commits Git : `quentin.rouiller@ikmail.com`