74 lines
2.7 KiB
JavaScript
74 lines
2.7 KiB
JavaScript
/**
|
|
* Main Gallery Application
|
|
* Orchestrates all the different managers and functionality
|
|
*/
|
|
import { ThemeManager } from './theme-manager.js';
|
|
import { NavigationManager } from './navigation-manager.js';
|
|
import { SearchManager } from './search-manager.js';
|
|
import { RecentPlotsManager } from './recent-plots-manager.js';
|
|
import { ComparisonManager } from './comparison-manager.js';
|
|
import { StatsManager } from './stats-manager.js';
|
|
import { KeyboardManager } from './keyboard-manager.js';
|
|
import { ViewManager } from './view-manager.js';
|
|
import { SortManager } from './sort-manager.js';
|
|
import { Utils } from './utils.js';
|
|
|
|
/**
|
|
* Main Gallery Application Class
|
|
*/
|
|
export class GalleryApp {
|
|
constructor(config = {}) {
|
|
// Configuration from backend template variables
|
|
this.SEARCH_DEBOUNCE_MS = config.searchDebounceMs || 300;
|
|
this.MAX_RECENT_PLOTS = config.maxRecentPlots || 20;
|
|
this.stats = config.stats || null;
|
|
|
|
// Initialize managers
|
|
this.themeManager = new ThemeManager();
|
|
this.navigationManager = new NavigationManager();
|
|
this.searchManager = new SearchManager(this.SEARCH_DEBOUNCE_MS);
|
|
this.recentPlotsManager = new RecentPlotsManager(this.MAX_RECENT_PLOTS);
|
|
this.comparisonManager = new ComparisonManager();
|
|
this.statsManager = new StatsManager();
|
|
this.viewManager = new ViewManager();
|
|
this.sortManager = new SortManager();
|
|
this.keyboardManager = new KeyboardManager(this);
|
|
this.utils = Utils;
|
|
|
|
// Set global references for backward compatibility
|
|
window.themeManager = this.themeManager;
|
|
window.searchManager = this.searchManager;
|
|
window.recentPlotsManager = this.recentPlotsManager;
|
|
window.comparisonManager = this.comparisonManager;
|
|
window.viewManager = this.viewManager;
|
|
window.sortManager = this.sortManager;
|
|
window.utils = this.utils;
|
|
|
|
this.init();
|
|
}
|
|
|
|
/**
|
|
* Initialize the gallery application
|
|
*/
|
|
init() {
|
|
this.navigationManager.buildBreadcrumb();
|
|
this.navigationManager.buildFolderTree();
|
|
|
|
// Update stats with backend data if available
|
|
if (this.stats) {
|
|
this.statsManager.updateWithBackendStats(this.stats);
|
|
}
|
|
|
|
// Handle URL-based thumbnail highlighting
|
|
Utils.handleThumbnailHighlight();
|
|
}
|
|
|
|
// Backward compatibility methods
|
|
toggleTheme() { this.themeManager.toggle(); }
|
|
toggleSidebar() { this.recentPlotsManager.toggleSidebar(); }
|
|
toggleCompareMode() { this.comparisonManager.toggleCompareMode(); }
|
|
closeComparison() { this.comparisonManager.closeComparison(); }
|
|
selectPlotForComparison(slot) { this.comparisonManager.selectPlotForComparison(slot); }
|
|
replacePlot(slot) { this.comparisonManager.replacePlot(slot); }
|
|
}
|