Spaces:
Sleeping
Sleeping
| // Function removed - now handled by sorting.js | |
| document.getElementById('search-form').addEventListener('submit', async (event) => { | |
| event.preventDefault(); | |
| const query = document.getElementById('file-search').value; | |
| console.log(query) | |
| if (query === '') { | |
| showToast('Search field is empty', 'warning'); | |
| return; | |
| } | |
| const path = '/?path=/search_' + encodeURI(query); | |
| console.log(path) | |
| window.location = path; | |
| }); | |
| // Loading Main Page | |
| document.addEventListener('DOMContentLoaded', function () { | |
| const inputs = ['new-folder-name', 'rename-name', 'file-search'] | |
| for (let i = 0; i < inputs.length; i++) { | |
| document.getElementById(inputs[i]).addEventListener('input', validateInput); | |
| } | |
| if (getCurrentPath().includes('/share_')) { | |
| getCurrentDirectory() | |
| } else { | |
| if (getPassword() === null) { | |
| document.getElementById('bg-blur').style.zIndex = '2'; | |
| document.getElementById('bg-blur').style.opacity = '0.1'; | |
| document.getElementById('get-password').style.zIndex = '3'; | |
| document.getElementById('get-password').style.opacity = '1'; | |
| } else { | |
| getCurrentDirectory() | |
| } | |
| } | |
| // Theme Toggle Logic | |
| const themeBtn = document.getElementById('theme-toggle-btn'); | |
| const themeIcon = document.getElementById('theme-icon'); | |
| const body = document.body; | |
| // Check local storage | |
| if (localStorage.getItem('theme') === 'dark') { | |
| body.classList.add('dark-mode'); | |
| updateIcon(true); | |
| } | |
| if (themeBtn) { | |
| themeBtn.addEventListener('click', () => { | |
| body.classList.toggle('dark-mode'); | |
| const isDark = body.classList.contains('dark-mode'); | |
| localStorage.setItem('theme', isDark ? 'dark' : 'light'); | |
| updateIcon(isDark); | |
| }); | |
| } | |
| function updateIcon(isDark) { | |
| if (!themeIcon) return; | |
| if (isDark) { | |
| // Sun Icon (Material Design Wb_sunny 24px) | |
| themeIcon.setAttribute("viewBox", "0 0 24 24"); | |
| themeIcon.innerHTML = '<path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z"/>'; | |
| } else { | |
| // Moon Icon (Original 24px) | |
| themeIcon.setAttribute("viewBox", "0 0 24 24"); | |
| themeIcon.innerHTML = '<path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9 9-4.03 9-9c0-.46-.04-.92-.1-1.36-.98 1.37-2.58 2.26-4.4 2.26-2.98 0-5.4-2.42-5.4-5.4 0-1.81.89-3.42 2.26-4.4-.44-.06-.9-.1-1.36-.1z"/>'; | |
| } | |
| } | |
| // Sidebar Toggle Logic | |
| const sidebarBtn = document.getElementById('sidebar-toggle-btn'); | |
| const container = document.querySelector('.container'); | |
| const sidebar = document.querySelector('.sidebar'); | |
| // Check local storage for sidebar state | |
| if (localStorage.getItem('sidebar') === 'collapsed') { | |
| container.classList.add('sidebar-collapsed'); | |
| } | |
| if (sidebarBtn) { | |
| sidebarBtn.addEventListener('click', () => { | |
| // On mobile, toggle sidebar visibility | |
| if (window.innerWidth <= 768) { | |
| sidebar.classList.toggle('mobile-open'); | |
| } else { | |
| // On desktop, use collapse | |
| container.classList.toggle('sidebar-collapsed'); | |
| const isCollapsed = container.classList.contains('sidebar-collapsed'); | |
| localStorage.setItem('sidebar', isCollapsed ? 'collapsed' : 'expanded'); | |
| } | |
| }); | |
| } | |
| // Close mobile sidebar when clicking outside | |
| document.addEventListener('click', (e) => { | |
| if (window.innerWidth <= 768) { | |
| if (!sidebar.contains(e.target) && !sidebarBtn.contains(e.target)) { | |
| sidebar.classList.remove('mobile-open'); | |
| } | |
| } | |
| }); | |
| // Request Movie Modal Logic | |
| const requestBtn = document.getElementById('request-movie-btn'); | |
| const requestModal = document.getElementById('request-movie'); | |
| const requestCancel = document.getElementById('request-movie-cancel'); | |
| const requestFetch = document.getElementById('request-movie-fetch'); | |
| const requestSend = document.getElementById('request-movie-send'); | |
| const requestTitleInput = document.getElementById('request-movie-title'); | |
| const requestYearInput = document.getElementById('request-movie-year'); | |
| const requestInfoDiv = document.getElementById('request-movie-info'); | |
| function openRequestModal() { | |
| document.getElementById('bg-blur').style.zIndex = '2'; | |
| document.getElementById('bg-blur').style.opacity = '0.1'; | |
| requestModal.style.zIndex = '3'; | |
| requestModal.style.opacity = '1'; | |
| requestTitleInput.focus(); | |
| } | |
| function closeRequestModal() { | |
| requestTitleInput.value = ''; | |
| requestYearInput.value = ''; | |
| requestInfoDiv.innerHTML = ''; | |
| document.getElementById('bg-blur').style.opacity = '0'; | |
| setTimeout(() => { | |
| document.getElementById('bg-blur').style.zIndex = '-1'; | |
| }, 300); | |
| requestModal.style.opacity = '0'; | |
| setTimeout(() => { | |
| requestModal.style.zIndex = '-1'; | |
| }, 300); | |
| } | |
| if (requestBtn) { | |
| requestBtn.addEventListener('click', openRequestModal); | |
| } | |
| if (requestCancel) { | |
| requestCancel.addEventListener('click', closeRequestModal); | |
| } | |
| if (requestFetch) { | |
| requestFetch.addEventListener('click', async () => { | |
| const title = requestTitleInput.value.trim(); | |
| const year = requestYearInput.value.trim(); | |
| if (!title) { | |
| showToast('Movie title is required', 'warning'); | |
| return; | |
| } | |
| showLoading('Fetching from TMDB...'); | |
| const res = await tmdbSearchMovie(title, year); | |
| hideLoading(); | |
| if (res.status === 'ok' && res.data) { | |
| const m = res.data; | |
| const y = m.year || ''; | |
| requestTitleInput.value = m.title || title; | |
| if (y) { | |
| requestYearInput.value = y; | |
| } | |
| requestInfoDiv.innerHTML = ` | |
| <strong>${m.title || ''} (${y})</strong><br> | |
| <small>${m.overview || 'No overview available.'}</small> | |
| `; | |
| showToast('TMDB result loaded', 'success'); | |
| } else if (res.status === 'no_results') { | |
| requestInfoDiv.innerHTML = '<small>No results found on TMDB.</small>'; | |
| showToast('No TMDB results found', 'warning'); | |
| } else if (res.status === 'TMDB not configured') { | |
| requestInfoDiv.innerHTML = '<small>TMDB API key not configured on server.</small>'; | |
| showToast('TMDB not configured on server', 'error'); | |
| } else { | |
| requestInfoDiv.innerHTML = `<small>Error: ${res.status}</small>`; | |
| showToast('Failed to fetch from TMDB', 'error'); | |
| } | |
| }); | |
| } | |
| if (requestSend) { | |
| requestSend.addEventListener('click', async () => { | |
| const title = requestTitleInput.value.trim(); | |
| const year = requestYearInput.value.trim(); | |
| if (!title || !year) { | |
| showToast('Title and year are required', 'warning'); | |
| return; | |
| } | |
| showLoading('Requesting movie...'); | |
| const res = await requestMovie(title, year); | |
| hideLoading(); | |
| if (res.status === 'available' && res.file) { | |
| const root = getRootUrl(); | |
| const path = res.file.path; | |
| const isVideo = res.file.is_video; | |
| let link; | |
| if (isVideo) { | |
| link = `${root}/stream?url=${root}/file?path=${path}`; | |
| } else { | |
| link = `${root}/file?path=${path}`; | |
| } | |
| copyTextToClipboard(link); | |
| showToast('✅ Movie available. Link copied to clipboard!', 'success'); | |
| closeRequestModal(); | |
| } else if (res.status === 'not_found') { | |
| showToast('Movie not available yet. Request saved.', 'info'); | |
| closeRequestModal(); | |
| } else if (res.status === 'Invalid password') { | |
| showToast('Invalid admin password. Please login again.', 'error'); | |
| } else { | |
| showToast(`Failed to request movie: ${res.status}`, 'error'); | |
| } | |
| }); | |
| } | |
| }); |