59 lines
2.6 KiB
JavaScript
59 lines
2.6 KiB
JavaScript
// Function to show the custom alert with a message and type
|
|
export function showAlert(message, type = 'info') { // Default to info or error?
|
|
const alertBox = document.getElementById('custom-alert');
|
|
if (!alertBox) return; // Guard clause
|
|
|
|
const alertMessage = document.getElementById('alert-message');
|
|
const closeButton = document.getElementById('close-alert');
|
|
|
|
if(alertMessage) alertMessage.textContent = message;
|
|
alertBox.className = 'custom-alert'; // Reset classes first
|
|
alertBox.classList.add(type); // Add type class ('success', 'error', 'info')
|
|
alertBox.style.display = 'block';
|
|
|
|
// Ensure listener is only added once or managed properly
|
|
// A simple approach: remove previous before adding new
|
|
const newCloseButton = closeButton.cloneNode(true); // Clone to remove old listeners
|
|
closeButton.parentNode.replaceChild(newCloseButton, closeButton);
|
|
newCloseButton.addEventListener('click', () => {
|
|
alertBox.style.display = 'none';
|
|
}, { once: true }); // Automatically remove listener after one click
|
|
}
|
|
|
|
// Function to show a confirmation dialog
|
|
export function showConfirm(message, type = 'error') {
|
|
return new Promise((resolve) => {
|
|
const confirmBox = document.getElementById('custom-alert-confirm');
|
|
if (!confirmBox) { resolve(false); return; } // Guard clause
|
|
|
|
const confirmMessage = document.getElementById('alert-message-confirm');
|
|
const closeButton = document.getElementById('close-alert-confirm');
|
|
const confirmButton = document.getElementById('confirm-alert-confirm');
|
|
|
|
if(confirmMessage) confirmMessage.textContent = message;
|
|
confirmBox.className = 'custom-alert-confirm'; // Reset classes
|
|
confirmBox.classList.add(type);
|
|
confirmBox.style.display = 'block';
|
|
|
|
// Use cloning to ensure listeners are fresh
|
|
const newConfirmButton = confirmButton.cloneNode(true);
|
|
confirmButton.parentNode.replaceChild(newConfirmButton, confirmButton);
|
|
newConfirmButton.addEventListener('click', () => {
|
|
confirmBox.style.display = 'none';
|
|
resolve(true);
|
|
}, { once: true });
|
|
|
|
const newCloseButton = closeButton.cloneNode(true);
|
|
closeButton.parentNode.replaceChild(newCloseButton, closeButton);
|
|
newCloseButton.addEventListener('click', () => {
|
|
confirmBox.style.display = 'none';
|
|
resolve(false);
|
|
}, { once: true });
|
|
});
|
|
}
|
|
|
|
// Basic input sanitizer (replace HTML tags)
|
|
export function sanitizeInput(str) {
|
|
if (!str) return '';
|
|
return str.replace(/</g, "<").replace(/>/g, ">");
|
|
} |