aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorskjnldsv <skjnldsv@protonmail.com>2024-11-21 16:07:44 +0100
committerskjnldsv <skjnldsv@protonmail.com>2024-12-11 09:53:41 +0100
commitfa3c47eaee48ba2fe75ebd3fbd37a215b0bc2590 (patch)
tree24e3034f0f5a2de9af0a86a9f991d26855d3ed91
parent8606fa78316ae874a28f5e79009a51eb2b46704b (diff)
downloadnextcloud-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.vue41
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>