diff --git a/src/components/FileBrowser.vue b/src/components/FileBrowser.vue new file mode 100644 index 00000000..cefb5f92 --- /dev/null +++ b/src/components/FileBrowser.vue @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/components/filebrowser/Confirm.vue b/src/components/filebrowser/Confirm.vue new file mode 100644 index 00000000..f7f1f580 --- /dev/null +++ b/src/components/filebrowser/Confirm.vue @@ -0,0 +1,78 @@ + + + + + + + + {{ title }} + + + + + + + Cancel + + + Yes + + + + + diff --git a/src/components/filebrowser/List.vue b/src/components/filebrowser/List.vue new file mode 100644 index 00000000..c350a527 --- /dev/null +++ b/src/components/filebrowser/List.vue @@ -0,0 +1,227 @@ + + + + + + + Select a folder or a file + + + File: {{ path }} + + + + Folders + + + mdi-folder-outline + + + + + + + + mdi-delete-outline + + + + + mdi-information + + + + + + + + Files + + + {{ icons[item.extension.toLowerCase()] || icons.other }} + + + + + {{ formatBytes(item.size) }} + + + + + + mdi-delete-outline + + + + + mdi-information + + + + + + + + No files or folders found + + + The folder is empty + + + + + mdi-download + + + + + + mdi-eye-settings-outline + + + mdi-refresh + + + + + + diff --git a/src/components/filebrowser/Toolbar.vue b/src/components/filebrowser/Toolbar.vue new file mode 100644 index 00000000..2a7c3d08 --- /dev/null +++ b/src/components/filebrowser/Toolbar.vue @@ -0,0 +1,194 @@ + + + + + + + + + mdi-arrow-down-drop-circle-outline + + + + + + + + {{ item.name }} + + + + + + {{ storageObject.icon }} + + {{ storageObject.name }} + + + + mdi-chevron-right + + + {{ segment.name }} + + + + + + + + + + mdi-arrow-up-bold-outline + + + Up to "root" + Up to "{{ pathSegments[pathSegments.length - 2].name }}" + + + + + mdi-folder-plus-outline + + + + + + + + + + Cancel + + + Create Folder + + + + + + mdi-plus-circle + + + + + + + diff --git a/src/components/filebrowser/Tree.vue b/src/components/filebrowser/Tree.vue new file mode 100644 index 00000000..5edf81a4 --- /dev/null +++ b/src/components/filebrowser/Tree.vue @@ -0,0 +1,196 @@ + + + + + + + + + {{ open ? 'mdi-folder-open-outline' : 'mdi-folder-outline' }} + + + {{ icons[item.extension.toLowerCase()] || icons.other }} + + + + {{ item.basename }} + + + mdi-refresh + + + + + + + + + + + + mdi-collapse-all-outline + + + Collapse All + + + + + + diff --git a/src/components/filebrowser/Upload.vue b/src/components/filebrowser/Upload.vue new file mode 100644 index 00000000..5e59c9a0 --- /dev/null +++ b/src/components/filebrowser/Upload.vue @@ -0,0 +1,218 @@ + + + + + + + + Upload to: + + {{ storage }} + + {{ path }} + + + Max files count: {{ maxUploadFilesCount }} + + + Max file size: {{ formatBytes(maxUploadFileSize) }} + + + + + + + + + + + + + {{ formatBytes(file.size) }} - {{ file.type }} + + + + + mdi-close + + + + + + + + + + mdi-plus-circle + Add files + + + + + + + Cancel + + + mdi-closeClear + + + + mdi-plus-circle + Add Files + + + + Upload + + mdi-upload-outline + + + + + + {{ Math.ceil(progress) }}% + + + + + + + diff --git a/src/components/filebrowser/util.js b/src/components/filebrowser/util.js new file mode 100644 index 00000000..f22d4762 --- /dev/null +++ b/src/components/filebrowser/util.js @@ -0,0 +1,16 @@ +export function formatBytes(bytes, decimals = 2) { + if (bytes === 0) + return '0 bytes' + + const k = 1024 + const dm = decimals < 0 ? 0 : decimals + const sizes = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] + + const i = Math.floor(Math.log(bytes) / Math.log(k)) + + return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}` +} + +export default { + formatBytes, +} diff --git a/src/layouts/components/DefaultLayoutWithVerticalNav.vue b/src/layouts/components/DefaultLayoutWithVerticalNav.vue index 6c06fd13..5dba87ee 100644 --- a/src/layouts/components/DefaultLayoutWithVerticalNav.vue +++ b/src/layouts/components/DefaultLayoutWithVerticalNav.vue @@ -134,6 +134,13 @@ import UserProfile from '@/layouts/components/UserProfile.vue' to: '/history', }" /> + +import FileBrowser from '@/components/FileBrowser.vue' + + + + + + + diff --git a/src/router/index.ts b/src/router/index.ts index 38874774..a4e944f9 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -128,6 +128,13 @@ const router = createRouter({ requiresAuth: true, }, }, + { + path: '/filemanager', + component: () => import('../pages/filemanager.vue'), + meta: { + requiresAuth: true, + }, + }, ], }, {