Suppression des hardcodes :
- Plus aucun hardcode runtime pour groupe EV, domaines, liste de techs,
absences récurrentes. Tout lu depuis admin_config (chrome.storage.local),
persiste entre les mises à jour d'extension.
- Au 1er install : aucun tech sélectionné → fetch lève no_team_configured,
viewer affiche message invitant à configurer Paramètres → Équipe.
- Suppression de la fonction hardcodée isPillonelAbsentFriday() →
remplacée par isRecurringAbsence(tech, isoDate) générique qui lit
cfg.recurringAbsences. Label 'Absent le X' calculé depuis le jour.
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).
- Section Statuts retirée (placeholder lecture-seule).
- Tri équipe : inclus d'abord puis exclus, alphabétique.
Thème unifié :
- Toggle topbar et sélecteur Apparence écrivent dans la même clé cfg.theme.
- Mode 'Auto' résolu en JS via prefers-color-scheme (le CSS n'avait pas
de bloc @media, ce qui faisait retomber sur clair même en OS sombre).
- 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
(full-day ou partielle) ou une réservation au même créneau, sa carte
(row classique + mini-card horizontale) est peinte en rouge plein.
Permissions runtime pour domaines :
- manifest.json : optional_host_permissions [https://*/*].
- chrome.permissions.request() au save d'un domaine custom dans
Paramètres → EasyVista. Refus → toast d'avertissement.
Synchronisation des heures EV :
- Helpers getDayBounds() côté background. day_start_hour, day_end_hour,
begin_hour, end_hour des requêtes EV reflètent désormais cfg.dayStart
et cfg.dayEnd. Avant : 8/18/19 hardcodés.
Vue horizontale :
- Popups au survol/clic limités à dessous/dessus (pas de gauche/droite
car la sidebar à gauche et la timeline pleine largeur les rendent
inutilisables).
Ménage de code :
- Suppression de CACHE_DAYS, LS_THEME, commentaire historique sur
initAdminMenu(). Aucun symbole orphelin restant.
Contact mis à jour : quentin.rouiller@vd.ch
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).
- Refresh auto de la liste d'équipe au changement de groupe.
- Plus de bouton 'Détecter' : tout est auto à l'ouverture.
- Tri double : 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.
- Les défauts restent codés en dur en fallback.
Onglet Statuts retiré (placeholder lecture seule).
Vue horizontale enrichie :
- Barre couleur catégorie + référence + ville sur chaque segment.
- Hauteur 22→32px.
Coulisses :
- Nouveau message 'detectGroups' + fonction detectGroupsFromEV() côté
background.js.
- detectTeamFromEV() accepte un groupId en argument.
- Le fetch du planning continue d'utiliser group_id=191 codé en dur,
branchement effectif dans une prochaine version.
Réorganisation interne du repo pour clarifier l'arborescence :
- Tous les fichiers source (manifest, viewer.*, background.js, icons/)
sont maintenant dans src/
- À la racine du repo : uniquement README, LICENSE, CHANGELOG, build.sh,
.gitignore et le dossier dist/ (généré, dans .gitignore)
- Nouveau script build.sh qui copie src/ → dist/chromium/ et
dist/firefox/ et génère les archives .zip / .xpi prêtes à distribuer
Aucun changement fonctionnel — la version v2026.5.39 reste identique
côté code source et builds.
Séparation matin / après-midi
- Pill "MATIN" / "APRÈS-MIDI" entre interventions (vue classique), grise
neutre, ligne 3px épaisse. Affiché aussi entre les absences partielles.
- Si une période est vide, son séparateur n'apparaît pas.
Timeline — coupure midi très visible
- Bande verticale composée d'un trait massif + stripes diagonales (effet
césure). Visible immédiatement, sans label superflu.
Vue horizontale (sidebar)
- Tout centré horizontalement (align-items + text-align)
- min-height: calc(100vh * --zoom-inv) — sidebar atteint toujours le bas
de l'écran, même quand le user dézoom le texte
- Bouton "Aujourd'hui" : style identique aux autres boutons (Absence,
Douchette...), centré
- Boutons d'action (Absence/Douchette/Actualiser/Tout recharger/Vider
cache/Thème) poussés en bas via margin-top: auto + bordure top de
séparation visuelle
Section Apparence — refondue + en première position
- Thème : sélecteur Auto / Clair / Sombre
- Durée du cache (jours) : configurable, défaut 7. Lue par viewer (purge
auto en cas de quota) ET background (au boot). Tooltip au survol qui
montre l'emplacement physique du cache (adapté browser + OS)
- Taille du texte : slider horizontal avec 5 dots, 5 paliers (-30%, -15%,
100%, +10%, +20%). Zoom appliqué uniquement au release (pas pendant le
drag) pour éviter l'effet yo-yo. Couvre TOUS les textes visibles
(interventions, popups, absences, réservations, "En pompier du...",
date+heure de la même taille, etc.)
- Heures de la journée : 2 inputs Début/Fin, défaut 8h-18h. Lecture au
boot via _initDayBoundsFromConfig() qui met à jour DAY_START/END/LEN
Section À propos (nouvelle, dernière du panel)
- Extension : Planification
- Version, Auteur (Quentin Rouiller), Affiliation (Technicien DGNSI —
Canton de Vaud), Licence MIT, Code source (lien Gitea)
- Description courte mise en avant
Bouton "Vue" (popup user-badge) — plus clair
- Affiche la vue de DESTINATION (pas la vue actuelle)
- en classique → "Passer en vue Horizontale" + logo ≡
- en horizontal → "Passer en vue Classique" + logo ⊞
Tooltips
- Apparition : 500ms (cancellable au mouseleave)
- Disparition : 500ms (au lieu de 1000ms)
- Comportement uniforme entre vue classique et horizontale
Stats
- "X tech. dispo" (nouveau) : disponibles = pas absent + pas réservé
toute la journée. Pompier compte comme disponible.
Le second chiffre n'est pas un mois mais un compteur de versions majeures
(grosses refontes / ajouts importants). Le troisième est le patch livré
à chaque petite mise à jour dans la majeure courante.
- Format : YYYY.M.PATCH (2026.5.16 succède à 5.0.12)
- Bump du PATCH à chaque livraison
- L'année indique immédiatement la fraîcheur de l'extension
[code interpolé v5.0.12 → v2026.5.22]
- initAppClock : horloge HH:MM au milieu topbar
- initAdminMenu : menu admin caché (5 clics sur titre)
- initSessionTimer : compteur de session EV (tick 1s)
[code interpolé entre v4.3.0 et v5.0.9]