2025-07-27 17:49:37 -06:00

97 lines
3.0 KiB
JavaScript

// Main application entry point
import { CONFIG, loadDomainConfig } from './config.js';
import { hideLoading, showStatus, setViewportDimensions } from './utils.js';
import { checkAuth } from './auth.js';
import { initializeMap } from './map-manager.js';
import { loadLocations } from './location-manager.js';
import { setupEventListeners } from './ui-controls.js';
import { MkDocsSearch } from './mkdocs-search.js';
// Application state
let refreshInterval = null;
let mkdocsSearch = null;
// Initialize the application
document.addEventListener('DOMContentLoaded', async () => {
// Set initial viewport dimensions and listen for resize events
setViewportDimensions();
window.addEventListener('resize', setViewportDimensions);
window.addEventListener('orientationchange', () => {
// Add a small delay for orientation change to complete
setTimeout(setViewportDimensions, 100);
});
console.log('DOM loaded, initializing application...');
try {
// Load domain configuration first
await loadDomainConfig();
// First check authentication
await checkAuth();
// Then initialize the map
await initializeMap();
// Only load locations after map is ready
await loadLocations();
// Setup other features
setupEventListeners();
setupAutoRefresh();
// Initialize MkDocs search
await initializeMkDocsSearch();
} catch (error) {
console.error('Initialization error:', error);
showStatus('Failed to initialize application', 'error');
} finally {
hideLoading();
}
});
function setupAutoRefresh() {
refreshInterval = setInterval(() => {
loadLocations();
}, CONFIG.REFRESH_INTERVAL);
}
// Clean up on page unload
window.addEventListener('beforeunload', () => {
if (refreshInterval) {
clearInterval(refreshInterval);
}
});
// Initialize MkDocs search
async function initializeMkDocsSearch() {
try {
// Get config from server
const configResponse = await fetch('/api/config');
const config = await configResponse.json();
mkdocsSearch = new MkDocsSearch({
mkdocsUrl: config.mkdocsUrl || 'http://localhost:4002',
minSearchLength: 2
});
const initialized = await mkdocsSearch.initialize();
if (initialized) {
// Bind to search input
const searchInput = document.getElementById('docs-search-input');
const searchResults = document.getElementById('docs-search-results');
if (searchInput && searchResults) {
mkdocsSearch.bindToInput(searchInput, searchResults);
console.log('Documentation search ready');
}
} else {
console.warn('Documentation search could not be initialized');
}
} catch (error) {
console.error('Error setting up documentation search:', error);
}
}