// Main application initialization and global functionality // Application state const app = { initialized: false, currentPage: 'home', version: '1.0.0' }; // Initialize the application document.addEventListener('DOMContentLoaded', () => { console.log('App.js DOMContentLoaded fired'); console.log('SeReact Frontend v' + app.version + ' - Initializing...'); // Initialize configuration initializeApp(); // Set up global event listeners setupGlobalEventListeners(); // Check initial configuration state checkInitialConfiguration(); app.initialized = true; console.log('SeReact Frontend - Initialization complete'); }); // Initialize the application function initializeApp() { // Update navigation state based on configuration updateNavigationState(); // Initialize page routing initializeRouting(); // Set up periodic health checks setupHealthChecks(); // Initialize keyboard shortcuts setupKeyboardShortcuts(); } // Set up global event listeners function setupGlobalEventListeners() { // Handle online/offline status window.addEventListener('online', () => { showAlert('Connection restored', 'success'); updateConnectionStatus(true); }); window.addEventListener('offline', () => { showAlert('Connection lost - working offline', 'warning', true); updateConnectionStatus(false); }); // Handle visibility changes (tab switching) document.addEventListener('visibilitychange', () => { if (!document.hidden && config.isConfigured()) { // Refresh current page data when tab becomes visible refreshCurrentPageData(); } }); // Handle window resize window.addEventListener('resize', debounce(() => { handleWindowResize(); }, 250)); // Handle beforeunload for unsaved changes warning window.addEventListener('beforeunload', (e) => { if (hasUnsavedChanges()) { e.preventDefault(); e.returnValue = ''; } }); } // Check initial configuration function checkInitialConfiguration() { if (!config.isConfigured()) { // Show welcome message for first-time users setTimeout(() => { showWelcomeMessage(); }, 1000); } else { // Test connection on startup setTimeout(() => { testConnectionSilently(); }, 500); } } // Show welcome message for new users function showWelcomeMessage() { const modalBody = `
AI-powered image management and semantic search platform
Set up your API connection to get started
Start building your image collection
Ready to begin? Let's configure your API connection first.