/** * 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'); const monsterSort = document.getElementById('monsterSort'); // 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 l'écouteur pour le tri des monstres if (monsterSort) { monsterSort.addEventListener('change', function() { // Rediriger vers la même page avec le paramètre de tri const sortValue = this.value; console.log("Changement de tri: " + sortValue); // Pour le débogage window.location.href = `index.php?sort=${sortValue}`; }); } // 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})