diff --git a/src/options/options.html b/src/options/options.html deleted file mode 100644 index 8b2bfa963d5f5369b8b67464fd9ac95a506d4253..0000000000000000000000000000000000000000 --- a/src/options/options.html +++ /dev/null @@ -1,38 +0,0 @@ -<!-- <!DOCTYPE html> -<html lang="fr"> -<head> - <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: Luciole; - padding: 20px; - background-color: #323046; - color: white; - } - button { - width: 100%; - padding: 10px; - margin-bottom: 10px; - font-size: 15px; - color: #94608a; - font-weight: bold; - border: none; - cursor: pointer; - } - button:hover { - background-color: #94608a; - color: white; - } - </style> -</head> -<body> - <h3>Paramètres BaLex</h3> - <button id="connectBtn">Se connecter</button> - <button id="toggleExtensionBtn">Activer/Désactiver l'extension</button> - <button id="toggleStatsBtn">Activer/Désactiver les statistiques</button> - <script src="options.js"></script> -</body> -</html> --> diff --git a/src/options/options.js b/src/options/options.js deleted file mode 100644 index da48f12e80a3aaf985363633861795ef709f6d89..0000000000000000000000000000000000000000 --- a/src/options/options.js +++ /dev/null @@ -1,28 +0,0 @@ -// document.getElementById('connectBtn').addEventListener('click', () => { -// browser.runtime.sendMessage({ action: "openLoginPage" }); -// }); - -// async function disconnectFromLexicalDB() { -// await browser.storage.local.remove("accessToken"); -// log("Token supprimé, déconnexion réussie."); -// alert("Déconnexion réussie."); -// updateContextMenu(); - -// // Envoi d'un message pour mettre à jour l'UI -// browser.runtime.sendMessage({ action: "updateUI" }); -// } - -// document.getElementById("toggleExtensionBtn").addEventListener("click", async () => { -// const { extensionActive } = await browser.storage.local.get("extensionActive"); -// const newState = !extensionActive; -// await browser.storage.local.set({ extensionActive: newState }); -// alert(`Extension ${newState ? "activée" : "désactivée"}.`); -// }); - -// document.getElementById("toggleStatsBtn").addEventListener("click", async () => { -// const { statsActive } = await browser.storage.local.get("statsActive"); -// const newState = !statsActive; -// await browser.storage.local.set({ statsActive: newState }); -// alert(`Statistiques ${newState ? "activées" : "désactivées"}.`); -// }); - diff --git a/src/popup/popup.js b/src/popup/popup.js index ddbec903c1aa28ababcb6b3150e05768a3fdc695..5a9aeff54801177c383e359ae4e841b9be0c4dc8 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -360,7 +360,7 @@ function showNotification(message) { function handleWorkerMessage(event) { const data = event.data; - console.log("[Background] Message du WebWorker :", data); + log("[Background] Message du WebWorker :", data); if (data.type === "process-text" && data.status === "error") { browser.runtime.sendMessage({ diff --git a/src/utils/definitions.js b/src/utils/definitions.js index fd573039c90721fb65d6cd4a9bf40a10c683154a..2010727fc812b69758bbc32022c36ad38d749f0d 100644 --- a/src/utils/definitions.js +++ b/src/utils/definitions.js @@ -186,7 +186,7 @@ async function wikiApiResponse(word) { const data = await response.json(); - console.log(`Résultats du Wiktionnaire pour le mot "${word}" :`, data); + log(`Résultats du Wiktionnaire pour le mot "${word}" :`, data); return data; } catch (error) { console.error('Erreur lors de la récupération de la définition depuis le Wiktionnaire :', error); @@ -240,11 +240,11 @@ function formatDefinitionData(apiResponse) { async function fetchWiktionaryDefinition(word) { try { - console.log(` Recherche de la définition pour : ${word}`); + log(` Recherche de la définition pour : ${word}`); // Récupération des données depuis l'API const apiResponse = await wikiApiResponse(word); - console.log("Réponse brute de l'API :", apiResponse); + log("Réponse brute de l'API :", apiResponse); if (!Array.isArray(apiResponse) || apiResponse.length === 0) { console.warn(`Aucune définition trouvée pour "${word}"`); @@ -253,7 +253,7 @@ async function fetchWiktionaryDefinition(word) { // Formatage des données const formattedData = formatDefinitionData(apiResponse); - console.log("Données formatées :", formattedData); + log("Données formatées :", formattedData); return [ { diff --git a/src/utils/logger.js b/src/utils/logger.js index d404436b9790f4faf432bc5ccf8804da5011b41c..e4907fd198f64dce7f763a751e50ff72840c9f2f 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -1,9 +1,9 @@ /** * Mode debug : affiche les logs dans la console - * Mode prod : masque les logs + * Mode prod : masque les logs ainsi que les identifiants des lexiques */ -const DEBUG = true; // false en prod +const DEBUG = false; // false en prod function log(...args) { if (DEBUG) { diff --git a/src/utils/stats.js b/src/utils/stats.js index c03c4a1077084b3ec238dee7c5e705b734c2bbb4..fd2c702ea768fa2ebac57c1ce0237967816849a8 100644 --- a/src/utils/stats.js +++ b/src/utils/stats.js @@ -10,15 +10,15 @@ //Connexion au port function connectToWorker() { if (!workerPort) { - // console.log("[Stats] Connexion au WebWorker..."); + // log("[Stats] Connexion au WebWorker..."); workerPort = browser.runtime.connect({ name: "stats-worker-port" }); workerPort.onMessage.addListener((message) => { - console.log("[Stats] Message reçu du Worker :", message); + log("[Stats] Message reçu du Worker :", message); if (message.command === "update-frequencies") { - console.log("[Stats] Fréquences mises à jour :", message.frequencies); + log("[Stats] Fréquences mises à jour :", message.frequencies); } if (message.command === "threshold-exceeded") { - console.log("[Stats] Mots dépassant le seuil :", message.wordsAboveThreshold); + log("[Stats] Mots dépassant le seuil :", message.wordsAboveThreshold); let alertMessage = "Nouveaux mots dépassant le seuil :\n"; for (const [lang, words] of Object.entries(message.wordsAboveThreshold)) { alertMessage += `\n🔹 ${lang.toUpperCase()} : ${words.join(", ")}`; @@ -27,7 +27,7 @@ } }); workerPort.onDisconnect.addListener(() => { - // console.log("[Stats] Déconnexion du WebWorker."); + // log("[Stats] Déconnexion du WebWorker."); workerPort = null; }); } @@ -38,7 +38,7 @@ connectToWorker(); } if (workerPort) { - console.log("[Stats] Envoi du texte au Worker :", text); + log("[Stats] Envoi du texte au Worker :", text); workerPort.postMessage({ command: "process-text", text: text }); } } @@ -47,7 +47,7 @@ // Gestion des messages envoyés depuis le background // ───────────────────────────────────────────────────────────────────────────── browser.runtime.onMessage.addListener((message) => { - console.log("[Stats] Message reçu :", message); + log("[Stats] Message reçu :", message); if (message.command === "activate-stats") { startTracking(); } @@ -77,7 +77,7 @@ // Arrête tous les chronomètres lorsque l'utilisateur change d'onglet document.addEventListener("visibilitychange", () => { if (document.hidden) { - // console.log("[Stats] Changement d'onglet détecté"); + // log("[Stats] Changement d'onglet détecté"); resetAllTimers(); } }); @@ -123,8 +123,12 @@ */ function startReadingTimer(element, text, minReadTime) { if (!readingTimers.has(element)) { - let elapsedTime = 0; - let counter = document.createElement("div"); + let elapsedTime = 0; + let counter = null; + + // Créer l'indicateur uniquement si on est en mode debug + if (DEBUG) { + counter = document.createElement("div"); counter.classList.add("reading-counter"); counter.style.position = "absolute"; counter.style.background = "black"; @@ -133,31 +137,33 @@ counter.style.borderRadius = "5px"; counter.style.fontSize = "12px"; counter.style.zIndex = "9999"; - document.body.appendChild(counter); - - let interval = setInterval(() => { - elapsedTime += 1000; - - // Vérifie si l'utilisateur est actif et si le temps minimum est atteint - if (userIsActive && elapsedTime >= minReadTime) { - console.log(`[Stats] Élément lu : ${text}`); - readContent.add(text); - sendTextToWorker(text); - stopReadingTimer(element, text); - } - - // Mise à jour de la position du compteur - let rect = element.getBoundingClientRect(); - counter.style.top = `${rect.top + window.scrollY - 20}px`; - counter.style.left = `${rect.left + window.scrollX + rect.width + 10}px`; - counter.innerText = `Ⳡ${Math.floor(elapsedTime / 1000)}s`; - - }, 1000); - - readingTimers.set(element, { interval, counter, elapsedTime }); + } + + let interval = setInterval(() => { + elapsedTime += 1000; + + // Vérifie si l'utilisateur est actif et si le temps minimum est atteint + if (userIsActive && elapsedTime >= minReadTime) { + log(`[Stats] Élément lu : ${text}`); + readContent.add(text); + sendTextToWorker(text); + stopReadingTimer(element, text); + } + + // Mise à jour de la position et du contenu du compteur si en debug + if (DEBUG && counter) { + let rect = element.getBoundingClientRect(); + counter.style.top = `${rect.top + window.scrollY - 20}px`; + counter.style.left = `${rect.left + window.scrollX + rect.width + 10}px`; + counter.innerText = `Ⳡ${Math.floor(elapsedTime / 1000)}s`; + } + }, 1000); + + readingTimers.set(element, { interval, counter, elapsedTime }); } - } + } + /** * Arrête le chronomètre et supprime l'affichage du temps de lecture @@ -166,7 +172,9 @@ if (readingTimers.has(element)) { let { interval, counter } = readingTimers.get(element); clearInterval(interval); - counter.remove(); + if (counter) { + counter.remove(); + } readingTimers.delete(element); } } @@ -176,7 +184,9 @@ function resetAllTimers() { for (let [element, { interval, counter }] of readingTimers) { clearInterval(interval); - counter.remove(); + if (counter) { + counter.remove(); + } } readingTimers.clear(); } @@ -187,7 +197,9 @@ function removeReadingIndicator(element) { if (readingTimers.has(element)) { let { counter } = readingTimers.get(element); - counter.remove(); + if (counter) { + counter.remove(); + } } } /** @@ -207,13 +219,13 @@ // Gestion de l'activation/désactivation des statistiques // ───────────────────────────────────────────────────────────────────────────── 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(); } @@ -222,7 +234,7 @@ if (!scrollListenerAttached) { window.addEventListener("scroll", trackVisibleContent); scrollListenerAttached = true; - console.log("[Stats] Écouteur de défilement attaché."); + log("[Stats] Écouteur de défilement attaché."); } } @@ -230,7 +242,7 @@ 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é."); } } diff --git a/src/workers/pyodide_worker.js b/src/workers/pyodide_worker.js index 29f199caabc4566fe2eef1df19e657eb4a8184f8..246c47f6fb6b553b5f75620aab89b12492d0bf8f 100644 --- a/src/workers/pyodide_worker.js +++ b/src/workers/pyodide_worker.js @@ -1,4 +1,4 @@ -console.log("✅ pyodide_worker.js chargé avec succès !"); +log("✅ pyodide_worker.js chargé avec succès !"); // URL de la version Pyodide la plus récente const LATEST_BASE_URL = "https://cdn.jsdelivr.net/pyodide/v0.27.2/full/"; @@ -18,17 +18,17 @@ let stoplistFr = new Set(); // Stockage optimisé de la stoplist // Écouteur des messages reçus du background script 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); 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..."); try { importScripts(`${LATEST_BASE_URL}pyodide.js`); pyodide = await loadPyodide({ indexURL: LATEST_BASE_URL }); @@ -40,11 +40,11 @@ self.onmessage = async (event) => { self.postMessage({ type: "pyodide-simplemma", status: "error", message: err.toString() }); return; } - 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..."); // On encapsule la logique dans une fonction asynchrone pour faciliter l'usage d'await await pyodide.runPythonAsync(` @@ -71,7 +71,7 @@ async def main(): await main() `); simplemmaLoaded = true; - console.log("[Worker] Simplemma installé avec succès !"); + log("[Worker] Simplemma installé avec succès !"); } // Envoyer confirmation au background script self.postMessage({ type: "pyodide-simplemma", status: "success", message: "Pyodide et Simplemma chargés" }); @@ -85,14 +85,14 @@ await main() if (data.command === "process-text") { if (!pyodideLoaded || !simplemmaLoaded) { const errorMessage = "Les statistiques ne sont pas encore activées. Veuillez patienter..." - console.log("[Worker] Pyodide non chargé."); + log("[Worker] Pyodide non chargé."); self.postMessage({ type: "process-text", status: "error", message: errorMessage }); return; } - console.log("[Worker] Texte reçu pour analyse :", data.text); + log("[Worker] Texte reçu pour analyse :", data.text); try { const stoplistArray = Array.from(stoplistFr); - console.log("Stoplist utilisée :", stoplistArray); + log("Stoplist utilisée :", stoplistArray); const result = await pyodide.runPythonAsync(` import json import re @@ -149,26 +149,26 @@ json.dumps({"lang": detected_lang, "frequencies": freq}, ensure_ascii=False) trackedLanguages = data.trackedLanguages; autoAddEnabled = data.autoAdd; isAuthenticated = data.isAuthenticated; - console.log("[Worker] Mise à jour des préférences :", { userThreshold, trackedLanguages, autoAddEnabled, isAuthenticated }); + log("[Worker] Mise à jour des préférences :", { userThreshold, trackedLanguages, autoAddEnabled, isAuthenticated }); } if (data.command === "update-stoplist") { stoplistFr = new Set(data.stoplist.map(word => word.toLowerCase().trim())); - console.log("[Worker] Stoplist FR mise à jour :", stoplistFr); + log("[Worker] Stoplist FR mise à jour :", stoplistFr); } }; // --- Vérification du seuil et notification --- function checkThreshold(lang) { if (!autoAddEnabled || !isAuthenticated) { - console.log("[Worker] Auto-Add désactivé ou utilisateur non connecté. Aucune vérification de seuil."); + log("[Worker] Auto-Add désactivé ou utilisateur non connecté. Aucune vérification de seuil."); return; } if (!trackedLanguages.includes(lang)) { - console.log(`[Worker] La langue ${lang} n'est pas suivie.`); + log(`[Worker] La langue ${lang} n'est pas suivie.`); return; } - console.log(`[Worker] Vérification des fréquences pour la langue ${lang}...`); + log(`[Worker] Vérification des fréquences pour la langue ${lang}...`); let wordsAboveThreshold = {}; if (storedFrequencies[lang]) { const exceededWords = Object.entries(storedFrequencies[lang]) @@ -183,9 +183,9 @@ function checkThreshold(lang) { } } if (Object.keys(wordsAboveThreshold).length > 0) { - console.log("[Worker] Nouveaux mots dépassant le seuil :", wordsAboveThreshold); + log("[Worker] Nouveaux mots dépassant le seuil :", wordsAboveThreshold); self.postMessage({ type: "threshold-exceeded", wordsAboveThreshold: wordsAboveThreshold }); } else { - console.log("[Worker] Aucun nouveau mot n'a dépassé le seuil."); + log("[Worker] Aucun nouveau mot n'a dépassé le seuil."); } }