From ec278efdd197cdc30bccf0a78cff1f2b7b0971b8 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 1 Sep 2022 13:23:58 +0200 Subject: [PATCH 01/25] Add forbidden ids --- .../components/FilesList/KeyboardActions.vue | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue index dfd26ff44fc..69f320c3d94 100644 --- a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue +++ b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue @@ -20,6 +20,11 @@ export default defineComponent({ type: Array, required: false, default: () => ['files-view', 'web-nav-sidebar'] + }, + forbiddenIds: { + type: Array, + required: false, + default: () => ['context-menu-drop', 'files-share-invite-input'] } }, setup() { @@ -98,16 +103,27 @@ export default defineComponent({ handleClipboardShortcuts(event) { const key = event.keyCode || event.which + const shift = event.shiftKey const ctrl = window.navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey const isCopyAction = key === 67 const isPasteAction = key === 86 const isCutAction = key === 88 + const isUpPressed = key === 38 + const isDownPressed = key === 40 const isTextSelected = window.getSelection().type === 'Range' + for(const id of this.forbiddenIds) { + const result = document.querySelector(`[id*="${id}"]`) + if(result) return + } + if (isTextSelected) return if (isCopyAction && ctrl) return this.copySelectedFiles() if (isPasteAction && ctrl) return this.handlePasteAction() if (isCutAction && ctrl) return this.cutSelectedFiles() + + if (isDownPressed && !shift) return this.handleNavigateAction(event) + if (isUpPressed && !shift) return this.handleNavigateAction(event, true) }, handleFileSelectionShortcuts(key, shift, ctrl, event) { @@ -117,8 +133,8 @@ export default defineComponent({ const isSpacePressed = key === 32 const isAPressed = key === 65 - if (isDownPressed && !shift) return this.handleNavigateAction(event) - if (isUpPressed && !shift) return this.handleNavigateAction(event, true) + //if (isDownPressed && !shift) return this.handleNavigateAction(event) + //if (isUpPressed && !shift) return this.handleNavigateAction(event, true) if (isSpacePressed) return this.handleSpaceAction(event) if (isEscapePressed) return this.handleEscapeAction() if (isDownPressed && shift) return this.handleShiftDownAction(event) @@ -139,7 +155,7 @@ export default defineComponent({ this.resetFileSelection() this.addFileSelection({ id: nextId }) this.scrollToResource({ id: nextId }) - document.getElementById(this.keybindOnElementId).focus() + document.getElementById(this.keybindOnElementIds[0]).focus() }, handleShiftClickAction(resource) { From 13231ac72a42c72294f184ef95698feb02064237 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 1 Sep 2022 13:24:28 +0200 Subject: [PATCH 02/25] Remove old code --- .../src/components/FilesList/KeyboardActions.vue | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue index 69f320c3d94..0415d6e426d 100644 --- a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue +++ b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue @@ -132,9 +132,7 @@ export default defineComponent({ const isEscapePressed = key === 27 const isSpacePressed = key === 32 const isAPressed = key === 65 - - //if (isDownPressed && !shift) return this.handleNavigateAction(event) - //if (isUpPressed && !shift) return this.handleNavigateAction(event, true) + if (isSpacePressed) return this.handleSpaceAction(event) if (isEscapePressed) return this.handleEscapeAction() if (isDownPressed && shift) return this.handleShiftDownAction(event) From 8866ba7d2a40193ec58640bc7b44b5695025fafe Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 1 Sep 2022 13:30:54 +0200 Subject: [PATCH 03/25] Linting, Unittests --- .../src/components/FilesList/KeyboardActions.vue | 6 +++--- .../unit/views/spaces/__snapshots__/Project.spec.js.snap | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue index 0415d6e426d..573e1f9dd63 100644 --- a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue +++ b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue @@ -112,9 +112,9 @@ export default defineComponent({ const isDownPressed = key === 40 const isTextSelected = window.getSelection().type === 'Range' - for(const id of this.forbiddenIds) { + for (const id of this.forbiddenIds) { const result = document.querySelector(`[id*="${id}"]`) - if(result) return + if (result) return } if (isTextSelected) return @@ -132,7 +132,7 @@ export default defineComponent({ const isEscapePressed = key === 27 const isSpacePressed = key === 32 const isAPressed = key === 65 - + if (isSpacePressed) return this.handleSpaceAction(event) if (isEscapePressed) return this.handleEscapeAction() if (isDownPressed && shift) return this.handleShiftDownAction(event) diff --git a/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Project.spec.js.snap b/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Project.spec.js.snap index e5af682d58b..7ca05c7efa8 100644 --- a/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Project.spec.js.snap +++ b/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Project.spec.js.snap @@ -2,7 +2,7 @@ exports[`Spaces project view space image should show if given 1`] = `
- +
@@ -41,7 +41,7 @@ exports[`Spaces project view space image should show if given 1`] = ` exports[`Spaces project view space readme should show if given 1`] = `
- +
From f907bcd6e4acaf832d74717353ba019541eb1245 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Fri, 2 Sep 2022 13:22:40 +0200 Subject: [PATCH 04/25] Add CustomKeyBindings directive --- .../components/FilesList/KeyboardActions.vue | 15 ++++++++++----- packages/web-app-files/src/views/Personal.vue | 3 +-- .../src/directives/customKeyBindings.js | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 packages/web-runtime/src/directives/customKeyBindings.js diff --git a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue index 573e1f9dd63..1a7101eb144 100644 --- a/packages/web-app-files/src/components/FilesList/KeyboardActions.vue +++ b/packages/web-app-files/src/components/FilesList/KeyboardActions.vue @@ -24,7 +24,7 @@ export default defineComponent({ forbiddenIds: { type: Array, required: false, - default: () => ['context-menu-drop', 'files-share-invite-input'] + default: () => ['context-menu-drop'] } }, setup() { @@ -112,16 +112,14 @@ export default defineComponent({ const isDownPressed = key === 40 const isTextSelected = window.getSelection().type === 'Range' - for (const id of this.forbiddenIds) { - const result = document.querySelector(`[id*="${id}"]`) - if (result) return - } if (isTextSelected) return if (isCopyAction && ctrl) return this.copySelectedFiles() if (isPasteAction && ctrl) return this.handlePasteAction() if (isCutAction && ctrl) return this.cutSelectedFiles() + const selection = window.getSelection() + if(selection.type === "None") if (isDownPressed && !shift) return this.handleNavigateAction(event) if (isUpPressed && !shift) return this.handleNavigateAction(event, true) }, @@ -133,6 +131,13 @@ export default defineComponent({ const isSpacePressed = key === 32 const isAPressed = key === 65 + for (const id of this.forbiddenIds) { + const result = document.querySelector(`[id*="${id}"]`) + if (result) return + } + + if (isDownPressed && !shift) return this.handleNavigateAction(event) + if (isUpPressed && !shift) return this.handleNavigateAction(event, true) if (isSpacePressed) return this.handleSpaceAction(event) if (isEscapePressed) return this.handleEscapeAction() if (isDownPressed && shift) return this.handleShiftDownAction(event) diff --git a/packages/web-app-files/src/views/Personal.vue b/packages/web-app-files/src/views/Personal.vue index 16a9cb3fa0c..f8c1dffdfd3 100644 --- a/packages/web-app-files/src/views/Personal.vue +++ b/packages/web-app-files/src/views/Personal.vue @@ -1,5 +1,5 @@