forked from FroSteel/Planification
c9363c64b6
ATTRIBUTION
- En-têtes copyright dans tous les fichiers source (viewer.js, viewer.html,
viewer.css, background.js)
- @author Quentin Rouiller sur 22 fonctions clés
- Signature "Développé par Quentin Rouiller" en bas du popup user-badge
- description manifest mentionnant DGNSI
NETTOYAGE
- Retrait fonction vide initAdminMenu()
- Retrait classes CSS orphelines (.date-picker-day, .intervention v1)
- Retrait 14× console.log [viewMode] verbeux + 5× console.log [bg]
- extendBtn.onclick → addEventListener (cohérence + cleanup possible)
OBSERVABILITÉ
- Module LOG unifié : préfixe + timestamp + version + niveau
- Handlers globaux window/self.error + unhandledrejection (viewer + bg)
- Toggle "Logs verbeux (debug)" dans le panel admin (Diagnostics)
- Synchronisation viewer ↔ background via chrome.storage.onChanged
- LOG.info muet par défaut, visible quand debug ON
GARDE-FOUS
- sendMessage avec timeout 15s (évite promises pendantes si SW MV3
oublie sendResponse)
- writeCache avec gestion quota (purge auto entrées > 7 jours puis retry,
sinon toast user)
- renderFromData wrappé try/catch + null checks DOM
- JSON.parse [timeline] : log warn avec snippet du contenu fautif
- .catch(() => {}) swallowed remplacés par log warn (clipboard, session,
cache)
- getManifest centralisé dans LOG.version()
BUILDS
- dist/chromium/ et dist/firefox/ prêts à charger en mode dev
- planification-v2026.5.38-chromium.zip (~152 Ko)
- planification-v2026.5.38-firefox.xpi (~152 Ko, à signer sur AMO)
220 lines
11 KiB
Markdown
220 lines
11 KiB
Markdown
# 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.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 <html>
|
||
- 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`
|