console.log('[RoomManager] Script loaded'); // Main room.js file - Coordinates all room functionality import { FileManager } from './fileManager.js'; import { ViewManager } from './viewManager.js'; import { UploadManager } from './uploadManager.js'; import { SearchManager } from './searchManager.js'; import { ModalManager } from './modalManager.js'; console.log('[RoomManager] All modules imported successfully'); class RoomManager { constructor(config) { console.log('[RoomManager] Initializing with config:', config); this.roomId = config.roomId; this.canDelete = config.canDelete; this.canShare = config.canShare; this.canUpload = config.canUpload; this.canDownload = config.canDownload; this.canRename = config.canRename; this.canMove = config.canMove; console.log('[RoomManager] Creating manager instances...'); // Initialize managers this.fileManager = new FileManager(this); this.viewManager = new ViewManager(this); this.uploadManager = new UploadManager(this); this.searchManager = new SearchManager(this); this.modalManager = new ModalManager(this); console.log('[RoomManager] All managers initialized'); // Initialize the room this.initialize(); } async initialize() { console.log('[RoomManager] Starting initialization...'); // Get current path from URL this.currentPath = this.getPathFromUrl(); console.log('[RoomManager] Current path:', this.currentPath); try { console.log('[RoomManager] Initializing view...'); // Initialize view and fetch files await this.viewManager.initializeView(); console.log('[RoomManager] View initialized'); console.log('[RoomManager] Fetching files...'); await this.fileManager.fetchFiles(); console.log('[RoomManager] Files fetched'); console.log('[RoomManager] Initializing search...'); // Initialize search this.searchManager.initialize(); console.log('[RoomManager] Search initialized'); console.log('[RoomManager] Setting up event listeners...'); // Initialize event listeners this.initializeEventListeners(); console.log('[RoomManager] Event listeners initialized'); console.log('[RoomManager] Initialization complete'); } catch (error) { console.error('[RoomManager] Error during initialization:', error); } } getPathFromUrl() { const urlParams = new URLSearchParams(window.location.search); const path = urlParams.get('path') || ''; console.log('[RoomManager] Getting path from URL:', path); return path; } initializeEventListeners() { console.log('[RoomManager] Setting up event listeners'); // Add event listener for select all checkbox const selectAllCheckbox = document.querySelector('.select-all-checkbox'); if (selectAllCheckbox) { selectAllCheckbox.addEventListener('change', (event) => { const checkboxes = document.querySelectorAll('.select-item-checkbox'); checkboxes.forEach((cb, index) => { cb.checked = event.target.checked; if (event.target.checked) { this.fileManager.selectedItems.add(index); } else { this.fileManager.selectedItems.delete(index); } }); this.viewManager.updateMultiSelectUI(); }); } // Add event listener for download selected button const downloadSelectedBtn = document.getElementById('downloadSelectedBtn'); if (downloadSelectedBtn && this.canDownload) { downloadSelectedBtn.addEventListener('click', () => { this.fileManager.downloadSelected(); }); } // Add event listener for delete selected button const deleteSelectedBtn = document.getElementById('deleteSelectedBtn'); if (deleteSelectedBtn && this.canDelete) { deleteSelectedBtn.addEventListener('click', () => { this.modalManager.showBatchDeleteModal(); }); } // Add event listener for clicking outside to clear selection document.addEventListener('click', (event) => { if (!event.target.closest('.file-card') && !event.target.closest('.file-row') && !event.target.closest('.file-action-btn')) { this.fileManager.clearSelection(); } }); } } // Initialize the room manager when the script loads function initializeRoom() { console.log('[RoomManager] Starting room initialization...'); try { // Wait for all meta tags to be available const requiredMetaTags = [ 'room-id', 'can-delete', 'can-share', 'can-upload', 'can-download', 'can-rename', 'can-move' ]; console.log('[RoomManager] Checking required meta tags...'); const missingTags = requiredMetaTags.filter(tag => !document.querySelector(`meta[name="${tag}"]`)); if (missingTags.length > 0) { console.error('[RoomManager] Missing required meta tags:', missingTags); return; } console.log('[RoomManager] All meta tags found, creating config...'); const config = { roomId: document.querySelector('meta[name="room-id"]').getAttribute('content'), canDelete: document.querySelector('meta[name="can-delete"]').getAttribute('content') === 'true', canShare: document.querySelector('meta[name="can-share"]').getAttribute('content') === 'true', canUpload: document.querySelector('meta[name="can-upload"]').getAttribute('content') === 'true', canDownload: document.querySelector('meta[name="can-download"]').getAttribute('content') === 'true', canRename: document.querySelector('meta[name="can-rename"]').getAttribute('content') === 'true', canMove: document.querySelector('meta[name="can-move"]').getAttribute('content') === 'true' }; console.log('[RoomManager] Config created:', config); window.roomManager = new RoomManager(config); } catch (error) { console.error('[RoomManager] Error during initialization:', error); } } // Wait for DOM to be fully loaded if (document.readyState === 'loading') { console.log('[RoomManager] DOM still loading, waiting for DOMContentLoaded...'); document.addEventListener('DOMContentLoaded', initializeRoom); } else { console.log('[RoomManager] DOM already loaded, initializing with delay...'); // If DOM is already loaded, wait a bit to ensure all scripts are loaded setTimeout(initializeRoom, 0); }