From 833afb3cfdccc694864b70b3edc8856bcd4afba1 Mon Sep 17 00:00:00 2001 From: morgane Date: Fri, 19 Jun 2026 16:32:41 +0000 Subject: [PATCH] Actualiser assets/js/app.js --- assets/js/app.js | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 65e56bd..f140cdc 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1426,9 +1426,10 @@ function renderRecipeTagsConfigList(tags) { return; } container.innerHTML = tags.map(tag => ` -
+
- + +
@@ -1438,8 +1439,10 @@ function renderRecipeTagsConfigList(tags) { async function addRecipeTagConfig() { const iconInput = document.getElementById('new-recipe-tag-icon'); const labelInput = document.getElementById('new-recipe-tag-label'); + const keywordsInput = document.getElementById('new-recipe-tag-keywords'); const icon = iconInput.value.trim() || '🏷️'; const label = labelInput.value.trim(); + const keywords = keywordsInput ? keywordsInput.value.trim() : ''; if (!label) { showToast('Indique un nom pour le nouveau tag', 'warning'); @@ -1448,12 +1451,13 @@ async function addRecipeTagConfig() { showLoading(true); try { - const result = await api('recipe_tags_add', {}, 'POST', { label, icon }); + const result = await api('recipe_tags_add', {}, 'POST', { label, icon, keywords }); showLoading(false); if (result.success) { showToast(`Tag "${label}" ajouté`, 'success'); iconInput.value = ''; labelInput.value = ''; + if (keywordsInput) keywordsInput.value = ''; _loadRecipeTagsConfigSection(); } else { showToast(result.error || 'Erreur lors de l\'ajout', 'error'); @@ -1467,6 +1471,8 @@ async function addRecipeTagConfig() { async function updateRecipeTagConfig(key) { const icon = document.getElementById(`rtag-icon-${key}`).value.trim() || '🏷️'; const label = document.getElementById(`rtag-label-${key}`).value.trim(); + const keywordsEl = document.getElementById(`rtag-keywords-${key}`); + const keywords = keywordsEl ? keywordsEl.value.trim() : ''; if (!label) { showToast('Le nom ne peut pas être vide', 'warning'); @@ -1475,7 +1481,7 @@ async function updateRecipeTagConfig(key) { showLoading(true); try { - const result = await api('recipe_tags_update', {}, 'POST', { key, label, icon }); + const result = await api('recipe_tags_update', {}, 'POST', { key, label, icon, keywords }); showLoading(false); if (result.success) { showToast('Tag mis à jour', 'success'); @@ -15428,10 +15434,28 @@ Ingrédients : document.getElementById('modal-overlay').style.display = 'flex'; } +function _normalizeForMatch(s) { + return (s || '').toString().toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); +} + +function matchRecipeTagsFromIngredients(ingredients) { + const norm = _normalizeForMatch(ingredients.map(i => i.name).join(' ')); + const matched = []; + (RECIPE_TAGS || []).forEach(tag => { + const raw = (tag.keywords && tag.keywords.trim()) ? tag.keywords : tag.key; + const kws = raw.split(',').map(k => _normalizeForMatch(k.trim())).filter(Boolean); + if (kws.some(kw => kw.length > 1 && norm.includes(kw))) { + matched.push(tag.key); + } + }); + return matched; +} + function analyzeRawRecipeText() { const raw = document.getElementById('rl-import-raw').value; if (!raw.trim()) { showToast('Colle un texte de recette', 'warning'); return; } const parsed = parseRawRecipeText(raw); + parsed.tags = matchRecipeTagsFromIngredients(parsed.ingredients); openRecipeLibraryForm(null, parsed); }