Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
d0ad934
feat: Add initial support for screen readers (experimental) (#9280)
BenHenning Aug 6, 2025
4be1ddf
fix: Keyboard nav CI workflows by pointing to experimentation branch …
BenHenning Aug 11, 2025
41b7e93
chore: merge develop into add-screen-reader
maribethb Sep 9, 2025
d349a0c
fix: Improve representation of `FlyoutButtons` in screenreaders. (#9356)
gonfunko Sep 10, 2025
b10f1af
chore: merge develop into add-screen-reader
maribethb Sep 12, 2025
f682607
fix: Use field ARIA labels for field-only blocks. (#9361)
gonfunko Sep 12, 2025
3fdfe47
fix: Avoid creating redundant a11y tree nodes when selecting a block.…
gonfunko Sep 15, 2025
8da7d17
fix: account for undefined first sibling (#9368)
maribethb Sep 16, 2025
0cc0935
chore: use beta kb nav in advanced playground (#9369)
maribethb Sep 17, 2025
27fe764
fix: improve screenreader output for workspace comments (#9351)
maribethb Sep 18, 2025
346716a
fix: exclude svg root from aria tree (#9370)
maribethb Sep 22, 2025
1dd7701
fix: Add a label to the toolbox. (#9378)
gonfunko Sep 22, 2025
76c7345
fix: Toolbox & Flyout ARIA positions (experimental) (#9394)
BenHenning Oct 1, 2025
3cf834a
feat: Fix ARIA roles and setup for fields (experimental) (#9384)
BenHenning Oct 1, 2025
bf576d5
fix: improve aria markup for toolboxes (#9398)
maribethb Oct 3, 2025
0eec0e0
fix: Fix exception thrown when `FieldDropdown` subclasses don't have …
gonfunko Oct 3, 2025
b74ebe2
Introduce better block labeling for screen readers (#9357)
microbit-robert Oct 6, 2025
9d85f9b
fix: Use `button` as the `aria-role` for icons. (#9408)
gonfunko Oct 7, 2025
40aa0d3
fix: Improve narration and navigation of C-shaped blocks. (#9416)
gonfunko Oct 13, 2025
c8a7fc6
feat: Remove most block tree support. (#9412)
BenHenning Oct 13, 2025
4f475c7
fix: Miscellaneous improvements for screenreader support. (#9424)
gonfunko Oct 16, 2025
ae3a610
fix: Don't filter out falsey input values when generating ARIA labels…
gonfunko Oct 27, 2025
7e77b10
fix: Make up/previous navigation consistent with down/next. (#9437)
gonfunko Oct 27, 2025
d0a79fa
Merge branch 'develop' into merge-develop-into-experimental-branch
BenHenning Nov 4, 2025
1f6dd0e
fix: make the aria live region assertive (#9436)
maribethb Nov 4, 2025
74a36d7
Merge pull request #9459 from BenHenning/merge-develop-into-experimen…
BenHenning Nov 4, 2025
f2b332f
Merge pull request #9446 from BenHenning/fix-miscellaneous-screen-rea…
BenHenning Nov 13, 2025
c3d70b6
Merge branch 'develop' into update-screen-reader-branch-to-latest-dev…
BenHenning Nov 19, 2025
6073b00
Merge pull request #9477 from BenHenning/update-screen-reader-branch-…
rachel-fenichel Nov 19, 2025
141e28d
fix: Correct ARIA label is for invalid values. (#9469)
BenHenning Nov 19, 2025
7a3af80
fix: Remove extra and problematic ARIA settings (#9478)
BenHenning Nov 20, 2025
0aa176e
fix: Remove clickable images from block summary. (#9480)
BenHenning Nov 21, 2025
38e30fa
feat: Expand single field block labeling (experimental) (#9484)
BenHenning Dec 2, 2025
b2a266a
fix: Remove count of child blocks from ARIA labels (#9503)
gonfunko Dec 3, 2025
0f7cdde
feat: Identify root stack blocks in ARIA label (#9501)
gonfunko Dec 3, 2025
27372a6
feat: Add comma-separation to ARIA labels (#9505)
grega Dec 3, 2025
93f849d
fix: Add 'blocks' to toolbox category ARIA labels (#9504)
gonfunko Dec 3, 2025
017a4ce
fix: Don't include count of inputs in block ARIA label (#9502)
gonfunko Dec 3, 2025
bbe6cc9
fix: Improve ARIA region handling. (#9485)
BenHenning Dec 3, 2025
74e81ce
feat: Add labels for Toolbox and Flyout. (#9483)
BenHenning Dec 3, 2025
80660bd
feat: Add verbosity shortcuts (experimental) (#9481)
BenHenning Dec 3, 2025
0506479
fix: Refer to connections as positions in ARIA descriptions (#9509)
gonfunko Dec 4, 2025
af2f0b4
fix: Don't include 'begin stack' in block ARIA labels in the flyout (…
gonfunko Dec 4, 2025
85531ec
Merge pull request #9515 from RaspberryPiFoundation/main
gonfunko Dec 4, 2025
ff6ca2e
fix: Refer to empty statement connections as ending rather than begin…
gonfunko Dec 5, 2025
f35f4d8
feat: Use custom ARIA roledescriptions for different block types (#9507)
gonfunko Dec 5, 2025
8522bff
feat: Make navigation looping configurable (#9511)
gonfunko Dec 5, 2025
57be8ca
feat: Add support for playing beeps (#9518)
gonfunko Dec 8, 2025
ebda1e4
fix: Don't include 'begin' in label for blocks in the first statement…
gonfunko Dec 8, 2025
115f45f
fix: enable i shortcuts for items on blocks (#9519)
maribethb Dec 8, 2025
d57e66e
fix: Make flyout navigation respect the cursor's looping setting (#9520)
gonfunko Dec 8, 2025
40e9ac8
feat: Beep when navigating across nesting levels (#9521)
gonfunko Dec 9, 2025
4622cf5
feat: Include parent category in verbose block descriptions (#9522)
gonfunko Dec 10, 2025
12da1fb
feat: add more navigation shortcuts (#9523)
maribethb Dec 10, 2025
9a82930
fix: read parent hierarchy with shift+i (#9527)
maribethb Dec 11, 2025
1216655
feat: Better unconstrained announcements (experimental) (#9529)
BenHenning Dec 12, 2025
bb342f9
feat: Make `Flyout` an ARIA `list` (experimental) (#9528)
BenHenning Dec 15, 2025
7288860
fix: Clean up accessibility node hierarchy (experimental) (#9449)
BenHenning Dec 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/keyboard_plugin_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
pull_request:
push:
branches:
- develop
- add-screen-reader-support-experimental

permissions:
contents: read
Expand All @@ -33,7 +33,7 @@ jobs:
uses: actions/checkout@v5
with:
repository: 'google/blockly-keyboard-experimentation'
ref: 'main'
ref: 'add-screen-reader-support-experimental'
path: blockly-keyboard-experimentation

- name: Use Node.js 20.x
Expand Down
12 changes: 7 additions & 5 deletions blocks/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export const blocks = createBlockDefinitionsFromJsonArray([
'type': 'field_number',
'name': 'NUM',
'value': 0,
'ariaTypeName': 'Number',
},
],
'output': 'Number',
Expand All @@ -54,12 +55,13 @@ export const blocks = createBlockDefinitionsFromJsonArray([
{
'type': 'field_dropdown',
'name': 'OP',
'ariaTypeName': 'Arithmetic operation',
'options': [
['%{BKY_MATH_ADDITION_SYMBOL}', 'ADD'],
['%{BKY_MATH_SUBTRACTION_SYMBOL}', 'MINUS'],
['%{BKY_MATH_MULTIPLICATION_SYMBOL}', 'MULTIPLY'],
['%{BKY_MATH_DIVISION_SYMBOL}', 'DIVIDE'],
['%{BKY_MATH_POWER_SYMBOL}', 'POWER'],
['%{BKY_MATH_ADDITION_SYMBOL}', 'ADD', 'Plus'],
['%{BKY_MATH_SUBTRACTION_SYMBOL}', 'MINUS', 'Minus'],
['%{BKY_MATH_MULTIPLICATION_SYMBOL}', 'MULTIPLY', 'Times'],
['%{BKY_MATH_DIVISION_SYMBOL}', 'DIVIDE', 'Divided by'],
['%{BKY_MATH_POWER_SYMBOL}', 'POWER', 'To the power of'],
],
},
{
Expand Down
41 changes: 34 additions & 7 deletions core/block.ts
Original file line number Diff line number Diff line change
Expand Up @@ -962,16 +962,43 @@ export class Block {
}

/**
* @returns True if this block is a value block with a single editable field.
* @returns True if this block is a value block with a full block field.
* @param mustBeFullBlock Whether the evaluated field must be 'full-block'.
* @param mustBeEditable Whether the evaluated field must be editable.
* @internal
*/
isSimpleReporter(): boolean {
if (!this.outputConnection) return false;
isSimpleReporter(
mustBeFullBlock: boolean = false,
mustBeEditable: boolean = false,
): boolean {
return (
this.getSingletonFullBlockField(mustBeFullBlock, mustBeEditable) !== null
);
}

for (const input of this.inputList) {
if (input.connection || input.fieldRow.length > 1) return false;
}
return true;
/**
* Determines and returns the only field of this block, or null if there isn't
* one and this block can't be considered a simple reporter. Null will also be
* returned if the singleton block doesn't match additional criteria, if set,
* such as being full-block or editable.
*
* @param mustBeFullBlock Whether the returned field must be 'full-block'.
* @param mustBeEditable Whether the returned field must be editable.
* @returns The only full-block, maybe editable field of this block, or null.
* @internal
*/
getSingletonFullBlockField(
mustBeFullBlock: boolean,
mustBeEditable: boolean,
): Field<any> | null {
if (!this.outputConnection) return null;
for (const input of this.inputList) if (input.connection) return null;
const matchingFields = Array.from(this.getFields()).filter((field) => {
if (mustBeFullBlock && !field.isFullBlockField()) return false;
if (mustBeEditable && !field.isCurrentlyEditable()) return false;
return true;
});
return matchingFields.length === 1 ? matchingFields[0] : null;
}

/**
Expand Down
Loading
Loading