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

Liens fonctions ajout mot menu contextuel/barre latérale

parent 4074ed53
No related branches found
No related tags found
2 merge requests!8Test final,!5Ajout manuel d'un mot dans un ou plusieurs lexique(s)
......@@ -262,12 +262,14 @@ function createPicker() {
*/
async function showPicker(event, selectedText) {
console.log("showPicker appelé avec", event, selectedText);
const picker = createPicker(); // supposez que createPicker est défini ailleurs dans ce fichier
const picker = createPicker();
picker.innerHTML = ""; // Vider le picker
const selectedLexicons = new Set(); // Stocke les lexiques sélectionnés
try {
const lexicons = await getLexicons(authToken, "fr");
console.log("Lexicons récupérés :", lexicons);
if (!Array.isArray(lexicons) || lexicons.length === 0) {
picker.innerHTML = "<p>Aucun lexique trouvé.</p>";
} else {
......@@ -276,52 +278,121 @@ async function showPicker(event, selectedText) {
const name = lex.category === "User"
? `Lexique personnel : ${lex.user?.pseudo || "Inconnu"} (${lex.id})`
: `Lexique de groupe : ${lex.group?.name || "Inconnu"} (${lex.id})`;
// Obtenir la couleur et créer le cercle
const color = await getOrCreateLexiconColor(id);
const circleIcon = createColorCircle(color, 32);
// Crée un conteneur pour l'icône
// Créer un conteneur pour l'icône
const iconContainer = document.createElement("div");
iconContainer.className = "lexicon-option";
iconContainer.dataset.lexiconId = id;
iconContainer.style.margin = "2px";
iconContainer.style.margin = "5px";
iconContainer.style.cursor = "pointer";
iconContainer.title = name;
iconContainer.style.display = "inline-flex";
iconContainer.style.flexDirection = "row"; // Assurez-vous que c'est horizontal
iconContainer.style.alignItems = "center"; // Alignement centré
iconContainer.style.flexDirection = "row";
iconContainer.style.alignItems = "center";
iconContainer.style.justifyContent = "center";
iconContainer.style.border = "2px solid transparent";
// Ajoute le cercle coloré au conteneur
iconContainer.appendChild(circleIcon);
picker.appendChild(iconContainer);
// Écouteur de clic pour ajouter le mot au lexique sélectionné
iconContainer.addEventListener("click", async () => {
console.log(`Tentative d'ajout du mot "${selectedText}" au lexique ${id} (${name})`);
try {
let definitions = [];
try {
definitions = await fetchLexiconDefinitions(selectedText);
} catch (err) {
console.error("Erreur lors de la récupération des définitions :", err);
}
const exists = Array.isArray(definitions) && definitions.some(def => def.lexiconId === id);
if (exists) {
alert(`Le mot "${selectedText}" existe déjà dans le lexique ${name}.`);
} else {
await window.AddWord(authToken, selectedText, [id], false);
alert(`Le mot "${selectedText}" a été ajouté dans le lexique ${name}.`);
}
picker.style.display = "none";
} catch (error) {
console.error("Erreur lors de l'ajout du mot :", error);
alert(`Erreur : ${error.message}`);
// Écouteur de clic pour sélectionner/désélectionner le lexique
iconContainer.addEventListener("click", () => {
if (selectedLexicons.has(id)) {
selectedLexicons.delete(id);
iconContainer.style.border = "2px solid transparent";
} else {
selectedLexicons.add(id);
iconContainer.style.border = "2px solid black";
}
});
}
// Ajouter un bouton de validation
const confirmButton = document.createElement("button");
confirmButton.textContent = "Ajouter aux lexiques sélectionnés";
confirmButton.style.fontStyle = "italic";
confirmButton.style.fontSize = "8px";
confirmButton.style.marginTop = "10px";
confirmButton.style.padding = "5px 10px";
confirmButton.style.cursor = "pointer";
confirmButton.style.border = "none";
confirmButton.style.borderRadius = "4px";
confirmButton.style.backgroundColor = "#6e76c7";
confirmButton.style.color = "white";
confirmButton.addEventListener("click", async () => {
if (selectedLexicons.size === 0) {
alert("Veuillez sélectionner au moins un lexique.");
return;
}
console.log(`🔍 Vérification si le mot "${selectedText}" existe déjà dans les lexiques sélectionnés...`);
let definitions = [];
try {
definitions = await fetchLexiconDefinitions(selectedText);
} catch (error) {
console.error("❌ Erreur lors de la récupération des définitions :", error);
}
const existingLexiconIds = new Set();
if (Array.isArray(definitions)) {
for (const def of definitions) {
if (selectedLexicons.has(def.lexiconId)) {
existingLexiconIds.add(def.lexiconId);
}
}
}
// Affichage des lexiques où le mot existe déjà
if (existingLexiconIds.size > 0) {
alert(`⚠️ Le mot "${selectedText}" existe déjà dans les lexiques suivants : ${Array.from(existingLexiconIds).join(", ")}`);
}
// Filtrer les lexiques où le mot n'existe pas encore
const lexiconsToAdd = [...selectedLexicons].filter(id => !existingLexiconIds.has(id));
if (lexiconsToAdd.length === 0) {
alert(`✅ Le mot "${selectedText}" est déjà présent dans tous les lexiques sélectionnés.`);
return;
}
// Envoi de la requête d'ajout
try {
console.log(`📡 Ajout du mot "${selectedText}" dans les lexiques :`, lexiconsToAdd);
const result = await AddWord(authToken, selectedText, lexiconsToAdd, false);
console.log("✅ Réponse API :", result);
// Rafraîchir l'UI après l'ajout
await new Promise(resolve => setTimeout(resolve, 300));
browser.runtime.sendMessage({ action: "refreshUI" });
// Affichage du message de confirmation dans le picker
picker.innerHTML = `<p style="color: green;">✅ Mot ajouté avec succès dans : ${lexiconsToAdd.join(", ")}.</p>`;
setTimeout(() => picker.style.display = "none", 2000);
browser.runtime.sendMessage({
action: "addWordResult",
lexicons:`✅ Mot ajouté avec succès dans : ${lexiconsToAdd.join(", ")}.`
});
} catch (error) {
console.error("❌ Erreur lors de l'ajout du mot :", error);
// Affichage du message d'erreur dans le picker
picker.innerHTML = `<p style="color: red;">❌ Erreur : ${error.message}</p>`;
setTimeout(() => picker.style.display = "none", 3000);
browser.runtime.sendMessage({
action: "addWordResult",
lexicons: `❌ Erreur lors de l'ajout du mot : ${error.message}`
});
}
});
picker.appendChild(confirmButton);
}
// Positionner et afficher le picker
......@@ -329,12 +400,16 @@ async function showPicker(event, selectedText) {
picker.style.top = event.pageY + "px";
picker.style.display = "block";
} catch (error) {
console.error("Erreur lors de la récupération des lexiques :", error);
console.error("Erreur lors de la récupération des lexiques :", error);
picker.innerHTML = "<p>Erreur lors du chargement des lexiques.</p>";
picker.style.display = "block";
}
}
function hideLexiconPicker() {
const picker = document.getElementById("lexiconPicker");
if (picker) {
......
......@@ -506,6 +506,13 @@ browser.runtime.onMessage.addListener(async (message) => {
window.displayLexiconResults(message.lexicons);
break;
case "addWordResult":
const lexiconResultElement = document.getElementById("lexiconResult");
if (lexiconResultElement) {
lexiconResultElement.innerHTML = message.lexicons;
}
break;
case "addToLexicon":
handleAddWordClick();
break;
......
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