diff --git a/assets/js/confirm-delete.js b/assets/js/confirm-delete.js new file mode 100644 index 0000000..773fe11 --- /dev/null +++ b/assets/js/confirm-delete.js @@ -0,0 +1,94 @@ +// ── Confirm Delete Modal ───────────────────────────────────────────────────── +(function () { + // Inject modal HTML into page + const modalHTML = ` + `; + + document.addEventListener("DOMContentLoaded", function () { + document.body.insertAdjacentHTML("beforeend", modalHTML); + }); +})(); + +// ── Public API ──────────────────────────────────────────────────────────────── + +/** + * Call this on any delete link/button. + * Usage: onclick="return confirmDelete(this.href)" + * onclick="return confirmDelete('path/to/delete?id=5')" + * onclick="return confirmDelete(this.href, 'Delete this student?')" + */ +function confirmDelete(deleteUrl, message) { + var modal = document.getElementById("confirmDeleteModal"); + var btn = document.getElementById("confirmDeleteBtn"); + var msg = document.getElementById("confirmDeleteMessage"); + + if (message) msg.textContent = message; + else msg.textContent = "Are you sure you want to delete this? This action cannot be undone."; + + modal.style.display = "flex"; + + // Remove old listener, add fresh one + var newBtn = btn.cloneNode(true); + btn.parentNode.replaceChild(newBtn, btn); + + newBtn.addEventListener("click", function () { + window.location.href = deleteUrl; + }); + + return false; // prevent default link navigation +} + +function closeConfirmDelete() { + document.getElementById("confirmDeleteModal").style.display = "none"; +} + +// Close on backdrop click +document.addEventListener("click", function (e) { + var modal = document.getElementById("confirmDeleteModal"); + if (modal && e.target === modal) closeConfirmDelete(); +}); + +// Close on Escape key +document.addEventListener("keydown", function (e) { + if (e.key === "Escape") closeConfirmDelete(); +}); \ No newline at end of file