From 4057f96ed81f457eef89778fa64550f7be33dd8d Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Mon, 11 May 2026 14:29:45 -0700 Subject: [PATCH 1/2] fix: Display appropriate help hint for navigating blocks in RTL --- packages/blockly/core/hints.ts | 8 ++++++- packages/blockly/msg/json/en.json | 4 ++-- packages/blockly/msg/messages.js | 4 ++-- .../tests/mocha/shortcut_items_test.js | 23 ++++++++++++++++++- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/blockly/core/hints.ts b/packages/blockly/core/hints.ts index 729ddfea1cc..d6b12cca030 100644 --- a/packages/blockly/core/hints.ts +++ b/packages/blockly/core/hints.ts @@ -90,7 +90,13 @@ export function showHelpHint(workspace: WorkspaceSvg) { * @param workspace The workspace. */ export function showBlockNavigationHint(workspace: WorkspaceSvg) { - const message = Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT']; + const shortcut = getShortcutKeysShort( + workspace.RTL ? names.NAVIGATE_LEFT : names.NAVIGATE_RIGHT, + ); + const message = Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace( + '%1', + shortcut, + ); const id = blockNavigationHintId; Toast.show(workspace, {message, id}); } diff --git a/packages/blockly/msg/json/en.json b/packages/blockly/msg/json/en.json index ae94255e7a3..4f2135a9761 100644 --- a/packages/blockly/msg/json/en.json +++ b/packages/blockly/msg/json/en.json @@ -1,7 +1,7 @@ { "@metadata": { "author": "Ellen Spertus ", - "lastupdated": "2026-05-07 12:03:23.440539", + "lastupdated": "2026-05-11 14:15:58.197621", "locale": "en", "messagedocumentation" : "qqq" }, @@ -464,7 +464,7 @@ "WORKSPACE_CONTENTS_BLOCKS_ZERO": "No blocks%2 in workspace.", "WORKSPACE_CONTENTS_COMMENTS_MANY": " and %1 comments", "WORKSPACE_CONTENTS_COMMENTS_ONE": " and one comment", - "KEYBOARD_NAV_BLOCK_NAVIGATION_HINT": "Use the right arrow key to navigate inside of blocks.", + "KEYBOARD_NAV_BLOCK_NAVIGATION_HINT": "Use %1 to navigate inside of blocks.", "KEYBOARD_NAV_WORKSPACE_NAVIGATION_HINT": "Use the arrow keys to navigate.", "BLOCK_LABEL_BEGIN_STACK": "Begin stack", "BLOCK_LABEL_BEGIN_PREFIX": "Begin %1", diff --git a/packages/blockly/msg/messages.js b/packages/blockly/msg/messages.js index c592dd67981..71c3aff5ce8 100644 --- a/packages/blockly/msg/messages.js +++ b/packages/blockly/msg/messages.js @@ -1839,7 +1839,7 @@ Blockly.Msg.WORKSPACE_CONTENTS_COMMENTS_MANY = ' and %1 comments'; Blockly.Msg.WORKSPACE_CONTENTS_COMMENTS_ONE = ' and one comment'; /** @type {string} */ /// Message shown when a user presses Enter with a navigable block focused. -Blockly.Msg.KEYBOARD_NAV_BLOCK_NAVIGATION_HINT = 'Use the right arrow key to navigate inside of blocks.'; +Blockly.Msg.KEYBOARD_NAV_BLOCK_NAVIGATION_HINT = 'Use %1 to navigate inside of blocks.'; /** @type {string} */ /// Message shown when a user presses Enter with the workspace focused. Blockly.Msg.KEYBOARD_NAV_WORKSPACE_NAVIGATION_HINT = 'Use the arrow keys to navigate.'; @@ -1880,7 +1880,7 @@ Blockly.Msg.BLOCK_LABEL_HAS_INPUTS = 'has inputs'; /** @type {string} */ /// Part of an accessibility label for a block that indicates that it is /// a statement block, i.e. that it has a next or previous connection. -/// "command" here is used in the sense of a computer command, or a +/// "command" here is used in the sense of a computer command, or a /// command block in Scratch. Blockly.Msg.BLOCK_LABEL_STATEMENT = 'command'; /** @type {string} */ diff --git a/packages/blockly/tests/mocha/shortcut_items_test.js b/packages/blockly/tests/mocha/shortcut_items_test.js index 27329b67b7e..0ab221aa674 100644 --- a/packages/blockly/tests/mocha/shortcut_items_test.js +++ b/packages/blockly/tests/mocha/shortcut_items_test.js @@ -1367,11 +1367,32 @@ suite('Keyboard Shortcut Items', function () { sinon.assert.calledWith(toastSpy, this.workspace, { id: 'blockNavigationHint', - message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'], + message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace('%1', '→'), }); toastSpy.restore(); }); + test('Shows a toast with RTL navigation hints for navigable blocks', function () { + const toolbox = document.getElementById('toolbox-test'); + const ws = Blockly.inject('blocklyDiv', {toolbox, renderer: 'zelos', rtl: true}); + const toastSpy = sinon.spy(Blockly.Toast, 'show'); + + const block = ws.newBlock('controls_if'); + block.initSvg(); + block.render(); + Blockly.getFocusManager().focusNode(block); + + const event = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER); + ws.getInjectionDiv().dispatchEvent(event); + + sinon.assert.calledWith(toastSpy, ws, { + id: 'blockNavigationHint', + message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace('%1', '←'), + }); + toastSpy.restore(); + ws.dispose(); + }); + // Reenable this tests once the shortcut listing shortcut has been added. test.skip('Shows a toast with instructions to view help for non-navigable blocks', function () { const toastSpy = sinon.spy(Blockly.Toast, 'show'); From 5ae0e79cb8e62259ff679a471276c23d5ba3c08f Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Mon, 11 May 2026 14:30:03 -0700 Subject: [PATCH 2/2] chore: Run formatter --- .../blockly/tests/mocha/shortcut_items_test.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/blockly/tests/mocha/shortcut_items_test.js b/packages/blockly/tests/mocha/shortcut_items_test.js index 0ab221aa674..581e38b2d30 100644 --- a/packages/blockly/tests/mocha/shortcut_items_test.js +++ b/packages/blockly/tests/mocha/shortcut_items_test.js @@ -1367,14 +1367,21 @@ suite('Keyboard Shortcut Items', function () { sinon.assert.calledWith(toastSpy, this.workspace, { id: 'blockNavigationHint', - message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace('%1', '→'), + message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace( + '%1', + '→', + ), }); toastSpy.restore(); }); test('Shows a toast with RTL navigation hints for navigable blocks', function () { const toolbox = document.getElementById('toolbox-test'); - const ws = Blockly.inject('blocklyDiv', {toolbox, renderer: 'zelos', rtl: true}); + const ws = Blockly.inject('blocklyDiv', { + toolbox, + renderer: 'zelos', + rtl: true, + }); const toastSpy = sinon.spy(Blockly.Toast, 'show'); const block = ws.newBlock('controls_if'); @@ -1387,7 +1394,10 @@ suite('Keyboard Shortcut Items', function () { sinon.assert.calledWith(toastSpy, ws, { id: 'blockNavigationHint', - message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace('%1', '←'), + message: Blockly.Msg['KEYBOARD_NAV_BLOCK_NAVIGATION_HINT'].replace( + '%1', + '←', + ), }); toastSpy.restore(); ws.dispose();