/**
* Confirmation Dialog - Simple and Working
*/
class ConfirmationDialog {
constructor() {
this.overlay = null;
this.dialog = null;
this.callback = null;
this.init();
}
init() {
// Create overlay
this.overlay = document.createElement('div');
this.overlay.className = 'confirmation-overlay';
// Create dialog as child of overlay
this.dialog = document.createElement('div');
this.dialog.className = 'confirmation-dialog';
// Add dialog INSIDE overlay
this.overlay.appendChild(this.dialog);
// Add overlay to body
document.body.appendChild(this.overlay);
// Event listeners
this.overlay.addEventListener('click', () => this.hide());
this.dialog.addEventListener('click', (e) => e.stopPropagation());
//console.log('Confirmation dialog initialized');
}
show(title, message, onConfirm, confirmText = 'Confirm', cancelText = 'Cancel', confirmClass = 'primary', showDataLossCheckbox = false) {
//console.log('Showing confirmation dialog');
this.callback = onConfirm;
// Build dialog content
this.dialog.innerHTML = `
⚠️
${this.escapeHtml(message)}
${showDataLossCheckbox ? `
` : ''}
`;
// Show dialog
this.overlay.classList.add('active');
// Debug: Check if class was added
//console.log('Active class added:', this.overlay.className);
//console.log('Has active class:', this.overlay.classList.contains('active'));
// Handle checkbox if present
if (showDataLossCheckbox) {
const checkbox = document.getElementById('dataLossCheckbox');
const confirmBtn = document.getElementById('confirmBtn');
// Initial state
this.updateConfirmButton(checkbox.checked);
}
// Escape key
const handleEscape = (e) => {
if (e.key === 'Escape') {
this.hide();
document.removeEventListener('keydown', handleEscape);
}
};
document.addEventListener('keydown', handleEscape);
//console.log('Confirmation dialog shown');
}
updateConfirmButton(isChecked) {
const confirmBtn = document.getElementById('confirmBtn');
if (confirmBtn) {
if (isChecked) {
confirmBtn.classList.add('confirmation-btn-ticked');
confirmBtn.disabled = false;
} else {
confirmBtn.classList.remove('confirmation-btn-ticked');
confirmBtn.disabled = true;
}
}
}
confirm(showDataLossCheckbox) {
if (showDataLossCheckbox) {
const checkbox = document.getElementById('dataLossCheckbox');
if (!checkbox.checked) {
return;
}
}
//console.log('Confirmation dialog confirmed');
if (this.callback) {
this.callback();
}
this.hide();
}
hide() {
//console.log('Hiding confirmation dialog');
//console.log('Before remove - classes:', this.overlay.className);
this.overlay.classList.remove('active');
//console.log('After remove - classes:', this.overlay.className);
//console.log('Has active class after remove:', this.overlay.classList.contains('active'));
this.callback = null;
}
escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
}
// Initialize
let confirmationDialog = null;
// Initialize immediately when script loads
function initConfirmationDialog() {
if (!confirmationDialog) {
confirmationDialog = new ConfirmationDialog();
window.confirmationDialog = confirmationDialog;
}
}
// Confirmation dialog initialization is now handled by SystemLoader
// initConfirmationDialog() will be called centrally
// Global function
window.showConfirmation = (title, message, onConfirm, confirmText, cancelText, confirmClass, showDataLossCheckbox) => {
// Ensure dialog is initialized
initConfirmationDialog();
if (confirmationDialog) {
confirmationDialog.show(title, message, onConfirm, confirmText, cancelText, confirmClass, showDataLossCheckbox);
} else {
// Fallback to native confirm
if (confirm(message)) {
onConfirm();
}
}
};