170 lines
7.0 KiB
JavaScript
170 lines
7.0 KiB
JavaScript
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);
|
|
}
|