Compare commits
17 Commits
v2026.5.19
...
v2026.5.36
| Author | SHA1 | Date | |
|---|---|---|---|
| cd54764dd5 | |||
| a92e3429b2 | |||
| 1ecc60e160 | |||
| a5993c54c9 | |||
| b0a8102c29 | |||
| ecb490c55a | |||
| 7e497de40e | |||
| bbdcb8c7de | |||
| 5a9e465116 | |||
| 0511c18b07 | |||
| df623da8f4 | |||
| 1441b0a7a1 | |||
| 5eae40d38b | |||
| e69482add4 | |||
| a382d8f35f | |||
| 7824990fba | |||
| e7c5e281d9 |
+32
-17
@@ -774,24 +774,34 @@ async function deletePlanningItem(origin, phpsessid, actionId, kind) {
|
||||
throw new Error("session_expired");
|
||||
}
|
||||
|
||||
// v5.0.1 : heuristique pour détecter si la suppression a marché.
|
||||
// EasyVista renvoie typiquement :
|
||||
// - une chaine vide ou "ok" ou "1" si succès
|
||||
// - un message d'erreur / html d'erreur si function_name inconnu
|
||||
// On considère que tout ce qui n'est pas un message d'erreur évident
|
||||
// est un succès. Si plusieurs fn renvoient 200, on prend le premier.
|
||||
const trimmed = (body || "").trim().toLowerCase();
|
||||
const looksLikeError = trimmed.includes("error")
|
||||
|| trimmed.includes("erreur")
|
||||
|| trimmed.includes("unknown function")
|
||||
|| trimmed.includes("fonction inconnue")
|
||||
|| trimmed.includes("<html");
|
||||
if (!looksLikeError) {
|
||||
console.log(`[bg] → suppression OK avec function_name=${fn}`);
|
||||
return { status: r.status, functionName: fn, body: body.substring(0, 200) };
|
||||
// v5.0.14 : détection explicite du succès XML observé dans les captures
|
||||
// réseau : <Planning_delete_absence>true</Planning_delete_absence>
|
||||
const trimmed = (body || "").trim();
|
||||
const lower = trimmed.toLowerCase();
|
||||
|
||||
// Succès explicite : réponse XML du type <X>true</X>
|
||||
if (/^<\w+>true<\/\w+>\s*$/i.test(trimmed)) {
|
||||
console.log(`[bg] → SUCCÈS confirmé par XML <...>true</...> avec function_name=${fn}`);
|
||||
return { status: r.status, functionName: fn, body: trimmed };
|
||||
}
|
||||
console.log(`[bg] → réponse ressemble à une erreur, on tente le prochain nom`);
|
||||
lastBody = body;
|
||||
|
||||
// Détection d'échec : <X>false</X>, erreurs, html, redirect, etc.
|
||||
const looksLikeError = /^<\w+>false<\/\w+>\s*$/i.test(trimmed)
|
||||
|| lower.includes("error")
|
||||
|| lower.includes("erreur")
|
||||
|| lower.includes("unknown function")
|
||||
|| lower.includes("fonction inconnue")
|
||||
|| lower.includes("<html")
|
||||
|| lower.includes("window.location.href");
|
||||
if (looksLikeError) {
|
||||
console.log(`[bg] → réponse ressemble à une erreur, on tente le prochain nom`);
|
||||
lastBody = body;
|
||||
continue;
|
||||
}
|
||||
// Pas d'erreur évidente mais pas de succès explicite non plus
|
||||
// (ex: réponse vide ou "1" ou "ok"). On considère comme succès.
|
||||
console.log(`[bg] → suppression probablement OK (body neutre) avec function_name=${fn}`);
|
||||
return { status: r.status, functionName: fn, body: trimmed.substring(0, 200) };
|
||||
} catch (err) {
|
||||
if (err.message === "session_expired") throw err;
|
||||
console.warn(`[bg] erreur avec ${fn}:`, err);
|
||||
@@ -1174,6 +1184,11 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||
url: `${origin}/`, // racine → EV redirige vers SSO si besoin
|
||||
active: true
|
||||
});
|
||||
// v2026.5.16 : surveiller cet onglet — si on tombe sur la page de
|
||||
// login manuel portail.etat-de-vaud.ch/iamlogin/, rediriger vers
|
||||
// portail.etat-de-vaud.ch/iam/accueil/ qui déclenche le Windows
|
||||
// SSO Kerberos automatiquement.
|
||||
watchReconnectTabForIamLogin(tab.id);
|
||||
sendResponse({ ok: true, tabId: tab.id, origin });
|
||||
} catch (err) {
|
||||
sendResponse({ ok: false, error: err.message || String(err) });
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Planification",
|
||||
"version": "2026.5.19",
|
||||
"version": "2026.5.36",
|
||||
"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": {
|
||||
|
||||
+1318
-20
File diff suppressed because it is too large
Load Diff
+13
-5
@@ -9,10 +9,15 @@
|
||||
<header class="topbar">
|
||||
<div class="topbar-left">
|
||||
<!-- 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"
|
||||
le titre. Clic → popup fixe avec nom complet juste en dessous.
|
||||
v2026.5.34 : TOUJOURS visible d'office avec "?" (état user inconnu)
|
||||
pour garantir l'accès au menu (⊞ Vue / ⚙ Paramètres) même si
|
||||
la détection user échoue ou est en retard.
|
||||
Le script JS mettra à jour le textContent + classes quand le
|
||||
fetch aboutit. En cas d'échec persistant, reste sur "?". -->
|
||||
<button id="user-badge" class="user-badge user-badge-unknown"
|
||||
type="button" aria-label="Utilisateur connecté"
|
||||
title="Utilisateur connecté"></button>
|
||||
title="Utilisateur — cliquer pour accéder aux paramètres">?</button>
|
||||
<h1 id="app-title">Planification</h1>
|
||||
<div class="date-nav">
|
||||
<button id="nav-prev" class="btn btn-nav" title="Jour précédent" aria-label="Jour précédent">◀</button>
|
||||
@@ -30,8 +35,11 @@
|
||||
<span id="capture-info" class="capture-info"></span>
|
||||
<span id="refresh-check" class="refresh-check hidden" title="Mise à jour terminée">✓</span>
|
||||
</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>
|
||||
<!-- v2026.5.16 : date complète du jour au-dessus de l'heure dans la topbar -->
|
||||
<div id="app-clock" class="app-clock" title="Date et heure actuelles">
|
||||
<div id="app-clock-date" class="app-clock-date"></div>
|
||||
<div id="app-clock-time" class="app-clock-time"></div>
|
||||
</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">
|
||||
|
||||
Reference in New Issue
Block a user