Version 1.0.0 — Initiale (extension de base sans tooltips avancés)

Première version stable de l'extension Planification : viewer pour planning EasyVista, fetch XML, affichage cards par tech.
This commit is contained in:
2026-04-16 09:30:00 +02:00
parent 43c6e0e487
commit 3b1831a83a
8 changed files with 1196 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
// background.js — Service worker (Manifest V3)
//
// Quand l'utilisateur clique sur l'icône de l'extension :
// 1. On vérifie qu'il est bien sur itsma.vd.ch
// 2. On injecte un script dans l'onglet qui récupère le HTML complet
// de la page + tous les liens vers les fiches d'intervention
// 3. On stocke ça dans chrome.storage.local
// 4. On ouvre un nouvel onglet avec viewer.html
chrome.action.onClicked.addListener(async (tab) => {
try {
if (!tab.url || !tab.url.startsWith("https://itsma.vd.ch/")) {
await chrome.storage.local.set({
planningError:
"Cette extension ne fonctionne que sur https://itsma.vd.ch/. " +
"Va d'abord sur la page du planning, puis reclique sur l'icône."
});
await openViewer();
return;
}
// Injecter un script dans l'onglet pour extraire le HTML
const results = await chrome.scripting.executeScript({
target: { tabId: tab.id },
func: extractPlanningFromPage
});
const data = results[0]?.result;
if (!data || !data.html) {
await chrome.storage.local.set({
planningError:
"Impossible de lire le contenu de la page. " +
"Assure-toi d'être bien sur la page du planning des techniciens."
});
await openViewer();
return;
}
// Stocker le HTML capturé + l'URL de base pour les requêtes futures
await chrome.storage.local.set({
planningHtml: data.html,
planningUrl: tab.url,
planningCapturedAt: Date.now(),
planningError: null
});
await openViewer();
} catch (err) {
console.error("Erreur extension:", err);
await chrome.storage.local.set({
planningError: "Erreur inattendue : " + (err?.message || String(err))
});
await openViewer();
}
});
// Fonction injectée dans la page du planning
// (elle s'exécute dans le contexte de itsma.vd.ch, pas dans le service worker)
function extractPlanningFromPage() {
// Récupérer tout le HTML de la page
const html = document.documentElement.outerHTML;
return { html: html };
}
async function openViewer() {
const viewerUrl = chrome.runtime.getURL("viewer.html");
await chrome.tabs.create({ url: viewerUrl });
}