/** * confirmDelete.js * * Modal de confirmation générique pour les actions de suppression. * * Usage: * 1. Ajouter data-bs-toggle="modal" et data-bs-target="#confirmDeleteModal" au lien de suppression. * 2. Lors de la confirmation, l'attribut href du lien est utilisé pour la navigation (GET). */ (function(){ let pendingHref = null; let pendingModalId = '#confirmDeleteModal'; function getBootstrapModal(modalEl){ //retourne l'instance Bootstrap Modal associée à modalEl, ou en crée une nouvelle si nécessaire if (!modalEl || !window.bootstrap) return null; return bootstrap.Modal.getInstance(modalEl) || new bootstrap.Modal(modalEl); } document.addEventListener('click', function(e){ const btn = e.target.closest('a[data-bs-toggle="modal"][data-bs-target]'); if (!btn) return; const target = btn.getAttribute('data-bs-target'); // Gérer les boutons de type suppression ; restreindre éventuellement en utilisant une classe CSS spécifique // Pour un appariement plus strict, ajouter une classe dédiée et la vérifier ici. e.preventDefault(); pendingHref = btn.getAttribute('href'); pendingModalId = btn.getAttribute('data-confirm-modal') || target || '#confirmDeleteModal'; const modalEl = document.querySelector(pendingModalId); const modal = getBootstrapModal(modalEl); if (modal) modal.show(); }); document.addEventListener('click', function(e){ const confirmBtn = e.target.closest('#confirmDeleteBtn'); if (!confirmBtn) return; if (pendingHref && pendingHref !== '#' && pendingHref.trim() !== ''){ window.location.assign(pendingHref); return; // la navigation va se produire, arrêter le traitement ici } // Si aucun href n'est présent, fermer simplement le modal const modalEl = document.querySelector(pendingModalId); const modal = getBootstrapModal(modalEl); if (modal) modal.hide(); pendingHref = null; pendingModalId = '#confirmDeleteModal'; }); // Réinitialiser l'état stocké lorsque n'importe quel modal Bootstrap est caché document.addEventListener('hidden.bs.modal', function(){ pendingHref = null; pendingModalId = '#confirmDeleteModal'; }); })();