From 21d4a54eb6f49fb015f9e529bbfbf388f6e04038 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Thu, 3 Aug 2023 20:02:30 +0000 Subject: [PATCH] fix: upgrade keyboard navigation to use new clipboard API --- plugins/keyboard-navigation/src/navigation.js | 14 ++++++++---- .../src/navigation_controller.js | 22 ++++++++++++++----- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/plugins/keyboard-navigation/src/navigation.js b/plugins/keyboard-navigation/src/navigation.js index 20d96a22d3..6dc54a82d5 100644 --- a/plugins/keyboard-navigation/src/navigation.js +++ b/plugins/keyboard-navigation/src/navigation.js @@ -1111,16 +1111,22 @@ export class Navigation { } /** - * Pastes the coped block to the marked location. + * Pastes the copied block to the marked location. + * @param {Blockly.BlockCopyData} copyData The data + * to paste into the workspace. + * @param {Blockly.WorkspaceSvg} workspace The workspace to paste the data + * into. * @returns {boolean} True if the paste was sucessful, false otherwise. * @package */ - paste() { + paste(copyData, workspace) { let isHandled = false; Blockly.Events.setGroup(true); - const block = Blockly.clipboard.paste(); + const block = /** @type {Blockly.BlockSvg} */ ( + Blockly.clipboard.paste(copyData, workspace) + ); if (block) { - isHandled = this.insertPastedBlock(block.workspace, block); + isHandled = this.insertPastedBlock(workspace, block); } Blockly.Events.setGroup(false); return isHandled; diff --git a/plugins/keyboard-navigation/src/navigation_controller.js b/plugins/keyboard-navigation/src/navigation_controller.js index 656ae1e308..efd3ac2b6a 100644 --- a/plugins/keyboard-navigation/src/navigation_controller.js +++ b/plugins/keyboard-navigation/src/navigation_controller.js @@ -21,6 +21,12 @@ import {Navigation} from './navigation'; * Class for registering shortcuts for keyboard navigation. */ export class NavigationController { + /** Data copied by the copy or cut keyboard shortcuts. */ + copyData = null; + + /** The workspace a copy or cut keyboard shortcut happened in. */ + copyWorkspace = null; + /** * Constructor used for registering shortcuts. * This will register any default shortcuts for keyboard navigation. @@ -715,9 +721,12 @@ export class NavigationController { return false; }, callback: (workspace) => { - const sourceBlock = workspace.getCursor().getCurNode().getSourceBlock(); + const sourceBlock =/** @type {Blockly.BlockSvg} */ ( + workspace.getCursor().getCurNode().getSourceBlock()); workspace.hideChaff(); - Blockly.clipboard.copy(sourceBlock); + this.copyData = sourceBlock.toCopyData(); + this.copyWorkspace = sourceBlock.workspace; + return !!this.copyData; }, }; @@ -752,7 +761,8 @@ export class NavigationController { !workspace.options.readOnly && !Blockly.Gesture.inProgress(); }, callback: () => { - return this.navigation.paste(); + if (!this.copyData || !this.copyWorkspace) return false; + return this.navigation.paste(this.copyData, this.copyWorkspace); }, }; @@ -797,8 +807,10 @@ export class NavigationController { return false; }, callback: (workspace) => { - const sourceBlock = workspace.getCursor().getCurNode().getSourceBlock(); - Blockly.clipboard.copy(sourceBlock); + const sourceBlock =/** @type {Blockly.BlockSvg} */ ( + workspace.getCursor().getCurNode().getSourceBlock()); + this.copyData = sourceBlock.toCopyData(); + this.copyWorkspace = sourceBlock.workspace; this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock); sourceBlock.checkAndDelete(); return true;