Version 4.1.3 — Introduction tooltips épinglables (pinTooltip)
This commit is contained in:
+8
-57
@@ -1,13 +1,18 @@
|
||||
// background.js — Service worker (Manifest V3)
|
||||
// background.js — Service worker (Manifest V3) — v4
|
||||
//
|
||||
// Rôles :
|
||||
// 1. Au clic sur l'icône : ouvrir le viewer
|
||||
// 2. Répondre aux messages du viewer :
|
||||
// - getSession : trouve l'onglet EasyVista ouvert, renvoie {phpsessid, origin}
|
||||
// - fetchPlanning : fetch le XML du planning pour une date
|
||||
// - fetchFiche : fetch une fiche individuelle (HTML)
|
||||
// - fetchPlanning : fetch le XML du planning pour une date (1 requête = tout)
|
||||
// - fetchXhr2 : fetch un texte d'action détaillé (utilisé en lazy-load au survol)
|
||||
// - fetchFiche : fetch une fiche individuelle (HTML) pour statut + commentaire tech
|
||||
// 3. Programmer les alarmes de refresh auto (12h, 15h)
|
||||
// 4. Nettoyer les vieux caches (>7 jours)
|
||||
//
|
||||
// v4 : suppression de fetchTimeline (pu utilisé). Le calendar_block contient
|
||||
// directement ref/contact/lieu/catégorie dans ses attributs attr1/attr2/attr3,
|
||||
// donc on n'a plus besoin ni de xhr2 en masse, ni de l'API timeline.
|
||||
|
||||
// Domaines EasyVista reconnus (interne d'abord, externe en fallback)
|
||||
const EV_ORIGINS = [
|
||||
@@ -110,42 +115,6 @@ async function fetchFicheHtml(origin, phpsessid, formLink) {
|
||||
return html;
|
||||
}
|
||||
|
||||
// GUID du "sender" du menu/workflow — observé dans les URLs EasyVista du planning.
|
||||
// Le sender du formLink du XML planning est {9C395E45-...} mais l'API timeline
|
||||
// utilise le sender de la FICHE parent ({C99ECD05-...}).
|
||||
const TIMELINE_SENDER = "%7BC99ECD05-3D48-4C62-ABF0-66292053AED6%7D";
|
||||
|
||||
/**
|
||||
* Fetch l'API timeline JSON pour récupérer le texte des actions d'une fiche.
|
||||
* Params :
|
||||
* - target : ID interne de la fiche (pas l'action_id)
|
||||
* - checksum : checksum frais extrait depuis le HTML de la fiche
|
||||
* Retour : texte JSON de l'API, ou null en cas d'erreur.
|
||||
*/
|
||||
async function fetchTimelineJson(origin, phpsessid, target, checksum) {
|
||||
const url =
|
||||
`${origin}/api/v1/internal/forms/${TIMELINE_SENDER}/timeline` +
|
||||
`?target=${encodeURIComponent(target)}` +
|
||||
`&checksum=${encodeURIComponent(checksum)}` +
|
||||
`&type=todo` +
|
||||
`§ionId=1` +
|
||||
`&navigator=` +
|
||||
`&nbRecord=0` +
|
||||
`&PHPSESSID=${encodeURIComponent(phpsessid)}`;
|
||||
console.log("[bg] fetchTimelineJson →", url.substring(0, 120));
|
||||
const r = await fetch(url, {
|
||||
credentials: "include",
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
"X-Requested-With": "XMLHttpRequest"
|
||||
}
|
||||
});
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
const body = await r.text();
|
||||
console.log("[bg] timeline status =", r.status, "| taille =", body.length);
|
||||
return body;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Détection "session invalide"
|
||||
// ============================================================================
|
||||
@@ -214,24 +183,6 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg.type === "fetchTimeline") {
|
||||
const session = await findEasyVistaSession();
|
||||
if (!session) {
|
||||
sendResponse({ ok: false, error: "no_session" });
|
||||
return;
|
||||
}
|
||||
const body = await fetchTimelineJson(
|
||||
session.origin, session.phpsessid, msg.target, msg.checksum
|
||||
);
|
||||
// Si on reçoit du HTML au lieu de JSON, c'est une page d'erreur / login
|
||||
if (body.trimStart().startsWith("<")) {
|
||||
sendResponse({ ok: false, error: "not_json" });
|
||||
return;
|
||||
}
|
||||
sendResponse({ ok: true, body });
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg.type === "scheduleAutoRefresh") {
|
||||
scheduleAutoRefreshAlarms();
|
||||
sendResponse({ ok: true });
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Planning Techniciens — Vue claire",
|
||||
"version": "3.3.0",
|
||||
"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.",
|
||||
"version": "4.1.3",
|
||||
"description": "Vue claire du planning EasyVista (itsma.etat-de-vaud.ch et itsma.vd.ch). v4.1.3 : fix ouverture intervention (tentative 3 regex retirée car elle écrasait le bon checksum avec le mauvais).",
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"scripting",
|
||||
|
||||
Reference in New Issue
Block a user