forked from FroSteel/Planification
3b1831a83a
Première version stable de l'extension Planification : viewer pour planning EasyVista, fetch XML, affichage cards par tech.
69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
// 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 });
|
|
}
|