From ce8662893c58009a433b8616d921f73dca60848c Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Thu, 7 May 2026 13:42:54 -0700 Subject: [PATCH] fix: Improve ARIA fallback generation for HTML-based menu items (#9827) * fix: Improve ARIA fallback generation for HTML-based menu items * chore: Remove unneeded cast --- packages/blockly/core/menuitem.ts | 7 ++++++- packages/blockly/tests/mocha/menu_item_test.js | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/blockly/core/menuitem.ts b/packages/blockly/core/menuitem.ts index 9500e322c..c88e9c094 100644 --- a/packages/blockly/core/menuitem.ts +++ b/packages/blockly/core/menuitem.ts @@ -114,7 +114,12 @@ export class MenuItem { getAriaLabel(): string { // This fallback should only be hit by Context Menu items as all // FieldDropdown options should have an ARIA label. - return this.ariaLabel || String(this.content); + return ( + this.ariaLabel || + (typeof this.content === 'string' + ? this.content + : this.content.textContent) + ); } /** Dispose of this menu item. */ diff --git a/packages/blockly/tests/mocha/menu_item_test.js b/packages/blockly/tests/mocha/menu_item_test.js index 7690c0f18..fadb9f2c1 100644 --- a/packages/blockly/tests/mocha/menu_item_test.js +++ b/packages/blockly/tests/mocha/menu_item_test.js @@ -173,4 +173,14 @@ suite('Menu items', function () { this.menuItem.performAction(new Event('click')); assert.isTrue(called); }); + + test('return accurate ARIA labels for HTML elements', function () { + const div = document.createElement('div'); + const nestedDiv = document.createElement('div'); + nestedDiv.textContent = 'nested'; + div.textContent = 'test'; + div.appendChild(nestedDiv); + const testMenuItem = new Blockly.MenuItem(div); + assert.equal(testMenuItem.getAriaLabel(), 'testnested'); + }); });