diff options
| author | Bobby <[email protected]> | 2024-12-24 06:50:59 -0500 |
|---|---|---|
| committer | Bobby <[email protected]> | 2024-12-24 06:50:59 -0500 |
| commit | 6df9f0dc40501e8f55bcc883dfe5be65e60d3c3d (patch) | |
| tree | 273148d564c11ae46e9f96c0231ce57427f5591f /static/js/shared | |
| parent | 4feba2452a151ed999d52d4a0d53b0b0584bf70e (diff) | |
| download | thatcomputerscientist-6df9f0dc40501e8f55bcc883dfe5be65e60d3c3d.tar.xz thatcomputerscientist-6df9f0dc40501e8f55bcc883dfe5be65e60d3c3d.zip | |
bucket load of things
Diffstat (limited to 'static/js/shared')
| -rw-r--r-- | static/js/shared/directory.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/static/js/shared/directory.js b/static/js/shared/directory.js new file mode 100644 index 00000000..c3153175 --- /dev/null +++ b/static/js/shared/directory.js @@ -0,0 +1,58 @@ +class DirectoryViewer { + constructor(element) { + this.element = element; + this.folders = element.querySelectorAll('.folder-item'); + this.selectedFolder = null; + + this.setupEventListeners(); + } + + setupEventListeners() { + this.folders.forEach(folder => { + folder.addEventListener('click', (e) => this.handleFolderClick(e, folder)); + folder.addEventListener('dblclick', (e) => this.handleFolderDoubleClick(e, folder)); + }); + + // Clear selection when clicking empty space + this.element.addEventListener('click', (e) => { + if (e.target === this.element || e.target.classList.contains('directory-content')) { + this.clearSelection(); + } + }); + } + + handleFolderClick(e, folder) { + e.preventDefault(); + e.stopPropagation(); + + this.clearSelection(); + this.selectFolder(folder); + } + + handleFolderDoubleClick(e, folder) { + e.preventDefault(); + const path = folder.dataset.path; + if (!path) return; + window.location.href = path; + } + + selectFolder(folder) { + if (this.selectedFolder) { + this.selectedFolder.classList.remove('selected'); + } + folder.classList.add('selected'); + this.selectedFolder = folder; + } + + clearSelection() { + if (this.selectedFolder) { + this.selectedFolder.classList.remove('selected'); + this.selectedFolder = null; + } + } +} + +// Initialize the directory viewer +document.addEventListener('DOMContentLoaded', () => { + const dirViewer = new DirectoryViewer(document.querySelector('.directory-viewer')); +});
\ No newline at end of file |
