From fa74fa5fefcc88e7ed0152dad556d4689036eae8 Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:32:45 +0100 Subject: [PATCH 01/13] Ajout menu extension --- "barre_lat\303\251rale/content.js" | 31 ++++++++++---------- manifest.json | 46 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 manifest.json diff --git "a/barre_lat\303\251rale/content.js" "b/barre_lat\303\251rale/content.js" index da428ce..3693549 100644 --- "a/barre_lat\303\251rale/content.js" +++ "b/barre_lat\303\251rale/content.js" @@ -1,19 +1,18 @@ // Écouteur d'événement qui se déclenche lorsqu'un utilisateur relâche le bouton de la souris document.addEventListener('mouseup', () => { - // Récupère le texte sélectionné par l'utilisateur et supprime les espaces inutiles - const selection = window.getSelection().toString().trim(); - - // Vérifie si une sélection de texte a bien été effectuée - if (selection) { - // Affiche dans la console le mot ou texte sélectionné pour le débogage - console.log("Mot sélectionné :", selection); - - // Envoie un message au script de la barre latérale pour lui transmettre le mot sélectionné - browser.runtime.sendMessage({ - action: "mot_selectionne", // Action identifiant le type de message - mot: selection // Le texte sélectionné - }); - } - }); - \ No newline at end of file + // Récupère le texte sélectionné par l'utilisateur et supprime les espaces inutiles + const selection = window.getSelection().toString().trim(); + + // Vérifie si une sélection de texte a bien été effectuée + if (selection) { + // Affiche dans la console le mot ou texte sélectionné pour le débogage + console.log("Mot sélectionné :", selection); + + // Envoie un message au script de la barre latérale pour lui transmettre le mot sélectionné + browser.runtime.sendMessage({ + action: "mot_selectionne", // Action identifiant le type de message + mot: selection // Le texte sélectionné + }); + } +}); diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..b36ec6c --- /dev/null +++ b/manifest.json @@ -0,0 +1,46 @@ +{ + "manifest_version": 2, + "name": "ff2BaLex", + "version": "1.0", + "description": "Extension Firefox avec paramètres personnalisés.", + "permissions": [ + "storage", + "activeTab", + "tabs", + "contextMenus", + "webNavigation", + "scripting", + "*://babalex.lezinter.net/*", + "*://prisms.lezinter.net/*"], + "background": { + "scripts": ["menu_extension/background.js"], + "persistent": true + }, + "browser_action": { + "default_popup": "menu_extension/popup.html", + "default_icon": { + "16": "icons/icon-16.png", + "48": "icons/icon-48.png", + "128": "icons/icon-128.png" + }, + "default_title": "ff2BaLex" + }, + "options_ui": { + "page": "menu_extension/options.html", + "open_in_tab": false + }, + "sidebar_action": { + "default_title": "BaLex", + "default_panel": "barre_latérale/sidebar.html", + "default_icon": { + "16": "icons/icon-16.png", + "48": "icons/icon-48.png" + } + }, + "content_scripts": [ + { + "matches": ["<all_urls>"], + "js": ["barre_latérale/content.js"] + } + ] +} -- GitLab From 490950267a3b8b7f07358b3eda5afbf5ef8e8d1b Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:33:01 +0100 Subject: [PATCH 02/13] Ajout menu extension --- menu_extension/manifest.json | 46 ------------------------------------ 1 file changed, 46 deletions(-) delete mode 100644 menu_extension/manifest.json diff --git a/menu_extension/manifest.json b/menu_extension/manifest.json deleted file mode 100644 index b36ec6c..0000000 --- a/menu_extension/manifest.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "manifest_version": 2, - "name": "ff2BaLex", - "version": "1.0", - "description": "Extension Firefox avec paramètres personnalisés.", - "permissions": [ - "storage", - "activeTab", - "tabs", - "contextMenus", - "webNavigation", - "scripting", - "*://babalex.lezinter.net/*", - "*://prisms.lezinter.net/*"], - "background": { - "scripts": ["menu_extension/background.js"], - "persistent": true - }, - "browser_action": { - "default_popup": "menu_extension/popup.html", - "default_icon": { - "16": "icons/icon-16.png", - "48": "icons/icon-48.png", - "128": "icons/icon-128.png" - }, - "default_title": "ff2BaLex" - }, - "options_ui": { - "page": "menu_extension/options.html", - "open_in_tab": false - }, - "sidebar_action": { - "default_title": "BaLex", - "default_panel": "barre_latérale/sidebar.html", - "default_icon": { - "16": "icons/icon-16.png", - "48": "icons/icon-48.png" - } - }, - "content_scripts": [ - { - "matches": ["<all_urls>"], - "js": ["barre_latérale/content.js"] - } - ] -} -- GitLab From 06967b78bd487062f925f862819cdd87d6738e5d Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:46:53 +0100 Subject: [PATCH 03/13] =?UTF-8?q?Corrections=20d=C3=A9connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "barre_lat\303\251rale/content.js" | 31 +++--- "barre_lat\303\251rale/sidebar.html" | 3 +- "barre_lat\303\251rale/sidebar.js" | 154 +++++++++++++++------------ menu_extension/background.js | 3 + menu_extension/options.js | 11 +- menu_extension/popup.js | 5 + 6 files changed, 119 insertions(+), 88 deletions(-) diff --git "a/barre_lat\303\251rale/content.js" "b/barre_lat\303\251rale/content.js" index 3693549..1b524aa 100644 --- "a/barre_lat\303\251rale/content.js" +++ "b/barre_lat\303\251rale/content.js" @@ -1,18 +1,19 @@ // Écouteur d'événement qui se déclenche lorsqu'un utilisateur relâche le bouton de la souris document.addEventListener('mouseup', () => { - // Récupère le texte sélectionné par l'utilisateur et supprime les espaces inutiles - const selection = window.getSelection().toString().trim(); - - // Vérifie si une sélection de texte a bien été effectuée - if (selection) { - // Affiche dans la console le mot ou texte sélectionné pour le débogage - console.log("Mot sélectionné :", selection); - - // Envoie un message au script de la barre latérale pour lui transmettre le mot sélectionné - browser.runtime.sendMessage({ - action: "mot_selectionne", // Action identifiant le type de message - mot: selection // Le texte sélectionné - }); - } -}); + // Récupère le texte sélectionné par l'utilisateur et supprime les espaces inutiles + const selection = window.getSelection().toString().trim(); + + // Vérifie si une sélection de texte a bien été effectuée + if (selection) { + // Affiche dans la console le mot ou texte sélectionné pour le débogage + console.log("Mot sélectionné :", selection); + + // Envoie un message au script de la barre latérale pour lui transmettre le mot sélectionné + browser.runtime.sendMessage({ + action: "mot_selectionne", // Action identifiant le type de message + mot: window.getSelection().toString().trim() // Le texte sélectionné + }); + } + }); + \ No newline at end of file diff --git "a/barre_lat\303\251rale/sidebar.html" "b/barre_lat\303\251rale/sidebar.html" index 5c3949b..5ce8395 100644 --- "a/barre_lat\303\251rale/sidebar.html" +++ "b/barre_lat\303\251rale/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="sidebar.js"></script> <style> /* Style global */ body { @@ -124,7 +125,7 @@ <!-- Définition affichée --> <div id="definition"></div> - <script src="sidebar.js"></script> + </body> </html> diff --git "a/barre_lat\303\251rale/sidebar.js" "b/barre_lat\303\251rale/sidebar.js" index dbb8788..cc4d67a 100644 --- "a/barre_lat\303\251rale/sidebar.js" +++ "b/barre_lat\303\251rale/sidebar.js" @@ -1,86 +1,102 @@ -// Confirme le chargement du script dans la console -console.log("sidebar.js chargé avec succès !"); - -// Écoute les messages envoyés par le script de contenu pour afficher le mot sélectionné dans la barre latérale -browser.runtime.onMessage.addListener((message) => { - if (message.action === "mot_selectionne") { - // Met à jour l'affichage du mot sélectionné - document.getElementById('motSelectionne').textContent = message.mot; - console.log("Mot reçu dans la barre latérale :", message.mot); - } +console.log("✅ sidebar.js chargé avec succès !"); + +let authToken = ''; + +// Gestionnaire global des erreurs +window.addEventListener('error', (e) => { + console.error("â—ï¸ Erreur globale détectée :", e.message, "dans", e.filename, ":", e.lineno); }); -// Recherche la définition d'un mot sur le Wiktionnaire -async function chercherDefinition(mot) { - const url = `https://fr.wiktionary.org/api/rest_v1/page/summary/${encodeURIComponent(mot)}`; - console.log("URL de la requête :", url); +// 📩 Écoute des messages pour afficher le mot sélectionné +document.addEventListener('DOMContentLoaded', () => { + browser.runtime.onMessage.addListener((message) => { + console.log("📩 Message reçu dans la barre latérale :", message); + + if (message.action === "mot_selectionne") { + const selectedWordElement = document.getElementById('motSelectionne'); + if (selectedWordElement) { + selectedWordElement.textContent = message.mot; + console.log(`📠Mot sélectionné affiché : ${message.mot}`); + } else { + console.warn("âš ï¸ Ã‰lément #motSelectionne introuvable."); + } + } + }); +}); + +// Vérification du format du token +function validateToken(token) { + const isValid = /^\S+\.\S+\.\S+$/.test(token); + if (!isValid) { + console.warn("âš ï¸ Le format du token semble incorrect :", token); + } + return isValid; +} + +// Lecture du token +async function readTokenFile() { + const tokenFilePath = browser.runtime.getURL('../token.txt'); + console.log('📂 Tentative de lecture du fichier token :', tokenFilePath); try { - // Effectue la requête API vers le Wiktionnaire - const response = await fetch(url); + const response = await fetch(tokenFilePath); + console.log(`📥 Statut de la lecture du fichier token : ${response.status}`); + if (!response.ok) { - throw new Error(`Erreur HTTP : ${response.status}`); + throw new Error(`⌠Erreur lors de la lecture du fichier token : ${response.statusText}`); } - // Récupère et affiche la définition si elle existe - const data = await response.json(); - const definitionDiv = document.getElementById('definition'); + const token = await response.text(); + authToken = token.trim(); + console.log(`🔑 Token récupéré : [${authToken}]`); - if (data.extract) { - definitionDiv.innerHTML = `<strong>Définition de ${mot} :</strong><p>${data.extract}</p>`; - } else { - definitionDiv.innerHTML = `<p>Aucune définition trouvée pour : ${mot}</p>`; + if (!validateToken(authToken)) { + throw new Error("⌠Le token récupéré est invalide."); } } catch (error) { - console.error("Erreur lors de la récupération de la définition :", error); - document.getElementById('definition').innerHTML = "<p>Erreur lors de la recherche de la définition.</p>"; + console.error('â—ï¸ Erreur lors de la lecture du fichier token :', error); } } -// Lance la recherche de la définition lorsque le bouton est cliqué -document.getElementById('chercherDef').addEventListener('click', () => { - const mot = document.getElementById('motSelectionne').textContent; - if (mot && mot !== "Aucun mot sélectionné") { - chercherDefinition(mot); - } else { - alert("Veuillez sélectionner un mot avant de rechercher sa définition."); +// Récupération des lexiques avec diagnostics détaillés +async function fetchLexicons() { + console.log("🚀 La fonction fetchLexicons() est appelée."); + + if (!authToken) { + console.error('⌠Token non disponible ou vide.'); + document.getElementById('lexiques').textContent = 'Token manquant, impossible de charger les lexiques.'; + return; } -}); -// Charge dynamiquement les lexiques de l'utilisateur avec des cases à cocher -async function chargerLexiques() { - const lexiques = ["Lexique 1", "Lexique 2", "Lexique 3"]; - const container = document.getElementById('lexiques'); - container.innerHTML = ''; - - lexiques.forEach(lexique => { - const div = document.createElement('div'); - div.className = 'lexique-item'; - - // Pictogramme - const icon = document.createElement('div'); - icon.className = 'lexique-icon'; - icon.id = `icon_${lexique.replace(/\s/g, '_')}`; - - // Nom du lexique - const label = document.createElement('label'); - label.htmlFor = `chk_${lexique}`; - label.className = 'lexique-label'; - label.textContent = lexique; - - // Case à cocher - const checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.id = `chk_${lexique}`; - checkbox.className = 'lexique-checkbox'; - - // Ordre : Pictogramme → Nom → Case à cocher - div.appendChild(icon); - div.appendChild(label); - div.appendChild(checkbox); - container.appendChild(div); - }); + try { + console.log(`📡 Tentative d'envoi de la requête GET avec le token : Bearer ${authToken}`); + const response = await fetch('https://babalex.lezinter.net/api/user/lexicons', { + method: 'GET', + headers: { + 'Authorization': `Bearer ${authToken}`, + 'Content-Type': 'application/json' + } + }); + + console.log(`📊 Statut de la réponse API : ${response.status}`); + + if (!response.ok) { + const errorBody = await response.text(); + throw new Error(`⌠Erreur API Babalex : ${response.status} - ${errorBody}`); + } + + const lexicons = await response.json(); + console.log('📚 Lexiques récupérés :', lexicons); + displayLexicons(lexicons); + } catch (error) { + console.error('â—ï¸ Erreur pendant la récupération des lexiques :', error); + document.getElementById('lexiques').textContent = 'Impossible de charger les lexiques. Vérifiez votre connexion ou le token.'; + } } -// Chargement des lexiques dès l'ouverture de la barre latérale -chargerLexiques(); +// Lancement automatique après le chargement de la page +window.onload = async () => { + console.log("📦 Page complètement chargée. Lecture du token et récupération des lexiques..."); + await readTokenFile(); + await fetchLexicons(); +}; \ No newline at end of file diff --git a/menu_extension/background.js b/menu_extension/background.js index 88538aa..8a0b0f8 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -92,6 +92,9 @@ async function disconnectFromLexicalDB() { console.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" }); } // === 7. Vérifier si l'utilisateur est connecté === diff --git a/menu_extension/options.js b/menu_extension/options.js index cbfd4cf..22cba4c 100644 --- a/menu_extension/options.js +++ b/menu_extension/options.js @@ -2,10 +2,15 @@ document.getElementById('connectBtn').addEventListener('click', () => { browser.runtime.sendMessage({ action: "openLoginPage" }); }); -document.getElementById('disconnectBtn').addEventListener('click', async () => { - await browser.storage.local.remove(["accessToken", "refreshToken"]); +async function disconnectFromLexicalDB() { + await browser.storage.local.remove("accessToken"); + console.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"); diff --git a/menu_extension/popup.js b/menu_extension/popup.js index 458e207..6d58b8b 100644 --- a/menu_extension/popup.js +++ b/menu_extension/popup.js @@ -56,3 +56,8 @@ document.addEventListener("DOMContentLoaded", () => { } }); +browser.runtime.onMessage.addListener((message) => { + if (message.action === "updateUI") { + updateConnectionButton(); + } +}); \ No newline at end of file -- GitLab From 32c2e97491092879101eacde340a6dbc0b2f3711 Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Fri, 17 Jan 2025 19:56:26 +0100 Subject: [PATCH 04/13] Correctifs --- "barre_lat\303\251rale/sidebar.js" | 78 ++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git "a/barre_lat\303\251rale/sidebar.js" "b/barre_lat\303\251rale/sidebar.js" index cc4d67a..bcdc8fd 100644 --- "a/barre_lat\303\251rale/sidebar.js" +++ "b/barre_lat\303\251rale/sidebar.js" @@ -33,38 +33,66 @@ function validateToken(token) { return isValid; } -// Lecture du token -async function readTokenFile() { - const tokenFilePath = browser.runtime.getURL('../token.txt'); - console.log('📂 Tentative de lecture du fichier token :', tokenFilePath); +// Lecture du token depuis le local storage +async function readTokenFromStorage() { + const { accessToken } = await browser.storage.local.get("accessToken"); + if (accessToken && validateToken(accessToken)) { + authToken = accessToken; + console.log(`🔑 Token récupéré depuis le stockage local : [${authToken}]`); + } else { + console.error("⌠Token invalide ou non trouvé dans le stockage local."); + } +} - try { - const response = await fetch(tokenFilePath); - console.log(`📥 Statut de la lecture du fichier token : ${response.status}`); +// Affichage des lexiques avec cases à cocher et pictogrammes +function displayLexicons(lexicons) { + const lexiquesContainer = document.getElementById('lexiques'); + lexiquesContainer.innerHTML = ''; - if (!response.ok) { - throw new Error(`⌠Erreur lors de la lecture du fichier token : ${response.statusText}`); - } + if (lexicons.length === 0) { + lexiquesContainer.textContent = 'Aucun lexique disponible.'; + return; + } - const token = await response.text(); - authToken = token.trim(); - console.log(`🔑 Token récupéré : [${authToken}]`); + lexicons.forEach(lexique => { + const lexiqueDiv = document.createElement('div'); + lexiqueDiv.className = 'lexique-item'; - if (!validateToken(authToken)) { - throw new Error("⌠Le token récupéré est invalide."); - } - } catch (error) { - console.error('â—ï¸ Erreur lors de la lecture du fichier token :', error); - } + // Pictogramme + const iconDiv = document.createElement('div'); + iconDiv.className = 'lexique-icon'; + iconDiv.style.backgroundColor = '#ccc'; + + // Nom du lexique + const labelSpan = document.createElement('span'); + labelSpan.className = 'lexique-label'; + labelSpan.textContent = lexique.name; + + // Case à cocher + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.className = 'lexique-checkbox'; + checkbox.checked = lexique.active || false; + + // Assemblage des éléments + lexiqueDiv.appendChild(iconDiv); + lexiqueDiv.appendChild(labelSpan); + lexiqueDiv.appendChild(checkbox); + + lexiquesContainer.appendChild(lexiqueDiv); + }); } // Récupération des lexiques avec diagnostics détaillés async function fetchLexicons() { console.log("🚀 La fonction fetchLexicons() est appelée."); + const lexiquesContainer = document.getElementById('lexiques'); + lexiquesContainer.innerHTML = ''; // Vide le conteneur avant la récupération + if (!authToken) { - console.error('⌠Token non disponible ou vide.'); - document.getElementById('lexiques').textContent = 'Token manquant, impossible de charger les lexiques.'; + console.warn('âš ï¸ Token non disponible ou vide.'); + lexiquesContainer.textContent = 'Lexiques non disponibles. Veuillez vous connecter.'; return; } @@ -90,13 +118,13 @@ async function fetchLexicons() { displayLexicons(lexicons); } catch (error) { console.error('â—ï¸ Erreur pendant la récupération des lexiques :', error); - document.getElementById('lexiques').textContent = 'Impossible de charger les lexiques. Vérifiez votre connexion ou le token.'; + lexiquesContainer.textContent = 'Impossible de charger les lexiques. Vérifiez votre connexion ou le token.'; } } // Lancement automatique après le chargement de la page window.onload = async () => { - console.log("📦 Page complètement chargée. Lecture du token et récupération des lexiques..."); - await readTokenFile(); + console.log("📦 Page complètement chargée. Récupération du token depuis le stockage local et récupération des lexiques..."); + await readTokenFromStorage(); await fetchLexicons(); -}; \ No newline at end of file +}; -- GitLab From 4c9e48cae24396445d6f820075a31ed2f3ac3e1b Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sat, 18 Jan 2025 10:27:01 +0100 Subject: [PATCH 05/13] =?UTF-8?q?Am=C3=A9lioration=20bouton=20connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "barre_lat\303\251rale/sidebar.js" | 37 ++++++------- menu_extension/background.js | 89 +++++++++++++++--------------- menu_extension/login.html | 36 ------------ menu_extension/login.js | 36 ------------ menu_extension/popup.js | 53 +++++++----------- 5 files changed, 80 insertions(+), 171 deletions(-) delete mode 100644 menu_extension/login.html delete mode 100644 menu_extension/login.js diff --git "a/barre_lat\303\251rale/sidebar.js" "b/barre_lat\303\251rale/sidebar.js" index bcdc8fd..454a175 100644 --- "a/barre_lat\303\251rale/sidebar.js" +++ "b/barre_lat\303\251rale/sidebar.js" @@ -7,21 +7,24 @@ window.addEventListener('error', (e) => { console.error("â—ï¸ Erreur globale détectée :", e.message, "dans", e.filename, ":", e.lineno); }); -// 📩 Écoute des messages pour afficher le mot sélectionné -document.addEventListener('DOMContentLoaded', () => { - browser.runtime.onMessage.addListener((message) => { - console.log("📩 Message reçu dans la barre latérale :", message); - - if (message.action === "mot_selectionne") { - const selectedWordElement = document.getElementById('motSelectionne'); - if (selectedWordElement) { - selectedWordElement.textContent = message.mot; - console.log(`📠Mot sélectionné affiché : ${message.mot}`); - } else { - console.warn("âš ï¸ Ã‰lément #motSelectionne introuvable."); - } +// 📩 Écoute des messages pour recharger la barre latérale +browser.runtime.onMessage.addListener((message) => { + console.log("📩 Message reçu dans la barre latérale :", message); + + if (message.action === "refreshSidebar") { + console.log("🔄 Rafraîchissement de la barre latérale déclenché."); + window.location.reload(); + } + + if (message.action === "mot_selectionne") { + const selectedWordElement = document.getElementById('motSelectionne'); + if (selectedWordElement) { + selectedWordElement.textContent = message.mot; + console.log(`📠Mot sélectionné affiché : ${message.mot}`); + } else { + console.warn("âš ï¸ Ã‰lément #motSelectionne introuvable."); } - }); + } }); // Vérification du format du token @@ -58,23 +61,19 @@ function displayLexicons(lexicons) { const lexiqueDiv = document.createElement('div'); lexiqueDiv.className = 'lexique-item'; - // Pictogramme const iconDiv = document.createElement('div'); iconDiv.className = 'lexique-icon'; iconDiv.style.backgroundColor = '#ccc'; - // Nom du lexique const labelSpan = document.createElement('span'); labelSpan.className = 'lexique-label'; labelSpan.textContent = lexique.name; - // Case à cocher const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.className = 'lexique-checkbox'; checkbox.checked = lexique.active || false; - // Assemblage des éléments lexiqueDiv.appendChild(iconDiv); lexiqueDiv.appendChild(labelSpan); lexiqueDiv.appendChild(checkbox); @@ -88,7 +87,7 @@ async function fetchLexicons() { console.log("🚀 La fonction fetchLexicons() est appelée."); const lexiquesContainer = document.getElementById('lexiques'); - lexiquesContainer.innerHTML = ''; // Vide le conteneur avant la récupération + lexiquesContainer.innerHTML = ''; if (!authToken) { console.warn('âš ï¸ Token non disponible ou vide.'); diff --git a/menu_extension/background.js b/menu_extension/background.js index 8a0b0f8..528b04f 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -1,81 +1,67 @@ +// === 1. Variables globales === let isExtensionActive = true; let areStatsActive = false; console.log("ff2BaLex est chargé."); -// === 1. Installation de l'extension === +// === 2. Installation de l'extension === browser.runtime.onInstalled.addListener(() => { console.log("ff2BaLex est installé."); - - // Création d'un bouton unique de connexion/déconnexion - browser.contextMenus.create({ - id: "toggle_connection", - title: "Se connecter à la base lexicale", - contexts: ["all"] - }); }); -// === 2. Suivi des changements de paramètres === +// === 3. Suivi des changements de paramètres === browser.storage.onChanged.addListener((changes) => { if (changes.extensionActive) { isExtensionActive = changes.extensionActive.newValue; console.log("Extension activée :", isExtensionActive); } - if (changes.statsActive) { areStatsActive = changes.statsActive.newValue; console.log("Statistiques activées :", areStatsActive); } }); -// === 3. Gestion des messages provenant du bouton Connexion/Déconnexion === +// === 4. Gestion des connexions/déconnexions === browser.runtime.onMessage.addListener(async (message) => { if (message.action === "toggleConnection") { const isConnected = await isUserConnected(); if (isConnected) { - disconnectFromLexicalDB(); + await disconnectFromLexicalDB(); } else { openLoginPage(); } + } else if (message.action === "showNotification") { + showNotification(message.title, message.message, message.iconUrl); + } else if (message.action === "updateExtensionUI") { + refreshExtensionMenu(); } }); -// === 4. Ouvrir la page de connexion Prisms === function openLoginPage() { const authUrl = "https://prisms.lezinter.net/fr/login"; browser.tabs.create({ url: authUrl }); } -// === 5. Suivi du parcours de connexion et récupération du token === browser.webNavigation.onCompleted.addListener(async (details) => { const url = new URL(details.url); - - // Si connecté, rediriger vers la page BaLex dans Prisms - if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/login") { - console.log("Connecté à Prisms, veuillez cliquer sur 'Se connecter avec BaLex'..."); - } - - // Une fois sur la page du tableau de bord BaLex, récupérer le token if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/headquarters/balex") { console.log("Tentative de récupération du token depuis Prisms..."); - try { - await new Promise(resolve => setTimeout(resolve, 3000)); // Pause pour chargement complet + await new Promise(resolve => setTimeout(resolve, 3000)); await browser.tabs.executeScript(details.tabId, { code: ` (function() { const tokenElement = document.getElementById("accesToken"); - console.log("Token détecté :", tokenElement ? tokenElement.innerText : "Non trouvé"); return tokenElement ? tokenElement.innerText.trim() : null; - })(); - ` + })();` }).then(async (results) => { const token = results[0]; if (token) { await browser.storage.local.set({ accessToken: token }); console.log("Token récupéré et stocké :", token); - alert("Connexion réussie !"); - updateContextMenu(); + showNotification('Connexion réussie', 'La barre latérale va se recharger automatiquement.', 'icons/success.png'); + refreshSidebar(); + refreshExtensionMenu(); } else { console.error("Token non trouvé sur la page Prisms."); } @@ -86,40 +72,51 @@ browser.webNavigation.onCompleted.addListener(async (details) => { } }, { url: [{ hostContains: "prisms.lezinter.net" }] }); -// === 6. Déconnexion === async function disconnectFromLexicalDB() { await browser.storage.local.remove("accessToken"); console.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" }); + showNotification('Déconnexion réussie', 'La barre latérale va se recharger automatiquement.', 'icons/logout.png'); + refreshSidebar(); + refreshExtensionMenu(); } -// === 7. Vérifier si l'utilisateur est connecté === async function isUserConnected() { const result = await browser.storage.local.get("accessToken"); return result.accessToken !== undefined; } -// === 8. Mise à jour dynamique du menu contextuel === -browser.runtime.onStartup.addListener(() => { - updateContextMenu(); -}); +function refreshSidebar() { + browser.runtime.sendMessage({ action: "refreshSidebar" }); +} -async function updateContextMenu() { - const isConnected = await isUserConnected(); - browser.contextMenus.update("toggle_connection", { - title: isConnected ? "Se déconnecter de la base lexicale" : "Se connecter à la base lexicale" - }); +function refreshExtensionMenu() { + browser.runtime.sendMessage({ action: "refreshMenu" }); } -// === 9. Rafraîchissement périodique du token (désactivé) === function refreshToken() { console.warn("Aucune API de rafraîchissement disponible. Rafraîchissement désactivé."); } setInterval(() => { refreshToken(); -}, 15 * 60 * 1000); // Désactivé faute d'API de rafraîchissement +}, 15 * 60 * 1000); + +function showNotification(title, message, iconUrl) { + if (typeof browser.notifications !== "undefined") { + browser.notifications.create({ + type: 'basic', + iconUrl: iconUrl, + title: title, + message: message + }); + } else if (typeof chrome.notifications !== "undefined") { + chrome.notifications.create({ + type: 'basic', + iconUrl: iconUrl, + title: title, + message: message + }); + } else { + console.warn("Notifications non supportées."); + } +} diff --git a/menu_extension/login.html b/menu_extension/login.html deleted file mode 100644 index 1f53747..0000000 --- a/menu_extension/login.html +++ /dev/null @@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <title>Connexion à BaLex</title> - <style> - body { - background-color: #323046; - color: white; - font-family: Arial, sans-serif; - text-align: center; - padding-top: 50px; - } - input { - width: 80%; - padding: 10px; - margin: 10px 0; - } - button { - padding: 10px 20px; - background-color: #94608a; - color: white; - border: none; - cursor: pointer; - } - </style> -</head> -<body> - <h2>Connexion à BaLex</h2> - <input type="text" id="username" placeholder="Nom d'utilisateur"><br> - <input type="password" id="password" placeholder="Mot de passe"><br> - <button id="loginButton">Se connecter</button> - - <script src="login.js"></script> -</body> -</html> diff --git a/menu_extension/login.js b/menu_extension/login.js deleted file mode 100644 index 04a8776..0000000 --- a/menu_extension/login.js +++ /dev/null @@ -1,36 +0,0 @@ -document.getElementById('loginButton').addEventListener('click', async () => { - const username = document.getElementById('username').value; - const password = document.getElementById('password').value; - - if (username && password) { - const apiUrl = "https://babalex.lezinter.net/login"; - - try { - const response = await fetch(apiUrl, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ username, password }) - }); - - const data = await response.json(); - if (data.accessToken && data.refreshToken) { - await browser.storage.local.set({ - accessToken: data.accessToken, - refreshToken: data.refreshToken - }); - alert("Connexion réussie !"); - window.close(); // Ferme la fenêtre de connexion - } else { - alert("Identifiants incorrects."); - } - } catch (error) { - console.error("Erreur lors de la connexion :", error); - alert("Erreur de connexion."); - } - } else { - alert("Veuillez remplir tous les champs."); - } - }); - \ No newline at end of file diff --git a/menu_extension/popup.js b/menu_extension/popup.js index 6d58b8b..7cf2e68 100644 --- a/menu_extension/popup.js +++ b/menu_extension/popup.js @@ -3,22 +3,30 @@ async function updateConnectionButton() { const { accessToken } = await browser.storage.local.get("accessToken"); const button = document.getElementById("connectBtn"); - button.textContent = accessToken ? "Se déconnecter" : "Se connecter"; + if (button) { + button.textContent = accessToken ? "Se déconnecter" : "Se connecter"; + button.onclick = async () => { + await browser.runtime.sendMessage({ action: "toggleConnection" }); + }; + } else { + console.error("Le bouton de connexion n'a pas été trouvé."); + } } -// Action au clic du bouton Connexion/Déconnexion -document.getElementById("connectBtn").addEventListener("click", () => { - console.log("Redirection vers la page de connexion..."); - browser.runtime.sendMessage({ action: "connectToBaLex" }); -}); - +// === 2. Action au clic du bouton Connexion/Déconnexion === browser.runtime.onMessage.addListener((message) => { if (message.action === "tokenSaved") { alert("Connexion réussie !"); + updateConnectionButton(); + } + + if (message.action === "refreshMenu") { + console.log("🔄 Actualisation du menu de l'extension déclenchée."); + updateConnectionButton(); } }); -// === 2. Activer/Désactiver l'extension === +// === 3. Activer/Désactiver l'extension === document.getElementById("toggleExtensionBtn").addEventListener("click", async () => { const { extensionActive } = await browser.storage.local.get("extensionActive"); const newState = !extensionActive; @@ -26,7 +34,7 @@ document.getElementById("toggleExtensionBtn").addEventListener("click", async () alert(`Extension ${newState ? "activée" : "désactivée"}.`); }); -// === 3. Activer/Désactiver les statistiques === +// === 4. Activer/Désactiver les statistiques === document.getElementById("toggleStatsBtn").addEventListener("click", async () => { const { statsActive } = await browser.storage.local.get("statsActive"); const newState = !statsActive; @@ -34,30 +42,7 @@ document.getElementById("toggleStatsBtn").addEventListener("click", async () => alert(`Statistiques ${newState ? "activées" : "désactivées"}.`); }); -// === 4. Mise à jour initiale du bouton Connexion/Déconnexion === -updateConnectionButton(); - -// Vérification pour le bouton de connexion +// === 5. Mise à jour initiale du bouton Connexion/Déconnexion === document.addEventListener("DOMContentLoaded", () => { - const connectBtn = document.getElementById("connectBtn"); - - if (connectBtn) { - connectBtn.addEventListener("click", async () => { - console.log("Clic détecté sur le bouton Connexion"); - try { - await browser.runtime.sendMessage({ action: "toggleConnection" }); - console.log("Message envoyé au background."); - } catch (error) { - console.error("Erreur lors de l'envoi du message :", error); - } - }); - } else { - console.error("Le bouton de connexion n'a pas été trouvé."); - } + updateConnectionButton(); }); - -browser.runtime.onMessage.addListener((message) => { - if (message.action === "updateUI") { - updateConnectionButton(); - } -}); \ No newline at end of file -- GitLab From ad9061fa1a95fafb8ad39286ca11de09802c4cf7 Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:03:56 +0100 Subject: [PATCH 06/13] =?UTF-8?q?Redirection=20auto=20vers=20le=20token=20?= =?UTF-8?q?d'authentification=20apr=C3=A8s=20connexion=20de=20l'utilisateu?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 40 +++++++++++----- menu_extension/background.js | 90 ++++++++++++++++++++---------------- 2 files changed, 78 insertions(+), 52 deletions(-) diff --git a/manifest.json b/manifest.json index b36ec6c..8a83e2d 100644 --- a/manifest.json +++ b/manifest.json @@ -3,19 +3,25 @@ "name": "ff2BaLex", "version": "1.0", "description": "Extension Firefox avec paramètres personnalisés.", + "permissions": [ - "storage", - "activeTab", - "tabs", - "contextMenus", - "webNavigation", - "scripting", - "*://babalex.lezinter.net/*", - "*://prisms.lezinter.net/*"], + "storage", + "activeTab", + "tabs", + "contextMenus", + "webNavigation", + "webRequest", + "webRequestBlocking", + "notifications", + "*://babalex.lezinter.net/*", + "*://prisms.lezinter.net/*" + ], + "background": { "scripts": ["menu_extension/background.js"], "persistent": true }, + "browser_action": { "default_popup": "menu_extension/popup.html", "default_icon": { @@ -25,10 +31,12 @@ }, "default_title": "ff2BaLex" }, + "options_ui": { "page": "menu_extension/options.html", "open_in_tab": false }, + "sidebar_action": { "default_title": "BaLex", "default_panel": "barre_latérale/sidebar.html", @@ -37,10 +45,18 @@ "48": "icons/icon-48.png" } }, + "content_scripts": [ - { - "matches": ["<all_urls>"], - "js": ["barre_latérale/content.js"] - } + { + "matches": ["https://prisms.lezinter.net/*"], + "js": ["barre_latérale/content.js"], + "run_at": "document_end" + } + ], + + "web_accessible_resources": [ + "icons/*", + "menu_extension/*", + "barre_latérale/*" ] } diff --git a/menu_extension/background.js b/menu_extension/background.js index 528b04f..45dc771 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -2,22 +2,22 @@ let isExtensionActive = true; let areStatsActive = false; -console.log("ff2BaLex est chargé."); +console.log("🚀 ff2BaLex est chargé."); // === 2. Installation de l'extension === browser.runtime.onInstalled.addListener(() => { - console.log("ff2BaLex est installé."); + console.log("🔔 Extension ff2BaLex installée."); }); // === 3. Suivi des changements de paramètres === browser.storage.onChanged.addListener((changes) => { if (changes.extensionActive) { isExtensionActive = changes.extensionActive.newValue; - console.log("Extension activée :", isExtensionActive); + console.log("✅ Extension activée :", isExtensionActive); } if (changes.statsActive) { areStatsActive = changes.statsActive.newValue; - console.log("Statistiques activées :", areStatsActive); + console.log("📊 Statistiques activées :", areStatsActive); } }); @@ -40,42 +40,63 @@ browser.runtime.onMessage.addListener(async (message) => { function openLoginPage() { const authUrl = "https://prisms.lezinter.net/fr/login"; browser.tabs.create({ url: authUrl }); + console.log("🔗 Page de connexion ouverte."); } +// === 5. Redirection immédiate vers /balex via webRequest === +browser.webRequest.onBeforeRequest.addListener( + function(details) { + if (details.url === "https://prisms.lezinter.net/fr/headquarters/") { + console.log("🚀 Redirection immédiate vers /balex via webRequest."); + return { redirectUrl: "https://prisms.lezinter.net/fr/headquarters/balex" }; + } + }, + { urls: ["https://prisms.lezinter.net/fr/headquarters/*"] }, + ["blocking"] +); + +// === 6. Récupération automatique du token sur /balex === browser.webNavigation.onCompleted.addListener(async (details) => { const url = new URL(details.url); + if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/headquarters/balex") { - console.log("Tentative de récupération du token depuis Prisms..."); + console.log("🟢 L'utilisateur est sur la page /balex. Tentative de récupération du token."); try { await new Promise(resolve => setTimeout(resolve, 3000)); await browser.tabs.executeScript(details.tabId, { code: ` - (function() { - const tokenElement = document.getElementById("accesToken"); - return tokenElement ? tokenElement.innerText.trim() : null; - })();` - }).then(async (results) => { - const token = results[0]; - if (token) { - await browser.storage.local.set({ accessToken: token }); - console.log("Token récupéré et stocké :", token); - showNotification('Connexion réussie', 'La barre latérale va se recharger automatiquement.', 'icons/success.png'); - refreshSidebar(); - refreshExtensionMenu(); - } else { - console.error("Token non trouvé sur la page Prisms."); - } + console.log("🔠Recherche du token..."); + const tokenElement = document.getElementById("accesToken"); + if (tokenElement) { + const token = tokenElement.innerText.trim(); + console.log("🔠Token détecté :", token); + browser.runtime.sendMessage({ action: "saveToken", token }); + } else { + console.error("⌠Token introuvable."); + } + ` }); } catch (error) { - console.error("Erreur lors de la récupération du token :", error); + console.error("⌠Erreur lors de la récupération du token :", error); } } }, { url: [{ hostContains: "prisms.lezinter.net" }] }); +// === 7. Sauvegarde du token === +browser.runtime.onMessage.addListener(async (message) => { + if (message.action === "saveToken" && message.token) { + await browser.storage.local.set({ accessToken: message.token }); + console.log("✅ Token sauvegardé :", message.token); + showNotification('Connexion réussie', 'La barre latérale va se recharger.', 'icons/success.png'); + refreshSidebar(); + refreshExtensionMenu(); + } +}); + async function disconnectFromLexicalDB() { await browser.storage.local.remove("accessToken"); - console.log("Token supprimé, déconnexion réussie."); - showNotification('Déconnexion réussie', 'La barre latérale va se recharger automatiquement.', 'icons/logout.png'); + console.log("🔓 Déconnexion réussie."); + showNotification('Déconnexion réussie', 'La barre latérale va se recharger.', 'icons/logout.png'); refreshSidebar(); refreshExtensionMenu(); } @@ -93,30 +114,19 @@ function refreshExtensionMenu() { browser.runtime.sendMessage({ action: "refreshMenu" }); } -function refreshToken() { - console.warn("Aucune API de rafraîchissement disponible. Rafraîchissement désactivé."); -} - -setInterval(() => { - refreshToken(); -}, 15 * 60 * 1000); - function showNotification(title, message, iconUrl) { - if (typeof browser.notifications !== "undefined") { + if (browser.notifications) { browser.notifications.create({ type: 'basic', iconUrl: iconUrl, title: title, message: message }); - } else if (typeof chrome.notifications !== "undefined") { - chrome.notifications.create({ - type: 'basic', - iconUrl: iconUrl, - title: title, - message: message - }); } else { - console.warn("Notifications non supportées."); + console.warn("âš ï¸ Notifications non supportées."); } } + +setInterval(() => { + console.warn("âš ï¸ Aucune API de rafraîchissement disponible."); +}, 15 * 60 * 1000); -- GitLab From 4fd8a6e512d006b861339f9cf88d9808caa4affc Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:30:06 +0100 Subject: [PATCH 07/13] Ajout popup instructions connexion utilisateur --- menu_extension/background.js | 83 +++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 15 deletions(-) diff --git a/menu_extension/background.js b/menu_extension/background.js index 45dc771..d454913 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -9,6 +9,10 @@ browser.runtime.onInstalled.addListener(() => { console.log("🔔 Extension ff2BaLex installée."); }); +browser.runtime.onStartup.addListener(() => { + console.log("🔄 Extension démarrée."); +}); + // === 3. Suivi des changements de paramètres === browser.storage.onChanged.addListener((changes) => { if (changes.extensionActive) { @@ -43,22 +47,15 @@ function openLoginPage() { console.log("🔗 Page de connexion ouverte."); } -// === 5. Redirection immédiate vers /balex via webRequest === -browser.webRequest.onBeforeRequest.addListener( - function(details) { - if (details.url === "https://prisms.lezinter.net/fr/headquarters/") { - console.log("🚀 Redirection immédiate vers /balex via webRequest."); - return { redirectUrl: "https://prisms.lezinter.net/fr/headquarters/balex" }; - } - }, - { urls: ["https://prisms.lezinter.net/fr/headquarters/*"] }, - ["blocking"] -); - -// === 6. Récupération automatique du token sur /balex === +// === 5. Afficher le popup après redirection vers Prisms === browser.webNavigation.onCompleted.addListener(async (details) => { const url = new URL(details.url); + if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/login") { + console.log("📘 Injection du popup d'instruction sur Prisms."); + showInstructionPopup(details); // Injection directe dans la page + } + if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/headquarters/balex") { console.log("🟢 L'utilisateur est sur la page /balex. Tentative de récupération du token."); try { @@ -82,7 +79,62 @@ browser.webNavigation.onCompleted.addListener(async (details) => { } }, { url: [{ hostContains: "prisms.lezinter.net" }] }); -// === 7. Sauvegarde du token === + +// === 6. Redirection immédiate vers /balex === +browser.webRequest.onBeforeRequest.addListener( + function(details) { + if (details.url === "https://prisms.lezinter.net/fr/headquarters/") { + console.log("🚀 Redirection automatique vers /balex."); + return { redirectUrl: "https://prisms.lezinter.net/fr/headquarters/balex" }; + } + }, + { urls: ["https://prisms.lezinter.net/fr/headquarters/*"] }, + ["blocking"] +); + +// === 7. Injection du popup directement dans la page === +function showInstructionPopup(details) { + console.log("📘 Injection du message d'instruction sur la page Prisms."); + + browser.tabs.executeScript(details.tabId, { + code: ` + if (!document.getElementById("balex-instruction-popup")) { + const popup = document.createElement("div"); + popup.id = "balex-instruction-popup"; + popup.style.position = "fixed"; + popup.style.top = "20px"; + popup.style.right = "20px"; + popup.style.backgroundColor = "#007BFF"; + popup.style.color = "white"; + popup.style.padding = "15px"; + popup.style.borderRadius = "8px"; + popup.style.boxShadow = "0px 0px 10px rgba(0, 0, 0, 0.2)"; + popup.style.zIndex = "10000"; + popup.innerText = "🔔 Pour vous connecter à l'extension, cliquez sur 'Se connecter avec BaLex' après avoir renseigné vos identifiants."; + + const closeButton = document.createElement("button"); + closeButton.innerText = "Fermer"; + closeButton.style.marginTop = "10px"; + closeButton.style.padding = "5px 10px"; + closeButton.style.backgroundColor = "white"; + closeButton.style.color = "#007BFF"; + closeButton.style.border = "none"; + closeButton.style.borderRadius = "5px"; + closeButton.style.cursor = "pointer"; + + closeButton.onclick = () => { + popup.remove(); + }; + + popup.appendChild(closeButton); + document.body.appendChild(popup); + } + ` + }); +} + + +// === 8. Sauvegarde du token === browser.runtime.onMessage.addListener(async (message) => { if (message.action === "saveToken" && message.token) { await browser.storage.local.set({ accessToken: message.token }); @@ -115,10 +167,11 @@ function refreshExtensionMenu() { } function showNotification(title, message, iconUrl) { + console.log(`🔔 Notification : ${title} - ${message}`); if (browser.notifications) { browser.notifications.create({ type: 'basic', - iconUrl: iconUrl, + iconUrl: iconUrl || "icons/info.png", title: title, message: message }); -- GitLab From 29f79d428a62c1b8e7946feaf935a21c5330f414 Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:37:47 +0100 Subject: [PATCH 08/13] Modification design popup instructions connexion --- menu_extension/background.js | 59 +++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/menu_extension/background.js b/menu_extension/background.js index d454913..d110771 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -92,9 +92,9 @@ browser.webRequest.onBeforeRequest.addListener( ["blocking"] ); -// === 7. Injection du popup directement dans la page === +// // === 7. Injection du popup dans la page === function showInstructionPopup(details) { - console.log("📘 Injection du message d'instruction sur la page Prisms."); + console.log("📘 Injection du message d'instruction centré sur la page Prisms."); browser.tabs.executeScript(details.tabId, { code: ` @@ -102,32 +102,41 @@ function showInstructionPopup(details) { const popup = document.createElement("div"); popup.id = "balex-instruction-popup"; popup.style.position = "fixed"; - popup.style.top = "20px"; - popup.style.right = "20px"; - popup.style.backgroundColor = "#007BFF"; - popup.style.color = "white"; - popup.style.padding = "15px"; - popup.style.borderRadius = "8px"; - popup.style.boxShadow = "0px 0px 10px rgba(0, 0, 0, 0.2)"; + popup.style.top = "50%"; + popup.style.left = "50%"; + popup.style.transform = "translate(-50%, -50%)"; + popup.style.backgroundColor = "#a08e9f"; + popup.style.color = "#323046"; + popup.style.padding = "20px"; + popup.style.borderRadius = "10px"; + popup.style.boxShadow = "0 2px 10px rgba(0, 0, 0, 0.3)"; popup.style.zIndex = "10000"; - popup.innerText = "🔔 Pour vous connecter à l'extension, cliquez sur 'Se connecter avec BaLex' après avoir renseigné vos identifiants."; - - const closeButton = document.createElement("button"); - closeButton.innerText = "Fermer"; - closeButton.style.marginTop = "10px"; - closeButton.style.padding = "5px 10px"; - closeButton.style.backgroundColor = "white"; - closeButton.style.color = "#007BFF"; - closeButton.style.border = "none"; - closeButton.style.borderRadius = "5px"; - closeButton.style.cursor = "pointer"; - - closeButton.onclick = () => { - popup.remove(); - }; + popup.style.fontFamily = "Helvetica, sans-serif"; + popup.style.fontSize = "14px"; + popup.style.width = "300px"; + popup.style.textAlign = "center"; + + popup.innerHTML = \` + <h5 style="color: #fff; font-weight: bold; margin-top: 0;">🔑 Connexion à l'extension</h5> + <p style="margin: 15px 0;">Après avoir renseigné vos identifiants, cliquez sur <strong>"Se connecter avec BaLex"</strong>.</p> + <button id="close-popup-btn" style=" + width: 100%; + margin-top: 15px; + padding: 10px; + border: none; + background-color: #8d5c70; + color: #fbfcfc; + font-weight: bold; + cursor: pointer; + border-radius: 5px; + ">Fermer</button> + \`; - popup.appendChild(closeButton); document.body.appendChild(popup); + + document.getElementById("close-popup-btn").onclick = () => { + popup.remove(); + }; } ` }); -- GitLab From fa859deba9870f89e44bb063918d2956a795e7cd Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:20:11 +0100 Subject: [PATCH 09/13] =?UTF-8?q?Ajout=20bouton=20connexion=20barre=20lat?= =?UTF-8?q?=C3=A9rale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "barre_lat\303\251rale/sidebar.html" | 5 ++++ "barre_lat\303\251rale/sidebar.js" | 40 ++++++++++++++++++++++++- menu_extension/background.js | 44 +++++++++++++++++++++++----- menu_extension/popup.html | 2 +- menu_extension/popup.js | 26 +++++++++++++++- 5 files changed, 106 insertions(+), 11 deletions(-) diff --git "a/barre_lat\303\251rale/sidebar.html" "b/barre_lat\303\251rale/sidebar.html" index 5ce8395..6d90eef 100644 --- "a/barre_lat\303\251rale/sidebar.html" +++ "b/barre_lat\303\251rale/sidebar.html" @@ -114,7 +114,11 @@ <div id="menu"> <h3>Lexiques</h3> <div id="lexiques">Chargement...</div> + <div id="auth-section"> + <button id="auth-button">Se connecter</button> + </div> </div> + <!-- État de la sélection --> <div id="etat"> @@ -127,5 +131,6 @@ <div id="definition"></div> + </body> </html> diff --git "a/barre_lat\303\251rale/sidebar.js" "b/barre_lat\303\251rale/sidebar.js" index 454a175..35fd980 100644 --- "a/barre_lat\303\251rale/sidebar.js" +++ "b/barre_lat\303\251rale/sidebar.js" @@ -25,6 +25,10 @@ browser.runtime.onMessage.addListener((message) => { console.warn("âš ï¸ Ã‰lément #motSelectionne introuvable."); } } + + if (message.action === "updateUI") { + updateAuthButton(message.isLoggedIn); + } }); // Vérification du format du token @@ -42,8 +46,10 @@ async function readTokenFromStorage() { if (accessToken && validateToken(accessToken)) { authToken = accessToken; console.log(`🔑 Token récupéré depuis le stockage local : [${authToken}]`); + return true; } else { console.error("⌠Token invalide ou non trouvé dans le stockage local."); + return false; } } @@ -87,11 +93,15 @@ async function fetchLexicons() { console.log("🚀 La fonction fetchLexicons() est appelée."); const lexiquesContainer = document.getElementById('lexiques'); + const authSection = document.getElementById('auth-section'); lexiquesContainer.innerHTML = ''; if (!authToken) { console.warn('âš ï¸ Token non disponible ou vide.'); lexiquesContainer.textContent = 'Lexiques non disponibles. Veuillez vous connecter.'; + if (authSection) { + authSection.style.display = 'block'; + } return; } @@ -115,15 +125,43 @@ async function fetchLexicons() { const lexicons = await response.json(); console.log('📚 Lexiques récupérés :', lexicons); displayLexicons(lexicons); + if (authSection) { + authSection.style.display = 'block'; // Toujours afficher la section auth + } } catch (error) { console.error('â—ï¸ Erreur pendant la récupération des lexiques :', error); lexiquesContainer.textContent = 'Impossible de charger les lexiques. Vérifiez votre connexion ou le token.'; + if (authSection) { + authSection.style.display = 'block'; + } } } // Lancement automatique après le chargement de la page window.onload = async () => { console.log("📦 Page complètement chargée. Récupération du token depuis le stockage local et récupération des lexiques..."); - await readTokenFromStorage(); + const isLoggedIn = await readTokenFromStorage(); + updateAuthButton(isLoggedIn); await fetchLexicons(); + + // Ajout du bouton de connexion/déconnexion + const authButton = document.getElementById("auth-button"); + const authSection = document.getElementById('auth-section'); + if (authButton && authSection) { + authButton.addEventListener("click", () => { + browser.runtime.sendMessage({ action: "toggleAuth" }).then(() => { + browser.runtime.sendMessage({ action: "checkAuthStatus" }).then((isLoggedIn) => { + updateAuthButton(isLoggedIn); + authSection.style.display = 'block'; // Toujours afficher auth-section + }); + }); + }); + } }; + +function updateAuthButton(isLoggedIn) { + const authButton = document.getElementById("auth-button"); + if (authButton) { + authButton.textContent = isLoggedIn ? "Se déconnecter" : "Se connecter"; + } +} diff --git a/menu_extension/background.js b/menu_extension/background.js index d110771..e87ca0b 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -26,25 +26,38 @@ browser.storage.onChanged.addListener((changes) => { }); // === 4. Gestion des connexions/déconnexions === -browser.runtime.onMessage.addListener(async (message) => { - if (message.action === "toggleConnection") { +browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { + console.log("📩 Message reçu dans background.js :", message); + + if (message.action === "toggleAuth") { const isConnected = await isUserConnected(); + console.log("🔠État actuel de connexion :", isConnected ? "Connecté" : "Déconnecté"); if (isConnected) { await disconnectFromLexicalDB(); } else { openLoginPage(); } + } else if (message.action === "checkAuthStatus") { + const isConnected = await isUserConnected(); + sendResponse(isConnected); + } else if (message.action === "authStatusChanged") { + console.log("🔄 Mise à jour de l'état d'authentification :", message.isLoggedIn); + browser.runtime.sendMessage({ action: "updateUI", isLoggedIn: message.isLoggedIn }); + } else if (message.action === "refreshSidebar") { + refreshSidebar(); + } else if (message.action === "refreshMenu") { + refreshExtensionMenu(); } else if (message.action === "showNotification") { showNotification(message.title, message.message, message.iconUrl); - } else if (message.action === "updateExtensionUI") { - refreshExtensionMenu(); } + return true; // Nécessaire pour les réponses asynchrones }); function openLoginPage() { const authUrl = "https://prisms.lezinter.net/fr/login"; + console.log("🔗 Ouverture de la page de connexion :", authUrl); browser.tabs.create({ url: authUrl }); - console.log("🔗 Page de connexion ouverte."); + browser.runtime.sendMessage({ action: "authStatusChanged", isLoggedIn: false }); } // === 5. Afficher le popup après redirection vers Prisms === @@ -53,7 +66,7 @@ browser.webNavigation.onCompleted.addListener(async (details) => { if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/login") { console.log("📘 Injection du popup d'instruction sur Prisms."); - showInstructionPopup(details); // Injection directe dans la page + showInstructionPopup(details); } if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/headquarters/balex") { @@ -143,35 +156,50 @@ function showInstructionPopup(details) { } + // === 8. Sauvegarde du token === browser.runtime.onMessage.addListener(async (message) => { if (message.action === "saveToken" && message.token) { + console.log("✅ Sauvegarde du token :", message.token); await browser.storage.local.set({ accessToken: message.token }); - console.log("✅ Token sauvegardé :", message.token); showNotification('Connexion réussie', 'La barre latérale va se recharger.', 'icons/success.png'); refreshSidebar(); refreshExtensionMenu(); + browser.runtime.sendMessage({ action: "authStatusChanged", isLoggedIn: true }); } }); async function disconnectFromLexicalDB() { + console.log("🔓 Déconnexion en cours..."); await browser.storage.local.remove("accessToken"); - console.log("🔓 Déconnexion réussie."); + console.log("🔓 Token supprimé avec succès."); showNotification('Déconnexion réussie', 'La barre latérale va se recharger.', 'icons/logout.png'); refreshSidebar(); refreshExtensionMenu(); + browser.runtime.sendMessage({ action: "updateUI", isLoggedIn: false }); } +browser.runtime.onMessage.addListener(async (message) => { + if (message.action === "saveToken" && message.token) { + console.log("✅ Sauvegarde du token :", message.token); + await browser.storage.local.set({ accessToken: message.token }); + browser.runtime.sendMessage({ action: "updateUI", isLoggedIn: true }); + } +}); + async function isUserConnected() { const result = await browser.storage.local.get("accessToken"); + console.log("🔑 État actuel du token :", result.accessToken); return result.accessToken !== undefined; } function refreshSidebar() { + console.log("🔄 Rafraîchissement de la barre latérale."); browser.runtime.sendMessage({ action: "refreshSidebar" }); } function refreshExtensionMenu() { + console.log("🔄 Rafraîchissement du menu de l'extension."); browser.runtime.sendMessage({ action: "refreshMenu" }); } diff --git a/menu_extension/popup.html b/menu_extension/popup.html index 3c45bee..dbc12ff 100644 --- a/menu_extension/popup.html +++ b/menu_extension/popup.html @@ -31,7 +31,7 @@ </head> <body> <h3>Extension BaLex</h3> - <button id="connectBtn">Se connecter</button> + <button id="auth-button">Se connecter</button> <button id="toggleExtensionBtn">Activer/Désactiver l'extension</button> <button id="toggleStatsBtn">Activer les statistiques</button> <script src="popup.js"></script> diff --git a/menu_extension/popup.js b/menu_extension/popup.js index 7cf2e68..b158753 100644 --- a/menu_extension/popup.js +++ b/menu_extension/popup.js @@ -44,5 +44,29 @@ document.getElementById("toggleStatsBtn").addEventListener("click", async () => // === 5. Mise à jour initiale du bouton Connexion/Déconnexion === document.addEventListener("DOMContentLoaded", () => { - updateConnectionButton(); + const authButton = document.getElementById("auth-button"); + + // Vérification initiale de l'état + browser.runtime.sendMessage({ action: "checkAuthStatus" }).then((isLoggedIn) => { + updateAuthButton(isLoggedIn); + }); + + // Écoute des clics sur le bouton + authButton.addEventListener("click", () => { + browser.runtime.sendMessage({ action: "toggleAuth" }); + }); + + // Écoute des mises à jour d'état + browser.runtime.onMessage.addListener((message) => { + if (message.action === "updateUI") { + updateAuthButton(message.isLoggedIn); + } + }); }); + +function updateAuthButton(isLoggedIn) { + const authButton = document.getElementById("auth-button"); + if (authButton) { + authButton.textContent = isLoggedIn ? "Se déconnecter" : "Se connecter"; + } +} -- GitLab From 358cee84406bcf563940283b2aed4a4ac4148cca Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:27:19 +0100 Subject: [PATCH 10/13] Synchronisation boutons connexion menus --- menu_extension/background.js | 12 ++------- menu_extension/popup.js | 52 ++++++++++-------------------------- 2 files changed, 16 insertions(+), 48 deletions(-) diff --git a/menu_extension/background.js b/menu_extension/background.js index e87ca0b..584b3b1 100644 --- a/menu_extension/background.js +++ b/menu_extension/background.js @@ -50,7 +50,7 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => { } else if (message.action === "showNotification") { showNotification(message.title, message.message, message.iconUrl); } - return true; // Nécessaire pour les réponses asynchrones + return true; }); function openLoginPage() { @@ -165,7 +165,7 @@ browser.runtime.onMessage.addListener(async (message) => { showNotification('Connexion réussie', 'La barre latérale va se recharger.', 'icons/success.png'); refreshSidebar(); refreshExtensionMenu(); - browser.runtime.sendMessage({ action: "authStatusChanged", isLoggedIn: true }); + browser.runtime.sendMessage({ action: "updateUI", isLoggedIn: true }); } }); @@ -179,14 +179,6 @@ async function disconnectFromLexicalDB() { browser.runtime.sendMessage({ action: "updateUI", isLoggedIn: false }); } -browser.runtime.onMessage.addListener(async (message) => { - if (message.action === "saveToken" && message.token) { - console.log("✅ Sauvegarde du token :", message.token); - await browser.storage.local.set({ accessToken: message.token }); - browser.runtime.sendMessage({ action: "updateUI", isLoggedIn: true }); - } -}); - async function isUserConnected() { const result = await browser.storage.local.get("accessToken"); console.log("🔑 État actuel du token :", result.accessToken); diff --git a/menu_extension/popup.js b/menu_extension/popup.js index b158753..702d38b 100644 --- a/menu_extension/popup.js +++ b/menu_extension/popup.js @@ -1,32 +1,32 @@ -// === 1. Gestion du bouton unique Connexion/Déconnexion === +console.log("✅ popup.js chargé avec succès !"); + +// === 1. Mise à jour du bouton Connexion/Déconnexion === async function updateConnectionButton() { const { accessToken } = await browser.storage.local.get("accessToken"); - const button = document.getElementById("connectBtn"); + const button = document.getElementById("auth-button"); if (button) { button.textContent = accessToken ? "Se déconnecter" : "Se connecter"; button.onclick = async () => { - await browser.runtime.sendMessage({ action: "toggleConnection" }); + await browser.runtime.sendMessage({ action: "toggleAuth" }); }; } else { - console.error("Le bouton de connexion n'a pas été trouvé."); + console.error("⌠Le bouton de connexion n'a pas été trouvé."); } } -// === 2. Action au clic du bouton Connexion/Déconnexion === +// === 2. Écoute des messages depuis background.js === browser.runtime.onMessage.addListener((message) => { - if (message.action === "tokenSaved") { - alert("Connexion réussie !"); + if (message.action === "updateUI") { + console.log("📩 Mise à jour reçue : État connecté :", message.isLoggedIn); updateConnectionButton(); - } - - if (message.action === "refreshMenu") { + } else if (message.action === "refreshMenu") { console.log("🔄 Actualisation du menu de l'extension déclenchée."); updateConnectionButton(); } }); -// === 3. Activer/Désactiver l'extension === +// === 3. Gestion des actions des boutons === document.getElementById("toggleExtensionBtn").addEventListener("click", async () => { const { extensionActive } = await browser.storage.local.get("extensionActive"); const newState = !extensionActive; @@ -34,7 +34,6 @@ document.getElementById("toggleExtensionBtn").addEventListener("click", async () alert(`Extension ${newState ? "activée" : "désactivée"}.`); }); -// === 4. Activer/Désactiver les statistiques === document.getElementById("toggleStatsBtn").addEventListener("click", async () => { const { statsActive } = await browser.storage.local.get("statsActive"); const newState = !statsActive; @@ -42,31 +41,8 @@ document.getElementById("toggleStatsBtn").addEventListener("click", async () => alert(`Statistiques ${newState ? "activées" : "désactivées"}.`); }); -// === 5. Mise à jour initiale du bouton Connexion/Déconnexion === +// === 4. Initialisation === document.addEventListener("DOMContentLoaded", () => { - const authButton = document.getElementById("auth-button"); - - // Vérification initiale de l'état - browser.runtime.sendMessage({ action: "checkAuthStatus" }).then((isLoggedIn) => { - updateAuthButton(isLoggedIn); - }); - - // Écoute des clics sur le bouton - authButton.addEventListener("click", () => { - browser.runtime.sendMessage({ action: "toggleAuth" }); - }); - - // Écoute des mises à jour d'état - browser.runtime.onMessage.addListener((message) => { - if (message.action === "updateUI") { - updateAuthButton(message.isLoggedIn); - } - }); + console.log("🌠Initialisation du menu de l'extension..."); + updateConnectionButton(); }); - -function updateAuthButton(isLoggedIn) { - const authButton = document.getElementById("auth-button"); - if (authButton) { - authButton.textContent = isLoggedIn ? "Se déconnecter" : "Se connecter"; - } -} -- GitLab From fd8392b470cf6f2e5085139f322f5a73f0019b3e Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sun, 19 Jan 2025 18:31:25 +0100 Subject: [PATCH 11/13] =?UTF-8?q?Affichage=20fonctionnalit=C3=A9s=20selon?= =?UTF-8?q?=20statut=20de=20connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "barre_lat\303\251rale/sidebar.html" | 33 ++++++++++++++++++++--- "barre_lat\303\251rale/sidebar.js" | 39 +++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 8 deletions(-) diff --git "a/barre_lat\303\251rale/sidebar.html" "b/barre_lat\303\251rale/sidebar.html" index 6d90eef..a802107 100644 --- "a/barre_lat\303\251rale/sidebar.html" +++ "b/barre_lat\303\251rale/sidebar.html" @@ -88,6 +88,13 @@ margin-left: 10px; } + /* Texte explicatif */ + #highlight-note { + font-size: small; + margin-bottom: 10px; + text-align: center; + } + /* Espace pour les pictogrammes */ .lexique-icon { width: 25px; @@ -106,6 +113,14 @@ border-radius: 5px; color: white; } + + + /* Activer/désactiver le surlignage */ + #highlighting-options p { + margin: 5px 0; + font-size: small; + color: #333; + } </style> </head> <body> @@ -113,24 +128,34 @@ <!-- Menu des lexiques --> <div id="menu"> <h3>Lexiques</h3> + <p id="highlight-note" style="display: none;">Cochez un/des lexique(s) pour activer le surlignage des mots sur la page.</p> <div id="lexiques">Chargement...</div> + <div id="auth-section"> - <button id="auth-button">Se connecter</button> + <button id="auth-button">Se connecter</button> </div> </div> - <!-- État de la sélection --> + <hr> <div id="etat"> <h3>Mot sélectionné</h3> <p id="motSelectionne">Aucun mot sélectionné</p> + <div id="add-to-lexiques" style="display: none;"> + <button id="add-word-button">Ajouter le mot sélectionné</button> + </div> + <button id="chercherDef">Chercher la/les définition(s)</button> + <div id="possible-definitions" style="display: none;"> + <label style="font-size: small;"> + <input type="checkbox" id="toggle-definitions"> + Afficher toutes les définitions + </label> + </div> </div> <!-- Définition affichée --> <div id="definition"></div> - - </body> </html> diff --git "a/barre_lat\303\251rale/sidebar.js" "b/barre_lat\303\251rale/sidebar.js" index 35fd980..4a13c48 100644 --- "a/barre_lat\303\251rale/sidebar.js" +++ "b/barre_lat\303\251rale/sidebar.js" @@ -28,6 +28,7 @@ browser.runtime.onMessage.addListener((message) => { if (message.action === "updateUI") { updateAuthButton(message.isLoggedIn); + toggleHighlightMessage(message.isLoggedIn); } }); @@ -63,6 +64,7 @@ function displayLexicons(lexicons) { return; } + // Ajouter les lexiques à la liste lexicons.forEach(lexique => { const lexiqueDiv = document.createElement('div'); lexiqueDiv.className = 'lexique-item'; @@ -80,6 +82,11 @@ function displayLexicons(lexicons) { checkbox.className = 'lexique-checkbox'; checkbox.checked = lexique.active || false; + checkbox.addEventListener('change', () => { + console.log(`🔄 Changement de surlignage pour ${lexique.name}: ${checkbox.checked ? 'activé' : 'désactivé'}`); + // Implémentez ici la logique pour activer/désactiver le surlignage + }); + lexiqueDiv.appendChild(iconDiv); lexiqueDiv.appendChild(labelSpan); lexiqueDiv.appendChild(checkbox); @@ -88,6 +95,14 @@ function displayLexicons(lexicons) { }); } +// Gestion de l'affichage du message d'information +function toggleHighlightMessage(isLoggedIn) { + const highlightNote = document.getElementById('highlight-note'); + if (highlightNote) { + highlightNote.style.display = isLoggedIn ? 'block' : 'none'; + } +} + // Récupération des lexiques avec diagnostics détaillés async function fetchLexicons() { console.log("🚀 La fonction fetchLexicons() est appelée."); @@ -137,22 +152,37 @@ async function fetchLexicons() { } } +function toggleElementsVisibility(isLoggedIn) { + const addToLexiques = document.getElementById('add-to-lexiques'); + const possibleDefinitions = document.getElementById('possible-definitions'); + + if (addToLexiques) { + addToLexiques.style.display = isLoggedIn ? 'block' : 'none'; + } + + if (possibleDefinitions) { + possibleDefinitions.style.display = isLoggedIn ? 'block' : 'none'; + } +} + // Lancement automatique après le chargement de la page window.onload = async () => { console.log("📦 Page complètement chargée. Récupération du token depuis le stockage local et récupération des lexiques..."); const isLoggedIn = await readTokenFromStorage(); updateAuthButton(isLoggedIn); + toggleHighlightMessage(isLoggedIn); + toggleElementsVisibility(isLoggedIn); await fetchLexicons(); - // Ajout du bouton de connexion/déconnexion + // Gestion du bouton de connexion/déconnexion const authButton = document.getElementById("auth-button"); - const authSection = document.getElementById('auth-section'); - if (authButton && authSection) { + if (authButton) { authButton.addEventListener("click", () => { browser.runtime.sendMessage({ action: "toggleAuth" }).then(() => { browser.runtime.sendMessage({ action: "checkAuthStatus" }).then((isLoggedIn) => { updateAuthButton(isLoggedIn); - authSection.style.display = 'block'; // Toujours afficher auth-section + toggleHighlightMessage(isLoggedIn); + toggleElementsVisibility(isLoggedIn); }); }); }); @@ -165,3 +195,4 @@ function updateAuthButton(isLoggedIn) { authButton.textContent = isLoggedIn ? "Se déconnecter" : "Se connecter"; } } + -- GitLab From 2343c0798102fd551e2adcaff638a1b6308e72df Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sun, 19 Jan 2025 18:42:08 +0100 Subject: [PATCH 12/13] Modifications CSS --- "barre_lat\303\251rale/sidebar.html" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/barre_lat\303\251rale/sidebar.html" "b/barre_lat\303\251rale/sidebar.html" index a802107..55e12d5 100644 --- "a/barre_lat\303\251rale/sidebar.html" +++ "b/barre_lat\303\251rale/sidebar.html" @@ -19,8 +19,8 @@ /* Conteneurs */ #menu, #etat { padding: 10px; - margin-bottom: 10px; - border-radius: 5px; + margin-bottom: 0px; + border-radius: 10px; background-color: #a08e9f; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } -- GitLab From f21a9e205e7bd59c547fb8a9d3994df5167e933b Mon Sep 17 00:00:00 2001 From: Lucie Bader <167515375+Lucie-Bdr@users.noreply.github.com> Date: Sun, 19 Jan 2025 18:48:04 +0100 Subject: [PATCH 13/13] =?UTF-8?q?R=C3=A9organisation=20fichiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "s\303\251lection_recherche/.gitkeep" | 0 .../icons/border-48.png" | Bin 225 -> 0 bytes .../icons/loupe-256.png" | Bin 13905 -> 0 bytes "s\303\251lection_recherche/main.js" | 193 ------------------ "s\303\251lection_recherche/manifest.json" | 29 --- "s\303\251lection_recherche/style.css" | 37 ---- "s\303\251lection_recherche/token.txt" | 1 - 7 files changed, 260 deletions(-) delete mode 100644 "s\303\251lection_recherche/.gitkeep" delete mode 100644 "s\303\251lection_recherche/icons/border-48.png" delete mode 100644 "s\303\251lection_recherche/icons/loupe-256.png" delete mode 100644 "s\303\251lection_recherche/main.js" delete mode 100644 "s\303\251lection_recherche/manifest.json" delete mode 100644 "s\303\251lection_recherche/style.css" delete mode 100644 "s\303\251lection_recherche/token.txt" diff --git "a/s\303\251lection_recherche/.gitkeep" "b/s\303\251lection_recherche/.gitkeep" deleted file mode 100644 index e69de29..0000000 diff --git "a/s\303\251lection_recherche/icons/border-48.png" "b/s\303\251lection_recherche/icons/border-48.png" deleted file mode 100644 index 90687de26d71e91b7c82565772a7df470ae277a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq zxP?KOkzv*x37}xJr;B4qM&sM7j(iOY0?rpNR{Ym~eNUieh4I>d+mEvHuIy!K@bZ41 z<G=gpjAyae-$dK=GF;u(nO|M2nf#xLWrf-0#+>J}N$e^&*#q7kxbW`Aeg?)>n&l0$ z8xrIlb~3+dVExT-N;ZLA=LS%o!8+lf-GRA$F@Klex9jiV-^0Mj@Zdh*s&<Z;Pny1y QfX-p?boFyt=akR{0F1y+Z~y=R diff --git "a/s\303\251lection_recherche/icons/loupe-256.png" "b/s\303\251lection_recherche/icons/loupe-256.png" deleted file mode 100644 index a34fc08ba086b2dcd791fe7962ffb74e6b17203b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13905 zcmdUW`8$<g6z_h|IgVqVXK~1sA!HuUF=eQbBxFp+%yWeI7&Ar5knu#KBt(dCC=rEF z$#_Ia#v-$G``-K9=id7#-1Wn|r?vLG_kPx1?|#?%>|}FOLk3!2S^xlpv5~$70MNfI z1Te^d$&F{$mH;4u`FTqNL;v&tH9&}e&;Laj4CDXK{y!-K@gENaAtC6$zW#4QBB}mo z@&D9cyqIBWSz>OU9Uk5p7S`eG+ZYto78cfNViJA&v=t5)>gxJ9AfV-6jj*tek59F| zeT|b-#lNDmvZIkvqO)^@i%YeOOHF8KyMsfOmsg9MTZ4nc^T5D1507RWn+k95W-r?< z1qB5!uU1>zhOMnF7nkORg#}N~*2Tp|504fD1A~KugNqkye*XNqzrVk^xv8R}qN%B= zuCDIr*tovFe(hS5l9H0MbJO<rwwv3l-Q8Ur4(H_5Xk$~asHkXf|B^zXxVpZwvwP|3 z*>dH|3v288zkmPg=;&x`C)~Kvs;sPhe0==t*RR9FLp3!uZEfwfwY80njmwwo%*>uy zS-sHL*O!-<cW`Lb)6?tj?p|40`Sa(Gq2YrI7s^ddD=jVSLP9#vohvmqE;@DU)TK)` zhK5E42KV*!GTq$V1_lQF{MtG?I&^i@b#zi18=Jbix-2a%!^6Am?dv=|JOcweW@l%6 zdU|YaYgboSr>Cd!_}dW?Z)$7noSdARn_uB@Nyf&;GBPq2|52HRMb(cVKknYWJ2Eoj z?fsfeCSSQy^Wnn>YwN1X$;qLiq05*5jk)5|r3!m{`>$We>g((0=jX3oYp}Dc&dtqr zbbNN<!u`?FQD^5m6BCmwSMp6v?zFbHwzaiAe?C4o_I++{-qEpse0;pOxA*GRioU)+ z8ylPN-@ivhbfu-GnVR0Is(MBw5)BMejf|45txL_#i!NTwc6Dt$dp6$CF#XGyFJoh4 zGc!Mxm3?(|qBS%^A|fImKdvw`y6^8FU}$(ZK0d+2qj+g)b6{X<Wo3JQe$~MtABVGj z^JZLK-KeGIQ)y|tg++8-UBAD7WlBnuscE2zi9>dFdrQlkt5;J9g!-E|t1>dm7Zz6Y z@&+m@dShctyu4ojQ+~~dH*^2n7{L~%mjHt@3l$A5gg`NJ$O=-cX$iBP5f|m+<2@zK zeZsz>;CDvA^92*T01=bVCd%Ywl49cT@^-tPKOetLEW984r!W716JUGG^Ai9pFxJ<x z3?HA&n=s3|%KJ|AYO5625nn`$M}b>Jce)De9nt%roP?F+nX_2Y?KBQfD8KwXF>_YN zhpe~1U}>yf=C4VaP@B-QN)X51K1^0Mrf~)|F5Db(3UL!34xX<M)f_SUJmhaQV~Mnz ziHQDnbLM5=lS_s*j-nyU6{9uOLxZbV-~U_`7Frl}Qsxb6uuVT(F=8VvmgP`mn(5$o z#zuPM#o4mY3*6~$aooAM`yu6h;IWc=sxf7GO?%74@5PcLctf-}hU7Miq&}#Tugd;- z#`fbp^UW8RzOzMO@48q?m`S3F!}RW)CG&rb&=gSVU92(|E@7IX_7gW}Rr3g>?_)y~ zn%2&y8yuyuNuS9#T~<BC==A9u58oA^Puw?cRC(62Q~1+=u1QIRTsu)D_@OxyHH*iP zL(b<Ha>u)b)>!f=iM>;g7;M-^(JN9(W3t}$hV;w@)hOQB@?K#29LZ1BD7?j6|J$0| zf1>s5jB!{<MyuEk<}#9b>B5^wvyAkHZM(G9GzDym8cni0-19+m(=@vmY`a<BVH<b7 zB5*tWsga3Lo6h8AK^yw!zNXj0e=|n3`r)@5&%1A-FscXY7CQrF)sa7=@ptZqg(RiJ zbRAT5>nLe$S@f3icwl7$Y3$0-%b0sBLD@r3zDRJRl3X1<6^rx_q!D8*X?=P+|Js*~ zR==_r8-32y9Xj=oq3$qZc%RnnnUTh*yCy2_sNVM8v0#F@HO}aSM>Y=w#1}(%XH`mb zHqgC=er&g3u!y|8D8)s&bM4Iar}SeT)A@CWTGV-8l>$znA!%frnu057U*-G4dV8o` zx{vQa<LT=cLzwuxw(uAixauG8N>p}>1rx`CwY6S<wI253!a7z~n(d-a=k_lzpX}0j zP8!Ia`lv@Dzu8+T)RKeVQ9MtcqD1A-Oie>`Q62*4vmCAV@1&j`Zu%oS#~gSU-Xx;N zwv!Guie7ae3@!Y<ldbADFH8wH8yf6-Q?zOxAVyU^^h6sAed*v?juAYrNoYhi4;A`w z{hI35p4UR|95fw05FL7=EEo@d%@A{cuTK};AKjU0`=H)qHOUd?5}mjBzD9d}J?mho z_-YC~T^oaV7L#DyMaeL}>grRDe~EqS@u(zKgD;wE@c|u_k&*f&;n<%gLC^B>^Kp}d z>km;-*0m0lHKjtSXu!0DdsgPtd*acj%G9deUDQS{?k<$%wQbshk(6qB>$Vj4<c8^b z7MLq3q;#`d)rq^tX!Bk@Xg=op3SFxbXdS$Uq5o1|6sz@#xBFwJXss-zf?)_~m0oab zQ@+Ul)Lo9`7;smB#1z|~zrne1iQvz}Q?2Y;oodQD5byOS8dH0Gd4sC==7r!DB|;3= z$#Jd8O`jo1XRAb=ptM<p8HWwBwV@UWj;X%10?Y~H%r?hAPv2NzFESHH@m;qNP9OR? z%8KxO35fy8xbdICsRtF%SkvFXVk);Owte#7U$|KiT=^KK;)sDRfqs7d0!XX~IaK{K z`f@&t(@|BhX@wDzL}wuEaZnyf&;CvL+~<Pv-#gobA45=xQ*B|c_;yC^vm5(sxfm=f z3za!N%TT!u$_^>ll|(0ccoJq}!O4io-F-VU*|+Sp>rmTv_u@hQhEu~0(__7(^fM^Q zro4VbZDzodEW8xVJ93hw3=)i=0d6n|k=#3Q`djbUxbN4^dO0vq^L39-g~y2O7x2fj zv|bml&A6M2Bn$%bD@zm+bDp-5;n8I<29+No!7^tZg>yT=AcCcAHu>yLD#MmXt%eQl zkK$P`t*YCpZso}JmNCP@EFPDiG(pe7i!BQXK9`>EW4@kzu-P;>mwJNXdti0^1fS5h z-A1cg_u*V>XXojvx7^d>%DP15*|Sk^Z=5_fU($Lh|BjhCo%HJ2XeulND{#ZK^0WIH zdn%Pm4H>rn$!2Yokj(n&DXo8}BMpUqHcffGIIN#nDq19w=SA{$V$L{k1=Waknew4D zL`Zo^=P~%m7G(!rFA7q>@%CMnE(HVc>mSPcrq&dxe0X5EUSFS~BO^bn7fU$z=IyWO zPj~lY8(DQQ5?(Haq8rJ&z=&w#{Z5G)GI(l0VuCAlS>c(Ev!BjwgauHJPOeV&mF?u@ zJbd^tsmv_*v8Rko8()HZCX#?Z=@BK9kN6sYVF&{{zZx`aB4B%ukL$T8^VtCPAd58c zM@8;4&m`iO1$gHHM#GxhD=DNK@3egcs%0<i447SDU}9n-k||I2_6*xb)&+){t<lw0 z*S4?wuw4hyD>Lu7K2gG&Gr+q?VAua7K%CNt>EMf!AeinEH1?%qHRWT|FP^Mh-;ZbC zRE%UiPNb$yF)wfEJwgEa84WF3=4<q8A<3@9&jK?T3^dV0i9am)x+#RjS_pAKE+#DG zL#g01P`D|$e}ByTZ<z39KJHmg!KseOK=*Js)Zxlk_Dd%|LfG?Kr98Emv--<eITvaa ztA?;aE*#8&M+KiUfYC&YB6%_omIiD%%7tAbK0j!P`W_wp^OHXm;pesdq^3qzwqxMw zYkq+pEE<;6{Csd9n<t7XzDZT4j1uT$&7_9ip*K9k)UME51dtiB7h(d3UsdSDyzF^I zc%g(h{e!Wc$;n^7gk~=BU>rSsit;e%IG=v!L*}E+Y;<QY;YVZR!L!6+q&egcRSVx_ zsfEnR0(k}W@Kl{-p6hnp#4~}(<3Dx^WvA8Z{Jj4D#@WkoAN1|<sSJ#?wA>Q|ySCna zCcK0(PNy7if;2poKgGg1aCedHMg2>g2fY52fAGsEG@kkjs?3oL3Ns$lfC=J*UkGCj zd=A>yDZBaipAt4e2~woJ79rHQ&ty04)_$)BcOv$fkH3o!f#6a@u+oGVm&nTdl#G<U zH?cz6fm%e0EA$!@CBdOcN-d;N*KLjPEV07yfz+oZlgZSN({438v|O>Nv4{h@b66kH zy_<kFMm2NhC2*LFQj?fK>F}?T=EG7JYx{O;+8Qx8m<u69;8P@2Nr}>!poz5OL^Wen zo*%>v9?&|0c-{WwtUrxi3p>qJq3z;t$}edBaCN<zdxBBJ+d=tivUy#1+$w6`-)=xk zN^1Rylni&Gi%!4G81qCctL*Rn7f5R9hbW*M&Y1%NLjukjHDF>0Pax}EC5e(aU64lo zbZ+}<ZC&KwP3FS=h*XmTj{}bnVhazx3*I;t_~<*cVm2qkRu|3Qrgxajji9c}zKt3l z2u~!;E9V-d@$fudJm4-Acu!0Gw<N2UGij~cO-fzg+%b0!!%TiH*W~{A@kzmT(ImNf z(K2@ZB<8nowtY>Flw^2=A}z{|_i9_fl_$^FDuXr@ww-UZr9m6I0(g!UWTJG!2h-k{ zB=73;R9K)&<t_d!?H9wYA4D-*I9IUT@7uj{Y52PV&~ws5Fk*DH;>nE69uT7Q&MwNb z-T;oE_^`AyMzv*|Ap8Y~-1=YYJg0JdvjgisaTeaotwq>v(gg*fjz)ekeKzC5Ew(F1 zw<XZr)&n8t)0b=&J5cEW^SbVxD6z%)_Q{Rtpu0<#93%nl>;XPBCz#=_B$-Rg65k## zyhQ2FjR*S4l&}#qw9#Sm(LK~U0&|G-t;Luaoya_smsHbd<RqsJskHisf5=%K`S%Ys zlS#UQV(#)GTeLrVswr?Jd!CQIieOEZrzH^9E)6#^Y*ziQQJH#l9B@=K^2?7+^@lg@ zRm4%@N6voIwm=JQE!)|-)1meI$1=kXKC+*1I&y2Z-9Z1*<F&uxAI>N-SApuDODA1% z6jp>02HqB=6bT(yEJrMDHzkKxtoH%35FQaCP58?gjd1EXCC*Y$iF78Mt!>_&&e4SS zlmt8w_moIgV2a|Y(weFILi$d9^UCRwm9F_t)FkOleU~;>Cq9wq?NGicI%HHiw8d4# z#@sEllIa`wfvY3x5_EFhE1nx2=lGVfRNn2owVU~btZkg2RQ?6qw+=nZE<Lxz+1#84 zUp3*@WU8K4*&gKO8uhmAT%r8IElw_ns+vkl0V?xO<XFUSIyH)7VaeD`?&~ErCUYc- zxz>d<(^hV}S<<-qmnA~uO+4v)lmJ|cFjeP&->1er05=bE$dGXjboVgit}Jn-QOe$* zb7x8dZqY!E#qQ`RK(nR7hR8(Ooxezv7LOv=dtC&1q{V=g|72q-Z2%%K6GQGWn|4^U z4w$aoV_7&pmmX#M8QU~FH`kO$?BH=X0A~Sen6EINbh(|AbI^^2CjR_T$rA&}13{e~ z2)~ElFdA0e10=+{NhDk?e$G#QztFzeAuS@1qm=cAjH2!voe(mYOd$rw=X@JwLe;Ws z&gXi+7dB>=j0;7{F&jgkMR#HZt@<DY>_%cqnk(@_>>jhv<ZIqMSolk<di61V(J?jn zIC5L2ZJwGZ6UV%@{$RGY6rHxfdMT#<22U2TSlpkAhTTT6Eom;breBA_8T8Sr&ieBU zsbT4`s?<bk$q>jK@$Q`nV&nCL*P6}4n)ctt7BjfF+d4gdic08q7M7eh%=!HyZR?X8 zmsqDXQ`E=v1q{Cy-n}!knx_Kj<#%ff266<mIrarYEfqgtvfLN^O}ln%zLPT1KlIsH z5k_C)0hM8fnjNiI<in|~t2tND!xf$A(`L%QSu6cNiI8$KhlFXlQvsI2ZUcTzBgg4) z{tbB%;66+=`|DBHt}J`CTCJ^BhZ-_whyi~|BgDx&i9QSi+O>pV-IFhNVp(hNEtWiC z04>D-gflCb2oiAJx?>>U-rBMVFUf<35m>!?<ru+``9#Ku5er?4;i@Ajg?{_~<OW28 zLcw5J7_k(r${LqoPK&(`4N(`Hv*J6)#_$|XEKJ6*CmTJSKR_ve_h-b7bZsy;)T4nX z%PHry2c3korU)SuA&gXIZ2MpDel|vZ4LvF|ZY^UqiKQ8Gv|-FvQ@C`zCN2pGe5@K{ zz&Q5m+@->;@&0fc4+Ll<v)p9ETqQx>!kI}t<~^?XfTM6c_#pv&dWLxo3|^xq`Qaz5 z>LFZI$J^90pq8E=Qvg4s=4DR>PY5$XJWi2DCu&iK*eW!_Y8Cf|w2iSs2ot0#n#;u> zt~bUH)G&bi1opT>x-$YE=F$j#Ae;;7rDNfRi);b-$wp4dLmP*{>|zy>x#BnZUSBb` zgD>LeC4np153R;Ue-&@X%1+RH)jKH5T~!tNPK%1^pJhh@1!iB{EU@JYi9yOpEFo!f ze4EGBCJm*XdDcT3hclBQ(u;Jz&%<v71&|5mR2lt9nAKcmBW2>PBnO^{1y20)iw(a~ z$}KXK$l4rCxJ-JYoR2in0V342qY$3Q2*q_6Ck>YWiJJ8xx#M`p>^qA)ye8L+9&E1N ze<<i~tHcXmriL64pZSlZMBV-j1YNw<^zg*Lxtd+K%iP9uCk#l?;jf38xBQ)$D=&Yg zHbWP*L3KL^L9Az$J3Ta@634@{p0qxvx?%|a*n+}N_2vmG8>V<=>;)e9Ekb||IMfJA zy|`f~!&|d_n_B6i2azlOr@b7T7TL;Cp^aOh_!SOG-<X=BtOUVlGNtEYJ14Lk_%|0t zK^}y(<1*h*19_VfZGwQ*=9TU7<TH!jliA8TZckaV-OuLFefjtsGn12YSb%Ui0q*dI z&d|z7Io(RpGv_3|<y4_2@8#xjLZnN*guk3W@`i(sztmWRXAFS}Lko_jC_JKo7n-NJ zbANZL&8ZUe_QY-6V_K3`pMJlKE{Pg6UWS&`qkVh~o}$1w@k!^aTaiWf+6TGiL=>lC z19CS~Gasf0wkSsR_<>swBuHXT`0Fa>Ev6{BB%q9?8n0k4ZG72y*^oZ!Ba)=<BzENA zBiYm*nam2P4)vkYbPo3Us<Rbj)#g@uIdBg(+bj*(NhJCvLXyJ^q$(vy1NirsIDDOz zAE+>anEAYse6RbEc{Ifo`@2@4hf2tk3pVFKF`Z|RXG;MsB>{YuH{&!gwxo80yNU=k zIR-Vkx6jx2Lhh)Nq5@D*@D0dcmzkAeI8vvPR)8};D}_gH^Pc^Tvf8d&K=|1$?U~al zuGZ!d3O}>z5Q_X<7Oi<)>W4i3?Do%Ah*QmOJXi01%_e`V6iqzfXpR20s$KEtD_2dJ zazMeCsQtTC`13@;^TgsQ{Az>eTgv`+<2PM!ehIxHj>gy03b4f2(*iVFOclt;QEwHP z^y<IxLtPhz0g*YDCVY&6Ug?oLxz!`ppcOGd+r<*sz-R&<or)m8<!p`CYNwaGjD9Y9 ztq2(|MdqDfCRVEzwWo;zF-6D-2{vg#Ek;D73M{SdscG;xzSQB;jJ?5*r>DXP!7Waa z%6w9!8G71B0Nnuji>!O0@+9*%o?zkWFauv9TfCWk>*4;3pz-?`-7;PwQo5!#^cYD$ zq7ksSQ+<I1R;3BA^qWdZO~;nn1{hN5tR233i;VPcg@_30oTK5ETPSTcDqy7svUWk= zUAViH1y3NWK1Gl+Hy#MX1m7o!{lc=x_g+YseX?M80lS?~?$JviHQ{r+U<<*leNIjS zz>;~H!b~u&Q!$eKuAj(i1i7UBbGon0pSa78chQUB29}U6Rv5mIddzn3uTGLhyeS7z zrh$*sOzNk&d*KP(+9`p_WDK!ibQ8vcvQSW@+b3i!{ubKR)quCN7nBc;JeW!QLk^|O z!A~VY#HlXi(vsI3rXN318{NKO_E)A}PrRQcsCAW_m|Ol1-D*mz+*iKL1B(J;XGn%@ zTrg4{;@1NmF19+4na=RDHz2KpLdrAN@KT4)>)`1IqsSQ`{*{`&HUHpn-C@Pj0yMCt zpvZhWs+IKE<3TxwDlm5KYfWf~PpVwX-fNBPxxX%dqJD)uBbiuqE0LF-?5tw`@_R|A z=U5ZOJ65><2?Z8rJ4|eKI7vNnbU)Vaqy~b=c5}7IwM&2Y8aGd^LZA&X1f0^R@YOM% zo{TiNPoAACD?s6AyY05&o4YPI!Mv`tF$d}6m6d%iJBQa9)+jI?DB_f?oOTxhF*7aw z5NY00^%vc8&;Z=jSt4z68nl(jyqNblhd!&_p5^%@o?<2wiTSsbdMo?e^A`D&G)HD! zFp3AnBqK=6{6g52?-NCN#W<8x?foF<eOm;SwsHcTpkn<DeVDKPWIBKoZ{J=ufX=3a zA*5H{=lUQ`XDZEMB=+JNdLvMH5vuKlHg=gw8>JHa+HbcGA>d=bGxnqYiXe4OLfg0& z`Ft=~Qq=5latV|BA^!DuYU%n*`SIEtDbj^#XYSwr;9U$It<!|>3>Qd@fAbXhp7svV zu#VQr;hK5iaw}S$aYx0huAeD{KH}$|qdNo(oB;GMfOaVuaF{%ikPvd=0*1_yiwt|* zG?V)M&+6~7VnGzXU0-4R?nh|{TU_(^tw@8-sY|LjXlT^(igox!t$*8cRts2v2hZj- zeNQ({xJ2A41qi3?t5aG_u>tHIrEFAiMk!(_=#TaReW0x~f3;%PO~sr=LprQu*>`EI zdr0Pa7j{@a0>q3$PR_ILzD&7GXbJeL%9j4e6IuaB``h2XeZEwPRJwQWTVE!kWe0%` zKLNn-^+7Z6;hddZMUhG70^IZXWS~VzcZZSxjh$(SP&B&{2Oj8)WTF9MfNW0#;MPOr zAz0ZweB=@Y2=>(QaE(P7@XuEv0$?W~Oba@`GQvhgK70SW3WP%HW@He+Kl#$Tr>?{c z7GIUSYwT}W<s)i)xWPr>i4svGd-hAbN>siLUMM9__Xw)SNH+a`a&?|9!aCvaWvHmg zGvQ3YnjPC^Qr9_OK91)k&IV+!S`qIF*za4yV9o4T%l$ZD4p~#>4-`pRW;6^8EP<i3 z<b^J|669(cjfam{F!iZe%Hryz?)dnys<yksV_6>mJkwKIfyMK$lbs%@-`5MP456D9 z@hs4J&0a4f#QHkGtKh>NcJ!`Td1-na+N<ZFj;AX2QA4smd$!d{ndIV#WaGPP)gcW- z1D;8o3s-Nf+Wj49H<;VIbt&x2e)Ivw-s-RGH`O`boQ(^8`Y~k6L%^R!?ce=Y88O&4 z$?dTguTFXg3-3_!H<@fPB#X=mlxA`IBI(>rozMmyAldj==eX3hf%BygXIsl&Bqp9) z3fMOcDRfpz6ikEQ@1zM8$~%{`?ja@~r0QdSyf968n5x1znuEW{4ghnzTiSn>i!gPL z6r2*;T8rU<b|asoV7pU5geKfENOVJ;Ke{d|9>vSMZ2#pur<VKBp3Qya)#8LrFaMeR zy9h=UR+MH}HAsHxYfi4?XF(od1+LmHX9Y=6x7#u%MO`dW`R$+vOWIIb+TS%r{A9(* zP-mF_i*BNv6#Nr!dGjSIFUioqPE*?G%7%bE)h$sZ_5mvARlWSPB;Aq>TEK$;q#5>> z`wj@U!Jd!BX3Bs)KoarbWiUmQF(X-uQK5ju!V!y>2CE`r_#mk}@RYe6w?0akn^Z{+ zJQT$|kzkKi2+Igx*I`1C89pzo{#9>aD3|+TPq3*!my1PuUF~b0>vp?{YUrS0p+wyk ze~vB(Ca%!^{I{ZV`qxN1`5F($DY}MMe!rGkZF{6toGGj0)4pr|qSdMh&Irf5nA_nq zD%a^q#-1R|1_&X;Og>84w%+(P`O3s4<+5AL0vj7XO(Sp3lR5=hW4t>^`$=bR12R7m zg};M>`2&C$Jz&{5+oegfB=Fak1rEwK?!Wc^q%eHpgv$4b!um=&uXUL(zA;<h&sOTF zfe0tOD1=v%!_x_dCy7A91b>etL+s<1es{yP1U}pp0!!6pp}%S$sEj^h=%@ubUCdzw zl_6RcW)LoqWg@4EzzWv@Ac%dU-|zbMTC;Lu)K{rUqp*B01L3qS??)_9E<{l4fY2*Z z!kaJtMYY4ufXqgItD+N5Zx2<<*}MF23!)OcrIDoL2@StL2y$Wp#_3@tH!8DIGxr{N zl+L4Cl>>;!U%EW>s}ajUGJf#nEZJ5e1D>vNohd9h@n(H;)n{Z=ftd9O&klLK-tC~M z?#m7iO|^3H^0-LPm>?t?%!Li}6~kb_-gVKEI`*OQ@o1m-7im^NvHwykbBz5{t^B+1 zjzb}WHSV(%72bxH2?J+?p9xs>yAiRlHxINBy)lvddtbLjQRW|5@F|G%XMpKBgsM;7 zZGlMYmk3<AxzJW(93y2_kwNu^0XV>gD}0P8dv0b9QaGGm^a6=m>+`&O(m<Z<yDB+5 zSQC0m1650r(fWDJm%iIi8u%$}hqORjR03d5<ZPB>?NCevcDeWPRCHL@W3spXnGJW3 zybow-rK4KyBZYU=Whv(#qSp@k$^w#8%a%1$f0UlJK&(Vy4?7nMQ_4SHY*LD{Mr@B! zKDKNPCa&@3`y2^BC1^s#GnM)fmrRbP8u-EcUYfZEDX3mped(&wt&u5Th^3i1K8}a~ zM$>8U(MNp0JBF>xMr4J7$Nl?dW8ImBh`t}7u(UFehpN_?q(;rUyQLmgyl|oFh>WSF zoX|oX&!PDs_<BF0HhOwTo3e{OK@IQ-J&rS|zEjKhZRgR+{|@K5qPT~p`QY|=qPvgd zm#<;N?oV%ARg-|`+oOc7q{5HqfER<xAvYX~<4uR#l1?J~fL#u1qZRiw=+yFSMYzga zLG{3CZR8&?;2eZd+E4F(j+_`-;5DX%pxcfUkx)1nIu#MG^$fm91qLozKDYgTT0TVE z;PQKjgc1%qk{M(MItcYS!WGn6p&cPg8C`ts7ZI>*^0?s(o;&I!JL7>c&Y4OAGB>!m zcMk+gJhkM-Yocx6X+Nt@W`$1)UiTTbJhf}HbU63*X%=SaYj$?FYC~iv_Siy>KOJ>n zl6YS|>m)t7NgA$aucjycl|*m+F6SoXr*&{vvIhvpuycY<#|#JTr^yz+>ooc&Crti* zf^9hAjgP}#mxT<BV^CfR=Hj(l!>rdtHv)Skyt5y?@?$^Z4osy_VWKB8PPtk9KE-{F zgIpAPiXKXlv@{00ake40XyBVD4-Y)J!VQ?MXDV5WURz+!2BglMMA5?ZPT1puj~^+{ zM;Xz<I*k8Z>yz0+_=^>ny=EtVY$DmjEveW;4AfCX4qbV<#-Y8?o9Q0ptX4Bw^`pIZ zMw!-^nW;Bc{8A_DdRW)Qsmvcpf-T)erTLD*oof?6uJse?VJY^@M0KIfx4kr%1>V@z zWWK1%L^8u9{m8{>1%0R0{`)g+r+(=DdACsb<@EKoOHn?qXGPckK-ktsbOrABe0u6- z*u8T9>HK_+!uet>yj%W|?WrI4V>?DL5KAac{(IN3RS*{)sAskk78Y`D-+465Z%an~ zz)-AqZu~Q2kHxd<iZ9kKmdm*JfEfw^Zhv0Nu1~LW2zl12;n8@tH-#27T8i1t%8&b8 z^ZHG|BojN=1*SXCo^LVfnbD&T@8mfQb69>1@3{MS%6jCl+)o^ah<1k`fxZu}U-@li z#yhGUc;G+uS^WnVd0`cg_UEY{n?UeI6fx{!*6TeUHvd*GLEd`L4Dp_x#e#dl8WQ1v zXFPvOoQ=%0$%ZPgoi4OIr>#bt4lX^Vhn0<;?ue4ZZF7`%Zm4WzH|_;PqXE7x*J)7x zw3$e}!Vr1`^3RP^OQ1i=M2Z8CSeN|Og=i=5eDrm3wOaXm@6D`{5PS~X2j2qHkSpMR zESJ>5yC6dyM9Y1)j2Zu@<^w+fEL;C!0Sdu5P3g(gvE>ss{v8#A@&oM`(nVne42J&r zX)0wPAp>y!LqaV7%cZ$LkGOKG;%I<X4j71+@fHRws>Kc(j}E?GyR-W)FaYrk&?Ao7 z5GjG+X{_ftNE^PSXdivK>nR&pi3g*x59IG*3ag_<5QdI}vjf_{r_Jc6tZ}ldI5B2w za~Y+bj-jnn@*vqkHTUtL6w>MCJDT7Dys)+YRjSe^_a0KC3FD9U67Ne!p~Ar#xa&v~ zHk49*lOMU!3slWU_B@N^Iyf|=6HjMT$)!M<S_+XD*#TiK@_pOiOeNQ~wwpKJ>m0hP zcn06A<y|-3>@X!8`Z?T+b`-#$idqP_J(-6lW<Hj>4;iiSs!uWUHs54g@q5C&=K7XA z`BB@jE2=?9bh?E1q`yYXT?#rmvi9S{a8C9n+Wga+#U7|v;NI7yAX*RGe?h>g{Xc`a zb#zLEIFZ{4XmS9g>rAR*X8`}sr^n?U?ry!+rsn}p2CG9n9UNnchLa!D1rGCeHke9e zJeD;<VpD~{#)7dTYx;gD3!$@7EC*yj_{^YU{=46`r(bZ`(2aXw*qTqR;>KRs(c3-x zsY%ej9p)oJ{etZ33L4u!Njx)*>(pXL`&^KQw80B1=PZ~rKi`7#;8!%IEW55Q+mOkh zAd0$PtS@o(Z#Zu`z%zdM@mHr~FB^YC^HdSlC9ram64yztb|2}sMh&s2KdeU7`5U8q z$_te$+00z{-d>B!DzJZ#n{83a4yJtSTbBGrY{ezOX`f{x6WeQYJ`g&%Dr0W}RXVHG z@tySa;+Sh7?roGl*+>2<dL)y^4M5X+-#Fb#30Nmzi*4hDlWQ5(18Kpr>DW>x3z{X- zX!;OsGncZZ4?@((KbuuSBMW?HL+L^RI~ejcOr|vX9=YVMlxd|K)V2(l+#$)_CLB%+ z;`W~H&aT8A#QlRzSzqGuz*Fcw@o%xz(dkvhjdPc?LN@r8sImd3mbRJW^~)p`Hbcx% zq5IIlZy6diN*96bIXvDS_@MmSS)3DBc+~kf!Sl6_hL?hZ5Sh=5{iHc#6!vLsSIy@O zr;vM!_T?z}uecSW(+T#jaIjQlF_hz+xuE%~b?ZLv<Kr=(C$p3F5B$=aaTh|Ll;mMA zSQV1Oo1~!{34&z)afla-s@SfV&wbSKVa&pSazpj6v^j%*&PK_4iwT=Y3_lCDbe7@_ z<nnk^>S{X^*~=c#4X34@|A^Vc7UaR+&L^c!d@9%rnX{bEP9@0a-21Fxuf8uTV?WN6 z{808r@&&uE+&Q8?S#{5(=HC?O1`TTMT#&7k*_OZm=<JmpiUwsdX5iJ8PcmExTG+2! zr1scI`=UUJxGXcw@Vu63Al2QwB=QG`!}RYnJN&YLcXfUg9yoIUX8XRm^?K;J5DhL= z2;YxYqv3xM)zn-k^o}{N66M58eT18^riAA$;atzcHn1`?{nEqb#UF3p4Hj!u;ZhF| zsYL`n&ymXxGalWNmLh!auaFvzx($gV*tnrPJRSvTC%wF9T@ZG^lQMmDeUV1nemWk^ zWqRYa0Y)E^o3w2AJ#l<?{HM^i;;-Z{F>&+#W#2T-A=3Mp#XwWkJ@$V#ZUf0FM}@3q ztwh16Zx^!mnSCl@M|sC}r_RU8VwtC31t!Sl(ON|iPjG53-ReCu5V&>9k=6Ryd!(#G zznUWS9C2uRRjB`@vcJmEu!EbhKB#5RfBk9Q+J8+QYJ|>UF(q+anQ;yqD#NEoQzzYz zQjp=v2K7SPx49SYT|TJj`LO-1fKeV~k&`*6X;dM(RkZDdlQ4hS6T9aa#=L*-ys&=T zFuy5|kb^a!rr4RERI>i3H4&o|ej`*#HSG~EHQ`99ZvIBX6Le(cgx#5;;#h%dl}ntY zlsII2@UbD~_tWQxBkM~&`!R#B{ona4R(1@GxxfDB<vhw(NworUG+xD4f2ca&460U; z?^@xu@K<cWrOTjJPr@;~9j7C@VW9?OpO485QT=l2xQZVC5_^0`iv*rurXkv*FGt12 z>ykhByMn@Yw<Zt@-}sL~rrqH}|5_6ADbf5*m<KmXTRJy>r{<e<=4T?(w(u*#^o9;4 zd3yRGEzgk46WJRV0~bDw+)99T$ZrzP#e^QHzV};i^Q|YD*MxSh=Mx^Y&;Qf0i(#*9 z0JL>A`f0Vk@ZF^+FFndceY*;^sOx9DmR(f<UzRuY<5_ED<jF4>)x)$K82)YQ;-n)y z75K6ocJ##hh$EVxruim$>%;tgDtyb8NNqB1nHPF2etOu1BsknaD7?f$+byh5Qq&-S zkE3qo2+7%tVpt3K4bS;}{`lahF))|r7B3oZU=D=^AX9MuE7jGbix>K@pMc<K^w3Dm zW^488>hPN>$rI$`s^f}3B%dTR_oIblPLOworPnK;bNgzjZqk&%>kn+s*h)_}4j{dD zzwuo8@c#DH@3LkbV=Y^A>(7n7hLK-4`C#Y*9r|$pGj=g4qo5Hf$ATV0%=rQbagbqt z^beeQIMAs<dXJnTi*HFcU5Re1b46x;gdxN=*5Js)*Db6>0ZfC&RlKUx!r8&duQtbr zhr=Ba%jU`P%`3OVgdLB`D^nU_-Y8RF?+NI<$9OV)lQkGY+ybWYgxVll3^jnKEIfUE zPi&7Ed}?9aEe4aX!iJk$L;aq-1<wh`rK)o*a`<KoYSk^6OFC0>5g_DLI@%i)9R&d= zV#aTp1+zAyqEPa>Ngj7)d|>dFw=y^ntvbXcF#0b;Mv#pCJ1AyP-`c57TgFMWmQ*s5 zF#bB^U?)u3&@gxL>*|Tjcc+Ngs8v5Ar=7$UtZS|6#+uG3Daq*i-_dodsHk8;9jBr) zI|r7Rr#_~C`c(dE_!%RS31iOSc1EYhnkxGzxXRS9-}Wh7Y~%+$>_)(?+^=1DzW!G+ zo-{Y8Y`FQRZ|2!)=}FzAKjo`7!)A<5z@A4&V0*a=yTd5A4c4g<)8=9$T5F6%YA)US z38r6_GrHswzOn*74Z2;PZUzq^2bNTLoL*~W(cDD#X_Ly4*O`XOFSeZF-cSx3E5IX2 zS{J^fr4!h;t5tSO6{aJ?7nkR1I-<|-%$)wYFN22BOCFpoMuP<*tKd&G>@vi6Jo*KN zaWX&{Z7e)@MlC((nU1;YdK7`&dXMhC#rrp3c&Hkw&%`Zn#0iV_rl}&vE+{@@M}!OJ z_-ffBj;;nC9>hau$y<6K9jvLIvMe#;lXaXSCPkgF0UA=4{u>%6M)D$y!|~k5f(#F; z>z_*Ez|sacI+JCIo^)HM8==bfh##Ck4%tk?!)yAEuOhY=TI&mAvQnby;qXy!SZ@vO z--r*=@4uet{V$d})AltSks5rkT0K~!{b+AS^Elz*`Ln5tSNs4q-EP}Qfi!}%UW}vT zOdt1BN%8SSlb})_C?K2pY3)U7%Wh><lW5MwI@1HD3(#jCQXb6(&W%DCS-uL~YL`0p zzI_{>JRJW0+oQ<q=1rO_N8I}gH=k9%UZTh&@cYh)UX+#+4`~USLg*8pw6(TIK9Zn? z&Km;>Tt~t_MDm!T1s_IUaHX03ZgT4d*qDSZuGEwM!>hU--Czwo<5cb9+z26cwurzS zG+494CO0a$MIDx|HCX<mcq|O8qwDBQU%lx8cPwuJ2yX^WvtS7xAFwc}rSe#rU2QVL zA+4Y1MkDa3Mz>9VeMH)meTBNp>3^|=X9K{CjeG|V%*03tFoVaRA}a;96kt((^W4}b zVIX=dOqFH|l4?LD^1j=2Kgxq^>Et*GuG>|d<^`m=H~icZ*3gF+$E=RrRW2VDfUum@ z$;=AUH6g0GnYBN8yhQbX-g9$hh>e>+7l?_%tM{U9h{Xx(w?ShFs73MqItk|D{GS%J zM0)@&s7em@h3>|UqGIuvFpLHKoi?H8sWZ9I5;W*->CMJ)v^M~9iSD_kUCE6~H|ObL z20$Yb3T1;zPO=!YJlQkl?QAa_m5x)yS#c+PWl*xpU@9Z_=oO^;K3sn(3CQshC6PvS zl?u=b&27A@*m<lpDU~^vm{sZi!{(NQ5(&c?BmL}G63A2_nf1#ert<L_kTCg;GAzxG zdTS|>gJh`Wu^KGE4mpx$*BSSWI#_@z(sBYciox9G7z`V|0yN3|p_jwih1L}O$U1hG zKTL^cgn4;M<0x*VFy;X)+x(^I{Bu`lF+8f5cvs1I*^}+Q{W-DLuTHxRN6fGZuw)?d zBl+XegvTDtG>=ZhG<iB@H)wb8To#o$ZXb(n7jRq|dgMiK&P<C?<ia!W3fGBX!zo>~ z@*d%xjG6P|E-bv!A8__KYVzQX(F~x94mXy@>{3DcL&+JB%-VAJ4j{`lrHF-F?r+7n z56Yuy@hspo(mWq8g#QIGA_z`$+tH0Rb;}1Y*2^O94XzIU5nK>7120uzEert+P{{~m zxOG&yd%^??jpmeM6D{SnbSjvc5~2ck%a7elBJ+W?9-ax2j2%yO&P1V4ChS+qroj=n zDArdk`@T+4dL6b?xt$P0RB~MWUnlT+un+UHkwtl8eTbs2yhh>oomJ*IKi+6-%89r` z$~QCiqn8MCnp&DW7nv)?uqYBXhn+cb_*EQN$vGyP&G&hhHT1adnYzUd?Xip<;tT=y zKq?bbK!gxC*W!JC{$*ZVWq{y1FYoA#xPZtaUzu!@;OgM760M(CXnL`#17evNdUU%{ z<t1IC$6_tRa|d~J37f%R^-Tn{r+HF#Ew^>GnJ59@jw46>#9^NeI&oAi6s#xLn4>7E zBsZEput00}fU#Tmbio=gFSjM*t1m1fGY9PJRlhUHD@|tmGN?y1(IM;yFv}P>NN99& zmsaz5K1xDqmkDXbQs%|3_$wMhxREo(Cp!HSPZV<-*)ZNs3qenG{q|wsmM)o;O^R{c z;zM0$UWy`Nr0MA~un;SPakDe3GThKzj-5t|+V4fB``&zX)Nb9;&T~iBp$YgrDT?$D zdlZZg#n6|^pd{3<ZN9YCujzJ?Xs!MzGAUjBIqT5s9@ARItjbD<`w=Iig$4t;>7*tQ zV5c`E4u+(YcN>+lthDOvhkm=RBCL#tKC(Xdh7-aKqUg5UGi4KFX0{ZdHU@oG4621e z1PSR_c>LZRbV#`~bp6Yn?;+coySnYeM=eJ?&t`lP$>4jYH;G=FnVp_C?S+X<j6#Q< zfK|$sQJ3{|dk5-=reb6XfEqlu7{jkq#p2o7>8+TRa(Z0u-5E~^4{qnaWxboZSG_hP zeuRb;5RHWEFmpT`ifVpnMgGc#dzXJan_@O|VOkE@aGt8^oryUTLnU25N&Gh~s@Sbq zNOwEF$F%!N+LaVND(hBevjM|xxpl%$`5x1W+qbgeSl9=qmtzt^J;rm3VAxW<`od2L z_SD>P-yGf1)naIuq+qu+gv@y`Co!~X1hplRU~XF0oqMt@Ngkid>qET{T*$W!jtKot zSd#Q^%uaB_1eRXUIj?}@C0iKVwef?F#cP6sJ&AHpeW}zP8;ze*&h@$bS7DwL>6fvr zkBs=G*m9zYd_V3zU%hl&b~|+Ma2+RKf-uD+4a|{Pb}CnY>I!1gfIDwAFK6I7DcG|q zysD#C`v<NX$F{2gL(D`X{Th)Knk(k<4%X;97vcG}VDWR=v@B(Bj{zZn8}rnOe!Wch z)`f&vPHnx&!-E&D!@e}Rfs>J*JK>}21v84ZNlutjfDSOnJcJVn&o0<2+*!%-Kb0GN zBRBl@A##}u)lCvWa1?g(r<DeJXUOy{6qNUb+O>UNFLI>uU}m<|;Ti1|iR~_Onecy? z@YBO=)2hQSTCo@N7@$>E4YsU{YVWts=&BbVX&%G-jRZ*)T30_!u}<N_)S{u#k!{Sc zrG4-Jy5TO>?;6W*rdzZNYV8rU!x`SDjmH|i+r8QRhOxKe?_!Fh@CSBb1GJ5)?HAR@ zIL}+ihpQVK^I5GyW*vDQ@1qG@3`rrmt1qYM%qXcpkAD<C-Qnxe<s`_Hzsmi0r_0#D LRR6iIQ|$i$aeW== diff --git "a/s\303\251lection_recherche/main.js" "b/s\303\251lection_recherche/main.js" deleted file mode 100644 index aaa3124..0000000 --- "a/s\303\251lection_recherche/main.js" +++ /dev/null @@ -1,193 +0,0 @@ -// Création de la zone blanche initiale(prototype menu contextuel) -if (!document.getElementById('whiteBox')) { - // Création de la zone blanche - const whiteBox = document.createElement('div'); - whiteBox.id = 'whiteBox'; - - // Ajout de contenu dans la zone - whiteBox.innerHTML = '<p id="selectedWord"> Mot sélectionné </p>'; - - // Ajouter la zone au document - document.body.appendChild(whiteBox); -} - - - -// Variable globale pour stocker le token -let authToken = ''; - -// Fonction pour lire et afficher le contenu du fichier token -function readTokenFile() { - const tokenFilePath = browser.runtime.getURL('token.txt'); - console.log('Chemin du fichier token :', tokenFilePath); - - return fetch(tokenFilePath) - .then((response) => { - if (!response.ok) { - throw new Error(`Erreur lors de la lecture du fichier token : ${response.statusText}`); - } - return response.text(); - }) - .then((token) => { - console.log('Contenu du fichier token :', token); - authToken = token.trim(); // Stocke le token dans une variable globale - }) - .catch((error) => { - console.error('Erreur lors de la lecture du fichier token :', error); - }); -} - -// Appeler la fonction et attendre qu’elle soit terminée -readTokenFile().then(() => { - console.log("Le token est bien enregistré : ", authToken); -}); - - - -// Ecouteur de la sélection de texte -document.addEventListener('contextmenu', (event) => { - const selectedText = window.getSelection().toString().trim(); // Récupérer le texte sélectionné - - // SI on a du texte sélectionné, on modifie le contenu et affiche le bouton de recherche dans le lexique - if (selectedText) { - console.log("Texte sélectionné :", selectedText); - - // Modifier le contenu de la boîte blanche avec le texte sélectionné - const selectedWordElement = document.getElementById('selectedWord'); - if (selectedWordElement) { - selectedWordElement.textContent = selectedText; - } - - - - // Bouton de recherche dans le lexique perso - if (!document.getElementById('searchLexiconButton')) { - // Création du bouton "Rechercher dans le lexique" (lexique perso) - const searchLexiconButton = document.createElement('input'); - searchLexiconButton.id = 'searchLexiconButton'; - searchLexiconButton.type = 'button'; - searchLexiconButton.value = 'Rechercher dans le lexique personnel'; - searchLexiconButton.className = 'searchButton'; - - // Événement sur le bouton de recherche - searchLexiconButton.addEventListener('click', () => { - console.log("Recherche du mot dans le lexique:", selectedText); - searchInLexicon(selectedText); - }); - - // Ajout du bouton sous le texte - const whiteBox = document.getElementById('whiteBox'); - whiteBox.appendChild(searchLexiconButton); - } - - - - // Bouton de recherche requête sur le wiktionnaire - if (!document.getElementById('searchWikiButton')) { - // Création du bouton "Recherche sur le Wiktionnaire" - const searchWikiButton = document.createElement('input'); - searchWikiButton.id = 'searchWikiButton'; - searchWikiButton.type = 'button'; - searchWikiButton.value = 'Rechercher sur le Wiktionnaire'; - searchWikiButton.className = 'searchButton'; - - // // Évènement sur le bouton de recherche - searchWikiButton.addEventListener('click', () => { - console.log("Recherche du mot dans le Wiktionnaire:", selectedText); - searchInWiki(selectedText); - }); - - // Ajout du bouton sous le texte - const whiteBox = document.getElementById('whiteBox'); - whiteBox.appendChild(searchWikiButton); - } - } - - - -// Définition des fonctions APPELS API - -// Fonction pour rechercher dans le lexique personnel (français) -function searchInLexicon(selectedText) { - const lexiconsApiUrl = 'https://babalex.lezinter.net/api/user/lexicons'; - - if (!authToken) { - console.error('Token non disponible.'); - return; - } - - //Récupérer les lexiques de l'utilisateur - fetch(lexiconsApiUrl, { - method: 'GET', - headers: { - 'Authorization': `Bearer ${authToken}`, - 'Content-Type': 'application/json', - }, - }) - .then((response) => { - if (!response.ok) { - throw new Error(`Erreur lors de la récupération des lexiques : ${response.statusText}`); - } - return response.json(); - }) - .then((lexicons) => { - console.log('Lexiques de l’utilisateur :', lexicons); - - //todo : Utiliser la variable "lang" pour chercher le mot dans le bon lexique - - // Rechercher l'ID du lexique français - const frenchLexicon = lexicons.find((lexicon) => lexicon.language === 'fr'); - - if (!frenchLexicon) { - throw new Error('Aucun lexique pour la langue française trouvé.'); - } - - const idLexicon = frenchLexicon.id; - console.log('ID du lexique français :', idLexicon); - - //Récupérer les graphies du lexique français - const entriesApiUrl = `https://babalex.lezinter.net/api/lexicon/entries/${idLexicon}`; - - return fetch(entriesApiUrl, { - method: 'GET', - headers: { - 'Authorization': `Bearer ${authToken}`, - 'Content-Type': 'application/json', - }, - }); - }) - .then((response) => { - if (!response.ok) { - throw new Error(`Erreur lors de la récupération des graphies : ${response.statusText}`); - } - return response.json(); - }) - .then((entries) => { - console.log('Graphies dans le lexique français :', entries); - - //Comparer les graphies avec le mot sélectionné - let isWordPresent = false; - for (const entry of entries) { - console.log("Mots dans le lexique :", entry); - if (entry.graphy === selectedText) { - isWordPresent = true; - break; - } - } - - if (isWordPresent) { - alert(`Mot présent dans le lexique : "${selectedText}"`); - } else { - alert(`Le mot "${selectedText}" n'est pas présent dans le lexique.`); - } - }) - .catch((error) => { - console.error('Erreur lors de la requête API :', error); - }); -} - -//console.log('Token utilisé :', authToken); - - -}); - diff --git "a/s\303\251lection_recherche/manifest.json" "b/s\303\251lection_recherche/manifest.json" deleted file mode 100644 index 1634252..0000000 --- "a/s\303\251lection_recherche/manifest.json" +++ /dev/null @@ -1,29 +0,0 @@ -{ - "manifest_version": 2, - "name": "Rechercher si le mot est dans le lexique", - "version": "1.0", - "description": "Sélectionne un mot et affiche le mot sélectionné dans la zone pour vérifier s'il est dans un lexique", - "icons": { - "48": "icons/loupe-256.png" - }, - "permissions": [ - "https://babalex.lezinter.net/*", - "activeTab"], - "content_scripts": [ - { - "matches": ["<all_urls>"], - "js": ["main.js"], - "css": ["style.css"] - } - ], - "web_accessible_resources": [ - "token", - "token.txt" - ], - - "browser_action": { - "default_icon": "icons/loupe-256.png", - "default_title": "Recherche du mot" - } - } - \ No newline at end of file diff --git "a/s\303\251lection_recherche/style.css" "b/s\303\251lection_recherche/style.css" deleted file mode 100644 index 60e994e..0000000 --- "a/s\303\251lection_recherche/style.css" +++ /dev/null @@ -1,37 +0,0 @@ -#whiteBox { - position: fixed; - top: 10px; - right: 10px; - background-color: rgb(255, 255, 255); - border: 5px solid rgb(0, 0, 0); - padding: 10px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - z-index: 10000; -} - -#selectedWord { - margin: 0; - font-size: 14px; - line-height: 1.5; - color: black; - font-weight: bold; -} - -/* Style des boutons */ -.searchButton { - margin-top: 10px; - padding: 8px 12px; - background-color: #4CAF50; - color: white; - border: none; - cursor: pointer; - font-size: 14px; - border-radius: 5px; - display: block; - width: 100%; -} - -.searchButton:hover { - background-color: #45a049; -} - diff --git "a/s\303\251lection_recherche/token.txt" "b/s\303\251lection_recherche/token.txt" deleted file mode 100644 index d1a0511..0000000 --- "a/s\303\251lection_recherche/token.txt" +++ /dev/null @@ -1 +0,0 @@ -eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJwcmlzbXMiLCJqdGkiOiJkYWU4Mzc5OGJkMTk1Y2M1NzIyMGM5MTZiZDBjYjNjZDkwNjQ0NzYyNjViNWY4YzgwOWYwYTBkNWQyYzFlNjNhNTk1M2ZmZWM2ZmEzNWQ0YyIsImlhdCI6MTczNjk3Mjk4OS4wMjk2MiwibmJmIjoxNzM2OTcyOTg5LjAyOTYzMiwiZXhwIjoxNzM2OTc2NTg5LjAwNDQzMiwic3ViIjoiYXNvdW5hbGF0aCIsInNjb3BlcyI6WyJlbWFpbCIsInBzZXVkbyIsInV1aWQiXSwia2lkIjoiMSIsImN1c3RvbSI6eyJmb28iOiJiYXIifX0.AKd1wP8mCWSkZ9iPhuyDxb5OEeLf6pyu3b4iv4yDOYqzjEXEm3He2umAYHvvTLEt701NW_6_6uzzGKt8tm-sqsGp_sff6LEBZE9j2108nonBtYS6Hi4LtSTPS9Ls9DeKvQ_mRxpT2ENOF7Lnfgy2a7PHIYrxfV3Q4jc_1LE9K4rStJdwX-UjSyzdJzmlpJ651knsg32yLDAUWzgcfyf4Vn41vqMnwn3gXi3Yez4biVM1cxOX9iwL8QdIDiPlcF83KOULrtvErLSlWzKgmmwrT8b1o2PqxEdhbehSgkpiyAU9ewmwVoZSXqql4ITg9tzOvUcLR4qyJGceAnLrNJdRnw \ No newline at end of file -- GitLab