Table of Contents
- Versions
- Récap chronologique express
- Versions notables
- v2026.5.48 (latest, 24 juillet 2026) — Notification par email des déplacements, onglet Email, fiches réservation fiables entre postes
- v2026.5.47 (18 juillet 2026) — Vue « échelle de temps exacte » : aide à la saisie, erreurs mises en évidence, corrections de fiabilité
- v2026.5.46 (9 juillet 2026) — Couche données v2, vue « échelle de temps exacte », session fiabilisée, réservations partagées
- v2026.5.45 (8 mai 2026) — Dock latéral drag&drop, fix verdicts ghost, multi-onglets EZV résolu
- v2026.5.44 — Refonte topbar, personnalisation Apparence, onboarding équipe, fix #1
- v2026.5.43 — Fix Firefox menu dock + stabilité popup pin/unpin
- v2026.5.42 — Nettoyage de commentaires + exemples génériques
- v2026.5.41 — Suppression des hardcodes runtime + UX admin + thème unifié
- v2026.5.40 — Sélection groupe EV + édition domaines + tri équipe + réorga repo
- v2026.5.39 — Séparation Matin / Après-midi + Apparence
- v2026.5.38 — Attribution auteur + nettoyage + observabilité
- v2026.5.37 — Refonte vue horizontale (sidebar complète)
- v2026.5.36 — Sidebar verticale en vue horizontale
- v2026.5.32 — Vue horizontale togglable
- v2026.5.27 — Classification absences
- v2026.5.25 — Bouton Paramètres dans popup user-badge
- v2026.5.16 — Passage au versionning par année
- v5.0.0 — Refonte topbar
- v4.2.3 — Grande popup timeline persistante
- v4.1.3 — Tooltips épinglables
- v1.0.0 (16 avril 2026) — Version initiale
- Historique complet
Versions
L'extension a connu 3 systèmes de versionning successifs :
| Période | Format | Exemple |
|---|---|---|
| Avril 2026 (jeudi 16) | Versions de base | 1.0.0, 2.0.0, 3.0.0 |
| Avril 2026 | SemVer classique | 4.1.3, 4.2.8, 5.0.12 |
| Avril 2026 → maintenant | ANNÉE.MAJEURE.PATCH |
2026.5.16 → 2026.5.47 |
Récap chronologique express
| Date | Version | Résumé en 1 ligne |
|---|---|---|
| 24 juillet 2026 | v2026.5.48 (latest) |
Notification par email des déplacements (brouillon pré-rempli, modèle personnalisable, variables + aperçu), onglet Paramètres → Email, adresses depuis l'annuaire EV (noms tronqués complétés), infos de réservation fiables entre postes (horodatées), bouton « Ouvrir EasyVista » fiable sans cache, recherche durcie (Entrée, statuts finals) |
| 18 juillet 2026 | v2026.5.47 |
Vue « échelle de temps exacte » : aide à la saisie (zone surlignée + heure choisie, bulle plage/durée), erreurs début=fin en rouge + blocage, corrections de fiabilité, bouton « Tester la communication », script poste 2026.1.8 |
| 9 juillet 2026 | v2026.5.46 |
Couche données v2 + vue « échelle de temps exacte » + session fiabilisée + réservations partagées + installeur PowerShell publié |
| 8 mai 2026 | v2026.5.45 |
Dock latéral drag&drop + fix verdicts ghost (parser dates) + multi-onglets EZV (#4) + 5 autres issues (#3 #5 #6 #7 #8) |
| 1 mai 2026 | v2026.5.44 |
Refonte topbar + personnalisation Apparence (couleur + 28 polices) + onboarding équipe + fix #1 |
| 27 avril 2026 | v2026.5.43 |
Fix Firefox menu dock + stabilité popup pin/unpin |
| 27 avril 2026 | v2026.5.42 |
Nettoyage de commentaires + exemples génériques |
| 27 avril 2026 | v2026.5.41 |
Suppression hardcodes runtime + UX admin + thème unifié + conflits absence/intervention |
| 27 avril 2026 | v2026.5.40 |
Sélection groupe EV + édition domaines + tri équipe + vue horizontale enrichie |
| 26 avril 2026 | v2026.5.39 |
Séparation Matin / Après-midi + section Apparence (thème, taille, cache, heures) |
| 25 avril 2026 | v2026.5.38 |
Attribution auteur + nettoyage + observabilité (LOG unifié) |
| 24-25 avril 2026 | v2026.5.33 → .37 |
Vue horizontale (sidebar verticale, interactions différenciées, mini-cards) |
| 23 avril 2026 | v2026.5.16 → .26 |
Schéma YYYY.M.PATCH, drag-and-drop popups, panel admin via popup user-badge |
| 21 avril 2026 | v5.0.0 → v5.0.15 |
Refonte topbar (horloge + compteur session), absences partielles |
| 20 avril 2026 | v4.3.3 → v4.3.0 |
Soft-unpin, popup timeline persistante, drag des popups |
| 16-20 avril 2026 | v1.0.0 → v4.2.x |
Premier viewer EasyVista, tooltips épinglables, infos enrichies |
➡ Détails complets ci-dessous.
Versions notables
v2026.5.48 (latest, 24 juillet 2026) — Notification par email des déplacements, onglet Email, fiches réservation fiables entre postes
- Brouillon d'email après un déplacement (autre jour ou autre technicien, fenêtre de modification ou glisser-déposer) : pré-adressé aux deux techniciens (séparateur « ; » compatible Outlook), sujet et message issus d'un modèle personnalisable (Paramètres → Email) avec variables cliquables par thème (Intervention / Avant / Après) et aperçu en direct. L'envoi reste manuel. La case « Prévenir les techniciens par email » des fenêtres de déplacement ne vaut, décochée, que pour ce déplacement-là.
- Adresses des techniciens (onglet Équipe, colonne Email, boutons au-dessus de la liste) : « Récupérer les emails » remplit les adresses manquantes depuis l'annuaire EasyVista et complète un nom affiché tronqué (garde anti-homonyme) ; adresse saisie jamais écrasée ; déduction
prenom.nom@domaineconfigurable sinon. - Réservations fiables entre postes : les infos saisies (n°, ville, rue, catégorie) voyagent avec la réservation, horodatées — la modification la plus récente gagne ; plus de fuites entre créneaux, techniciens ou postes ; transfert conservé sur re-planification EasyVista non ambiguë ; pompier du jour plus compté en double.
- Reconnexion : l'écran « Session expirée » sans cache se ferme réellement après reconnexion ; re-cliquer relance le chargement.
- Recherche : départ fiable en fin de frappe, Entrée immédiate, roue visible dès le début, « Planifiée (passé) » ne ferme plus la zone, statuts affichés seulement pour Clôturé / Fait.
v2026.5.47 (18 juillet 2026) — Vue « échelle de temps exacte » : aide à la saisie, erreurs mises en évidence, corrections de fiabilité
Aide à la saisie : au survol d'un créneau libre en échelle exacte, une zone surlignée suit la souris et affiche l'heure choisie (début → fin) ; une bulle fixe rappelle la plage libre et la durée disponible, toujours placée sur un espace libre (jamais par-dessus un rendez-vous). Les rendez-vous en erreur (début = fin) sont désormais affichés en rouge et restent visibles ; en poser un par-dessus est bloqué avec un avertissement. Interventions courtes (1–5 min) visibles ; zone du nom du technicien pleine hauteur ; barre des heures collée sous la banderole.
Fiabilité : navigation rapide entre dates (plus d'écrasement du jour affiché), technicien retiré de l'équipe, blocage de synchronisation du dossier partagé corrigé, jour lu depuis le dossier d'emblée, doublon d'absence, réservations multiples le même jour, barre de progression et message de reconnexion bien placés.
Synchronisation : bouton « Tester la communication » (diagnostic extension → script du poste → dossier), panneau Synchro réorganisé, script du poste 2026.1.8 (verrou d'index multi-postes, icône persistante ; le bouton « Télécharger le script » récupère cette version).
v2026.5.46 (9 juillet 2026) — Couche données v2, vue « échelle de temps exacte », session fiabilisée, réservations partagées
Couche données v2 (refonte complète) : un store par jour (planv2_<date>), un seul verdict par intervention (live / done / suspended / closed / gone / moved), une seule fusion vie/mort pour tout (EV↔store, local↔dossier, import). Dossier partagé en sous-dossier v2 (les anciens postes n'interfèrent plus) ; EasyVista s'affiche immédiatement, le dossier habille les cartes sans re-télécharger ; les déplacements portent un verdict propagé.
Vue « échelle de temps exacte » (option Paramètres → Apparence, exclusive avec « Afficher les pauses ») : chaque intervention est posée à son heure réelle sur une bande continue — règle des heures fixe en haut, traits d'heures continus sur toute la hauteur (pointillés aux demi-heures, césure rayée à midi, les absents sont sautés), ligne rouge « maintenant », chevauchements empilés en sous-lignes, bord gauche coloré = poignée (cliquer = modifier, glisser = déplacer), zones libres survolables et cibles de drop précises, cartes étroites en texte compact (« Université 5 »).
Session fiabilisée : fin des faux « déconnecté » (cookie réécrit ≠ supprimé, expiration déclarée sur preuve uniquement, onglet EasyVista facultatif avec la permission cookies, contre-vérification serveur des statuts HTTP, compteur recalé sur la vraie valeur EV).
Réservations : modal enrichie (préréglages, n°/ville/rue/catégorie, recherche automatique des infos EV par n°) ; les informations sont désormais partagées entre tous les postes via le dossier. En vue par heure, la carte affiche le lieu, sinon qui a réservé.
Douchette : vraie confirmation EasyVista + resynchronisation automatique après un déplacement. Recherche : opérateurs (%, "...", -mot, tech:...), pagination, mise en avant stabilisée. Pompier : assignations par période (« pompier du mois »). Divers : conflit au déplacement avec créneau libre proposé, vérification d'adresse fiche/action, badge multi-jours, contacts à deux numéros corrigés, réouverture des fiches faites/clôturées, catégorie « Autre » en violet foncé.
Installeur du dossier partagé publié : le script PowerShell (native messaging) est en asset de la release, téléchargeable depuis Paramètres → Dossier partagé.
v2026.5.45 (8 mai 2026) — Dock latéral drag&drop, fix verdicts ghost, multi-onglets EZV résolu
Dock latéral drag&drop
Le dock à droite permet de mettre des interventions de côté pendant la navigation entre les jours, puis de les redéposer plus tard.
- Apparition graduelle pendant un drag : peep-min (sans contenu), peep (avec cartes, ~50 % visibles), expanded (au survol ou au bord droit).
- Délai 500 ms pour expand/collapse pour éviter le flicker quand le curseur effleure le bord du dock. Wrapper debouncé qui s'auto-annule si l'intention change avant 500 ms.
- Card du dock : référence en gras + durée prévue (
1h,1h30,45min) calculée depuisstartTime/endTimedu snapshot, avec une barre verticale 4 px sur la gauche dans la couleur de la catégorie d'intervention. Fond transparent. La couleur est lue directement sur la classecolor-*de la card source du planning. - Bouton de retrait
×: repositionné dans la card (top: 2px / right: 2px). Appui long 2 s avec animationconic-gradient(@property --hold). Un clic simple ne fait rien (anti-clic accidentel). - Drag depuis le dock : retrait différé à l'activation effective du drag (5 px). Un clic-relâche sans bouger ne sort plus la carte. Ghost flottant sans heure à gauche. Drop sur tech → modal de confirmation. Drop hors zone / Échap / sur le même slot d'origine → restauration dans le dock.
- Pas de scrollbar horizontale en bas du dock (
overflow-x: hiddenexplicite). Pas de clic-through dans la zone du dock en peep / expanded. - Pas de placeholder fantôme pendant un drag-from-dock : fallback sur
iv._dockHtml(HTML capturé à l'add) puisque la card source n'existe plus dans le planning courant.
Verdicts ghost — fix critique parser de fiche
Une intervention terminée par le tech mais dont la fiche était passée en statut « Redirigé » / « Finalisation » / « Exécution » était à tort marquée comme « annulée » et retirée du planning, parce que le parser cherchait les dates aux indices fixes [8] / [9] / [11] du tableau rows alors que le layout EV récent les place en [6] / [7] / [9].
- Détection robuste : scan des valeurs pour le pattern
DD/MM/YYYY HH:MM:SSet garde des 2 dernières occurrences comme (création, fin). Description = 2 colonnes après la date de fin. Survit aux variations de layout EV. - Décorrélation logs / KEEP-forcé : nouvelle case dédiée « Garder les disparitions » dans Paramètres → Diagnostics, indépendante des « Logs verbeux ». Persistée dans
admin_config.keepDisappearedGhosts(défaut OFF). Mode prod par défaut → verdictREMOVEappliqué. - Conditions de retrait : statut EV ∈ Annulé/Supprimé, OU statut clos sans action du tech avec commentaire, OU action sans commentaire
login: …. - Garde KEEP par sécurité sur tous les chemins d'erreur (pas de session, JSON
basicAutoCompleteinvalide, exception réseau, fiche tronquée < 20 000 octets, exception non rattrapée).
Drag&drop bloqué pour les interventions non-déplaçables
_canRescheduleIv refuse maintenant explicitement le drag pour :
- iv en verdict
terminated-pending(gris « fait »). - iv en verdict
terminated-clos(vert ✓✓). - iv dont le statut EV est dans
CLOSED_STATUSouRESOLVED_STATUS. - iv en cours d'analyse de disparition (
_disappearChecking).
Popups dépinglés — auto-fermeture
- Auto-fermeture du popup
.soft-unpinnedquand la souris quitte sa zone et celle des cards liées de la même iv (300 ms de grâce, fade-out 180 ms). Hit-test géométriquemousemovedocument. - Pause du hit-test pendant un drag de planning en cours (
reschedule-dragging).
Tooltip / contact nettoyé
Le contact ne contient plus les labels « fiche » (Étage, Bureau, Service, Matériel, Problème, TFS, Date, Heure, Lieu, Bénéficiaire, Nom utilisateur) qui se collent parfois au contact à cause de séparateurs perdus dans la source EV. extractContacts détecte 2 patterns : label suivi de :, ou lettre minuscule collée à un label en majuscule. Côté tooltip, formatActionTextMultiline insère un saut de ligne avant chaque label, y compris quand le : manque mais que le label est collé à un mot minuscule.
Issues résolues — détails par ticket
- #3 — Coches « Absences récurrentes » : merge propre au lieu d'écrasement.
- #4 — Perte session EZV multi-onglets : permission optionnelle
cookies+ listenerchrome.cookies.onChangedqui broadcaste uncookieChangedau viewer. - #5 — Copie référence depuis popup épinglée : handler
copy-refajouté. - #6 — Popup épinglée premier plan au clic : recalcul du z-index sur
mousedown. - #7 — Notification « +2 min » fantôme : reset des flags slide-alert au retour de la prolongation.
- #8 — Compteur pompier : un pompier absent toute la journée est exclu du compteur.
v2026.5.44 — Refonte topbar, personnalisation Apparence, onboarding équipe, fix #1
Refonte topbar (vue classique)
- Sélecteur de date du planning ancré au centre absolu (
position: absolute; left: 50%; transform: translate(-50%, -50%)) — il ne se décale plus quand le bouton « ✕ Arrêter » apparaît à droite pendant un rafraîchissement. Auparavant il était centré viamargin-left: auto; margin-right: auto;dans le flex flow → l'arrivée du bouton Arrêter rétrécissaittopbar-leftet la date glissait vers la gauche. - Bouton « Aujourd'hui » affiché en toutes lettres (au lieu de « Auj. »).
- Horloge contextuelle (date du jour + heure) réduite et discrète, à côté du bouton Aujourd'hui dans un cadre encadré (today-block).
- Date du planning agrandie (28px en classique, 17px gras en horizontal) et neutre — la couleur ne change plus selon la date sélectionnée.
Personnalisation — Paramètres → Apparence
-
Couleur de la barre du haut : nouveau panneau avec 12 presets cliquables (Défaut, Blanc, Gris clair, Anthracite, Bleu DGNSI, Marine, Vert sapin, Brique, Violet, Rouge, Bleu pastel, Vert pastel) + picker custom (
<input type="color">) + champ hex#rrggbb+ bouton Réinitialiser. Persisté danscfg.topbarColor. -
Calcul automatique du contraste : la luminance de la couleur choisie détermine la couleur du texte topbar. Variable CSS
--topbar-textposée sur:root(blanc sur fond foncé, foncé sur fond clair)..topbar h1,.app-clock*,.capture-info,.date-custom, boutons et badges héritent de cette variable. Plus de texte invisible quand le user pique du noir/marine. -
Quand une couleur custom est active (
html.has-topbar-color), les boutons de la topbar (et de la sidebar en horizontal) adoptent un look translucide cohérent viacolor-mix(in srgb, var(--topbar-text) X%, transparent)(10% bg, 28% border, hover plus marqué). -
Police de l'application : sélecteur avec 28 choix organisés en familles :
- sans-serif : Arial, Helvetica, Verdana, Tahoma, Trebuchet MS, Calibri, Segoe UI, Gill Sans, Futura, Optima
- serif : Times New Roman, Georgia, Cambria, Garamond, Palatino, Bookman
- monospace : Courier New, Consolas, Lucida Console, JetBrains Mono / Fira Code
- display : Comic Sans MS, Impact, Brush Script, Copperplate
- condensée : Arial Narrow / Helvetica Narrow
La police choisie s'applique à TOUTE la page (body) — topbar, cards, popups, tooltips, panel admin. Variable CSS
--app-font. Chaque option du select s'affiche dans sa propre police pour prévisualiser, avec un aperçu live (« Aperçu — Vendredi 24.04.2026 ») à droite du select. -
Persisté dans
cfg.appFont(anciencfg.topbarFontlu en fallback pour migration).
Vue horizontale
- Bloc « Aujourd'hui + horloge » déplacé en bloc dans la sidebar (
today-blockajouté àELEMENTS_TO_RELOCATE). Aujourd'hui en haut, horloge en dessous, dans le même cadre encadré que la vue classique. - Date sélectionnée mise en avant (17px gras), date du jour + heure réduites à 12px (même petite taille pour rester discrètes).
- Barre verticale verte ajoutée à droite des mini-cards quand le ticket est officiellement clôturé / résolu (✓✓). Pseudo-élément
::beforeàright: 0; width: 4px; background: var(--ok). Le ✓✓ est décalé àright: 14pxpour ne pas chevaucher la barre. - Quand une couleur de topbar est choisie, la sidebar adopte aussi cette couleur : titre, horloge, capture-info, stats globales, today-block, date sélectionnée, boutons (
.btn-action,.btn-refresh,.btn-today,.btn-subtle,.btn-icon,.btn-nav), theme-toggle et séparateurs prennent une teinte translucide cohérente. Bordure droite de la sidebar adaptée. Séparateurs (border-top/bottom de#stats, trait au-dessus du 1er bouton) encolor-mix(--topbar-text 30%).
Statistiques globales
- Nouveau compteur « X faits / Y clos » entre
(matin · après-midi)ettech. dispo.s.donecalculé danscomputeStatsenglobe tous les_disappearStatus∈ {closed, terminated, terminated-clos, terminated-pending, terminated-suspended} + statuts EV reconnus comme clôturés/résolus. - En vue classique, séparateur
//aprèsclos(au lieu de·). - En vue horizontale (sidebar), une barre horizontale 1px pleine largeur sépare le bloc interventions/faits/clos du bloc tech. dispo + pompiers / absents (le
//est masqué visuellement et remplacé parborder-top).
Onboarding équipe (1ʳᵉ install ou config vide)
- L'erreur générique « Aucun technicien sélectionné » est remplacée par une carte d'onboarding centrée propre avec :
- icône
👥cerclée (88×88 px,--accent-soft/--accent) - titre « Aucune équipe configurée » (20px, gras)
- description courte (14px,
--text-muted, line-height 1.6) - bouton primary « Ouvrir paramètres » qui ouvre directement le panel admin sur la section Équipe via
showAdminPanel("team").
- icône
- Carte centrée verticalement et horizontalement dans la zone disponible :
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%)ancré sur<main>(qui prendmin-height: calc(100vh - var(--topbar-height))quand la carte est visible). Identique en vue classique et horizontale. showError(msg, options)étendu pour supportercentered: true,icon,title,actionLabel+actionHandler.showAdminPanel(initialSection)accepte un identifiant de section ("appearance","team","easyvista","diagnostics","about") pour ouvrir directement sur l'onglet voulu.
Refresh / cache / verdicts ghost
- Rafraîchissement séquentiel (1 fiche à la fois) au lieu de 5 workers parallèles. Avantages : arrêt instantané via
AbortController(registre_evFetchControllersdansbackground.js, messageabortAllFetches), plus de races DOM, ordre d'affichage stable (pompier d'abord, alpha, puis matin → après-midi). - Re-fetch du checksum frais via
basicAutoComplete+redirectHeaderavant chaque fetch fiche → plus de fiche périmée entre sessions. - Cache merge robuste : fallback
cachedByRefquandactionIdchange. Cache écrit toutes les 5 fiches pendant le refresh (incrémental), pour ne pas perdre les statuts déjà récupérés si l'user change de date en cours. - Verdicts ghost unifiés dans
analyzeOneDisappearedIv:terminated-clos→ ✓✓ vert (clos officiel + commentaire tech)terminated-pending→ ✓ gris « Fait » (commentaire tech mais pas encore clos)terminated-suspended→ ✓ jaune « Suspendu » (statut Suspendu côté EV)cancelled/cancelled-reservation/cancelled-absence→ REMOVE silencieux
- Statuts EV configurables depuis Paramètres → EasyVista (
cfg.closedStatus,cfg.resolvedStatus,cfg.cancelledStatus,cfg.suspendedStatus) avec matching insensible à la casse, accents et conjugaisons via_normalizeStatus+_stemStatus+_statusMatchesAny. - Mise à jour live du tooltip et du popup épinglé après un verdict (plus besoin de fermer/réouvrir).
- Clic immédiat possible sur la carte dès que le verdict tombe (
updateInterventionRowattache le click handler dès queiv.ghost=falseest posé parverdict()). - Boutons « Actualiser » (rapide, ne re-télécharge pas les fiches déjà connues) vs « Tout recharger » (force tout sauf les ✓✓ déjà clos).
- Mode diagnostic optionnel (Paramètres → Diagnostics,
LOG.isDebug()) : aucune iv n'est retirée silencieusement, tout est tracé sous le préfixe[disparition]dans la console F12. En PROD (par défaut), les ivcancelledsont bien retirées.
Bugfix #1 (Pompier + Absence)
- Si un technicien est à la fois pompier ET absent, les deux badges s'affichent désormais avec un séparateur
/(ex:Pompier / Absent) au lieu de masquer l'absence derrière le badge pompier. - Logique : détection d'un
extraAbsenceBlockqui ajoute une note d'absence sous la note pompier dans la card.
Autres bugfixes
- Absences récurrentes au switch de groupe : quand on changeait de groupe puis revenait au groupe initial, les jours d'absence cochés disparaissaient visuellement (la donnée elle-même restait en
cfg.recurringAbsences). Fix : restauration depuiscfg.recurringAbsences[id]à chaque ré-ajout de ligne dansrefreshTeamForGroupet la boucle d'auto-détection initiale. - Barre de progression / bannière session expirée : suivent désormais la hauteur dynamique de la topbar via
--topbar-heightcalculée par unResizeObserversurheader.topbar. Plus de chevauchement quand on scrolle (les ancienstop: 56pxhardcodés sont remplacés partop: var(--topbar-height, 56px)). - STATUS_FR regex : limite augmentée de
[^"]{2,30}à[^"]{2,200}(ne matchait pas « Suspendu : Attente info bénéficiaire/demandeur » qui fait 47 chars). - Description action : décodage
" → ",<br> → \n, HTML strippé via une nouvelle pipeline. Préfixelogin:retiré du commentaire technicien dans le tooltip / popup. - Tooltip référence : flèche
↗retirée du lien cliquable (.tt-ref-link::after { content: " ↗" }neutralisée).
v2026.5.43 — Fix Firefox menu dock + stabilité popup pin/unpin
Menu hover sur pastille du dock (popup réduit) — bug Firefox uniquement
Quand un popup épinglé était réduit dans la taskbar du bas, le menu qui apparaît au survol de la pastille (Agrandir / Fermer) se positionnait trop haut. Cause : getBoundingClientRect() appelé immédiatement après appendChild sans attendre la mise en page Firefox, combiné à un transform: translateY dans l'animation. Fix : positionnement hors écran initial, force-layout via offsetHeight, puis pose finale. Animation simplifiée en opacité-only.
Stabilité popup au pin/unpin (tous navigateurs)
La popup épinglée bougeait de 16px et changeait de 1px de bordure quand on la dé-épinglait via 📌. Cause : différence de padding-top (28px vs 12px) et border-width (2px vs 1px) entre .pinned-popup et .soft-unpinned. Fix : .soft-unpinned conserve les mêmes dimensions, juste la couleur de bordure change (gris discret au lieu de bleu accent) pour signaler le mode détaché.
v2026.5.42 — Nettoyage de commentaires + exemples génériques
Passage en revue des commentaires de src/viewer.js : les exemples qui illustraient le parsing des contacts / lieux / références / codes-barres ont été uniformisés en placeholders abstraits (Nom1 Prénom1 +41XXXXXXXXX, SYYMMDD_NNNNN, XXXX_NNNNNNNN, etc.) plutôt que des chaînes spécifiques.
Comportement runtime strictement inchangé — uniquement de la documentation et des commentaires. Mise à jour cohérente du README, du CHANGELOG et de la page wiki Utilisation pour utiliser les mêmes notations génériques dans les exemples de référence.
v2026.5.41 — Suppression des hardcodes runtime + UX admin + thème unifié
Plus aucun hardcode runtime
- Le groupe EV, les domaines, la liste de techniciens et les absences récurrentes ne sont plus codés en dur dans
background.js/viewer.js. Tout est lu depuisadmin_config(chrome.storage.local), alimenté par les onglets Équipe et EasyVista du panel admin. chrome.storage.localsurvit aux mises à jour d'extension → la configuration de l'utilisateur (groupe, équipe, absences récurrentes, domaines) est conservée d'une version à l'autre.- Au 1er install : aucun tech sélectionné, aucune absence récurrente. Le viewer affiche "Aucun technicien sélectionné. Ouvrez ⚙ Paramètres → Équipe…" tant que rien n'est configuré.
- Suppression de
isPillonelAbsentFriday()(hardcode du nom + du jour) → remplacée parisRecurringAbsence(tech, isoDate)générique. Label "Absent le X" calculé depuis le jour de la semaine.
UX admin
- Auto-refresh à l'enregistrement (équipe / domaines / heures) → plus besoin de recharger l'extension manuellement.
- Bouton ✓ Appliquer pour les heures de la journée + toast de confirmation.
- Toasts au-dessus du flou du panel admin (z-index 11000 > 10000).
- Onglet Statuts retiré (placeholder lecture-seule).
- Tri équipe : inclus d'abord, puis exclus, alphabétique dans chaque sous-groupe (ne saute plus quand on coche/décoche).
Thème unifié
- Le toggle 🌙 de la topbar et le sélecteur Apparence du panel admin écrivent dans la même clé
cfg.theme. - Mode "Automatique" résolu en JS via
prefers-color-scheme(avant : le CSS retombait sur le clair même quand l'OS était en sombre, faute de bloc@media). - Listener
matchMediapour bascule live en mode auto.
Conflits 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 (row classique + mini-card en vue horizontale) est peinte en rouge plein avec texte blanc. Logique : full-day → toutes les interv en rouge ; partiel → seules celles en chevauchement.
Synchronisation des heures EV
- Les paramètres
day_start_hour/day_end_hourenvoyés àplanning_xhr.phpetbegin_hour/end_hourenvoyés àplan_set_holidays_popup.php(création absence) etplan_set_tech_planif_popup.php(douchette) lisent désormaiscfg.dayStart/cfg.dayEnd. Avant :8/18/19figés en dur.
Permissions runtime pour domaines
manifest.json: ajout deoptional_host_permissions: ["https://*/*"].chrome.permissions.request()au save d'un domaine custom dans Paramètres → EasyVista. Refus → toast d'avertissement.
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).
Coulisses (background.js)
- Nouveaux helpers :
getAdminConfig(),getEvOrigins(),getGroupId(),getSupportIds(),getDayBounds(). fetchPlanningXml()lèveError("no_team_configured")quand la liste de techs est vide.
Ménage
- Suppression de
CACHE_DAYS(inutilisée),LS_THEME(clé localStorage obsolète), commentaire historique surinitAdminMenu(). Aucun symbole orphelin restant.
v2026.5.40 — Sélection groupe EV + édition domaines + tri équipe + réorga repo
Onglet Équipe
- Nouveau 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 → source autoritative, robuste aux ajouts/renommages côté EV (un nouveau groupe apparaît tout seul). - ID groupe affiché en italique à côté du sélecteur (ex:
ID groupe : 191). - Quand on change de groupe, la liste d'équipe se rafraîchit automatiquement avec les membres du nouveau groupe (fetch live).
- Plus de bouton "Détecter" : tout est auto à l'ouverture de l'onglet.
- Tri double des techniciens : d'abord les inclus (cases cochées), puis les exclus, et alphabétique dans chaque sous-groupe (insensible casse/accents). Le tri se rafraîchit uniquement aux render() pour éviter que les lignes sautent au toggle.
Onglet EasyVista
- Refonte complète : édition manuelle des deux domaines EV (interne DGNSI =
https://itsma.etat-de-vaud.ch, externe Internet =https://itsma.vd.ch). - Bouton 💾 Enregistrer (normalise : ajoute
https://, retire le trailing slash) + bouton ↺ Réinitialiser pour revenir aux valeurs par défaut. - Les domaines par défaut restent codés en dur en fallback ; le branchement effectif côté
background.js(utilisercfg.evOrigins) sera fait dans une prochaine version après validation.
Onglet Statuts retiré
- Section "Statuts" supprimée du panel admin (placeholder lecture-seule, jamais utile).
Vue horizontale enrichie
- Chaque segment timeline contient désormais une barre verticale couleur catégorie à gauche (mêmes teintes que les
intervention-dotde la vue classique : livraison/recup/remplacement/incident/rollout/réservation/autre), la référence (ex:SYYMMDD_NNNNN) en gras, et la ville en gris muted. - Hauteur de la timeline horizontale passée de 22px à 32px pour laisser la place au texte.
- Vue classique inchangée.
Réorganisation interne du repo
src/: sources de l'extension (manifest, background, viewer.{html,js,css}, icons).Autres/: build.sh + meta files (LICENSE, README, CHANGELOG).Builds/: artefacts distribués aux techniciens (Chromium/, Firefox/, .zip, .xpi).dist/: sortie de build (gitignoré).
Coulisses (background.js)
- Nouveau message
detectGroups+ fonctiondetectGroupsFromEV()qui fetche/index.php?eventName=HelpDesk_PlanningItemet extrait les paires(id, nom)via le<select>. detectTeamFromEV()accepte désormais ungroupIden argument → permet de basculer entre SI-CSS / SI-EXT depuis l'admin.- ⚠ Le fetch du planning continue d'utiliser
group_id=191codé en dur — sera retiré quand on validera quecfg.groupIdest bien alimenté par le sélecteur en terrain réel.
v2026.5.39 — Séparation Matin / Après-midi + Apparence
- Pills "MATIN" / "APRÈS-MIDI" entre les interventions de chaque tech
- Timeline : coupure midi très visible (bande verticale + stripes)
- Section Apparence dans les paramètres :
- Sélecteur thème (Auto / Clair / Sombre)
- Slider taille du texte (70% à 120%, 5 paliers)
- Durée du cache configurable (défaut 7 jours)
- Heures de la journée configurables (défaut 8h-18h)
- Section À propos (version, auteur, licence)
- Bouton "Vue" (popup user-badge) plus clair : montre la vue de destination
- Tooltips : 500ms à l'apparition + 500ms à la disparition (cohérent entre vues)
- Compteur "X tech. dispo" dans les stats globales
v2026.5.38 — Attribution auteur + nettoyage + observabilité
- Module
LOGunifié avec préfix + timestamp + version - Handlers globaux d'erreur (
window.error,unhandledrejection) - Toggle "Logs verbeux (debug)" dans le panel admin
sendMessageavec timeout 15swriteCacheavec gestion quota (purge auto + retry)renderFromDatawrappé en try/catch + null checks- Signature "Développé par Quentin Rouiller" en bas du popup user-badge
- En-têtes copyright dans tous les fichiers source
- Nettoyage : suppression de code mort (initAdminMenu, classes CSS orphelines, console.log debug verbeux)
v2026.5.37 — Refonte vue horizontale (sidebar complète)
- Topbar entièrement déplacée en sidebar verticale
- User-badge + titre + bouton Aujourd'hui + date/heure dans la sidebar
- Banderole pompier masquée
v2026.5.36 — Sidebar verticale en vue horizontale
- Wrapper flex-row
#horizontal-wrapper[sidebar 200px] + [main] - Déplacement physique des éléments via JS
v2026.5.32 — Vue horizontale togglable
- Bouton ⊞ "Vue" dans popup user-badge
- Toggle Vue classique ↔ Vue horizontale persisté
- Chaque tech = 1 ligne horizontale compacte
v2026.5.27 — Classification absences
- ABSENCE_LABELS regex (Congé/Maladie/Pompier)
- Couleurs catégories : Maladie indigo, Congé cyan, Pompier rouge
- Topbar une ligne, fermeture auto popups
v2026.5.25 — Bouton Paramètres dans popup user-badge
- Remplace les 5 clics sur le titre pour ouvrir admin
v2026.5.16 — Passage au versionning par année
- Format
YYYY.M.PATCH - Bump du PATCH à chaque livraison
v5.0.0 — Refonte topbar
initAppClock(horloge HH:MM)initSessionTimer(compteur de session EV, tick 1s)initAdminMenu(5 clics sur le titre, retiré en 2026.5.25)
v4.2.3 — Grande popup timeline persistante
bindTimelinePopover,showTimelinePopover- Clic = popup persistante, hover = popup qui suit la souris
v4.1.3 — Tooltips épinglables
- Introduction de
pinTooltip
v1.0.0 (16 avril 2026) — Version initiale
- Premier viewer EasyVista pour le canton
Historique complet
40+ tags depuis v1.0.0 jusqu'à v2026.5.40. Liste exhaustive accessible aux personnes ayant accès au repo.