diff --git a/src/flyout_cursor.ts b/src/flyout_cursor.ts index ee376bc6..cd1a1be3 100644 --- a/src/flyout_cursor.ts +++ b/src/flyout_cursor.ts @@ -89,8 +89,18 @@ export class FlyoutCursor extends Blockly.LineCursor { export const registrationType = Blockly.registry.Type.CURSOR; export const registrationName = 'FlyoutCursor'; -Blockly.registry.register(registrationType, registrationName, FlyoutCursor); - export const pluginInfo = { [registrationType.toString()]: registrationName, }; + +/** + * Registers the FlyoutCursor with Blockly's registry. + */ +export function registerFlyoutCursor() { + Blockly.registry.register( + registrationType, + registrationName, + FlyoutCursor, + true, + ); +} diff --git a/src/navigation_controller.ts b/src/navigation_controller.ts index 3c29c128..de53ade4 100644 --- a/src/navigation_controller.ts +++ b/src/navigation_controller.ts @@ -10,8 +10,6 @@ * @author aschmiedt@google.com (Abby Schmiedt) */ -import './toolbox_monkey_patch'; - import * as Blockly from 'blockly/core'; import { ShortcutRegistry, diff --git a/src/navigation_deferring_toolbox.ts b/src/navigation_deferring_toolbox.ts new file mode 100644 index 00000000..b09733d2 --- /dev/null +++ b/src/navigation_deferring_toolbox.ts @@ -0,0 +1,30 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as Blockly from 'blockly/core'; + +/** + * Toolbox class that does not handle keyboard navigation. + */ +export class NavigationDeferringToolbox extends Blockly.Toolbox { + // eslint-disable-next-line @typescript-eslint/naming-convention + protected override onKeyDown_(e: KeyboardEvent) { + // No-op, prevent keyboard handling by superclass in order to defer to + // global keyboard navigation. + } +} + +/** + * Registers the navigation-deferring toolbox with Blockly. + */ +export function registerNavigationDeferringToolbox() { + Blockly.registry.register( + Blockly.registry.Type.TOOLBOX, + Blockly.registry.DEFAULT, + NavigationDeferringToolbox, + true, + ); +} diff --git a/src/toolbox_monkey_patch.js b/src/toolbox_monkey_patch.js deleted file mode 100644 index 2649da51..00000000 --- a/src/toolbox_monkey_patch.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * @license - * Copyright 2025 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as Blockly from 'blockly/core'; - -Blockly.Toolbox.prototype.onKeyDown_ = function () { - // Do nothing since keyboard functionality should be entirely handled by the - // keyboard navigation plugin. -}; diff --git a/test/index.ts b/test/index.ts index a49c42c0..4aa282a8 100644 --- a/test/index.ts +++ b/test/index.ts @@ -9,6 +9,8 @@ import * as Blockly from 'blockly'; import 'blockly/blocks'; import {installAllBlocks as installColourBlocks} from '@blockly/field-colour'; import {KeyboardNavigation} from '../src/index'; +import {registerFlyoutCursor} from '../src/flyout_cursor'; +import {registerNavigationDeferringToolbox} from '../src/navigation_deferring_toolbox'; // @ts-expect-error No types in js file import {forBlock} from './blocks/p5_generators'; // @ts-expect-error No types in js file @@ -92,6 +94,8 @@ function createWorkspace(): Blockly.WorkspaceSvg { // Must be called before injection. KeyboardNavigation.registerKeyboardNavigationStyles(); + registerFlyoutCursor(); + registerNavigationDeferringToolbox(); const workspace = Blockly.inject(blocklyDiv, injectOptions); Blockly.ContextMenuItems.registerCommentOptions(); diff --git a/test/webdriverio/index.ts b/test/webdriverio/index.ts index 4560ef2a..f6b67963 100644 --- a/test/webdriverio/index.ts +++ b/test/webdriverio/index.ts @@ -9,6 +9,8 @@ import * as Blockly from 'blockly'; import 'blockly/blocks'; import {installAllBlocks as installColourBlocks} from '@blockly/field-colour'; import {KeyboardNavigation} from '../../src/index'; +import {registerFlyoutCursor} from '../../src/flyout_cursor'; +import {registerNavigationDeferringToolbox} from '../../src/navigation_deferring_toolbox'; // @ts-expect-error No types in js file import {blocks} from './../blocks/p5_blocks'; // @ts-expect-error No types in js file @@ -80,6 +82,8 @@ function createWorkspace(): Blockly.WorkspaceSvg { } // Must be called before injection. KeyboardNavigation.registerKeyboardNavigationStyles(); + registerFlyoutCursor(); + registerNavigationDeferringToolbox(); const workspace = Blockly.inject(blocklyDiv, injectOptions); Blockly.ContextMenuItems.registerCommentOptions();