From 8777118abf5b4548b6f865ffacbd7897b714537d Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sat, 15 Feb 2025 14:16:06 +0100 Subject: [PATCH] Fusions scripts ajout automatique --- manifest.json | 7 ++ src/background/background.js | 134 +++++++++++++++++++++++++---------- src/popup/popup.html | 8 ++- src/popup/popup.js | 20 +----- src/sidebar/sidebar.js | 3 + src/utils/stats.js | 1 + 6 files changed, 118 insertions(+), 55 deletions(-) diff --git a/manifest.json b/manifest.json index d72ae1e..0879b3c 100644 --- a/manifest.json +++ b/manifest.json @@ -29,6 +29,7 @@ }, "browser_action": { + "default_area": "navbar", "default_popup": "src/popup/popup.html", "default_icon": { "16": "src/assets/icons/logo.png" @@ -60,6 +61,11 @@ "src/context_menu/custom_context_menu.js"], "css": ["src/context_menu/custom_context_menu.css"], "run_at": "document_idle" + }, + { + "matches": ["<all_urls>"], + "js": ["src/utils/stats.js"], + "run_at": "document_end" } ], @@ -67,6 +73,7 @@ "src/*" ], + "content_security_policy": "script-src 'self' https://cdn.jsdelivr.net; object-src 'self';", "icons": { "16": "src/assets/icons/logo.png" diff --git a/src/background/background.js b/src/background/background.js index 3c0eaa5..ad1c9c3 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -71,6 +71,74 @@ async function refreshAllUI() { browser.runtime.sendMessage({ action: "refreshUI" }); } +// ───────────────────────────────────────────────────────────────────────────── +// Initialisation du WebWorker +// ───────────────────────────────────────────────────────────────────────────── +let worker = null; + +function initWorker() { + if (!worker) { + console.log("[Background] Initialisation du WebWorker..."); + try { + worker = new Worker("src/workers/pyodide_worker.js"); + worker.onmessage = (event) => { + console.log("[Background] Message reçu du WebWorker :", event.data); + }; + worker.onerror = (error) => { + console.error("[Background] Erreur dans le WebWorker :", error); + }; + console.log("[Background] WebWorker initialisé avec succès."); + } catch (error) { + console.error("[Background] Échec de l'initialisation du WebWorker :", error); + } + } +} +// Initialisation +initWorker(); +worker.postMessage({ command: "pyodide-simplemma" }); + +// ───────────────────────────────────────────────────────────────────────────── +// Écoute des messages de la popup et transmission au WebWorker +// ───────────────────────────────────────────────────────────────────────────── +browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { + console.log("[Background] Message reçu :", message); + + if (!worker) { + initWorker(); + } + + if (message.command === "toggle-stats") { + console.log(`[Background] Statistiques ${message.isActive ? "activées" : "désactivées"}`); + await browser.storage.local.set({ isTrackingActive: message.isActive }); + // Transmettre l'activation des statistiques au WebWorker + worker.postMessage({ command: "toggle-stats", isActive: message.isActive }); + } + + if (message.command === "pyodide-simplemma") { + console.log("[Background] Demande d'initialisation de Pyodide et Simplemma..."); + worker.postMessage({ command: "pyodide-simplemma" }); + } + + return true; // Permet une réponse asynchrone si nécessaire +}); + +// ───────────────────────────────────────────────────────────────────────────── +// Écouter les réponses du WebWorker +// ───────────────────────────────────────────────────────────────────────────── +worker.onmessage = (event) => { + console.log("[Background] Message du WebWorker :", event.data); + + // Pyodide et Simplemma prêts : notifier tous les onglets + if (event.data.type === "pyodide-simplemma" && event.data.status === "success") { + browser.tabs.query({}).then((tabs) => { + tabs.forEach((tab) => { + browser.tabs.sendMessage(tab.id, { command: "pyodide-simplemma-ready" }) + .catch((error) => console.warn(`[Background] Impossible d'envoyer un message à l'onglet ${tab.id} : ${error}`)); + }); + }); + } +}; + // ───────────────────────────────────────────────────────────────────────────── // Fonctions d'authentification & de redirection // ───────────────────────────────────────────────────────────────────────────── @@ -339,64 +407,58 @@ async function initializeExtensionState() { const { extensionActive } = await browser.storage.local.get("extensionActive"); if (extensionActive === undefined) { - await browser.storage.local.set({ extensionActive: true }); // Activation par défaut - console.log("🔄 Initialisation : extension activée par défaut."); - enableExtensionFeatures(); + await browser.storage.local.set({ extensionActive: true }); // Activation par défaut + console.log("🔄 Initialisation : extension activée par défaut."); + enableExtensionFeatures(); } else { - console.log(`🔄 État actuel de l'extension : ${extensionActive ? "activée" : "désactivée"}`); - if (extensionActive) { - enableExtensionFeatures(); - } else { - disableExtensionFeatures(); - } -} + console.log(`🔄 État actuel de l'extension : ${extensionActive ? "activée" : "désactivée"}`); + if (extensionActive) { + enableExtensionFeatures(); + } else { + disableExtensionFeatures(); + } + } } // === 2. Gestion de l'activation/désactivation de l'extension === browser.runtime.onMessage.addListener(async (message) => { if (message.action === "toggleExtension") { - console.log(`🔄 Changement d'état de l'extension : ${message.isActive ? "activée" : "désactivée"}`); - await browser.storage.local.set({ extensionActive: message.isActive }); + console.log(`🔄 Changement d'état de l'extension : ${message.isActive ? "activée" : "désactivée"}`); + await browser.storage.local.set({ extensionActive: message.isActive }); - if (!message.isActive) { - disableExtensionFeatures(); - } else { - enableExtensionFeatures(); - } - browser.runtime.sendMessage({ action: "updateUI" }); + if (!message.isActive) { + disableExtensionFeatures(); + } else { + enableExtensionFeatures(); + } + browser.runtime.sendMessage({ action: "updateUI" }); } }); - // === 3. Fonction pour désactiver les fonctionnalités de l'extension === async function disableExtensionFeatures() { console.log("Désactivation des fonctionnalités de l'extension."); browser.runtime.sendMessage({ - action: "updateUI", - autoAdd: false, - isTrackingActive: false, - areStatsActive: false + action: "updateUI", + autoAdd: false, + isTrackingActive: false, + areStatsActive: false }); - - // Fermeture de la barre latérale - console.log("🛑 Fermeture de la barre latérale..."); - browser.sidebarAction.close(); - + // Suppression d'éventuelles actions spécifiques à la sidebar + console.log("Les fonctionnalités de la sidebar ne sont plus utilisées."); } // === 4. Fonction pour activer les fonctionnalités de l'extension === async function enableExtensionFeatures() { console.log("Réactivation des fonctionnalités de l'extension."); browser.runtime.sendMessage({ - action: "updateUI", - autoAdd: true, - isTrackingActive: true, - areStatsActive: true + action: "updateUI", + autoAdd: true, + isTrackingActive: true, + areStatsActive: true + }).catch(err => { + console.warn("Aucun récepteur pour le message updateUI :", err); }); - - getOrCreateWhiteBox(); - browser.sidebarAction.open(); } - initializeExtensionState(); diff --git a/src/popup/popup.html b/src/popup/popup.html index d1a00b8..f8a65ca 100644 --- a/src/popup/popup.html +++ b/src/popup/popup.html @@ -175,7 +175,7 @@ <div id="stats-options" class="option-container"> <div class="option-row"> - <label for="auto-add">Ajout auto</label> + <label for="auto-add">Ajout automatique</label> <input type="checkbox" id="auto-add" /> </div> @@ -196,9 +196,13 @@ <p id="loading-languages" style="color: gray;">Chargement...</p> </div> </div> - + <!-- Message d'erreur si on ne sélectionne pas une langue à suivre--> + <div id="error-message" class="hidden"> + <p>Veuillez sélectionner au moins une langue avant de sauvegarder.</p> + </div> <button id="save-options" class="hidden">Valider</button> </div> + </div> <div id="extension-notification" class="hidden"> diff --git a/src/popup/popup.js b/src/popup/popup.js index 0365ca8..412056b 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -101,7 +101,6 @@ async function updateOptionsUI() { } if (statsOptions) { - statsOptions.classList.toggle("hidden", !extensionActive || !isTrackingActive); } @@ -138,7 +137,7 @@ document.getElementById("toggleStatsBtn").addEventListener("click", async () => return; } const current = await browser.storage.local.get("isTrackingActive"); - const newState = !current.isTrackingActive; + const newState = !(current.isTrackingActive); await browser.storage.local.set({ isTrackingActive: newState }); @@ -216,12 +215,7 @@ function handleToggleExtension(event) { if (!accessToken) { return; } - browser.storage.local.get("extensionActive").then(({ extensionActive }) => { - if (extensionActive) { - browser.sidebarAction.close(); - } - proceedToggleExtension(); - }); + proceedToggleExtension(); }); } @@ -236,15 +230,6 @@ async function proceedToggleExtension() { } browser.runtime.sendMessage({ action: "toggleExtension", isActive: newState }); - - if (newState) { - try { - browser.sidebarAction.open(); - console.log("Sidebar ouverte directement depuis le popup."); - } catch (err) { - console.error("Erreur lors de l'ouverture de la sidebar :", err); - } - } } // === 6. Mise à jour de l'UI du popup en fonction d'un message === @@ -294,6 +279,7 @@ browser.runtime.onMessage.addListener(async (message) => { await updateLanguageSelection(); updatePopupUI(message); } else if (message.action === "showNotification") { + // Logique pour afficher une notification si nécessaire } }); diff --git a/src/sidebar/sidebar.js b/src/sidebar/sidebar.js index 41c7e6d..0da7a26 100644 --- a/src/sidebar/sidebar.js +++ b/src/sidebar/sidebar.js @@ -516,6 +516,9 @@ browser.runtime.onMessage.addListener(async (message) => { await refreshSidebarState(); break; + case "pyodide-simplemma-ready": + return; + default: console.warn("âš ï¸ Action inconnue reçue :", message.action); } diff --git a/src/utils/stats.js b/src/utils/stats.js index 49a6171..fe8f805 100644 --- a/src/utils/stats.js +++ b/src/utils/stats.js @@ -1,3 +1,4 @@ +console.log("Script stats.js chargé !"); (function () { if (window.hasRun) { return; -- GitLab