curaflow/globals.js

70 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* globals.js
* Contains global UI utilities and helpers used across the CuraFlow application.
*/
// Initialize Toast Container on load
document.addEventListener('DOMContentLoaded', () => {
if (!document.getElementById('global-toast-container')) {
const container = document.createElement('div');
container.id = 'global-toast-container';
container.className = 'toast-container';
document.body.appendChild(container);
}
});
/**
* Displays a premium sliding toast notification
* @param {string} message - The text to display
* @param {string} type - 'success', 'error', 'warning', 'info' (default: 'info')
*/
window.showToast = function(message, type = 'info') {
const container = document.getElementById('global-toast-container');
if (!container) return;
const toast = document.createElement('div');
toast.className = `toast toast-${type}`;
// Icon based on type
let icon = '';
if (type === 'success') icon = '✅';
if (type === 'error') icon = '❌';
if (type === 'warning') icon = '⚠️';
toast.innerHTML = `<span>${icon}</span> <span>${message}</span>`;
container.appendChild(toast);
// Trigger animation slightly after append
requestAnimationFrame(() => {
requestAnimationFrame(() => {
toast.classList.add('toast-show');
});
});
// Remove after 3 seconds
setTimeout(() => {
toast.classList.remove('toast-show');
toast.addEventListener('transitionend', () => toast.remove());
}, 3000);
};
/**
* Universal dummy handler for unimplemented features
*/
window.handleComingSoon = function(featureName = 'This feature') {
window.showToast(`${featureName} is coming soon!`, 'info');
};
/**
* Global Logout Interceptor
* Captures clicks on any logout button across the app, clears session, and redirects securely.
*/
document.addEventListener('click', (e) => {
const logoutBtn = e.target.closest('.logout-btn') || e.target.closest('.logout-link') || e.target.closest('.sa-logout');
if (logoutBtn) {
e.preventDefault();
localStorage.clear();
window.location.href = '/';
}
});