diff --git a/manifest.json b/manifest.json index 0879b3ce61c3f6eb778bf89bd2aa63c424e2d707..a5821ed714cad076ec405a7b13707a0d8b4c2b5e 100644 --- a/manifest.json +++ b/manifest.json @@ -20,6 +20,7 @@ "background": { "scripts": [ + "src/utils/logger.js", "src/background/background.js", "src/utils/definitions.js", "src/utils/api.js", @@ -54,11 +55,13 @@ { "matches": ["<all_urls>"], "js": [ + "src/utils/logger.js", "src/assets/lexicon_icon.js", "src/utils/api.js", "src/utils/definitions.js", "src/sidebar/sidebar.js", - "src/context_menu/custom_context_menu.js"], + "src/context_menu/custom_context_menu.js", + "src/utils/stats.js"], "css": ["src/context_menu/custom_context_menu.css"], "run_at": "document_idle" }, diff --git a/src/background/background.js b/src/background/background.js index ad1c9c30fd2706e2b3a4ce294932df3ca796c8bf..7f5aa2db052829b5cbc29d24d910f386d7efc53a 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -12,14 +12,14 @@ const AUTH_BALEX_URL = "https://prisms.lezinter.net/fr/headquarters/balex"; // ───────────────────────────────────────────────────────────────────────────── // Logs de démarrage // ───────────────────────────────────────────────────────────────────────────── -console.log("🚀 ff2BaLex (background) chargé."); +log("🚀 ff2BaLex (background) chargé."); browser.runtime.onInstalled.addListener((details) => { - console.log("🔔 Extension installée ou mise à jour. Raison :", details.reason); + log("🔔 Extension installée ou mise à jour. Raison :", details.reason); }); browser.runtime.onStartup.addListener(() => { - console.log("🔄 Extension démarrée (onStartup)."); + log("🔄 Extension démarrée (onStartup)."); }); // ───────────────────────────────────────────────────────────────────────────── @@ -28,11 +28,11 @@ browser.runtime.onStartup.addListener(() => { browser.storage.onChanged.addListener((changes) => { if (changes.extensionActive) { isExtensionActive = changes.extensionActive.newValue; - console.log("✅ Extension activée :", isExtensionActive); + log("✅ Extension activée :", isExtensionActive); } if (changes.statsActive) { areStatsActive = changes.statsActive.newValue; - console.log("📊 Statistiques activées :", areStatsActive); + log("📊 Statistiques activées :", areStatsActive); } refreshAllUI(); }); @@ -43,7 +43,7 @@ browser.storage.onChanged.addListener((changes, area) => { if (newToken) { browser.storage.local.get("extensionActive").then(({ extensionActive }) => { if (!extensionActive) { - console.log("Token ajouté, activation automatique de l'extension."); + log("Token ajouté, activation automatique de l'extension."); browser.storage.local.set({ extensionActive: true }); enableExtensionFeatures(); browser.runtime.sendMessage({ @@ -67,7 +67,7 @@ async function isUserConnected() { } async function refreshAllUI() { - console.log("🔄 Rafraîchissement global de l'UI..."); + log("🔄 Rafraîchissement global de l'UI..."); browser.runtime.sendMessage({ action: "refreshUI" }); } @@ -78,16 +78,16 @@ let worker = null; function initWorker() { if (!worker) { - console.log("[Background] Initialisation du WebWorker..."); + 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); + 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."); + log("[Background] WebWorker initialisé avec succès."); } catch (error) { console.error("[Background] Échec de l'initialisation du WebWorker :", error); } @@ -101,21 +101,21 @@ 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); + 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"}`); + 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..."); + log("[Background] Demande d'initialisation de Pyodide et Simplemma..."); worker.postMessage({ command: "pyodide-simplemma" }); } @@ -126,7 +126,7 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { // Écouter les réponses du WebWorker // ───────────────────────────────────────────────────────────────────────────── worker.onmessage = (event) => { - console.log("[Background] Message du WebWorker :", event.data); + 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") { @@ -146,7 +146,7 @@ browser.runtime.onConnect.addListener((port) => { if (port.name === "auth") { port.onMessage.addListener(async (message) => { if (message.action === "toggleAuth") { - console.log("🔄 toggleAuth reçu via port dans le background."); + log("🔄 toggleAuth reçu via port dans le background."); const isConnected = await isUserConnected(); if (isConnected) { await disconnectFromLexicalDB(); @@ -161,18 +161,18 @@ browser.runtime.onConnect.addListener((port) => { // Ouvre directement la page de connexion async function actuallyOpenLoginPage() { - console.log("🔗 Ouverture de la page de connexion."); + log("🔗 Ouverture de la page de connexion."); // Mémoriser l'onglet actif const [currentTab] = await browser.tabs.query({ active: true, currentWindow: true }); if (currentTab) { originalTabId = currentTab.id; - console.log("✅ Onglet courant mémorisé, ID =", originalTabId); + log("✅ Onglet courant mémorisé, ID =", originalTabId); } // Ouvre un nouvel onglet pour la page de connexion et l'active const loginTab = await browser.tabs.create({ url: AUTH_LOGIN_URL, active: true }); loginTabId = loginTab.id; - console.log("✅ Onglet de login créé, ID =", loginTabId); + log("✅ Onglet de login créé, ID =", loginTabId); // Notifie que l'authentification est en cours browser.runtime.sendMessage({ action: "authStatusChanged", isLoggedIn: false }); } @@ -180,7 +180,7 @@ async function actuallyOpenLoginPage() { // Déconnecte l'utilisateur async function disconnectFromLexicalDB() { await browser.storage.local.remove("accessToken"); - console.log("🔓 Token supprimé avec succès."); + log("🔓 Token supprimé avec succès."); await browser.storage.local.remove("lexiconColors"); @@ -201,13 +201,13 @@ async function disconnectFromLexicalDB() { // Sauvegarde le token et ferme l'onglet de login si nécessaire async function saveToken(token) { - console.log("✅ Sauvegarde du token :", token); + log("✅ Sauvegarde du token :", token); await browser.storage.local.set({ accessToken: token }); if (loginTabId) { try { await browser.tabs.remove(loginTabId); - console.log("🗙 Onglet de login fermé après connexion réussie."); + log("🗙 Onglet de login fermé après connexion réussie."); } catch (err) { console.warn("Impossible de fermer l'onglet de login :", err); } @@ -216,7 +216,7 @@ async function saveToken(token) { if (originalTabId) { try { await browser.tabs.update(originalTabId, { active: true }); - console.log("🔙 Retour sur l'onglet initial :", originalTabId); + log("🔙 Retour sur l'onglet initial :", originalTabId); } catch (err) { console.warn("Impossible de basculer sur l'onglet initial :", err); } @@ -242,7 +242,7 @@ async function saveToken(token) { // Gestion des messages reçus // ───────────────────────────────────────────────────────────────────────────── browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { - console.log("📩 Message reçu dans background.js :", message); + log("📩 Message reçu dans background.js :", message); switch (message.action) { case "toggleAuth": { @@ -257,7 +257,7 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { } case "getDefinitionWiki": { if (message.selectedText && message.selectedText.trim() !== "") { - console.log("🌠Requête Wiktionnaire pour :", message.selectedText); + log("🌠Requête Wiktionnaire pour :", message.selectedText); const definition = await window.fetchWiktionaryDefinition(message.selectedText.trim()); browser.runtime.sendMessage({ action: "fetchWiktionaryDefinitionResponse", @@ -278,7 +278,7 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { break; } case "authStatusChanged": { - console.log("🔄 Mise à jour de l'état d'authentification :", message.isLoggedIn); + log("🔄 Mise à jour de l'état d'authentification :", message.isLoggedIn); break; } case "saveToken": { @@ -303,22 +303,22 @@ browser.webNavigation.onCompleted.addListener(async (details) => { // Injection d'un popup d'instruction sur la page de login if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/login") { - console.log("📘 Injection du popup d'instruction sur la page de login Prisms."); + log("📘 Injection du popup d'instruction sur la page de login Prisms."); showInstructionPopup(details); } // Récupération du token sur la page /balex if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/headquarters/balex") { - console.log("🟢 Page /balex détectée. Tentative de récupération du token."); + log("🟢 Page /balex détectée. Tentative de récupération du token."); try { await new Promise(resolve => setTimeout(resolve, 3000)); await browser.tabs.executeScript(details.tabId, { code: ` (function() { - console.log("🔠Recherche du token..."); + log("🔠Recherche du token..."); const tokenElement = document.getElementById("accessToken") || document.getElementById("accesToken"); if (tokenElement) { const token = tokenElement.innerText.trim(); - console.log("🔠Token détecté :", token); + log("🔠Token détecté :", token); browser.runtime.sendMessage({ action: "saveToken", token }); } else { console.error("⌠Token introuvable."); @@ -339,7 +339,7 @@ browser.webNavigation.onCompleted.addListener(async (details) => { browser.webRequest.onBeforeRequest.addListener( function(details) { if (details.url === "https://prisms.lezinter.net/fr/headquarters/") { - console.log("🚀 Redirection automatique vers /balex."); + log("🚀 Redirection automatique vers /balex."); return { redirectUrl: AUTH_BALEX_URL }; } }, @@ -408,10 +408,10 @@ async function initializeExtensionState() { if (extensionActive === undefined) { await browser.storage.local.set({ extensionActive: true }); // Activation par défaut - console.log("🔄 Initialisation : extension activée par défaut."); + log("🔄 Initialisation : extension activée par défaut."); enableExtensionFeatures(); } else { - console.log(`🔄 État actuel de l'extension : ${extensionActive ? "activée" : "désactivée"}`); + log(`🔄 État actuel de l'extension : ${extensionActive ? "activée" : "désactivée"}`); if (extensionActive) { enableExtensionFeatures(); } else { @@ -423,7 +423,7 @@ async function initializeExtensionState() { // === 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"}`); + 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) { @@ -437,7 +437,7 @@ browser.runtime.onMessage.addListener(async (message) => { // === 3. Fonction pour désactiver les fonctionnalités de l'extension === async function disableExtensionFeatures() { - console.log("Désactivation des fonctionnalités de l'extension."); + log("Désactivation des fonctionnalités de l'extension."); browser.runtime.sendMessage({ action: "updateUI", autoAdd: false, @@ -445,12 +445,12 @@ async function disableExtensionFeatures() { areStatsActive: false }); // Suppression d'éventuelles actions spécifiques à la sidebar - console.log("Les fonctionnalités de la sidebar ne sont plus utilisées."); + 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."); + log("Réactivation des fonctionnalités de l'extension."); browser.runtime.sendMessage({ action: "updateUI", autoAdd: true, diff --git a/src/context_menu/browser_context_menu.js b/src/context_menu/browser_context_menu.js index 7c24d4a8e5d5d5829d6135265ddb5e8ffc228e1b..92112337ca829ef9f72b2bed3882f3c8e63387a4 100644 --- a/src/context_menu/browser_context_menu.js +++ b/src/context_menu/browser_context_menu.js @@ -1,4 +1,4 @@ -console.log("browser_context_menu.js chargé correctement"); +log("browser_context_menu.js chargé correctement"); let authToken = null; let selectedLexicons = new Set(); @@ -10,7 +10,7 @@ async function loadAuthToken() { try { const result = await browser.storage.local.get("accessToken"); authToken = result.accessToken; - console.log("🔑 Token chargé au démarrage :", authToken); + log("🔑 Token chargé au démarrage :", authToken); } catch (error) { console.error("⌠Erreur lors de la récupération du token :", error); } @@ -76,14 +76,14 @@ loadAuthToken().then(createContextMenu); browser.runtime.onMessage.addListener((message) => { if (message.action === "refreshUI") { - console.log("🔄 refreshUI reçu dans browser_context_menu.js"); + log("🔄 refreshUI reçu dans browser_context_menu.js"); loadAuthToken().then(createContextMenu); } }); browser.storage.onChanged.addListener((changes, area) => { if (area === "local" && changes.accessToken) { - console.log("🔄 Token modifié, actualisation du menu contextuel."); + log("🔄 Token modifié, actualisation du menu contextuel."); loadAuthToken().then(createContextMenu); } }); @@ -92,11 +92,11 @@ browser.storage.onChanged.addListener((changes, area) => { // Gestion des clics sur le menu contextuel // ───────────────────────────────────────────────────────────────────────────── browser.contextMenus.onClicked.addListener(async (info, tab) => { - console.log("Item de menu cliqué :", info.menuItemId); + log("Item de menu cliqué :", info.menuItemId); // Action pour le bouton de connexion/déconnexion if (info.menuItemId === "login") { - console.log("🔄 Action login/déconnexion demandée."); + log("🔄 Action login/déconnexion demandée."); if (typeof actuallyOpenLoginPage === "function") { actuallyOpenLoginPage(); } else { @@ -111,7 +111,7 @@ browser.contextMenus.onClicked.addListener(async (info, tab) => { } const selectedText = info.selectionText.trim(); - console.log(`📩 Texte sélectionné : ${selectedText}`); + log(`📩 Texte sélectionné : ${selectedText}`); // Item "Ajouter ce mot à mes lexiques" if (info.menuItemId === "addToLexicon") { @@ -160,7 +160,7 @@ async function getDefinition(selectedText) { } const wikiDefs = await fetchWiktionaryDefinition(selectedText); const allDefinitions = [...lexiconDefs, ...wikiDefs]; - console.log("📠Définitions combinées :", allDefinitions); + log("📠Définitions combinées :", allDefinitions); browser.runtime.sendMessage({ action: "showDefinitions", selectedText, @@ -173,10 +173,10 @@ async function getDefinition(selectedText) { async function searchInLexicons(selectedText) { try { - console.log("🔎 Recherche dans mes lexiques :", selectedText); + log("🔎 Recherche dans mes lexiques :", selectedText); const allDefinitions = await fetchLexiconDefinitions(selectedText); if (!allDefinitions || allDefinitions.length === 0) { - console.log("⌠Aucun lexique trouvé pour ce mot."); + log("⌠Aucun lexique trouvé pour ce mot."); browser.runtime.sendMessage({ action: "showLexiconResult", lexicons: [], @@ -194,7 +194,7 @@ async function searchInLexicons(selectedText) { for (const [id, name] of lexMap.entries()) { foundInLexicons.push({ id, name }); } - console.log("📩 Envoi du message 'showLexiconResult' avec :", foundInLexicons); + log("📩 Envoi du message 'showLexiconResult' avec :", foundInLexicons); browser.runtime.sendMessage({ action: "showLexiconResult", lexicons: foundInLexicons, diff --git a/src/context_menu/custom_context_menu.css b/src/context_menu/custom_context_menu.css index f763805383df8589ad745876c29b25d9f7852331..91fbf36cefc0096ebd3069a3aeeaa790a842db4f 100644 --- a/src/context_menu/custom_context_menu.css +++ b/src/context_menu/custom_context_menu.css @@ -1,3 +1,5 @@ + + /* === Conteneur principal du menu contextuel === */ #whiteBox { position: absolute; diff --git a/src/context_menu/custom_context_menu.js b/src/context_menu/custom_context_menu.js index 37dd04d384095252107d67d5732b6825e32c6a41..ad5ab780f6299369b6b917a145ad578ea1d07384 100644 --- a/src/context_menu/custom_context_menu.js +++ b/src/context_menu/custom_context_menu.js @@ -1,4 +1,4 @@ -console.log("custom_context_menu.js chargé correctement"); +log("custom_context_menu.js chargé correctement"); // === Variables globales === const WHITE_BOX_ID = "whiteBox"; @@ -18,7 +18,7 @@ async function loadAuthToken() { try { const result = await browser.storage.local.get("accessToken"); authToken = result.accessToken || null; - console.log("🔑 Token chargé :", authToken); + log("🔑 Token chargé :", authToken); } catch (error) { console.error("⌠Erreur lors de la récupération du token :", error); authToken = null; @@ -95,7 +95,7 @@ function setupWhiteBoxActions() { e.stopPropagation(); e.preventDefault(); const selectedText = getSelectedWord().trim(); - console.log("🔠Bouton Ajouter au lexique cliqué avec le mot :", selectedText); + log("🔠Bouton Ajouter au lexique cliqué avec le mot :", selectedText); if (!selectedText) return; if (authToken) { browser.runtime.sendMessage({ action: "openLexiconBlock" }); @@ -174,7 +174,7 @@ function showWhiteBox(event, selectedText) { whiteBox.style.top = top + "px"; whiteBox.style.display = "block"; - console.log("Affichage du menu contextuel avec le mot :", selectedText); + log("Affichage du menu contextuel avec le mot :", selectedText); updateMenuVisibility(); } @@ -190,7 +190,7 @@ document.addEventListener("mouseup", (event) => { if (event.target.closest("#whiteBox")) return; const selectedText = window.getSelection().toString().trim(); if (selectedText) { - console.log("Texte sélectionné :", selectedText); + log("Texte sélectionné :", selectedText); getOrCreateWhiteBox(); showWhiteBox(event, selectedText); browser.runtime.sendMessage({ @@ -205,7 +205,7 @@ document.addEventListener("mouseup", (event) => { // Écoute des messages entrants browser.runtime.onMessage.addListener((message) => { if (message.action === "refreshUI") { - console.log("🔄 Mise à jour du menu contextuel personnalisé."); + log("🔄 Mise à jour du menu contextuel personnalisé."); loadAuthToken().then(updateMenuVisibility); } }); @@ -217,7 +217,7 @@ loadAuthToken().then(() => { }); browser.storage.onChanged.addListener((changes) => { if (changes.accessToken) { - console.log("🔄 Token modifié dans le stockage, mise à jour du menu contextuel."); + log("🔄 Token modifié dans le stockage, mise à jour du menu contextuel."); loadAuthToken().then(updateMenuVisibility); } }); @@ -276,7 +276,7 @@ async function showPicker(event, selectedText) { try { const lexicons = await getLexicons(authToken, "fr"); - console.log("Lexicons récupérés :", lexicons); + log("Lexicons récupérés :", lexicons); if (!Array.isArray(lexicons) || lexicons.length === 0) { picker.innerHTML = "<p style='color:#333;'>Aucun lexique trouvé.</p>"; @@ -316,7 +316,7 @@ async function showPicker(event, selectedText) { return; } - console.log(`🔠Vérification si le mot "${selectedText}" existe déjà dans les lexiques sélectionnés...`); + log(`🔠Vérification si le mot "${selectedText}" existe déjà dans les lexiques sélectionnés...`); let definitions = []; try { @@ -345,9 +345,9 @@ async function showPicker(event, selectedText) { } try { - console.log(`📡 Ajout du mot "${selectedText}" dans les lexiques :`, lexiconsToAdd); + log(`📡 Ajout du mot "${selectedText}" dans les lexiques :`, lexiconsToAdd); const result = await AddWord(authToken, selectedText, lexiconsToAdd, false); - console.log("Réponse API :", result); + log("Réponse API :", result); await new Promise(resolve => setTimeout(resolve, 300)); browser.runtime.sendMessage({ action: "refreshUI" }); @@ -402,7 +402,7 @@ document.addEventListener("mouseup", (event) => { const selectedText = window.getSelection().toString().trim(); if (selectedText) { - console.log("Texte sélectionné :", selectedText); + log("Texte sélectionné :", selectedText); showWhiteBox(event, selectedText); browser.runtime.sendMessage({ action: "mot_selectionne", diff --git a/src/options/options.html b/src/options/options.html index c9491e14ccca3a582c965ec79951a593ec129da4..ddac9ee33223c34d3d1e9258719fe5c907282883 100644 --- a/src/options/options.html +++ b/src/options/options.html @@ -4,6 +4,7 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Paramètres ff2BaLex</title> + <script src="../utils/logger.js"></script> <style> body { font-family: Arial, sans-serif; diff --git a/src/options/options.js b/src/options/options.js index 22cba4c05d9dda2553051080e284eaccbbd1b921..104e01718fece2f7bf59443e9aa1c071ee1ec9f8 100644 --- a/src/options/options.js +++ b/src/options/options.js @@ -4,7 +4,7 @@ document.getElementById('connectBtn').addEventListener('click', () => { async function disconnectFromLexicalDB() { await browser.storage.local.remove("accessToken"); - console.log("Token supprimé, déconnexion réussie."); + log("Token supprimé, déconnexion réussie."); alert("Déconnexion réussie."); updateContextMenu(); diff --git a/src/popup/popup.html b/src/popup/popup.html index 75cc8e056cdaad4b043ae64fcfd6d1974c0c7958..c19f7cff6b3f03d5362e244a672060fb26710d91 100644 --- a/src/popup/popup.html +++ b/src/popup/popup.html @@ -4,6 +4,7 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Extension BaLex</title> + <script src="../utils/logger.js"></script> <style> #extension-notification { position: absolute; diff --git a/src/popup/popup.js b/src/popup/popup.js index 412056b95b82ebb8846b82eb625730f44af8b575..1482821eb8befcf5b8e7dca1a83893e9f74e23ac 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -1,4 +1,4 @@ -console.log("✅ popup.js chargé avec succès !"); +log("✅ popup.js chargé avec succès !"); // === 1. Mise à jour du bouton Connexion/Déconnexion === async function updateConnectionButton() { @@ -62,7 +62,7 @@ async function updateLanguageSelection() { languageSelection.appendChild(langButton); }); - console.log("✅ Sélection des langues mise à jour avec :", userLanguages); + log("✅ Sélection des langues mise à jour avec :", userLanguages); } // === 3. Mise à jour des options utilisateur et des statistiques === @@ -154,7 +154,7 @@ document.getElementById("toggleStatsBtn").addEventListener("click", async () => browser.runtime.sendMessage({ command: "toggle-stats", isActive: newState }); if (newState) { - console.log("[Popup] Demande d'initialisation de Pyodide..."); + log("[Popup] Demande d'initialisation de Pyodide..."); browser.runtime.sendMessage({ command: "init-pyodide" }); } }); @@ -181,7 +181,7 @@ document.getElementById("save-options").addEventListener("click", async () => { trackedLanguages: selectedLanguages }); - console.log("Options sauvegardées :", { autoAdd, threshold, trackedLanguages: selectedLanguages }); + log("Options sauvegardées :", { autoAdd, threshold, trackedLanguages: selectedLanguages }); }); // === 5. Gestion de l'activation/désactivation de l'extension === @@ -234,7 +234,7 @@ async function proceedToggleExtension() { // === 6. Mise à jour de l'UI du popup en fonction d'un message === async function updatePopupUI(message) { - console.log("🔄 Mise à jour du popup avec :", message); + log("🔄 Mise à jour du popup avec :", message); const statsOptions = document.getElementById("stats-options"); const autoAddCheckbox = document.getElementById("auto-add"); @@ -270,10 +270,10 @@ async function updatePopupUI(message) { // === 7. Écoute des messages depuis le background === browser.runtime.onMessage.addListener(async (message) => { - console.log("📩 Message reçu dans popup.js :", message); + log("📩 Message reçu dans popup.js :", message); if (message.action === "updateUI") { - console.log("🔄 Mise à jour de l'UI du popup..."); + log("🔄 Mise à jour de l'UI du popup..."); await updateConnectionButton(); await updateOptionsUI(); await updateLanguageSelection(); diff --git a/src/sidebar/sidebar.html b/src/sidebar/sidebar.html index 84ab2a28c0d0e272f945eac156287775ce676ace..143f1f0f738e76465d490da9319f5cdf8a54460b 100644 --- a/src/sidebar/sidebar.html +++ b/src/sidebar/sidebar.html @@ -4,6 +4,7 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>BaLex - Barre Latérale</title> + <script src="../utils/logger.js"></script> <script src="../assets/lexicon_icon.js" defer></script> <script src="../utils/api.js" defer></script> <script src="../utils/definitions.js" defer></script> diff --git a/src/sidebar/sidebar.js b/src/sidebar/sidebar.js index 0da7a26e8b8ec9cea96eadfe704489f245ef025e..f283a19fda51e921d858326c460be4fa23340174 100644 --- a/src/sidebar/sidebar.js +++ b/src/sidebar/sidebar.js @@ -1,5 +1,5 @@ -console.log("✅ sidebar.js chargé !"); -console.log( +log("✅ sidebar.js chargé !"); +log( "🌠Vérification API browser :", typeof browser !== "undefined" ? "✅ Disponible" : "⌠Non disponible" ); @@ -18,14 +18,14 @@ async function getAuthTokenFromStorage() { try { const { accessToken } = await browser.storage.local.get("accessToken"); if (accessToken) { - console.log(`🔑 Token récupéré depuis le stockage local : [${accessToken}]`); + log(`🔑 Token récupéré depuis le stockage local : [${accessToken}]`); authToken = accessToken; window.authToken = accessToken; return authToken; } - console.warn("âš ï¸ Aucun token trouvé dans le stockage local."); + log("âš ï¸ Aucun token trouvé dans le stockage local."); } catch (error) { - console.error("⌠Erreur lors de la récupération du token :", error); + log("⌠Erreur lors de la récupération du token :", error); } return null; } @@ -40,7 +40,7 @@ function updateAuthButton(isLoggedIn) { authButton.title = isLoggedIn ? "En vous déconnectant, vous perdrez l'accès à vos lexiques personnels ainsi qu'aux fonctionnalités d'ajout automatique et de statistiques d'utilisation." : "En vous connectant, vous pourrez accéder à vos lexiques personnels ainsi qu'aux fonctionnalités d'ajout automatique et de statistiques d'utilisation."; - console.log("🔄 Bouton d'authentification mis à jour :", authButton.textContent); + log("🔄 Bouton d'authentification mis à jour :", authButton.textContent); } else { console.warn("âš ï¸ Bouton d'authentification (#auth-button) introuvable."); } @@ -59,7 +59,7 @@ function toggleElementsVisibility(isLoggedIn) { const element = document.getElementById(id); if (element) { element.style.display = shouldShow ? "block" : "none"; - console.log(`🔄 Élément #${id} ${shouldShow ? "affiché" : "masqué"}.`); + log(`🔄 Élément #${id} ${shouldShow ? "affiché" : "masqué"}.`); } else { console.warn(`âš ï¸ Ã‰lément #${id} introuvable.`); } @@ -77,7 +77,7 @@ function toggleHighlightMessage(isLoggedIn) { * Met à jour l'état global de la sidebar (bouton d'authentification, etc.) */ async function refreshSidebarState() { - console.log("🔄 Début de l'actualisation de la barre latérale..."); + log("🔄 Début de l'actualisation de la barre latérale..."); const token = await getAuthTokenFromStorage(); const isLoggedIn = !!token; @@ -113,7 +113,7 @@ async function refreshSidebarState() { } } - console.log("✅ Barre latérale actualisée. Utilisateur connecté :", isLoggedIn); + log("✅ Barre latérale actualisée. Utilisateur connecté :", isLoggedIn); } /** @@ -164,15 +164,15 @@ function openBlock(blockId, btn) { async function fetchLexicons() { try { - console.log("🔄 Début de la récupération des lexiques..."); - console.log("🔑 Token utilisé :", authToken); + log("🔄 Début de la récupération des lexiques..."); + log("🔑 Token utilisé :", authToken); if (!authToken) { throw new Error("âš ï¸ Aucun token disponible. Veuillez vous connecter."); } - console.log("getLexicons type:", typeof getLexicons); + log("getLexicons type:", typeof getLexicons); const lexicons = await getLexicons(authToken, "fr"); - console.log("📚 Réponse brute de l'API :", lexicons); + log("📚 Réponse brute de l'API :", lexicons); if (!Array.isArray(lexicons) || lexicons.length === 0) { throw new Error("âš ï¸ Aucun lexique trouvé."); @@ -216,7 +216,7 @@ async function displayLexiconsWithCheckbox(lexicons) { } lexiquesContainer.innerHTML = ""; if (lexicons.length === 0) { - console.log("âš ï¸ Aucun lexique à afficher."); + log("âš ï¸ Aucun lexique à afficher."); lexiquesContainer.textContent = "Aucun lexique disponible."; return; } @@ -313,12 +313,12 @@ async function displayLexiconsWithCheckbox(lexicons) { } function initModal() { - console.log("initModal appelé"); + log("initModal appelé"); const modalOverlay = document.getElementById("modalOverlay"); const modalFullText = document.getElementById("modalFullText"); const closeModalBtn = document.getElementById("closeModalBtn"); - console.log("closeModalBtn =", closeModalBtn); + log("closeModalBtn =", closeModalBtn); if (!modalOverlay || !modalFullText || !closeModalBtn) { console.error("Les éléments modaux ne sont pas trouvés !"); @@ -326,7 +326,7 @@ function initModal() { } closeModalBtn.addEventListener("click", () => { - console.log("clic sur closeModalBtn !"); + log("clic sur closeModalBtn !"); closeDefinitionPopup(); }); modalOverlay.addEventListener("click", (event) => { @@ -413,10 +413,10 @@ async function handleAddWordClick() { // 6) Envoi d’une seule requête pour tous les lexiques restants try { - console.log(`📡 Envoi de l'ajout du mot "${selectedWord}" dans les lexiques :`, lexiconsToAdd); + log(`📡 Envoi de l'ajout du mot "${selectedWord}" dans les lexiques :`, lexiconsToAdd); const result = await window.AddWord(authToken, selectedWord, lexiconsToAdd, false); - console.log("Réponse API :", result); + log("Réponse API :", result); // Rafraîchir l'UI et la liste des entrées await new Promise(resolve => setTimeout(resolve, 300)); @@ -441,16 +441,16 @@ async function handleAddWordClick() { // â–Œ Réception des messages // ───────────────────────────────────────────────────────────────────────────── browser.runtime.onMessage.addListener(async (message) => { - console.log("📩 Message reçu dans sidebar.js :", message); + log("📩 Message reçu dans sidebar.js :", message); switch (message.action) { case "refreshUI": - console.log("🔄 Demande de rafraîchissement de la barre latérale."); + log("🔄 Demande de rafraîchissement de la barre latérale."); await refreshSidebarState(); break; case "mot_selectionne": if (message.selectedText) { - console.log("ðŸ–‹ï¸ Mot sélectionné :", message.selectedText); + log("ðŸ–‹ï¸ Mot sélectionné :", message.selectedText); const selectedWordElement = document.getElementById("motSelectionne"); if (selectedWordElement) { selectedWordElement.textContent = message.selectedText; @@ -467,7 +467,7 @@ browser.runtime.onMessage.addListener(async (message) => { case "getDefinition": if (message.selectedText) { - console.log("📖 Recherche des définitions pour :", message.selectedText); + log("📖 Recherche des définitions pour :", message.selectedText); openBlock("definitionContent"); await window.showDefinitions(message.selectedText); } @@ -481,13 +481,13 @@ browser.runtime.onMessage.addListener(async (message) => { case "fetchWiktionaryDefinitionResponse": if (message.selectedText) { - console.log(`📖 Réception de la définition du Wiktionnaire pour '${message.selectedText}'`); + log(`📖 Réception de la définition du Wiktionnaire pour '${message.selectedText}'`); window.displayDefinitions(message.definitions); } break; case "showLexiconResult": - console.log("📚 Résultat des lexiques reçus :", message.lexicons); + log("📚 Résultat des lexiques reçus :", message.lexicons); window.displayLexiconResults(message.lexicons); break; @@ -528,7 +528,7 @@ browser.runtime.onMessage.addListener(async (message) => { // â–Œ DOMContentLoaded // ───────────────────────────────────────────────────────────────────────────── document.addEventListener("DOMContentLoaded", async () => { - console.log("📦 DOM entièrement chargé. Initialisation de la sidebar."); + log("📦 DOM entièrement chargé. Initialisation de la sidebar."); authToken = await getAuthTokenFromStorage(); window.authToken = authToken; @@ -545,13 +545,13 @@ document.addEventListener("DOMContentLoaded", async () => { openBlock("definitionContent"); const selectedWord = document.getElementById("motSelectionne")?.textContent?.trim(); if (selectedWord && selectedWord !== "Aucun mot sélectionné") { - console.log(`📩 Recherche des définitions pour '${selectedWord}'`); + log(`📩 Recherche des définitions pour '${selectedWord}'`); await window.showDefinitions(selectedWord); } else { console.warn("âš ï¸ Aucun mot sélectionné pour la recherche."); } }); - console.log("✅ Bouton #chercherDef détecté dans le DOM."); + log("✅ Bouton #chercherDef détecté dans le DOM."); chercherDefButton.style.pointerEvents = "auto"; chercherDefButton.style.display = "block"; chercherDefButton.style.visibility = "visible"; diff --git a/src/utils/api.js b/src/utils/api.js index c1bc41c1f1c05a0697308e289a0bcd623925925f..8eea9097b6312545f110f84955c5b27541728a71 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -1,4 +1,4 @@ -console.log("✅ api.js chargé correctement"); +log("✅ api.js chargé correctement"); window.authToken = null; // ───────────────────────────────────────────────────────────────────────────── // â–Œ Sélection de texte sur la page @@ -30,9 +30,9 @@ async function callApi(url, authToken = null, method = 'GET', data = null) { if (authToken) headers.Authorization = `Bearer ${authToken}`; const fetchOptions = { method, headers }; - console.log("Envoi de la requête vers :", url); + log("Envoi de la requête vers :", url); if (data) { - console.log("Body JSON :", JSON.stringify(data, null, 2)); + log("Body JSON :", JSON.stringify(data, null, 2)); fetchOptions.body = JSON.stringify(data); } @@ -94,7 +94,7 @@ async function getAllCategoriesLexicons(authToken) { const resultsByCategory = await Promise.all(promises); const combined = resultsByCategory.flat(); - console.log("✅ Lexiques récupérés (toutes catégories confondues) :", combined); + log("✅ Lexiques récupérés (toutes catégories confondues) :", combined); return combined; } catch (error) { console.error("⌠Erreur lors de la récupération multi-catégories :", error); @@ -147,7 +147,7 @@ async function getAllLexiconWords(authToken) { allGraphiesByLexicon[lexiconName] = allGraphies; } - console.log("✅ Toutes les graphies récupérées :", allGraphiesByLexicon); + log("✅ Toutes les graphies récupérées :", allGraphiesByLexicon); return allGraphiesByLexicon; } catch (error) { console.error("⌠Erreur lors de la récupération des graphies des lexiques :", error); @@ -175,7 +175,7 @@ async function getWiktionaryDefinition(word) { const page = pages ? Object.values(pages)[0] : null; const definition = page?.extract?.trim() || "Aucune définition trouvée."; - console.log(`📖 Définition trouvée pour '${word}':`, definition); + log(`📖 Définition trouvée pour '${word}':`, definition); return [definition]; } catch (error) { console.error("Erreur lors de la récupération du Wiktionnaire :", error); @@ -223,7 +223,7 @@ async function AddWord(authToken, selectedWord, lexiconIds, force = false) { window.callApi = callApi; window.getLexicons = getLexicons; -console.log("getLexicons exposée, type:", typeof window.getLexicons); +log("getLexicons exposée, type:", typeof window.getLexicons); window.getAllCategoriesLexicons = getAllCategoriesLexicons; window.getLexiconEntries = getLexiconEntries; window.getAllLexiconWords = getAllLexiconWords; diff --git a/src/utils/definitions.js b/src/utils/definitions.js index d29516074843c3e9fbe364ad685dbf2e303aa7b5..846ab12675e77221831b85e3885d17d0e4bd4cd2 100644 --- a/src/utils/definitions.js +++ b/src/utils/definitions.js @@ -16,7 +16,7 @@ window.lexiconMap = new Map(); */ async function fetchLexiconDefinitions(word) { try { - console.log(`🔠Recherche des définitions de '${word}' dans les lexiques de l'utilisateur...`); + log(`🔠Recherche des définitions de '${word}' dans les lexiques de l'utilisateur...`); if (!authToken) { console.warn("Aucun token disponible, impossible de requêter l'API protégée."); @@ -33,7 +33,7 @@ async function fetchLexiconDefinitions(word) { throw new Error(`⌠Erreur API lors de la récupération des lexiques: ${lexResponse.statusText}`); } const userLexicons = await lexResponse.json(); - console.log("ðŸ—‚ï¸ Lexiques de l'utilisateur :", userLexicons); + log("ðŸ—‚ï¸ Lexiques de l'utilisateur :", userLexicons); if (!Array.isArray(userLexicons) || userLexicons.length === 0) { console.warn("âš ï¸ Aucun lexique trouvé pour cet utilisateur."); @@ -49,12 +49,12 @@ async function fetchLexiconDefinitions(word) { : `Lexique de groupe : ${lex.group?.name || "Inconnu"}`; lexiconMap.set(lex.id, lexiconName); }); - console.log("📌 LexiconMap :", lexiconMap); + log("📌 LexiconMap :", lexiconMap); // 2) Pour chaque lexique, rechercher le mot en ajoutant target_lex const definitionsPromises = userLexicons.map(async (lex) => { const searchUrl = `https://babalex.lezinter.net/api/entry/search?graphy=${encodeURIComponent(word)}&language=fr&target_lex=${lex.id}`; - console.log(`🔎 Appel API pour le lexique ${lex.id} avec l'URL : ${searchUrl}`); + log(`🔎 Appel API pour le lexique ${lex.id} avec l'URL : ${searchUrl}`); const searchResponse = await fetch(searchUrl, { headers: { Authorization: `Bearer ${authToken}` } @@ -71,7 +71,7 @@ async function fetchLexiconDefinitions(word) { return Number(entry.lexicon.id) === Number(lex.id); }); - console.log(`Pour le lexique ${lex.id} (${lexiconMap.get(lex.id)}), entrées filtrées :`, filteredEntries); + log(`Pour le lexique ${lex.id} (${lexiconMap.get(lex.id)}), entrées filtrées :`, filteredEntries); return { lexiconId: lex.id, entries: filteredEntries }; }); @@ -81,7 +81,7 @@ async function fetchLexiconDefinitions(word) { // 3) Parcourir les résultats et extraire les définitions let allDefinitions = []; results.forEach(result => { - console.log(`Pour le lexique ${result.lexiconId}, entrées filtrées :`, result.entries); + log(`Pour le lexique ${result.lexiconId}, entrées filtrées :`, result.entries); const lexiconId = result.lexiconId; const sourceName = lexiconMap.get(lexiconId) || `Lexique #${lexiconId}`; @@ -114,7 +114,7 @@ async function fetchLexiconDefinitions(word) { }); }); - console.log("Résultat final filtré :", allDefinitions); + log("Résultat final filtré :", allDefinitions); return allDefinitions; } catch (error) { console.error("⌠Erreur générale lors de la récupération des définitions :", error); @@ -128,7 +128,7 @@ async function fetchLexiconDefinitions(word) { */ async function fetchWiktionaryDefinition(word) { try { - console.log(`🔠Requête Wiktionnaire pour "${word}"...`); + log(`🔠Requête Wiktionnaire pour "${word}"...`); if (!word || word.trim() === "") { throw new Error("âš ï¸ Mot vide, impossible d'envoyer la requête."); } @@ -138,7 +138,7 @@ async function fetchWiktionaryDefinition(word) { throw new Error(`⌠Erreur API Wiktionnaire: ${response.statusText}`); } const data = await response.json(); - console.log("📖 Réponse API (Wiktionnaire) :", data); + log("📖 Réponse API (Wiktionnaire) :", data); const pages = data.query?.pages; const page = pages ? Object.values(pages)[0] : null; @@ -147,7 +147,7 @@ async function fetchWiktionaryDefinition(word) { ? page.extract.trim() : "âš ï¸ Aucune définition trouvée sur le Wiktionnaire."; - console.log("🌠Définition Wiktionnaire extraite :", definitionText); + log("🌠Définition Wiktionnaire extraite :", definitionText); return [ { @@ -176,7 +176,7 @@ const MAX_LENGTH = 200; * Affiche les définitions dans la barre latérale. */ function displayDefinitions(definitions) { - console.log("📖 Affichage des définitions reçues :", definitions); + log("📖 Affichage des définitions reçues :", definitions); if (!Array.isArray(definitions)) return; const mesLexiquesList = document.getElementById("mesLexiquesList"); @@ -314,7 +314,7 @@ function closeDefinitionPopup() { * Puis fusionne les résultats. */ async function combineDefinitions(word) { - console.log(`[combineDefinitions] Récupération des définitions pour "${word}"...`); + log(`[combineDefinitions] Récupération des définitions pour "${word}"...`); const results = await Promise.allSettled([ fetchLexiconDefinitions(word), @@ -328,7 +328,7 @@ async function combineDefinitions(word) { const allDefinitions = [...lexiconDefinitions, ...wiktionaryDefinitions]; - console.log("📚 [combineDefinitions] Résultat fusionné :", allDefinitions); + log("📚 [combineDefinitions] Résultat fusionné :", allDefinitions); return allDefinitions; } @@ -337,7 +337,7 @@ async function combineDefinitions(word) { * Récupère et affiche toutes les définitions (lexiques + Wiktionnaire). */ async function showDefinitions(word) { - console.log(`[showDefinitions] Recherche + affichage pour "${word}"...`); + log(`[showDefinitions] Recherche + affichage pour "${word}"...`); const noDefinitionsContainer = document.getElementById("noDefinitionsContainer"); if (noDefinitionsContainer) { @@ -348,7 +348,7 @@ async function showDefinitions(word) { try { const allDefinitions = await combineDefinitions(word); - console.log("[showDefinitions] Définitions récupérées :", allDefinitions); + log("[showDefinitions] Définitions récupérées :", allDefinitions); if (!allDefinitions || allDefinitions.length === 0) { if (noDefinitionsContainer) { @@ -381,7 +381,7 @@ async function showDefinitions(word) { * (sans Wiktionnaire), puis gérer l’affichage d’erreur ou non. */ async function fetchDefinition(word) { - console.log(`🔠Recherche de la définition pour '${word}'...`); + log(`🔠Recherche de la définition pour '${word}'...`); const noDefinitionsContainer = document.getElementById("noDefinitionsContainer"); if (!noDefinitionsContainer) { @@ -391,7 +391,7 @@ async function fetchDefinition(word) { try { const definition = await fetchLexiconDefinitions(word); - console.log("🔠Résultat API :", definition); + log("🔠Résultat API :", definition); if (!definition || definition.length === 0) { console.warn(`âš ï¸ Aucune définition trouvée pour '${word}'`); @@ -442,7 +442,7 @@ function displayLexiconResults(lexicons) { li.innerHTML = `<strong>${lexiconName}</strong>`; ul.appendChild(li); - console.log(`✅ Lexique ajouté : ${lexiconName} (ID: ${lexicon.id})`); + log(`✅ Lexique ajouté : ${lexiconName} (ID: ${lexicon.id})`); }); resultDiv.appendChild(ul); diff --git a/src/utils/logger.js b/src/utils/logger.js new file mode 100644 index 0000000000000000000000000000000000000000..d404436b9790f4faf432bc5ccf8804da5011b41c --- /dev/null +++ b/src/utils/logger.js @@ -0,0 +1,12 @@ + +/** + * Mode debug : affiche les logs dans la console + * Mode prod : masque les logs +*/ +const DEBUG = true; // false en prod + +function log(...args) { + if (DEBUG) { + console.log(...args); + } +} diff --git a/src/utils/stats.js b/src/utils/stats.js index 8461906cbf83b559fe9f95a15159a9219baf82d3..114c788c9b7decdc3fef232789d513bb89e1f3eb 100644 --- a/src/utils/stats.js +++ b/src/utils/stats.js @@ -1,4 +1,4 @@ -console.log("Script stats.js chargé !"); +log("Script stats.js chargé !"); (function () { if (window.hasRun) { return; @@ -16,7 +16,7 @@ console.log("Script stats.js chargé !"); function trackVisibleContent() { // pas de tracking tant que Pyodide n’est pas prêt if (!simplemmaReady) { - console.log("[Stats] Pyodide n'est pas encore prêt, attente..."); + log("[Stats] Pyodide n'est pas encore prêt, attente..."); return; } @@ -44,7 +44,7 @@ console.log("Script stats.js chargé !"); text = cleanText(text); // nettoyage du texte avec cleanText if (text.length > 10 && !seenContent.has(text)) { seenContent.add(text); - console.log("[Stats] Envoi du texte filtré au background.js :", text); + log("[Stats] Envoi du texte filtré au background.js :", text); browser.runtime.sendMessage({ command: "process-text", text: text }); } @@ -74,7 +74,7 @@ console.log("Script stats.js chargé !"); const { isTrackingActive: storedState } = await browser.storage.local.get("isTrackingActive"); isTrackingActive = storedState ?? false; - console.log("[Stats] État initial récupéré :", isTrackingActive); + log("[Stats] État initial récupéré :", isTrackingActive); if (isTrackingActive) { startTracking(); @@ -84,13 +84,13 @@ console.log("Script stats.js chargé !"); } function startTracking() { - console.log("[Stats] Suivi des statistiques activé."); + log("[Stats] Suivi des statistiques activé."); addViewportBorder(); attachScrollListener(); } function stopTracking() { - console.log("[Stats] Suivi des statistiques désactivé."); + log("[Stats] Suivi des statistiques désactivé."); removeViewportBorder(); detachScrollListener(); } @@ -99,7 +99,7 @@ console.log("Script stats.js chargé !"); if (!scrollListenerAttached) { window.addEventListener("scroll", trackVisibleContent); scrollListenerAttached = true; - console.log("[Stats] Écouteur de défilement attaché."); + log("[Stats] Écouteur de défilement attaché."); } } @@ -107,7 +107,7 @@ console.log("Script stats.js chargé !"); if (scrollListenerAttached) { window.removeEventListener("scroll", trackVisibleContent); scrollListenerAttached = false; - console.log("[Stats] Écouteur de défilement détaché."); + log("[Stats] Écouteur de défilement détaché."); } } @@ -203,7 +203,7 @@ console.log("Script stats.js chargé !"); // GESTION DES MESSAGES ------------------------------------------------------------------------------------------ browser.runtime.onMessage.addListener((message) => { if (message.command === "pyodide-simplemma-ready") { - console.log("[Stats] Pyodide et Simplemma prêt, démarrage du scraping : "); + log("[Stats] Pyodide et Simplemma prêt, démarrage du scraping : "); simplemmaReady = true; initializeTrackingState(); // démarre le tracking une fois Pyodide prêt } diff --git a/src/workers/pyodide_worker.js b/src/workers/pyodide_worker.js index b76ab3a51f5d38ab7fc94f210f5f60c1cef48cb0..8d54367e1f44e23edf1903d56707a55620f29785 100644 --- a/src/workers/pyodide_worker.js +++ b/src/workers/pyodide_worker.js @@ -1,3 +1,5 @@ +importScripts('../utils/logger.js'); + // URL de la version Pyodide la plus récente const LATEST_BASE_URL = "https://cdn.jsdelivr.net/pyodide/v0.27.2/full/"; @@ -9,29 +11,29 @@ let simplemmaLoaded = false; // Variable indiquant si simplemma est déjà insta self.onmessage = async (event) => { const data = event.data; - console.log("[WebWorker] Message reçu du Background:", data); + log("[WebWorker] Message reçu du Background:", data); // Initialisation unique de Pyodide puis de Simplemma if (data.command === "pyodide-simplemma") { if (pyodideLoaded && simplemmaLoaded) { - console.log("[Worker] Pyodide et Simplemma déjà chargés."); + log("[Worker] Pyodide et Simplemma déjà chargés."); self.postMessage({ type: "pyodide-simplemma", status: "already_loaded", message: "Pyodide et Simplemma déjà en mémoire" }); return; } try { if (!pyodideLoaded) { - console.log("[Worker] Chargement de Pyodide..."); + log("[Worker] Chargement de Pyodide..."); importScripts(`${LATEST_BASE_URL}pyodide.js`); pyodide = await loadPyodide({ indexURL: LATEST_BASE_URL }); await pyodide.loadPackage("lzma"); await pyodide.loadPackage("micropip"); pyodideLoaded = true; - console.log("[Worker] Pyodide chargé avec succès !"); + log("[Worker] Pyodide chargé avec succès !"); } if (!simplemmaLoaded) { - console.log("[Worker] Installation de simplemma..."); + log("[Worker] Installation de simplemma..."); await pyodide.runPythonAsync(` import micropip import re @@ -65,7 +67,7 @@ self.onmessage = async (event) => { `); simplemmaLoaded = true; - console.log("[Worker] Simplemma installé avec succès !"); + log("[Worker] Simplemma installé avec succès !"); } // Envoyer confirmation au background script @@ -79,7 +81,7 @@ self.onmessage = async (event) => { // Activer/désactiver les statistiques (stats.js) if (data.command === "toggle-stats") { - console.log(`[WebWorker] Statistiques ${data.isActive ? "activées" : "désactivées"}`); + log(`[WebWorker] Statistiques ${data.isActive ? "activées" : "désactivées"}`); return; } };