forked from FroSteel/Planification
Compare commits
18 Commits
v3.0.0
..
v2026.5.18
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c76085f03 | |||
| f54ccd28d2 | |||
| 72fb565afa | |||
| b3246d3cf2 | |||
| 8435a2b77e | |||
| 6ae440cbf1 | |||
| f6d549d522 | |||
| 565075933e | |||
| 7f78493859 | |||
| 0b08ca122b | |||
| 87f561ae10 | |||
| be49a89057 | |||
| e42b145401 | |||
| 7201fde2d3 | |||
| edd6ffc1c3 | |||
| 23244fc4db | |||
| f52095dc4d | |||
| 94877cb816 |
+1050
-109
File diff suppressed because it is too large
Load Diff
+18
-5
@@ -1,8 +1,19 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "Planning Techniciens — Vue claire",
|
"name": "Planification",
|
||||||
"version": "3.0.0",
|
"version": "2026.5.18",
|
||||||
"description": "Vue claire du planning EasyVista (itsma.etat-de-vaud.ch et itsma.vd.ch) avec navigation par date, détection automatique des interventions closes et cache 7 jours.",
|
"description": "Vue claire et rapide du planning des techniciens EasyVista. Regroupe interventions et réservations par tech, affiche horaires, contact, lieu, catégorie et statut en un coup d'œil.",
|
||||||
|
"browser_specific_settings": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "planification@vd.ch",
|
||||||
|
"strict_min_version": "140.0",
|
||||||
|
"data_collection_permissions": {
|
||||||
|
"required": [
|
||||||
|
"none"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"activeTab",
|
"activeTab",
|
||||||
"scripting",
|
"scripting",
|
||||||
@@ -15,10 +26,12 @@
|
|||||||
"https://itsma.vd.ch/*"
|
"https://itsma.vd.ch/*"
|
||||||
],
|
],
|
||||||
"action": {
|
"action": {
|
||||||
"default_title": "Ouvrir la vue claire du planning"
|
"default_title": "Ouvrir la Planification"
|
||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
"service_worker": "background.js"
|
"scripts": [
|
||||||
|
"background.js"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"icons": {
|
"icons": {
|
||||||
"16": "icons/icon16.png",
|
"16": "icons/icon16.png",
|
||||||
|
|||||||
+1432
-16
File diff suppressed because it is too large
Load Diff
+85
-8
@@ -2,25 +2,64 @@
|
|||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Planning techniciens</title>
|
<title>Planification</title>
|
||||||
<link rel="stylesheet" href="viewer.css">
|
<link rel="stylesheet" href="viewer.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header class="topbar">
|
<header class="topbar">
|
||||||
<div class="topbar-left">
|
<div class="topbar-left">
|
||||||
<h1>Planning techniciens</h1>
|
<!-- v4.2.3 : pastille avec initiales de l'utilisateur connecté, avant
|
||||||
|
le titre. Clic → popup fixe avec nom complet juste en dessous. -->
|
||||||
|
<button id="user-badge" class="user-badge hidden"
|
||||||
|
type="button" aria-label="Utilisateur connecté"
|
||||||
|
title="Utilisateur connecté"></button>
|
||||||
|
<h1 id="app-title">Planification</h1>
|
||||||
<div class="date-nav">
|
<div class="date-nav">
|
||||||
<button id="nav-prev" class="btn btn-nav" title="Jour précédent" aria-label="Jour précédent">◀</button>
|
<button id="nav-prev" class="btn btn-nav" title="Jour précédent" aria-label="Jour précédent">◀</button>
|
||||||
<input type="date" id="date-picker" class="date-input">
|
<!-- v2026.5.17 : input date custom qui affiche "Vendredi 24.04.2026" -->
|
||||||
|
<div class="date-custom-wrapper">
|
||||||
|
<div id="date-custom" class="date-custom" role="button" tabindex="0" title="Choisir une date">
|
||||||
|
<span id="date-custom-label"></span>
|
||||||
|
<span class="date-custom-icon">📅</span>
|
||||||
|
</div>
|
||||||
|
<input type="date" id="date-picker" class="date-input-hidden">
|
||||||
|
</div>
|
||||||
<button id="nav-next" class="btn btn-nav" title="Jour suivant" aria-label="Jour suivant">▶</button>
|
<button id="nav-next" class="btn btn-nav" title="Jour suivant" aria-label="Jour suivant">▶</button>
|
||||||
<button id="nav-today" class="btn btn-today" title="Aujourd'hui">Auj.</button>
|
<button id="nav-today" class="btn btn-today" title="Aujourd'hui">Auj.</button>
|
||||||
</div>
|
</div>
|
||||||
<span id="capture-info" class="capture-info"></span>
|
<span id="capture-info" class="capture-info"></span>
|
||||||
<span id="refresh-check" class="refresh-check hidden" title="Mise à jour terminée">✓</span>
|
<span id="refresh-check" class="refresh-check hidden" title="Mise à jour terminée">✓</span>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- v5.0.0 : horloge au milieu, format HH:MM, mise à jour toutes les min -->
|
||||||
|
<div id="app-clock" class="app-clock" title="Heure actuelle"></div>
|
||||||
|
<!-- v5.0.9 : compteur de session EasyVista (visible < 5 min restantes) -->
|
||||||
|
<div id="app-session" class="app-session hidden"></div>
|
||||||
<div class="topbar-right">
|
<div class="topbar-right">
|
||||||
<button id="refresh-btn" class="btn" title="Rafraîchir maintenant">
|
<!-- v4.2.6 : bouton créer une absence pour un ou plusieurs techs -->
|
||||||
<span id="refresh-icon">↻</span> Rafraîchir
|
<button id="absence-btn" class="btn btn-action" title="Créer une absence pour un ou plusieurs techniciens">
|
||||||
|
<svg class="btn-action-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
||||||
|
<rect x="3" y="5" width="18" height="16" rx="2" stroke="currentColor" stroke-width="1.8"/>
|
||||||
|
<path d="M3 9h18M8 3v4M16 3v4" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>
|
||||||
|
<circle cx="12" cy="15" r="4.2" stroke="currentColor" stroke-width="1.8" fill="none"/>
|
||||||
|
<line x1="9" y1="15" x2="15" y2="15" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" transform="rotate(-45 12 15)"/>
|
||||||
|
</svg>
|
||||||
|
<span class="btn-action-label">Absence</span>
|
||||||
|
</button>
|
||||||
|
<!-- v4.2.6 : bouton envoyer la planification sur la douchette -->
|
||||||
|
<button id="douchette-btn" class="btn btn-action" title="Envoyer la planification sur la douchette des techniciens">
|
||||||
|
<span class="btn-action-emoji">🎯</span>
|
||||||
|
<span class="btn-action-label">Douchette</span>
|
||||||
|
</button>
|
||||||
|
<button id="refresh-partial-btn" class="btn btn-refresh" title="Actualiser : ajoute les nouvelles interventions et retire celles qui ne sont plus dans le planning. Rapide, ne re-télécharge pas les fiches déjà connues.">
|
||||||
|
<svg id="refresh-partial-icon" class="btn-refresh-icon" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M2 8a6 6 0 0 1 10.2-4.24M14 3v3h-3" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||||
|
<span class="btn-refresh-label">Actualiser</span>
|
||||||
|
</button>
|
||||||
|
<button id="refresh-btn" class="btn btn-refresh btn-refresh-strong" title="Tout recharger : re-télécharge le planning ET toutes les fiches (y compris celles déjà connues) pour voir évoluer les statuts. Plus lent.">
|
||||||
|
<svg id="refresh-icon" class="btn-refresh-icon" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M2 8a6 6 0 1 0 1.76-4.24M2 3v3h3" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/><path d="M14 8a6 6 0 0 1-10.2 4.24M14 13v-3h-3" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||||
|
<span class="btn-refresh-label">Tout recharger</span>
|
||||||
|
</button>
|
||||||
|
<button id="abort-btn" class="btn btn-abort hidden" title="Arrêter le rafraîchissement en cours">
|
||||||
|
✕ Arrêter
|
||||||
</button>
|
</button>
|
||||||
<button id="clear-cache-btn" class="btn btn-subtle" title="Vider le cache du jour affiché">
|
<button id="clear-cache-btn" class="btn btn-subtle" title="Vider le cache du jour affiché">
|
||||||
Vider cache
|
Vider cache
|
||||||
@@ -31,14 +70,48 @@
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<!-- Bannière session expirée (non bloquante, apparaît en haut du contenu) -->
|
||||||
|
<div id="session-expired-banner" class="session-banner hidden">
|
||||||
|
<span class="session-banner-icon">⚠</span>
|
||||||
|
<span class="session-banner-text">
|
||||||
|
<strong>Session EasyVista expirée.</strong>
|
||||||
|
Données affichées depuis le cache. Reconnectez-vous à EasyVista pour rafraîchir.
|
||||||
|
</span>
|
||||||
|
<button id="session-banner-reconnect" class="btn btn-primary btn-sm">Ouvrir EasyVista</button>
|
||||||
|
<button id="session-banner-close" class="btn btn-icon" title="Masquer">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- v4.2.5 : Bannière EasyVista inaccessible (non bloquante, avec cache) -->
|
||||||
|
<div id="ev-unreachable-banner" class="session-banner ev-banner hidden">
|
||||||
|
<span class="session-banner-icon">⚠</span>
|
||||||
|
<span class="session-banner-text">
|
||||||
|
<strong>EasyVista est inaccessible.</strong>
|
||||||
|
Données affichées depuis le cache.
|
||||||
|
</span>
|
||||||
|
<button id="ev-unreachable-banner-retry" class="btn btn-primary btn-sm">Réessayer</button>
|
||||||
|
<button id="ev-unreachable-banner-open" class="btn btn-sm">Ouvrir EasyVista</button>
|
||||||
|
<button id="ev-unreachable-banner-close" class="btn btn-icon" title="Masquer">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Barre de progression (visible uniquement pendant un refresh actif) -->
|
||||||
|
<div id="progress-bar" class="progress-bar hidden">
|
||||||
|
<div class="progress-bar-fill" id="progress-bar-fill"></div>
|
||||||
|
<span class="progress-bar-label" id="progress-bar-label"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<main id="main">
|
<main id="main">
|
||||||
<div id="error-box" class="error-box hidden"></div>
|
<div id="error-box" class="error-box hidden"></div>
|
||||||
<div id="session-needed" class="session-needed hidden">
|
<div id="session-needed" class="session-needed hidden">
|
||||||
<h2>Connexion à EasyVista requise</h2>
|
<h2>Session EasyVista expirée</h2>
|
||||||
<p>Cette extension doit se connecter à <code>itsma.etat-de-vaud.ch</code> pour fonctionner.</p>
|
<p>Reconnectez-vous à EasyVista pour continuer.</p>
|
||||||
<p>Ouvre EasyVista dans un onglet, connecte-toi, puis <b>reclique sur l'icône de l'extension</b>.</p>
|
|
||||||
<button id="open-ev-btn" class="btn btn-primary">Ouvrir EasyVista</button>
|
<button id="open-ev-btn" class="btn btn-primary">Ouvrir EasyVista</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="ev-unreachable" class="session-needed hidden">
|
||||||
|
<h2>EasyVista est inaccessible pour le moment.</h2>
|
||||||
|
<p>Réessayez dans quelques instants, ou ouvrez EasyVista directement.</p>
|
||||||
|
<button id="open-ev-btn-2" class="btn btn-primary">Ouvrir EasyVista</button>
|
||||||
|
<button id="retry-btn" class="btn btn-subtle">Réessayer</button>
|
||||||
|
</div>
|
||||||
<div id="loading" class="loading">Chargement…</div>
|
<div id="loading" class="loading">Chargement…</div>
|
||||||
<div id="stats" class="stats hidden"></div>
|
<div id="stats" class="stats hidden"></div>
|
||||||
<div id="cards" class="cards"></div>
|
<div id="cards" class="cards"></div>
|
||||||
@@ -46,6 +119,10 @@
|
|||||||
|
|
||||||
<div id="tooltip" class="tooltip hidden" role="tooltip"></div>
|
<div id="tooltip" class="tooltip hidden" role="tooltip"></div>
|
||||||
|
|
||||||
|
<!-- v4.2.3 : popup fixe du nom de l'utilisateur connecté. S'ouvre au clic
|
||||||
|
sur la pastille d'initiales (topbar gauche). -->
|
||||||
|
<div id="user-name-popup" class="user-name-popup hidden" role="dialog" aria-hidden="true"></div>
|
||||||
|
|
||||||
<!-- Conteneur des toasts (notifications d'ouverture) -->
|
<!-- Conteneur des toasts (notifications d'ouverture) -->
|
||||||
<div id="toast-stack" class="toast-stack" aria-live="polite"></div>
|
<div id="toast-stack" class="toast-stack" aria-live="polite"></div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user