...
This commit is contained in:
		
							
								
								
									
										117
									
								
								static/js/app.js
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								static/js/app.js
									
									
									
									
									
								
							| @@ -102,6 +102,12 @@ document.addEventListener('DOMContentLoaded', async () => { | ||||
|             fileTree.selectNode(path); | ||||
|         } | ||||
|     }); | ||||
|  | ||||
|     window.eventBus.on('file-deleted', async () => { | ||||
|         if (fileTree) { | ||||
|             await fileTree.load(); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
|  | ||||
| // Listen for column resize events to refresh editor | ||||
| @@ -131,117 +137,12 @@ function setupContextMenuHandlers() { | ||||
|          | ||||
|         hideContextMenu(); | ||||
|          | ||||
|         await handleContextAction(action, targetPath, isDir); | ||||
|         await window.fileTreeActions.execute(action, targetPath, isDir); | ||||
|     }); | ||||
| } | ||||
|  | ||||
| async function handleContextAction(action, targetPath, isDir) { | ||||
|     switch (action) { | ||||
|         case 'open': | ||||
|             if (!isDir) { | ||||
|                 await editor.loadFile(targetPath); | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'new-file': | ||||
|             if (isDir) { | ||||
|                 const filename = prompt('Enter filename:'); | ||||
|                 if (filename) { | ||||
|                     await fileTree.createFile(targetPath, filename); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'new-folder': | ||||
|             if (isDir) { | ||||
|                 const foldername = prompt('Enter folder name:'); | ||||
|                 if (foldername) { | ||||
|                     await fileTree.createFolder(targetPath, foldername); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'upload': | ||||
|             if (isDir) { | ||||
|                 showFileUploadDialog(targetPath, async (path, file) => { | ||||
|                     await fileTree.uploadFile(path, file); | ||||
|                 }); | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'download': | ||||
|             if (isDir) { | ||||
|                 await fileTree.downloadFolder(targetPath); | ||||
|             } else { | ||||
|                 await fileTree.downloadFile(targetPath); | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'rename': | ||||
|             const newName = prompt('Enter new name:', targetPath.split('/').pop()); | ||||
|             if (newName) { | ||||
|                 const parentPath = targetPath.split('/').slice(0, -1).join('/'); | ||||
|                 const newPath = parentPath ? `${parentPath}/${newName}` : newName; | ||||
|                 try { | ||||
|                     await webdavClient.move(targetPath, newPath); | ||||
|                     await fileTree.load(); | ||||
|                     showNotification('Renamed', 'success'); | ||||
|                 } catch (error) { | ||||
|                     console.error('Failed to rename:', error); | ||||
|                     showNotification('Failed to rename', 'error'); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'copy': | ||||
|             clipboard = { path: targetPath, operation: 'copy' }; | ||||
|             showNotification('Copied to clipboard', 'info'); | ||||
|             updatePasteVisibility(); | ||||
|             break; | ||||
|              | ||||
|         case 'cut': | ||||
|             clipboard = { path: targetPath, operation: 'cut' }; | ||||
|             showNotification('Cut to clipboard', 'info'); | ||||
|             updatePasteVisibility(); | ||||
|             break; | ||||
|              | ||||
|         case 'paste': | ||||
|             if (clipboard && isDir) { | ||||
|                 const filename = clipboard.path.split('/').pop(); | ||||
|                 const destPath = `${targetPath}/${filename}`; | ||||
|                  | ||||
|                 try { | ||||
|                     if (clipboard.operation === 'copy') { | ||||
|                         await webdavClient.copy(clipboard.path, destPath); | ||||
|                         showNotification('Copied', 'success'); | ||||
|                     } else { | ||||
|                         await webdavClient.move(clipboard.path, destPath); | ||||
|                         showNotification('Moved', 'success'); | ||||
|                         clipboard = null; | ||||
|                         updatePasteVisibility(); | ||||
|                     } | ||||
|                     await fileTree.load(); | ||||
|                 } catch (error) { | ||||
|                     console.error('Failed to paste:', error); | ||||
|                     showNotification('Failed to paste', 'error'); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
|              | ||||
|         case 'delete': | ||||
|             if (confirm(`Delete ${targetPath}?`)) { | ||||
|                 try { | ||||
|                     await webdavClient.delete(targetPath); | ||||
|                     await fileTree.load(); | ||||
|                     showNotification('Deleted', 'success'); | ||||
|                 } catch (error) { | ||||
|                     console.error('Failed to delete:', error); | ||||
|                     showNotification('Failed to delete', 'error'); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
|     } | ||||
| } | ||||
| // All context actions are now handled by FileTreeActions, so this function is no longer needed. | ||||
| // async function handleContextAction(action, targetPath, isDir) { ... } | ||||
|  | ||||
| function updatePasteVisibility() { | ||||
|     const pasteItem = document.getElementById('pasteMenuItem'); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user