v2026.5.39 — Séparation matin/après-midi + Apparence (thème, taille, cache, heures) + À propos

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.
This commit is contained in:
2026-04-26 02:20:00 +02:00
parent c9363c64b6
commit a5dc0b3365
5 changed files with 874 additions and 58 deletions
+21 -4
View File
@@ -1380,13 +1380,30 @@ async function cleanupOldCaches(daysToKeep) {
return toRemove.length;
}
// v2026.5.39 : on lit admin_config pour récupérer cacheDays. Si pas dispo,
// fallback sur 7 jours.
async function _getCacheDays() {
try {
const o = await chrome.storage.local.get("admin_config");
const cfg = o && o.admin_config;
if (cfg && typeof cfg.cacheDays === "number" && cfg.cacheDays > 0) {
return cfg.cacheDays;
}
} catch (e) {
LOG.warn("cache", "lecture admin_config échouée, fallback 7 jours", { err: e && e.message });
}
return 7;
}
// Au démarrage, nettoyer les anciennes alarmes et les anciens caches
chrome.runtime.onInstalled.addListener(() => {
chrome.runtime.onInstalled.addListener(async () => {
clearLegacyRefreshAlarms();
cleanupOldCaches(7).catch(err => console.warn("cleanup:", err));
const days = await _getCacheDays();
cleanupOldCaches(days).catch(err => LOG.warn("cleanup", "échec onInstalled", { err: err && err.message }));
});
chrome.runtime.onStartup.addListener(() => {
chrome.runtime.onStartup.addListener(async () => {
clearLegacyRefreshAlarms();
cleanupOldCaches(7).catch(err => console.warn("cleanup:", err));
const days = await _getCacheDays();
cleanupOldCaches(days).catch(err => LOG.warn("cleanup", "échec onStartup", { err: err && err.message }));
});