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

Bouton définition Wiktionnaire menu perso

parent 684c1397
No related branches found
No related tags found
1 merge request!4Définitions (lexiques de l'utilisateur + Wiktionnaire)
......@@ -206,47 +206,45 @@ async function getDefinition(authToken, entryId) {
async function getWiktionaryDefinition(word) {
try {
console.log(`🔍 Envoi de la requête au Wiktionnaire pour '${word}'...`);
if (!word || word.trim() === "") {
throw new Error("Mot vide, impossible d'envoyer la requête.");
throw new Error("⚠️ Mot vide, requête impossible.");
}
// Le paramètre "origin=*" est requis pour les appels cross-domain
// "prop=extracts & exintro=true" renvoie seulement le début de l’article
const wiktionaryURL = `https://fr.wiktionary.org/w/api.php?action=query&format=json&origin=*&prop=extracts&exintro=true&titles=${encodeURIComponent(word)}`;
const response = await fetch(wiktionaryURL);
if (!response.ok) {
throw new Error(`Erreur API Wiktionnaire: ${response.statusText}`);
throw new Error(`Erreur API Wiktionnaire: ${response.statusText}`);
}
const data = await response.json();
console.log("📖 Réponse API (Wiktionnaire) :", data);
console.log("📖 Réponse API Wiktionnaire :", data);
const pages = data.query.pages;
// pages est un objet dont la clé est l'ID de la page => on récupère la première
const page = Object.values(pages)[0];
if (!data.query || !data.query.pages) {
return ["⚠️ Réponse inattendue du Wiktionnaire."];
}
if (!page || !page.extract) {
console.warn("⚠️ Aucune définition trouvée sur le Wiktionnaire.");
// Récupérer la première page (clé dynamique)
const pages = Object.values(data.query.pages);
if (pages.length === 0 || !pages[0].extract) {
return ["⚠️ Aucune définition trouvée sur le Wiktionnaire."];
}
// page.extract contient du HTML : on le parse pour en extraire du texte brut
// Convertir l'HTML en texte brut propre
const parser = new DOMParser();
const doc = parser.parseFromString(page.extract, "text/html");
const doc = parser.parseFromString(pages[0].extract, "text/html");
const cleanText = doc.body.textContent.trim();
console.log("✅ Définition extraite :", cleanText);
// Tu peux renvoyer un tableau avec 1 seule définition
return [cleanText];
return [cleanText]; // Toujours un tableau
} catch (error) {
console.error("❌ Erreur lors de la récupération de la définition du Wiktionnaire :", error);
// On renvoie un tableau contenant un message d'erreur
return [`⚠️ Erreur : ${error.message}`];
return ["⚠️ Erreur : " + error.message];
}
}
// ─────────────────────────────────────────────────────────────────────────────
// ▌ Mise à disposition globale de nos fonctions
// ─────────────────────────────────────────────────────────────────────────────
......
......@@ -10,6 +10,20 @@ window.addEventListener('error', (e) => {
console.error("❗️ Erreur globale détectée :", e.message, "dans", e.filename, ":", e.lineno);
});
document.addEventListener("DOMContentLoaded", () => {
console.log("📦 DOM entièrement chargé, vérification des éléments...");
// Vérifier si #definitionsList est maintenant disponible
const definitionsList = document.getElementById("definitionsList");
if (!definitionsList) {
console.error("❌ Échec : #definitionsList est toujours introuvable.");
} else {
console.log("✅ Succès : #definitionsList est bien détecté.");
}
});
// ─────────────────────────────────────────────────────────────────────────────
// ▌ Fonctions utilitaires liées au token
// ─────────────────────────────────────────────────────────────────────────────
......@@ -269,7 +283,7 @@ async function fetchWiktionaryDefinition(word) {
throw new Error("⚠️ Mot vide, impossible d'envoyer la requête.");
}
const wiktionaryURL = `https://fr.wiktionary.org/w/api.php?action=query&format=json&origin=*&prop=extracts&exintro=true&titles=${encodeURIComponent(word)}`;
const wiktionaryURL = `https://fr.wiktionary.org/w/api.php?action=query&format=json&origin=*&prop=extracts&explaintext=true&redirects=1&titles=${encodeURIComponent(word)}`;
const response = await fetch(wiktionaryURL);
if (!response.ok) {
......@@ -279,20 +293,26 @@ async function fetchWiktionaryDefinition(word) {
const data = await response.json();
console.log("📖 Réponse API (Wiktionnaire) :", data);
const pages = data.query.pages;
const page = Object.values(pages)[0];
// Vérifier si des redirections ont été suivies
if (data.query && data.query.redirects) {
console.log("🔄 Redirection détectée :", data.query.redirects);
}
if (!page || !page.extract) {
throw new Error("⚠️ Aucune définition trouvée sur le Wiktionnaire.");
if (!data.query || !data.query.pages) {
return ["⚠️ Réponse inattendue du Wiktionnaire."];
}
// Extraction et nettoyage de la définition
const parser = new DOMParser();
const doc = parser.parseFromString(page.extract, "text/html");
const cleanText = doc.body.textContent.trim();
// Récupérer la première page (clé dynamique)
const pages = Object.values(data.query.pages);
if (pages.length === 0 || !pages[0].extract) {
return ["⚠️ Aucune définition trouvée sur le Wiktionnaire."];
}
// Extraire la définition sous forme de texte brut
const cleanText = pages[0].extract.trim();
console.log("✅ Définition extraite :", cleanText);
return [cleanText];
return [cleanText]; // Toujours un tableau pour `displayDefinitions()`
} catch (error) {
console.error("❌ Erreur lors de la récupération de la définition du Wiktionnaire :", error);
return ["⚠️ Aucune définition disponible."];
......@@ -318,18 +338,27 @@ async function showDefinitions(word) {
* Affiche la liste des définitions dans la barre latérale.
*/
function displayDefinitions(definitions) {
const definitionsList = document.getElementById("definitionsList");
if (!definitionsList) {
console.warn("⚠️ Élément #definitionsList introuvable.");
// Vérifier si le DOM est prêt
if (document.readyState === "loading") {
console.log("⏳ DOM pas encore prêt, attente...");
document.addEventListener("DOMContentLoaded", () => displayDefinitions(definitions));
return;
}
console.log("📖 Affichage des définitions dans la barre latérale :", definitions);
let definitionsList = document.getElementById("definitionsList");
if (!definitionsList) {
console.warn("⚠️ Élément #definitionsList introuvable. Attente du chargement...");
setTimeout(() => displayDefinitions(definitions), 500);
return;
}
console.log("📖 Affichage des définitions :", definitions);
definitionsList.innerHTML = "";
if (!definitions || definitions.length === 0) {
definitionsList.innerHTML = "<li>Aucune définition trouvée.</li>";
definitionsList.innerHTML = "<li>⚠️ Aucune définition trouvée.</li>";
return;
}
......@@ -339,7 +368,7 @@ function displayDefinitions(definitions) {
definitionsList.appendChild(listItem);
});
console.log("✅ Définitions affichées avec succès !");
console.log("✅ Définitions affichées !");
}
// ─────────────────────────────────────────────────────────────────────────────
......@@ -376,6 +405,11 @@ browser.runtime.onMessage.addListener((message) => {
fetchWiktionaryDefinition(message.selectedText).then((definitions) => {
console.log("📖 Définitions récupérées :", definitions);
if (definitions.length === 0) {
console.warn("⚠️ Aucune définition reçue.");
}
displayDefinitions(definitions);
});
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment