Clone
9
Versions
Quentin Rouiller edited this page 2026-05-08 16:35:44 +02:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.162026.5.45

Récap chronologique express

Date Version Résumé en 1 ligne
8 mai 2026 v2026.5.45 (latest) 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.0v5.0.15 Refonte topbar (horloge + compteur session), absences partielles
20 avril 2026 v4.3.3v4.3.0 Soft-unpin, popup timeline persistante, drag des popups
16-20 avril 2026 v1.0.0v4.2.x Premier viewer EasyVista, tooltips épinglables, infos enrichies

➡ Détails complets ci-dessous.


Versions notables

v2026.5.45 (latest, 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 depuis startTime / endTime du 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 classe color-* de la card source du planning.
  • Bouton de retrait × : repositionné dans la card (top: 2px / right: 2px). Appui long 2 s avec animation conic-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: hidden explicite). 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:SS et 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 → verdict REMOVE appliqué.
  • 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 basicAutoComplete invalide, 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_STATUS ou RESOLVED_STATUS.
  • iv en cours d'analyse de disparition (_disappearChecking).

Popups dépinglés — auto-fermeture

  • Auto-fermeture du popup .soft-unpinned quand 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étrique mousemove document.
  • 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 + listener chrome.cookies.onChanged qui broadcaste un cookieChanged au viewer.
  • #5 — Copie référence depuis popup épinglée : handler copy-ref ajouté.
  • #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é via margin-left: auto; margin-right: auto; dans le flex flow → l'arrivée du bouton Arrêter rétrécissait topbar-left et 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é dans cfg.topbarColor.

  • Calcul automatique du contraste : la luminance de la couleur choisie détermine la couleur du texte topbar. Variable CSS --topbar-text posé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 via color-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 (ancien cfg.topbarFont lu en fallback pour migration).

Vue horizontale

  • Bloc « Aujourd'hui + horloge » déplacé en bloc dans la sidebar (today-block ajouté à 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: 14px pour 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) en color-mix(--topbar-text 30%).

Statistiques globales

  • Nouveau compteur « X faits / Y clos » entre (matin · après-midi) et tech. dispo. s.done calculé dans computeStats englobe 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ès clos (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é par border-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").
  • Carte centrée verticalement et horizontalement dans la zone disponible : position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) ancré sur <main> (qui prend min-height: calc(100vh - var(--topbar-height)) quand la carte est visible). Identique en vue classique et horizontale.
  • showError(msg, options) étendu pour supporter centered: 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 _evFetchControllers dans background.js, message abortAllFetches), plus de races DOM, ordre d'affichage stable (pompier d'abord, alpha, puis matin → après-midi).
  • Re-fetch du checksum frais via basicAutoComplete + redirectHeader avant chaque fetch fiche → plus de fiche périmée entre sessions.
  • Cache merge robuste : fallback cachedByRef quand actionId change. 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 (updateInterventionRow attache le click handler dès que iv.ghost=false est posé par verdict()).
  • 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 iv cancelled sont 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 extraAbsenceBlock qui 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 depuis cfg.recurringAbsences[id] à chaque ré-ajout de ligne dans refreshTeamForGroup et 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-height calculée par un ResizeObserver sur header.topbar. Plus de chevauchement quand on scrolle (les anciens top: 56px hardcodés sont remplacés par top: 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éfixe login: 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 depuis admin_config (chrome.storage.local), alimenté par les onglets Équipe et EasyVista du panel admin.
  • chrome.storage.local survit 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 par isRecurringAbsence(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 matchMedia pour 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_hour envoyés à planning_xhr.php et begin_hour / end_hour envoyés à plan_set_holidays_popup.php (création absence) et plan_set_tech_planif_popup.php (douchette) lisent désormais cfg.dayStart / cfg.dayEnd. Avant : 8 / 18 / 19 figés en dur.

Permissions runtime pour domaines

  • manifest.json : ajout de optional_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ève Error("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 sur initAdminMenu(). 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 (utiliser cfg.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-dot de 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 + fonction detectGroupsFromEV() qui fetche /index.php?eventName=HelpDesk_PlanningItem et extrait les paires (id, nom) via le <select>.
  • 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

  • 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 LOG unifié avec préfix + timestamp + version
  • Handlers globaux d'erreur (window.error, unhandledrejection)
  • Toggle "Logs verbeux (debug)" dans le panel admin
  • sendMessage avec timeout 15s
  • writeCache avec gestion quota (purge auto + retry)
  • renderFromData wrappé 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.