61 lines
2.2 KiB
JavaScript
61 lines
2.2 KiB
JavaScript
|
|
/**
|
|
* 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';
|
|
});
|
|
})();
|