From 1bf4df98c965bc93873508478d2c0a435dce5daf Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Tue, 18 Feb 2025 19:28:11 +0100 Subject: [PATCH] =?UTF-8?q?Modification=20fonction=20m=C3=A0j=20extension?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/popup/popup.html | 6 - src/popup/popup.js | 257 ++++++++++++++++++------------------------- 2 files changed, 107 insertions(+), 156 deletions(-) diff --git a/src/popup/popup.html b/src/popup/popup.html index 33f6c8c..5983599 100644 --- a/src/popup/popup.html +++ b/src/popup/popup.html @@ -271,12 +271,6 @@ border-color: #8d5c70; } - /* #stats-options { - border: 1px solid #555; - border-radius: 8px; - align-items: center; - } */ - .option-row.auto-add-row { position: relative; display: flex; diff --git a/src/popup/popup.js b/src/popup/popup.js index 5a9aeff..334b9b9 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -75,118 +75,122 @@ async function updateLanguageSelection() { } // ========================== -// Gestion des options et des statistiques +// Gestion principale de l'extension // ========================== -async function updateOptionsUI() { +async function updateExtension() { + // Récupération de tous les états nécessaires const accessToken = await getAccessToken(); + const { + extensionActive, + isTrackingActive, + autoAdd, + threshold, + pyodideSimplemmaReady + } = await browser.storage.local.get([ + "extensionActive", + "isTrackingActive", + "autoAdd", + "threshold", + "pyodideSimplemmaReady" + ]) || { + extensionActive: false, + isTrackingActive: false, + autoAdd: false, + threshold: 10, + pyodideSimplemmaReady: false + }; + const isLoggedIn = !!accessToken; - const statsOptions = document.getElementById("stats-options"); - if (statsOptions) { - statsOptions.style.display = isLoggedIn ? "block" : "none"; + // Mise à jour du bouton d'activation de l'extension + const toggleExtensionBtn = document.getElementById("toggleExtensionBtn"); + if (toggleExtensionBtn) { + toggleExtensionBtn.textContent = extensionActive ? "Désactiver l'analyse" : "Activer l'analyse"; + toggleExtensionBtn.style.opacity = isLoggedIn ? "1" : "0.5"; + toggleExtensionBtn.disabled = !isLoggedIn; + toggleExtensionBtn.title = isLoggedIn ? "" : "Connectez-vous pour activer l'analyse"; + toggleExtensionBtn.onclick = handleToggleExtension; // Ajout de l'écouteur d'événements } - const autoAddContainer = document.getElementById("auto-add")?.parentElement; - const autoAddCheckbox = document.getElementById("auto-add"); - const autoAddOptions = document.getElementById("auto-add-options"); - const thresholdInput = document.getElementById("threshold"); - const saveOptionsBtn = document.getElementById("save-options"); + // Mise à jour des options de statistiques + const statsOptions = document.getElementById("stats-options"); const toggleStatsBtn = document.getElementById("toggleStatsBtn"); const openStats = document.getElementById("open-stats"); - // // Affichage de l'option "Ajout automatique" selon la connexion - // if (autoAddContainer) { - // autoAddContainer.style.display = isLoggedIn ? "block" : "none"; - // } - - // Chargement des préférences - const { isTrackingActive, autoAdd, threshold } = await browser.storage.local.get([ - "isTrackingActive", - "autoAdd", - "threshold" - ]) || { isTrackingActive: false }; + if (statsOptions) { + statsOptions.style.display = (isLoggedIn && extensionActive) ? "block" : "none"; + } - // Gestion du bouton de statistiques if (toggleStatsBtn) { - if (!isLoggedIn) { - toggleStatsBtn.style.opacity = "0.5"; - toggleStatsBtn.title = "Connectez-vous pour activer les statistiques"; - if (openStats) openStats.style.display = "none"; - } else { - toggleStatsBtn.style.opacity = "1"; - toggleStatsBtn.title = ""; - if (openStats) openStats.style.display = "block"; - } + const isEnabled = isLoggedIn && extensionActive; + toggleStatsBtn.style.opacity = isEnabled ? "1" : "0.5"; + toggleStatsBtn.disabled = !isEnabled; + toggleStatsBtn.title = !isLoggedIn ? "Connectez-vous pour activer les statistiques" : + !extensionActive ? "Activez l'analyse pour utiliser les statistiques" : ""; toggleStatsBtn.textContent = isTrackingActive ? "Désactiver les statistiques" : "Activer les statistiques"; } - // Affichage des options statistiques - if (statsOptions) { - statsOptions.classList.toggle("hidden", !isTrackingActive); + if (openStats) { + openStats.style.display = (isLoggedIn && extensionActive && isTrackingActive) ? "block" : "none"; } - if (isLoggedIn) { - if (autoAddCheckbox) { - autoAddCheckbox.checked = autoAdd || false; - } - if (thresholdInput && threshold !== undefined) { - thresholdInput.value = threshold; - } - if (autoAddOptions) { - autoAddOptions.classList.toggle("hidden", !autoAdd); - } - if (saveOptionsBtn) { - saveOptionsBtn.classList.toggle("hidden", !autoAdd); - } - } else { - if (autoAddCheckbox) { - autoAddCheckbox.checked = false; - } - if (autoAddOptions) { - autoAddOptions.classList.add("hidden"); - } - if (saveOptionsBtn) { - saveOptionsBtn.classList.add("hidden"); - } + // Mise à jour des options d'ajout automatique + const autoAddContainer = document.getElementById("auto-add")?.parentElement; + const autoAddCheckbox = document.getElementById("auto-add"); + const autoAddOptions = document.getElementById("auto-add-options"); + const saveOptionsBtn = document.getElementById("save-options"); + + if (autoAddContainer) { + autoAddContainer.style.display = (isLoggedIn && extensionActive) ? "block" : "none"; } -} -// ========================== -// Gestion de l'activation/désactivation de l'extension -// ========================== -async function updateExtensionToggleButton() { - const { accessToken, extensionActive } = await browser.storage.local.get(["accessToken", "extensionActive"]); - const toggleButton = document.getElementById("toggleExtensionBtn"); + if (autoAddCheckbox && isLoggedIn) { + autoAddCheckbox.checked = autoAdd; + } - if (!toggleButton) { - console.error("⌠Le bouton d'activation de l'analyse n'a pas été trouvé."); - return; + if (autoAddOptions) { + autoAddOptions.classList.toggle("hidden", !autoAdd); } - if (!accessToken) { - toggleButton.textContent = "Activer l'analyse"; - toggleButton.style.opacity = "0.5"; - toggleButton.title = "Connectez-vous pour activer l'analyse"; - } else { - toggleButton.style.opacity = "1"; - toggleButton.textContent = extensionActive ? "Désactiver l'analyse" : "Activer l'analyse"; - toggleButton.title = ""; + if (saveOptionsBtn) { + saveOptionsBtn.classList.toggle("hidden", !autoAdd); } - // Ajout d'un écouteur unique - if (!toggleButton.dataset.listenerAdded) { - toggleButton.addEventListener("click", handleToggleExtension); - toggleButton.dataset.listenerAdded = "true"; + // Mise à jour du message de chargement Pyodide + const statusContainer = document.getElementById('pyodide-loading'); + if (statusContainer) { + if (!isLoggedIn) { + statusContainer.innerHTML = ""; + } else if (!pyodideSimplemmaReady && extensionActive && isTrackingActive) { + statusContainer.innerHTML = "<p style='color: black; text-align: center; font-size: 11px;'>Chargement de l'extension en cours, veuillez patienter...</p>"; + } else if (pyodideSimplemmaReady && extensionActive && isTrackingActive) { + statusContainer.innerHTML = "<p style='color: black; text-align: center; font-size: 11px;'>C'est prêt !</p>"; + setTimeout(() => { + statusContainer.innerHTML = ""; + }, 2000); + } else { + statusContainer.innerHTML = ""; + } } -} -function handleToggleExtension() { - getAccessToken().then(accessToken => { - if (!accessToken) return; - proceedToggleExtension(); + // Mise à jour de la sélection des langues + await updateLanguageSelection(); + + log("Interface mise à jour complètement", { + isLoggedIn, + extensionActive, + isTrackingActive, + autoAdd, + pyodideSimplemmaReady }); } +async function handleToggleExtension() { + const accessToken = await getAccessToken(); + if (!accessToken) return; + await proceedToggleExtension(); +} + async function proceedToggleExtension() { const { extensionActive, isTrackingActive } = await browser.storage.local.get({ extensionActive: false, @@ -195,63 +199,25 @@ async function proceedToggleExtension() { const newState = !extensionActive; await browser.storage.local.set({ extensionActive: newState }); - const toggleButton = document.getElementById("toggleExtensionBtn"); - if (toggleButton) { - toggleButton.textContent = newState ? "Désactiver l'analyse" : "Activer l'analyse"; - } - - browser.runtime.sendMessage({ action: "toggleExtension", isActive: newState }); - if (!newState) { await browser.storage.local.set({ isTrackingActive: false }); - // Si les statistiques étaient activées, ouvrir la page stats if (isTrackingActive) window.open("stats.html", "_blank"); browser.runtime.sendMessage({ action: "closeSidebarBlocks" }); } - await updateOptionsUI(); -} - -async function displayLoadingMessage() { - const statusContainer = document.getElementById('pyodide-loading'); - if (!statusContainer) return; - - const { pyodideSimplemmaReady } = await browser.storage.local.get("pyodideSimplemmaReady"); - const accessToken = await getAccessToken(); - - if (!accessToken) { - statusContainer.innerHTML = ""; - } else if (!pyodideSimplemmaReady) { - statusContainer.innerHTML = "<p style='color: gray; text-align: center; font-size: 10px;'>Activation en cours, veuillez patienter...</p>"; - } else { - statusContainer.innerHTML = ""; - } + browser.runtime.sendMessage({ action: "toggleExtension", isActive: newState }); + await updateExtension(); } - // ========================== // Écouteurs d'événements // ========================== document.addEventListener("DOMContentLoaded", async () => { await updateConnectionButton(); - await updateOptionsUI(); - await updateLanguageSelection(); - await updateExtensionToggleButton(); + await updateExtension(); }); -document.addEventListener("DOMContentLoaded", () => { - displayLoadingMessage(); - const loadingCheck = setInterval(async () => { - await displayLoadingMessage(); - const { pyodideSimplemmaReady } = await browser.storage.local.get("pyodideSimplemmaReady"); - if (pyodideSimplemmaReady) { - clearInterval(loadingCheck); - } - }, 500); -}); - - -// Gestion des statistiques et options +// Gestion des statistiques document.getElementById("toggleStatsBtn")?.addEventListener("click", async () => { const accessToken = await getAccessToken(); if (!accessToken) return; @@ -262,39 +228,34 @@ document.getElementById("toggleStatsBtn")?.addEventListener("click", async () => if (!newState) { await browser.storage.local.set({ autoAdd: false }); - document.getElementById("auto-add").checked = false; - document.getElementById("auto-add-options").classList.add("hidden"); - document.getElementById("save-options").classList.add("hidden"); } - document.getElementById("toggleStatsBtn").textContent = newState ? "Désactiver les statistiques" : "Activer les statistiques"; - document.getElementById("stats-options").classList.toggle("hidden", !newState); - browser.runtime.sendMessage({ command: "toggle-stats", isActive: newState }); if (newState) { - log("[Popup] Demande d'initialisation de Pyodide et Simplemma"); browser.runtime.sendMessage({ command: "pyodide-simplemma" }); } + + await updateExtension(); }); -// Gestion du changement de l'option d'ajout automatique +// Gestion de l'ajout automatique document.getElementById("auto-add")?.addEventListener("change", async () => { const isChecked = document.getElementById("auto-add").checked; document.getElementById("auto-add-options").classList.toggle("hidden", !isChecked); document.getElementById("save-options").classList.toggle("hidden", !isChecked); if (!isChecked) { await browser.storage.local.set({ autoAdd: false }); + await updateExtension(); } }); -// Sauvegarde des options utilisateur +// Sauvegarde des options document.getElementById("save-options")?.addEventListener("click", async () => { const autoAdd = document.getElementById("auto-add").checked; const threshold = parseInt(document.getElementById("threshold").value, 10); const selectedLanguages = Array.from(document.querySelectorAll("#language-selection .lang-option.selected")) - .map(option => option.dataset.value); + .map(option => option.dataset.value); - // Vérification : si auto-add est activé, au moins une langue doit être sélectionnée const errorMessage = document.getElementById("error-message"); if (autoAdd && selectedLanguages.length === 0) { errorMessage?.classList.remove("hidden"); @@ -307,40 +268,36 @@ document.getElementById("save-options")?.addEventListener("click", async () => { threshold, trackedLanguages: selectedLanguages }); - log("Options sauvegardées :", { autoAdd, threshold, trackedLanguages: selectedLanguages }); + + await updateExtension(); + log("Options sauvegardées et interface mise à jour"); }); -// Bouton pour ouvrir la page des statistiques +// Ouverture des statistiques document.getElementById("open-stats")?.addEventListener("click", () => { window.open("stats.html", "_blank"); }); // ========================== -// Réception des messages du background +// Gestion des messages et du stockage // ========================== browser.runtime.onMessage.addListener(async (message) => { log("📩 Message reçu dans popup.js :", message); - if (message.action === "updateUI") { - log("🔄 Mise à jour de l'UI du popup..."); - await updateConnectionButton(); - await updateOptionsUI(); - await updateLanguageSelection(); + await updateExtension(); } else if (message.action === "notify") { alert(message.message); } }); -// Actualisation de l'UI en cas de changement dans le stockage local browser.storage.onChanged.addListener((changes, area) => { - if (area === "local" && changes.accessToken) { - updateConnectionButton(); - updateExtensionToggleButton(); + if (area === "local") { + updateExtension(); } }); // ========================== -// Gestion de l'affichage de notifications (optionnelle) +// Gestion des notifications // ========================== function showNotification(message) { const notificationBox = document.getElementById("extension-notification"); -- GitLab