diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..9f2edbc --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,364 @@ +/** + * Script principal pour MH Wilds - Partage de Quêtes à Couronnes + * Fichier à placer dans assets/js/main.js + */ + +document.addEventListener('DOMContentLoaded', function() { + // Éléments DOM + const monsterList = document.getElementById('monsterList'); + const monsterSearch = document.getElementById('monsterSearch'); + const clearSearchBtn = document.getElementById('clearSearchBtn'); + const addQuestBtn = document.getElementById('addQuestBtn'); + const monsterSearchSelect = document.getElementById('monsterSearchSelect'); + const monsterSearchResults = document.getElementById('monsterSearchResults'); + const selectedMonsterId = document.getElementById('selectedMonsterId'); + + // Variables globales + let monsters = []; + let currentMonsterId = null; + + // ========== INITIALISATION ========== + + // Récupérer la liste des monstres + fetchMonsters(); + + // Ajouter les écouteurs d'événements + if (clearSearchBtn) { + clearSearchBtn.addEventListener('click', clearSearch); + } + + if (monsterSearch) { + monsterSearch.addEventListener('input', filterMonsters); + } + + if (addQuestBtn) { + addQuestBtn.addEventListener('click', function() { + new bootstrap.Modal(document.getElementById('addQuestModal')).show(); + }); + } + + // Ajouter les écouteurs pour les cartes de monstres + if (monsterList) { + monsterList.addEventListener('click', function(e) { + const card = e.target.closest('.monster-card'); + if (card) { + const monsterId = parseInt(card.dataset.monsterId); + if (!isNaN(monsterId)) { + currentMonsterId = monsterId; + showQuestListModal(monsterId); + } + } + + // Si le clic est sur un bouton dans la carte + if (e.target.tagName === 'BUTTON') { + e.preventDefault(); + // Trouver la carte parent + const card = e.target.closest('.monster-card'); + if (card) { + const monsterId = parseInt(card.dataset.monsterId); + if (!isNaN(monsterId)) { + currentMonsterId = monsterId; + showQuestListModal(monsterId); + } + } + } + }); + } + + // Initialiser la recherche de monstre dans le formulaire d'ajout + if (monsterSearchSelect) { + monsterSearchSelect.addEventListener('focus', function() { + showMonsterSearchResults(); + }); + + monsterSearchSelect.addEventListener('input', function() { + showMonsterSearchResults(this.value); + }); + + // Clic en dehors des résultats pour les masquer + document.addEventListener('click', function(e) { + if (!monsterSearchSelect.contains(e.target) && !monsterSearchResults.contains(e.target)) { + monsterSearchResults.classList.add('d-none'); + } + }); + } + + // Écouteurs pour les filtres de couronnes dans la modale de quêtes + document.querySelectorAll('input[name="crownFilter"]').forEach(radio => { + radio.addEventListener('change', function() { + if (currentMonsterId) { + fetchQuests(currentMonsterId, this.value); + } + }); + }); + + // Initialiser les formulaires + initForms(); + + // ========== FONCTIONS ========== + + /** + * Récupérer tous les monstres via l'API + */ + function fetchMonsters() { + fetch('api.php?action=getMonsters') + .then(response => response.json()) + .then(data => { + if (data.success) { + monsters = data.monsters; + } + }) + .catch(error => { + console.error('Erreur lors de la récupération des monstres:', error); + }); + } + + /** + * Afficher la modale avec la liste des quêtes pour un monstre + * + * @param {number} monsterId ID du monstre + */ + function showQuestListModal(monsterId) { + // Réinitialiser le filtre à "Toutes" + document.getElementById('filterAll').checked = true; + + // Récupérer et afficher les quêtes + fetchQuests(monsterId, 'all'); + + // Afficher la modale + new bootstrap.Modal(document.getElementById('questListModal')).show(); + } + + /** + * Récupérer les quêtes pour un monstre + * + * @param {number} monsterId ID du monstre + * @param {string} crownType Type de couronne (all, small, large) + */ + function fetchQuests(monsterId, crownType) { + const questList = document.getElementById('questList'); + questList.innerHTML = '
Joueur: ${quest.player_name} (ID: ${quest.player_id})
+