document.addEventListener('DOMContentLoaded', () => { let selectedCards = []; function toggleSelection(card) { const id = card.dataset.id; if (card.classList.contains('selected')) { card.classList.remove('selected'); selectedCards = selectedCards.filter(c => c.dataset.id !== id); } else { if (selectedCards.length < 2) { card.classList.add('selected'); selectedCards.push(card); } else { alert("Tu ne peux sélectionner que 2 créatures à la fois."); } } updateSelectionDisplay(); } function updateSelectionDisplay() { const status = document.getElementById("selection-status"); const visual = document.getElementById("selection-visual"); if (selectedCards.length === 0) { status.textContent = "Sélectionnez 2 créatures..."; visual.innerHTML = ""; } else if (selectedCards.length === 1) { status.textContent = `1ère sélection : ${selectedCards[0].dataset.name}`; visual.innerHTML = ""; } else { status.textContent = "2 créatures sélectionnées !"; visual.innerHTML = `
${selectedCards[0].dataset.name}
et
${selectedCards[1].dataset.name}
`; } } async function handleAction(type) { if (selectedCards.length !== 2) { alert("Tu dois sélectionner 2 créatures."); return; } const id1 = selectedCards[0].dataset.id; const id2 = selectedCards[1].dataset.id; const idUser = document.getElementById('user-data').dataset.userId; if (type === 'reproduction') { // try { // const response = await fetch(`/emojis/fusion/${encodeURIComponent(idUser)}/${encodeURIComponent(id1)}/${encodeURIComponent(id2)}`, { // method: 'GET', // headers: { // 'Accept': 'application/json' // } // }); // if (!response.ok) { // throw new Error("Erreur serveur : " + response.status); // } // const data = await response.json(); // //alert(`Succès : ${data.message} (ID : ${data.childId})`); // // Rajout de la nouvelle carte dans la collection // // const container = document.getElementById('collection-container'); // ou l’id réel // // const color = getRarityColor(data.rarity); // fonction ci-dessous // // const newCard = document.createElement('div'); // // newCard.className = `emoji-card ${color}`; // // newCard.setAttribute('data-id', data.childId); // // newCard.innerHTML = ` // //
Level ${data.fightsWon}
// //
${data.code}
// //
${data.name}
// //
ℹ️
// //
👨‍👩‍👧‍👦
// // // // // // `; // // container.appendChild(newCard); // // Réinitialisation de la séléction // selectedCards.forEach(card => card.classList.remove('selected')); // selectedCards = []; // updateSelectionDisplay(); window.location.href = `https://localhost:8000/reproduction/${encodeURIComponent(idUser)}/${encodeURIComponent(id1)}/${encodeURIComponent(id2)}`; // } catch (error) { // console.error("Erreur lors de la reproduction :", error); // alert("Une erreur est survenue lors de la reproduction."); // } return; // on quitte ici } if (type === 'combat') { fetch(`/emojis/fight/${id1}/${id2}`, { method: 'GET', headers: { 'Accept': 'application/json' }}).then(response => { if (!response.ok) { throw new Error(`Erreur HTTP ${response.status}`); } return response.json(); }) .then(data => { console.log('Données reçues :', data); }) .catch(error => { console.error('Erreur lors de la requête :', error); }); } // Réinitialiser si pas redirection selectedCards.forEach(card => card.classList.remove('selected')); selectedCards = []; updateSelectionDisplay(); } // Ouvre / Ferme la popup d'information function togglePopup(id) { const popup = document.getElementById('popup-' + id); if (popup) { popup.style.display = (popup.style.display === 'block') ? 'none' : 'block'; } } // Ouvre / Ferme la popup de hierachie de famille async function toggleHierachiPopup(id) { try { const response = await fetch(`/emojis/${id}/getParents/`, { method: 'GET', headers: { 'Accept': 'application/json' } }); if (!response.ok) throw new Error("Erreur serveur : " + response.status); const data = await response.json(); // Injection dynamique dans la popup const parent1El = document.getElementById(`parent1-${id}`); if (data.codeParent1 && data.codeParent1.includes('vercel')) { parent1El.innerHTML = `Parent 1`; } else { parent1El.innerText = data.codeParent1 || '❓'; } const parent2El = document.getElementById(`parent2-${id}`); if (data.codeParent2 && data.codeParent2.includes('vercel')) { parent2El.innerHTML = `Parent 2`; } else { parent2El.innerText = data.codeParent2 || '❓'; } const childEl = document.getElementById(`child-${id}`); if (data.codeEnfant && data.codeEnfant.includes('vercel')) { childEl.innerHTML = `Emoji fusionné`; } else { childEl.innerText = data.codeEnfant || '❓'; } document.getElementById(`name-parent1-${id}`).innerText = data.nameParent1 || 'inconnu'; document.getElementById(`name-parent2-${id}`).innerText = data.nameParent2 || 'inconnu'; document.getElementById(`name-child-${id}`).innerText = data.nameEnfant || 'inconnu'; console.log("Parents récupérés :", data); // Affichage plein écran const popup = document.getElementById(`popup-hiera-${id}`); if (popup) popup.style.display = 'block'; } catch (error) { console.error("Erreur lors de la récupération des parents :", error); alert("Une erreur est survenue lors de l'affichage de la hiérarchie."); } } function closeHierarchyPopup(id) { const popup = document.getElementById(`popup-hiera-${id}`); if (popup) popup.style.display = 'none'; } // Fermer les autres popups en cliquant ailleurs document.addEventListener('click', function(e) { document.querySelectorAll('.popup').forEach(p => { if (!p.contains(e.target) && !p.previousElementSibling.contains(e.target)) { p.style.display = 'none'; } }); // Partie pour fermer la popup de hiérarchie document.querySelectorAll('.close-btn').forEach(btn => { btn.addEventListener('click', (e) => { const id = btn.dataset.id; // On récupère l'id depuis l'attribut data-id const popup = document.getElementById(`popup-hiera-${id}`); if (popup) popup.style.display = 'none'; e.stopPropagation(); // Empêche la propagation du clic }); }); }); // Fonction pour appliquer la recherche, les filtres et le tri function applyFilters() { const selectedColor = document.getElementById('rarete-filter').value; const sortBy = document.getElementById('sort-select').value; const searchTerm = document.getElementById('search-input').value.toLowerCase(); const cards = Array.from(document.querySelectorAll('#collection-container .emoji-card')); cards.forEach(card => { const color = card.dataset.color; const name = card.querySelector('.emoji-name')?.textContent.toLowerCase() ?? ""; const matchColor = !selectedColor || color === selectedColor; const matchName = !searchTerm || name.includes(searchTerm); if (matchColor && matchName) { card.style.display = 'block'; } else { card.style.display = 'none'; } }); if (sortBy !== 'none') { const container = document.getElementById('collection-container'); const visibleCards = cards.filter(c => c.style.display !== 'none'); visibleCards.sort((a, b) => { const aVal = parseFloat(a.dataset[sortBy]); const bVal = parseFloat(b.dataset[sortBy]); return bVal - aVal; }); visibleCards.forEach(card => container.appendChild(card)); paginateCards(); } } // Appel Fonctionnalité de popup d'information document.querySelectorAll('.detail-icon').forEach(icon => { icon.addEventListener('click', (e) => { const card = icon.closest('.emoji-card'); const id = card?.dataset.id; if (id) { togglePopup(id); } e.stopPropagation(); // évite que ça sélectionne la carte }); }); // Appel Fonctionnalité de popup de hierachie de famille document.querySelectorAll('.detail-icon-hierarchy').forEach(icon => { icon.addEventListener('click', (e) => { const card = icon.closest('.emoji-card'); const id = card?.dataset.id; if (id) { toggleHierachiPopup(id); } e.stopPropagation(); // évite que ça sélectionne la carte }); }); // Appliquer l'écouteur à toutes les cartes (base + collection) document.querySelectorAll('.emoji-container').forEach(container => { container.addEventListener('click', (e) => { const card = e.target.closest('.emoji-card'); if (!card || e.target.closest('.detail-icon')) return; // Ignore si clic sur icône ℹ️ toggleSelection(card); }); }); // Appel Fonctionnalité de combat et reproduction document.querySelectorAll('.btn').forEach(button => { button.addEventListener('click', () => { const type = button.textContent.includes('Combattre') ? 'combat' : 'reproduction'; handleAction(type); }); }); // Appel Fonctionnalité de recherche et filtres document.getElementById('search-input').addEventListener('input', applyFilters); document.getElementById('rarete-filter').addEventListener('change', applyFilters); document.getElementById('sort-select').addEventListener('change', applyFilters); /***** Partie Pagination ******/ const ITEMS_PER_PAGE = 10; let currentPage = 1; function paginateCards() { const allCards = Array.from(document.querySelectorAll('#collection-container .emoji-card')); const container = document.getElementById('collection-container'); const totalPages = Math.ceil(allCards.length / ITEMS_PER_PAGE); // Masquer toutes les cartes allCards.forEach(card => card.style.display = 'none'); // Afficher uniquement les cartes de la page courante const start = (currentPage - 1) * ITEMS_PER_PAGE; const end = start + ITEMS_PER_PAGE; allCards.slice(start, end).forEach(card => card.style.display = 'block'); renderPagination(totalPages); } function renderPagination(totalPages) { const pagination = document.getElementById('pagination'); pagination.innerHTML = ''; const addBtn = (text, page = null, isActive = false, disabled = false) => { const btn = document.createElement('button'); btn.textContent = text; if (isActive) btn.classList.add('active'); if (disabled) btn.disabled = true; if (page !== null) { btn.addEventListener('click', () => { currentPage = page; paginateCards(); }); } pagination.appendChild(btn); }; addBtn('Précédent', currentPage - 1, false, currentPage === 1); for (let i = 1; i <= totalPages; i++) { if ( i === 1 || i === totalPages || (i >= currentPage - 1 && i <= currentPage + 1) ) { addBtn(i, i, i === currentPage); } else if ( i === 2 && currentPage > 3 || i === totalPages - 1 && currentPage < totalPages - 2 ) { addBtn('...'); } } addBtn('Suivant', currentPage + 1, false, currentPage === totalPages); } paginateCards(); });