Skip to content

Commit 6a073a6

Browse files
authored
fix: Remove side effects from keyboard-experiment. (#671)
* fix: Require the `FlyoutCursor` to be registered explicitly. * fix: Use toolbox subclass instead of monkeypatch. * chore: Satisfy the linter.
1 parent 4f7c61f commit 6a073a6

File tree

6 files changed

+50
-16
lines changed

6 files changed

+50
-16
lines changed

src/flyout_cursor.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,18 @@ export class FlyoutCursor extends Blockly.LineCursor {
8989
export const registrationType = Blockly.registry.Type.CURSOR;
9090
export const registrationName = 'FlyoutCursor';
9191

92-
Blockly.registry.register(registrationType, registrationName, FlyoutCursor);
93-
9492
export const pluginInfo = {
9593
[registrationType.toString()]: registrationName,
9694
};
95+
96+
/**
97+
* Registers the FlyoutCursor with Blockly's registry.
98+
*/
99+
export function registerFlyoutCursor() {
100+
Blockly.registry.register(
101+
registrationType,
102+
registrationName,
103+
FlyoutCursor,
104+
true,
105+
);
106+
}

src/navigation_controller.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
* @author [email protected] (Abby Schmiedt)
1111
*/
1212

13-
import './toolbox_monkey_patch';
14-
1513
import * as Blockly from 'blockly/core';
1614
import {
1715
ShortcutRegistry,
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @license
3+
* Copyright 2025 Google LLC
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
import * as Blockly from 'blockly/core';
8+
9+
/**
10+
* Toolbox class that does not handle keyboard navigation.
11+
*/
12+
export class NavigationDeferringToolbox extends Blockly.Toolbox {
13+
// eslint-disable-next-line @typescript-eslint/naming-convention
14+
protected override onKeyDown_(e: KeyboardEvent) {
15+
// No-op, prevent keyboard handling by superclass in order to defer to
16+
// global keyboard navigation.
17+
}
18+
}
19+
20+
/**
21+
* Registers the navigation-deferring toolbox with Blockly.
22+
*/
23+
export function registerNavigationDeferringToolbox() {
24+
Blockly.registry.register(
25+
Blockly.registry.Type.TOOLBOX,
26+
Blockly.registry.DEFAULT,
27+
NavigationDeferringToolbox,
28+
true,
29+
);
30+
}

src/toolbox_monkey_patch.js

Lines changed: 0 additions & 12 deletions
This file was deleted.

test/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import * as Blockly from 'blockly';
99
import 'blockly/blocks';
1010
import {installAllBlocks as installColourBlocks} from '@blockly/field-colour';
1111
import {KeyboardNavigation} from '../src/index';
12+
import {registerFlyoutCursor} from '../src/flyout_cursor';
13+
import {registerNavigationDeferringToolbox} from '../src/navigation_deferring_toolbox';
1214
// @ts-expect-error No types in js file
1315
import {forBlock} from './blocks/p5_generators';
1416
// @ts-expect-error No types in js file
@@ -92,6 +94,8 @@ function createWorkspace(): Blockly.WorkspaceSvg {
9294

9395
// Must be called before injection.
9496
KeyboardNavigation.registerKeyboardNavigationStyles();
97+
registerFlyoutCursor();
98+
registerNavigationDeferringToolbox();
9599
const workspace = Blockly.inject(blocklyDiv, injectOptions);
96100

97101
Blockly.ContextMenuItems.registerCommentOptions();

test/webdriverio/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import * as Blockly from 'blockly';
99
import 'blockly/blocks';
1010
import {installAllBlocks as installColourBlocks} from '@blockly/field-colour';
1111
import {KeyboardNavigation} from '../../src/index';
12+
import {registerFlyoutCursor} from '../../src/flyout_cursor';
13+
import {registerNavigationDeferringToolbox} from '../../src/navigation_deferring_toolbox';
1214
// @ts-expect-error No types in js file
1315
import {blocks} from './../blocks/p5_blocks';
1416
// @ts-expect-error No types in js file
@@ -80,6 +82,8 @@ function createWorkspace(): Blockly.WorkspaceSvg {
8082
}
8183
// Must be called before injection.
8284
KeyboardNavigation.registerKeyboardNavigationStyles();
85+
registerFlyoutCursor();
86+
registerNavigationDeferringToolbox();
8387
const workspace = Blockly.inject(blocklyDiv, injectOptions);
8488

8589
Blockly.ContextMenuItems.registerCommentOptions();

0 commit comments

Comments
 (0)