webinterface/client/js/shared_functions.js

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, ">");
}