diff options
author | skjnldsv <skjnldsv@protonmail.com> | 2024-11-21 16:07:44 +0100 |
---|---|---|
committer | skjnldsv <skjnldsv@protonmail.com> | 2024-12-11 09:53:41 +0100 |
commit | fa3c47eaee48ba2fe75ebd3fbd37a215b0bc2590 (patch) | |
tree | 24e3034f0f5a2de9af0a86a9f991d26855d3ed91 | |
parent | 8606fa78316ae874a28f5e79009a51eb2b46704b (diff) | |
download | nextcloud-server-fa3c47eaee48ba2fe75ebd3fbd37a215b0bc2590.tar.gz nextcloud-server-fa3c47eaee48ba2fe75ebd3fbd37a215b0bc2590.zip |
feat(files): add parent folder keyboard shortcut
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
-rw-r--r-- | apps/files/src/views/FilesList.vue | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue index 7e8bd9f1795..45117869ba7 100644 --- a/apps/files/src/views/FilesList.vue +++ b/apps/files/src/views/FilesList.vue @@ -161,22 +161,23 @@ import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue' import ViewGridIcon from 'vue-material-design-icons/ViewGrid.vue' import { action as sidebarAction } from '../actions/sidebarAction.ts' -import { useNavigation } from '../composables/useNavigation.ts' +import { humanizeWebDAVError } from '../utils/davUtils.ts' +import { isDialogOpened } from '../utils/dialogUtils.ts' import { useFileListWidth } from '../composables/useFileListWidth.ts' -import { useRouteParameters } from '../composables/useRouteParameters.ts' import { useFilesStore } from '../store/files.ts' import { useFiltersStore } from '../store/filters.ts' +import { useNavigation } from '../composables/useNavigation.ts' import { usePathsStore } from '../store/paths.ts' +import { useRouteParameters } from '../composables/useRouteParameters.ts' import { useSelectionStore } from '../store/selection.ts' import { useUploaderStore } from '../store/uploader.ts' import { useUserConfigStore } from '../store/userconfig.ts' import { useViewConfigStore } from '../store/viewConfig.ts' import BreadCrumbs from '../components/BreadCrumbs.vue' +import DragAndDropNotice from '../components/DragAndDropNotice.vue' import FilesListVirtual from '../components/FilesListVirtual.vue' import filesSortingMixin from '../mixins/filesSorting.ts' import logger from '../logger.ts' -import DragAndDropNotice from '../components/DragAndDropNotice.vue' -import { humanizeWebDAVError } from '../utils/davUtils.ts' const isSharingEnabled = (getCapabilities() as { files_sharing?: boolean })?.files_sharing !== undefined @@ -520,14 +521,18 @@ export default defineComponent({ subscribe('files:node:deleted', this.onNodeDeleted) subscribe('files:node:updated', this.onUpdatedNode) - // reload on settings change + // Reload on settings change subscribe('files:config:updated', this.fetchContent) + + // Listen for keyboard events + document.addEventListener('keydown', this.onKeyDown) }, unmounted() { unsubscribe('files:node:deleted', this.onNodeDeleted) unsubscribe('files:node:updated', this.onUpdatedNode) unsubscribe('files:config:updated', this.fetchContent) + document.removeEventListener('keydown', this.onKeyDown) }, methods: { @@ -710,6 +715,32 @@ export default defineComponent({ } this.dirContentsFiltered = nodes }, + + onKeyDown(event: KeyboardEvent) { + // Don't react to the event if a dialog is open + if (isDialogOpened()) { + return + } + + // alt + up goes to parent directory + if (event.key === 'ArrowUp' && event.altKey) { + event.preventDefault() + event.stopPropagation() + const prevDir = dirname(this.directory) + logger.debug('Navigating to parent directory', { prevDir }) + window.OCP.Files.Router.goToRoute( + null, + { ...this.$route.params }, + { ...this.$route.query, dir: prevDir }, + ) + } + + // Don't react if ctrl, meta or alt key is pressed, + // we don't need those on the following shortcuts + if (event.ctrlKey || event.altKey || event.metaKey) { + return + } + }, }, }) </script> |