Skip to content

Ledger accessibility follow-ups (ROADMAP 3.24) - #32

Merged
SeanathanVT merged 1 commit into
developmentfrom
fix/ledger-a11y
Oct 30, 2026
Merged

SeanathanVT merged 1 commit into
developmentfrom
fix/ledger-a11y

Conversation

@SeanathanVT

Copy link
Copy Markdown
Owner

Summary

Closes the four small accessibility gaps that #30's final review deferred as minor, so the 2.0.0 release ships without them. Delivers ROADMAP 3.24.

Changes

  • Theme menu:
    • Its "Standard" and "Special" group labels are role="presentation". A role="menu" may contain only groups and menu items, so the plain <p> labels were invalid. Each group keeps its aria-labelledby.
    • The palette button in the rail has aria-haspopup="menu", so screen readers announce that it opens a menu.
  • Preset stops: the selected stop is marked aria-current="true" instead of aria-pressed. Screen readers had announced a toggle, but pressing a selected stop doesn't unselect it. The CSS and VT's dark-mode ring follow the new attribute.
  • History: after a row is deleted, focus moves to the neighbouring row's Delete button, or to Edit when no rows are left. Before, focus returned to the removed button and fell to the page (WCAG 2.4.3). The old UI had the same gap.
  • Settings: the Add profile form renders open, so it works with JavaScript off. With JavaScript on, the page's script folds it behind its button on load, as before. The old Bootstrap collapse had the same gap.
  • ROADMAP: 3.24 is marked complete. 3.21 hasn't shipped yet, so these changes are part of its [Unreleased] entry and need no separate CHANGELOG line.

Tests

  • New route tests, each watched failing first:
    • test_selected_preset_is_current_not_pressed
    • test_theme_menu_button_announces_a_menu
    • test_add_profile_reachable_without_js
  • Updated: test_add_profile_form_open_after_create_error, and the VT ring check in test_theme_contrast.py.
  • Chromium checks against the real templates, using a script kept in the gitignored tmp/ folder. All passed, with no JS errors:
    • the menu's structure
    • focus after deleting a row and after deleting the last row
    • Add profile with JavaScript on and off
  • The earlier shell, Start, Walking and Settings checks still pass.
  • The suite passes on Python 3.10, 3.12 and 3.13 (561 tests each), and ruff check . is clean.

Manual check (Safari on macOS)

  • The theme menu opens and switches themes as before.
  • With VoiceOver on, the palette button announces a menu, and while walking the selected preset reads as current.
  • Deleting a history row in Edit leaves focus on the next row's Delete button.

🤖 Generated with Claude Code

- Theme menu: presentational group labels and aria-haspopup="menu" on its button
- Selected preset stop is aria-current, not aria-pressed
- Focus moves to a neighbouring Delete (or Edit) after deleting a history row
- Add profile renders open so it works without JavaScript; script folds it on load

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@SeanathanVT
SeanathanVT merged commit 75659e7 into development Oct 30, 2026
2 checks passed
@SeanathanVT
SeanathanVT deleted the fix/ledger-a11y branch October 30, 2026 18:50
@SeanathanVT SeanathanVT mentioned this pull request Oct 30, 2026
SeanathanVT added a commit that referenced this pull request Oct 30, 2026
- Theme menu: presentational group labels and aria-haspopup="menu" on its button
- Selected preset stop is aria-current, not aria-pressed
- Focus moves to a neighbouring Delete (or Edit) after deleting a history row
- Add profile renders open so it works without JavaScript; script folds it on load

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant