Skip to content
Snippets Groups Projects
Commit 1bf4df98 authored by Lucie Bader's avatar Lucie Bader
Browse files

Modification fonction màj extension

parent a335941a
No related branches found
No related tags found
1 merge request!8Test final
...@@ -271,12 +271,6 @@ ...@@ -271,12 +271,6 @@
border-color: #8d5c70; border-color: #8d5c70;
} }
/* #stats-options {
border: 1px solid #555;
border-radius: 8px;
align-items: center;
} */
.option-row.auto-add-row { .option-row.auto-add-row {
position: relative; position: relative;
display: flex; display: flex;
......
...@@ -75,118 +75,122 @@ async function updateLanguageSelection() { ...@@ -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 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 isLoggedIn = !!accessToken;
const statsOptions = document.getElementById("stats-options");
if (statsOptions) { // Mise à jour du bouton d'activation de l'extension
statsOptions.style.display = isLoggedIn ? "block" : "none"; 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; // Mise à jour des options de statistiques
const autoAddCheckbox = document.getElementById("auto-add"); const statsOptions = document.getElementById("stats-options");
const autoAddOptions = document.getElementById("auto-add-options");
const thresholdInput = document.getElementById("threshold");
const saveOptionsBtn = document.getElementById("save-options");
const toggleStatsBtn = document.getElementById("toggleStatsBtn"); const toggleStatsBtn = document.getElementById("toggleStatsBtn");
const openStats = document.getElementById("open-stats"); const openStats = document.getElementById("open-stats");
// // Affichage de l'option "Ajout automatique" selon la connexion if (statsOptions) {
// if (autoAddContainer) { statsOptions.style.display = (isLoggedIn && extensionActive) ? "block" : "none";
// 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 };
// Gestion du bouton de statistiques
if (toggleStatsBtn) { if (toggleStatsBtn) {
if (!isLoggedIn) { const isEnabled = isLoggedIn && extensionActive;
toggleStatsBtn.style.opacity = "0.5"; toggleStatsBtn.style.opacity = isEnabled ? "1" : "0.5";
toggleStatsBtn.title = "Connectez-vous pour activer les statistiques"; toggleStatsBtn.disabled = !isEnabled;
if (openStats) openStats.style.display = "none"; toggleStatsBtn.title = !isLoggedIn ? "Connectez-vous pour activer les statistiques" :
} else { !extensionActive ? "Activez l'analyse pour utiliser les statistiques" : "";
toggleStatsBtn.style.opacity = "1";
toggleStatsBtn.title = "";
if (openStats) openStats.style.display = "block";
}
toggleStatsBtn.textContent = isTrackingActive ? "Désactiver les statistiques" : "Activer les statistiques"; toggleStatsBtn.textContent = isTrackingActive ? "Désactiver les statistiques" : "Activer les statistiques";
} }
// Affichage des options statistiques if (openStats) {
if (statsOptions) { openStats.style.display = (isLoggedIn && extensionActive && isTrackingActive) ? "block" : "none";
statsOptions.classList.toggle("hidden", !isTrackingActive);
} }
if (isLoggedIn) { // Mise à jour des options d'ajout automatique
if (autoAddCheckbox) { const autoAddContainer = document.getElementById("auto-add")?.parentElement;
autoAddCheckbox.checked = autoAdd || false; const autoAddCheckbox = document.getElementById("auto-add");
} const autoAddOptions = document.getElementById("auto-add-options");
if (thresholdInput && threshold !== undefined) { const saveOptionsBtn = document.getElementById("save-options");
thresholdInput.value = threshold;
} if (autoAddContainer) {
if (autoAddOptions) { autoAddContainer.style.display = (isLoggedIn && extensionActive) ? "block" : "none";
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");
}
} }
}
// ========================== if (autoAddCheckbox && isLoggedIn) {
// Gestion de l'activation/désactivation de l'extension autoAddCheckbox.checked = autoAdd;
// ========================== }
async function updateExtensionToggleButton() {
const { accessToken, extensionActive } = await browser.storage.local.get(["accessToken", "extensionActive"]);
const toggleButton = document.getElementById("toggleExtensionBtn");
if (!toggleButton) { if (autoAddOptions) {
console.error("❌ Le bouton d'activation de l'analyse n'a pas été trouvé."); autoAddOptions.classList.toggle("hidden", !autoAdd);
return;
} }
if (!accessToken) { if (saveOptionsBtn) {
toggleButton.textContent = "Activer l'analyse"; saveOptionsBtn.classList.toggle("hidden", !autoAdd);
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 = "";
} }
// Ajout d'un écouteur unique // Mise à jour du message de chargement Pyodide
if (!toggleButton.dataset.listenerAdded) { const statusContainer = document.getElementById('pyodide-loading');
toggleButton.addEventListener("click", handleToggleExtension); if (statusContainer) {
toggleButton.dataset.listenerAdded = "true"; 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() { // Mise à jour de la sélection des langues
getAccessToken().then(accessToken => { await updateLanguageSelection();
if (!accessToken) return;
proceedToggleExtension(); 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() { async function proceedToggleExtension() {
const { extensionActive, isTrackingActive } = await browser.storage.local.get({ const { extensionActive, isTrackingActive } = await browser.storage.local.get({
extensionActive: false, extensionActive: false,
...@@ -195,63 +199,25 @@ async function proceedToggleExtension() { ...@@ -195,63 +199,25 @@ async function proceedToggleExtension() {
const newState = !extensionActive; const newState = !extensionActive;
await browser.storage.local.set({ extensionActive: newState }); 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) { if (!newState) {
await browser.storage.local.set({ isTrackingActive: false }); await browser.storage.local.set({ isTrackingActive: false });
// Si les statistiques étaient activées, ouvrir la page stats
if (isTrackingActive) window.open("stats.html", "_blank"); if (isTrackingActive) window.open("stats.html", "_blank");
browser.runtime.sendMessage({ action: "closeSidebarBlocks" }); browser.runtime.sendMessage({ action: "closeSidebarBlocks" });
} }
await updateOptionsUI(); browser.runtime.sendMessage({ action: "toggleExtension", isActive: newState });
} await updateExtension();
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 = "";
}
} }
// ========================== // ==========================
// Écouteurs d'événements // Écouteurs d'événements
// ========================== // ==========================
document.addEventListener("DOMContentLoaded", async () => { document.addEventListener("DOMContentLoaded", async () => {
await updateConnectionButton(); await updateConnectionButton();
await updateOptionsUI(); await updateExtension();
await updateLanguageSelection();
await updateExtensionToggleButton();
}); });
document.addEventListener("DOMContentLoaded", () => { // Gestion des statistiques
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
document.getElementById("toggleStatsBtn")?.addEventListener("click", async () => { document.getElementById("toggleStatsBtn")?.addEventListener("click", async () => {
const accessToken = await getAccessToken(); const accessToken = await getAccessToken();
if (!accessToken) return; if (!accessToken) return;
...@@ -262,39 +228,34 @@ document.getElementById("toggleStatsBtn")?.addEventListener("click", async () => ...@@ -262,39 +228,34 @@ document.getElementById("toggleStatsBtn")?.addEventListener("click", async () =>
if (!newState) { if (!newState) {
await browser.storage.local.set({ autoAdd: false }); 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 }); browser.runtime.sendMessage({ command: "toggle-stats", isActive: newState });
if (newState) { if (newState) {
log("[Popup] Demande d'initialisation de Pyodide et Simplemma");
browser.runtime.sendMessage({ command: "pyodide-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 () => { document.getElementById("auto-add")?.addEventListener("change", async () => {
const isChecked = document.getElementById("auto-add").checked; const isChecked = document.getElementById("auto-add").checked;
document.getElementById("auto-add-options").classList.toggle("hidden", !isChecked); document.getElementById("auto-add-options").classList.toggle("hidden", !isChecked);
document.getElementById("save-options").classList.toggle("hidden", !isChecked); document.getElementById("save-options").classList.toggle("hidden", !isChecked);
if (!isChecked) { if (!isChecked) {
await browser.storage.local.set({ autoAdd: false }); await browser.storage.local.set({ autoAdd: false });
await updateExtension();
} }
}); });
// Sauvegarde des options utilisateur // Sauvegarde des options
document.getElementById("save-options")?.addEventListener("click", async () => { document.getElementById("save-options")?.addEventListener("click", async () => {
const autoAdd = document.getElementById("auto-add").checked; const autoAdd = document.getElementById("auto-add").checked;
const threshold = parseInt(document.getElementById("threshold").value, 10); const threshold = parseInt(document.getElementById("threshold").value, 10);
const selectedLanguages = Array.from(document.querySelectorAll("#language-selection .lang-option.selected")) 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"); const errorMessage = document.getElementById("error-message");
if (autoAdd && selectedLanguages.length === 0) { if (autoAdd && selectedLanguages.length === 0) {
errorMessage?.classList.remove("hidden"); errorMessage?.classList.remove("hidden");
...@@ -307,40 +268,36 @@ document.getElementById("save-options")?.addEventListener("click", async () => { ...@@ -307,40 +268,36 @@ document.getElementById("save-options")?.addEventListener("click", async () => {
threshold, threshold,
trackedLanguages: selectedLanguages 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", () => { document.getElementById("open-stats")?.addEventListener("click", () => {
window.open("stats.html", "_blank"); window.open("stats.html", "_blank");
}); });
// ========================== // ==========================
// Réception des messages du background // Gestion des messages et du stockage
// ========================== // ==========================
browser.runtime.onMessage.addListener(async (message) => { browser.runtime.onMessage.addListener(async (message) => {
log("📩 Message reçu dans popup.js :", message); log("📩 Message reçu dans popup.js :", message);
if (message.action === "updateUI") { if (message.action === "updateUI") {
log("🔄 Mise à jour de l'UI du popup..."); await updateExtension();
await updateConnectionButton();
await updateOptionsUI();
await updateLanguageSelection();
} else if (message.action === "notify") { } else if (message.action === "notify") {
alert(message.message); alert(message.message);
} }
}); });
// Actualisation de l'UI en cas de changement dans le stockage local
browser.storage.onChanged.addListener((changes, area) => { browser.storage.onChanged.addListener((changes, area) => {
if (area === "local" && changes.accessToken) { if (area === "local") {
updateConnectionButton(); updateExtension();
updateExtensionToggleButton();
} }
}); });
// ========================== // ==========================
// Gestion de l'affichage de notifications (optionnelle) // Gestion des notifications
// ========================== // ==========================
function showNotification(message) { function showNotification(message) {
const notificationBox = document.getElementById("extension-notification"); const notificationBox = document.getElementById("extension-notification");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment