This document collects implementation notes, manual testing guidance, and known platform-specific behavior for TimePoll accessibility.
It is intentionally practical. The focus is not only on WCAG-style mechanics, but also on whether the main workflows are realistic for keyboard and screen-reader users.
TimePoll is designed around these keyboard-first expectations:
- The main views can be reached and used without a mouse.
- Focus should move to the start of the newly opened view.
- Dialogs should trap focus and return it when they close.
- Forms should move focus to the first invalid field when validation fails.
- Poll navigation should preserve the user's place when returning to a previous view.
The browser test suite includes:
- axe accessibility smoke tests for the main views and several error states
- keyboard workflow tests for login, poll creation, poll editing, timezone listboxes, bulk menus, vote controls, profile controls, and focus restoration
The current Playwright browser suite runs on Chromium, not Safari. Safari-specific behavior must therefore be verified manually.
Relevant automated coverage lives primarily in polls/tests_browser.py and polls/tests_browser_storyboard.py.
The home view is keyboard-usable in browsers where Tab reaches links and buttons normally.
Expected behavior:
- The top bar contains the
TimePollhome link, language selector, and authentication controls. - The poll list view contains a
Create new pollbutton and one large button per poll row. - Opening a poll moves focus to the poll details heading.
- Returning to the list moves focus back to the poll button that opened the poll.
Important limitation:
- The poll list is linear. It is navigated with
Tab/Shift-Tab, not with arrow-key list navigation. - This is workable for short and medium-sized lists, but becomes slower as the number of polls grows.
The create form is built mostly from native controls:
- text input
- textarea
- text input with validation
- timezone combobox with suggestion listbox
- date inputs
- hour selects
- weekday checkboxes
- submit and cancel buttons
Expected behavior:
- Opening the create view moves focus to the title field.
- The timezone field supports
ArrowDown,ArrowUp,Home,End,Enter,Escape, andTab. - Validation errors are announced visually and focus returns to the first invalid field on submit.
The edit form follows the same structure as create, with additional schedule-conflict rules and timezone change confirmation.
Expected behavior:
- Opening edit mode moves focus to the edit title field.
- The timezone field supports the same keyboard interaction as the create form.
- If changing timezone would auto-adjust the schedule, a confirmation dialog opens.
- The confirmation dialog traps focus and restores focus to the timezone field when cancelled.
Authentication and timezone confirmation dialogs are expected to:
- move focus to the first interactive control when opened
- cycle focus with
TabandShift-Tab - close on
Escape - restore focus to the triggering control when closed without completing the action
This section matters because Safari and macOS can change whether Tab reaches TimePoll's controls at all.
On the home page, most primary actions are links or buttons:
TimePollis a linkLogin,Logout,Create new poll, and poll rows are buttons- the language control is a native
select
In Safari's default keyboard behavior, Tab may only move to the next text field or pop-up menu on a web page. In practice, this means the language selector can receive focus while nearby buttons and links do not.
This can make the page appear to "loop" between:
- the language selector
- no obvious web-page control
For a keyboard-only user, that means the page may appear unusable even though the HTML itself uses semantic links and buttons.
Safari has a setting named Press Tab to highlight each item on a webpage.
When that setting is off:
Tabhighlights the next field or pop-up menuOption-Tabhighlights the next field, pop-up menu, or clickable item
When that setting is on:
- plain
Tabhighlights each item on the page - Safari swaps the default
Tab/Option-Tabbehavior accordingly
For TimePoll, enabling this Safari setting is strongly recommended.
macOS also has system-level keyboard navigation settings that affect focus movement:
Keyboard navigationin Keyboard settings enables moving focus between controls withTabandShift-TabFull Keyboard Accessin Accessibility > Keyboard provides broader keyboard navigation across macOS
These settings help, but Safari's own webpage tabbing behavior is still important for TimePoll because the home page relies heavily on buttons and links rather than only text inputs.
On macOS, Tab is not the only navigation model used by assistive technology users. Apple documents that VoiceOver users often navigate with VoiceOver commands rather than relying on Tab alone.
This means:
- TimePoll still needs correct semantics, headings, labels, and focus handling
- but a manual "Tab only" check in Safari is not a complete proxy for VoiceOver usability
When testing keyboard access manually, test at least these combinations:
- Chromium-based browser with normal
Tabnavigation - Safari with default settings
- Safari with
Press Tab to highlight each item on a webpageenabled - macOS with and without broader keyboard navigation enabled
For Safari, explicitly verify these workflows:
- Can
TabreachLogin? - Can
TabreachCreate new poll? - Can
Tabreach the first poll row? - After opening a poll, does focus move to the details heading?
- After returning from a poll, does focus return to the same list item?
If the answer is "no" in Safari default settings but "yes" after enabling webpage tab highlighting, the issue is platform behavior rather than a broken DOM focus order inside TimePoll itself.
The most important current accessibility caveat is:
- TimePoll is keyboard-workable in browsers that tab to links and buttons normally.
- On Safari/macOS default settings, the home page may appear non-functional with plain
Tabbecause focus can skip most primary actions.
This should be treated as a documented platform caveat and checked in manual QA.