// Functions for handling student modals // Close PDF viewer modal function closePdfViewerModal() { document.getElementById('pdfViewerModal').style.display = 'none'; document.body.style.overflow = ''; } // Close subject files modal function closeSubjectFilesModal() { document.getElementById('subjectFilesModal').style.display = 'none'; document.body.style.overflow = ''; } // Open subject files modal and load content function openSubjectFilesModal(subjectId) { const modal = document.getElementById('subjectFilesModal'); const filesList = document.getElementById('subjectFilesList'); modal.style.display = 'block'; document.body.style.overflow = 'hidden'; filesList.innerHTML = `
Loading...

Loading subject files...

`; fetch(`/app/subject/${subjectId}/files/`) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { if (!data.success) { filesList.innerHTML = `
${data.message || 'No files available for this subject'}
`; return; } if (!data.files || data.files.length === 0) { filesList.innerHTML = `
No study materials available for this subject.
`; return; } filesList.innerHTML = data.files.map(file => { const fileExtension = file.file_url ? file.file_url.split('.').pop().toLowerCase() : ''; const iconClass = getFileIcon(fileExtension); const fileIcon = ``; return `
${fileIcon} ${file.title}

${file.description || 'No description'}

${file.file_type === 'syllabus' ? 'Syllabus' : 'Study Material'} ${file.uploaded_by ? `Uploaded by: ${file.uploaded_by}` : ''} ${file.uploaded_at ? `• ${formatDate(file.uploaded_at)}` : ''}
${file.file_url ? ` ` : ` File not available `}
`; }).join(''); }) .catch(error => { console.error('Error fetching subject files:', error); filesList.innerHTML = `
Failed to load files. Please try again.
`; }); } // Get appropriate icon based on file type function getFileIcon(fileType) { const iconMap = { 'pdf': 'fa-file-pdf', 'doc': 'fa-file-word', 'docx': 'fa-file-word', 'xls': 'fa-file-excel', 'xlsx': 'fa-file-excel', 'ppt': 'fa-file-powerpoint', 'pptx': 'fa-file-powerpoint', 'txt': 'fa-file-alt', 'zip': 'fa-file-archive', 'rar': 'fa-file-archive', 'image': 'fa-file-image', 'video': 'fa-file-video', 'audio': 'fa-file-audio' }; return iconMap[fileType] || 'fa-file'; } // Format file size for display function formatFileSize(bytes) { if (bytes === 0) return '0 Bytes'; const k = 1024; const sizes = ['Bytes', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; } // Format date for display function formatDate(dateString) { if (!dateString) return ''; const date = new Date(dateString); return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); } // Initialize event listeners when the DOM is loaded document.addEventListener('DOMContentLoaded', function() { // Handle Escape key to close modals document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { // Close all open modals const pdfModal = document.getElementById('pdfViewerModal'); const filesModal = document.getElementById('subjectFilesModal'); if (pdfModal && pdfModal.style.display === 'block') { closePdfViewerModal(); } if (filesModal && filesModal.style.display === 'block') { closeSubjectFilesModal(); } } }); });