function openFolder() { let path = (getCurrentPath() + '/' + this.getAttribute('data-id') + '/').replaceAll('//', '/') const auth = getFolderAuthFromPath() if (auth) { path = path + '&auth=' + auth } window.location.href = `/?path=${path}` } function openFile() { const fileName = this.getAttribute('data-name').toLowerCase() let path = '/file?path=' + this.getAttribute('data-path') + '/' + this.getAttribute('data-id') if (fileName.endsWith('.mp4') || fileName.endsWith('.mkv') || fileName.endsWith('.webm') || fileName.endsWith('.mov') || fileName.endsWith('.avi') || fileName.endsWith('.ts') || fileName.endsWith('.ogv')) { path = '/stream?url=' + getRootUrl() + path } window.open(path, '_blank') } // File More Button Handler Start function openMoreButton(div) { const id = div.getAttribute('data-id') const moreDiv = document.getElementById(`more-option-${id}`) const rect = div.getBoundingClientRect(); const x = rect.left + window.scrollX - 40; const y = rect.top + window.scrollY; moreDiv.style.zIndex = 2 moreDiv.style.opacity = 1 moreDiv.style.left = `${x}px` moreDiv.style.top = `${y}px` const isTrash = getCurrentPath().includes('/trash') moreDiv.querySelector('.more-options-focus').focus() moreDiv.querySelector('.more-options-focus').addEventListener('blur', closeMoreBtnFocus); moreDiv.querySelector('.more-options-focus').addEventListener('focusout', closeMoreBtnFocus); if (!isTrash) { moreDiv.querySelector(`#rename-${id}`).addEventListener('click', renameFileFolder) moreDiv.querySelector(`#trash-${id}`).addEventListener('click', trashFileFolder) try { moreDiv.querySelector(`#share-${id}`).addEventListener('click', shareFile) } catch { } try { moreDiv.querySelector(`#folder-share-${id}`).addEventListener('click', shareFolder) } catch { } } else { moreDiv.querySelector(`#restore-${id}`).addEventListener('click', restoreFileFolder) moreDiv.querySelector(`#delete-${id}`).addEventListener('click', deleteFileFolder) } } function closeMoreBtnFocus() { const moreDiv = this.parentElement moreDiv.style.opacity = '0' setTimeout(() => { moreDiv.style.zIndex = '-1' }, 300) } // Rename File Folder Start function renameFileFolder() { const id = this.getAttribute('id').split('-')[1] console.log(id) document.getElementById('rename-name').value = this.parentElement.getAttribute('data-name'); document.getElementById('bg-blur').style.zIndex = '2'; document.getElementById('bg-blur').style.opacity = '0.1'; document.getElementById('rename-file-folder').style.zIndex = '3'; document.getElementById('rename-file-folder').style.opacity = '1'; document.getElementById('rename-file-folder').setAttribute('data-id', id); setTimeout(() => { document.getElementById('rename-name').focus(); }, 300) } document.getElementById('rename-cancel').addEventListener('click', () => { document.getElementById('rename-name').value = ''; document.getElementById('bg-blur').style.opacity = '0'; setTimeout(() => { document.getElementById('bg-blur').style.zIndex = '-1'; }, 300) document.getElementById('rename-file-folder').style.opacity = '0'; setTimeout(() => { document.getElementById('rename-file-folder').style.zIndex = '-1'; }, 300) }); document.getElementById('rename-create').addEventListener('click', async () => { const name = document.getElementById('rename-name').value; if (name === '') { alert('Name cannot be empty') return } const id = document.getElementById('rename-file-folder').getAttribute('data-id') const path = document.getElementById(`more-option-${id}`).getAttribute('data-path') + '/' + id const data = { 'name': name, 'path': path } const response = await postJson('/api/renameFileFolder', data) if (response.status === 'ok') { alert('File/Folder Renamed Successfully') window.location.reload(); } else { alert('Failed to rename file/folder') window.location.reload(); } }); // Rename File Folder End async function trashFileFolder() { const id = this.getAttribute('id').split('-')[1] console.log(id) const path = document.getElementById(`more-option-${id}`).getAttribute('data-path') + '/' + id const data = { 'path': path, 'trash': true } const response = await postJson('/api/trashFileFolder', data) if (response.status === 'ok') { alert('File/Folder Sent to Trash Successfully') window.location.reload(); } else { alert('Failed to Send File/Folder to Trash') window.location.reload(); } } async function restoreFileFolder() { const id = this.getAttribute('id').split('-')[1] const path = this.getAttribute('data-path') + '/' + id const data = { 'path': path, 'trash': false } const response = await postJson('/api/trashFileFolder', data) if (response.status === 'ok') { alert('File/Folder Restored Successfully') window.location.reload(); } else { alert('Failed to Restored File/Folder') window.location.reload(); } } async function deleteFileFolder() { const id = this.getAttribute('id').split('-')[1] const path = this.getAttribute('data-path') + '/' + id const data = { 'path': path } const response = await postJson('/api/deleteFileFolder', data) if (response.status === 'ok') { alert('File/Folder Deleted Successfully') window.location.reload(); } else { alert('Failed to Delete File/Folder') window.location.reload(); } } async function shareFile() { const fileName = this.parentElement.getAttribute('data-name').toLowerCase() const id = this.getAttribute('id').split('-')[1] const path = document.getElementById(`more-option-${id}`).getAttribute('data-path') + '/' + id const root_url = getRootUrl() let link if (fileName.endsWith('.mp4') || fileName.endsWith('.mkv') || fileName.endsWith('.webm') || fileName.endsWith('.mov') || fileName.endsWith('.avi') || fileName.endsWith('.ts') || fileName.endsWith('.ogv')) { link = `${root_url}/stream?url=${root_url}/file?path=${path}` } else { link = `${root_url}/file?path=${path}` } copyTextToClipboard(link) } async function shareFolder() { const id = this.getAttribute('id').split('-')[2] console.log(id) let path = document.getElementById(`more-option-${id}`).getAttribute('data-path') + '/' + id const root_url = getRootUrl() const auth = await getFolderShareAuth(path) path = path.slice(1) let link = `${root_url}/?path=/share_${path}&auth=${auth}` console.log(link) copyTextToClipboard(link) } // File More Button Handler End