Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix extra tab stop on Modal component #22063

Merged
merged 3 commits into from
May 8, 2020

Conversation

tellthemachines
Copy link
Contributor

@tellthemachines tellthemachines commented May 4, 2020

Description

Fixes #11631.

Currently, on VoiceOver with Safari, pressing arrow keys inside a modal will cause the modal to close, because focus is moved outside the modal. Changing the order of the HOCs wrapping ModalFrame so that withConstrainedTabbing is inside of withFocusOutside fixes the issue.

Update: the fix for focus moving outside the modal on VoiceOver wasn't working properly so I'm focusing this PR on fixing the extra tab stop issue. Thanks @talldan for helping debug this 😄

This PR removes the tabindex=0 from components-modal__content and directs focus to land on components-modal__frame instead, as it already has a tabindex=-1 and it is labelled by the modal header, so is more informative to screen readers. The element with tabindex=0 was causing an extra, unidentified tab stop between the last focusable element of the modal and the first, when tabbing through cyclically.

How has this been tested?

Checked on Safari + VoiceOver on Mac, Firefox + NVDA on Windows, and checked just the keyboard interaction across several browsers.

Screenshots

Types of changes

Bug fix (non-breaking change which fixes an issue)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@tellthemachines tellthemachines added [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Feature] UI Components Impacts or related to the UI component system [a11y] Keyboard & Focus labels May 4, 2020
@tellthemachines tellthemachines self-assigned this May 4, 2020
@github-actions
Copy link

github-actions bot commented May 4, 2020

Size Change: -3.3 kB (0%)

Total Size: 822 kB

Filename Size Change
build/annotations/index.js 3.62 kB +1 B
build/api-fetch/index.js 4.08 kB -3 B (0%)
build/block-directory/index.js 6.6 kB +2 B (0%)
build/block-editor/index.js 101 kB -5.53 kB (5%)
build/block-editor/style-rtl.css 10.2 kB +16 B (0%)
build/block-editor/style.css 10.2 kB +16 B (0%)
build/block-library/editor-rtl.css 7.08 kB +4 B (0%)
build/block-library/editor.css 7.08 kB +4 B (0%)
build/block-library/index.js 115 kB +564 B (0%)
build/block-library/style-rtl.css 7.28 kB +59 B (0%)
build/block-library/style.css 7.29 kB +60 B (0%)
build/components/index.js 179 kB -35 B (0%)
build/compose/index.js 6.66 kB +1 B
build/core-data/index.js 11.4 kB -13 B (0%)
build/data/index.js 8.44 kB +3 B (0%)
build/date/index.js 5.47 kB -1 B
build/edit-navigation/index.js 4.07 kB +18 B (0%)
build/edit-post/index.js 28.1 kB +2 B (0%)
build/edit-post/style-rtl.css 12.2 kB +3 B (0%)
build/edit-post/style.css 12.2 kB +3 B (0%)
build/edit-site/index.js 12.3 kB +874 B (7%) 🔍
build/edit-site/style-rtl.css 5.19 kB +14 B (0%)
build/edit-site/style.css 5.2 kB +15 B (0%)
build/edit-widgets/index.js 8.37 kB +599 B (7%) 🔍
build/edit-widgets/style-rtl.css 4.68 kB +16 B (0%)
build/edit-widgets/style.css 4.68 kB +17 B (0%)
build/editor/index.js 44.3 kB -10 B (0%)
build/escape-html/index.js 734 B +1 B
build/format-library/index.js 7.63 kB -2 B (0%)
build/keyboard-shortcuts/index.js 2.51 kB +2 B (0%)
build/keycodes/index.js 1.94 kB +1 B
build/media-utils/index.js 5.29 kB -1 B
build/notices/index.js 1.79 kB +1 B
build/primitives/index.js 1.5 kB +1 B
build/redux-routine/index.js 2.85 kB +3 B (0%)
build/server-side-render/index.js 2.67 kB -1 B
build/shortcode/index.js 1.7 kB +1 B
build/token-list/index.js 1.28 kB +1 B
build/url/index.js 4.02 kB -1 B
build/viewport/index.js 1.84 kB -1 B
build/warning/index.js 1.14 kB -1 B
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.02 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 760 B 0 B
build/block-directory/style.css 761 B 0 B
build/block-library/theme-rtl.css 683 B 0 B
build/block-library/theme.css 685 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/style-rtl.css 16.9 kB 0 B
build/components/style.css 16.9 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.1 kB 0 B
build/edit-navigation/style-rtl.css 485 B 0 B
build/edit-navigation/style.css 485 B 0 B
build/editor/editor-styles-rtl.css 428 B 0 B
build/editor/editor-styles.css 431 B 0 B
build/editor/style-rtl.css 5.07 kB 0 B
build/editor/style.css 5.08 kB 0 B
build/element/index.js 4.65 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/list-reusable-blocks/index.js 3.13 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/rich-text/index.js 14.8 kB 0 B
build/wordcount/index.js 1.18 kB 0 B

compressed-size-action

@tellthemachines tellthemachines changed the title Fix arrow keys closing modal with VoiceOver Fix extra tab stop on Modal component May 7, 2020
Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I gave this a test. I think the positive is that the dialog element is focused initially and the title of the modal is read in voiceover. The close button can now be tabbed to after initially opening the modal.

I think it might be a bit unexpected that there's an element that's focused initially which after tabbing is removed from the tab order, but it still seems to be a good improvement over how it works currently.

@tellthemachines tellthemachines merged commit 3b5bfa3 into master May 8, 2020
@tellthemachines tellthemachines deleted the fix/arrow-key-closes-modal-with-voiceover branch May 8, 2020 00:19
@github-actions github-actions bot added this to the Gutenberg 8.1 milestone May 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] UI Components Impacts or related to the UI component system [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes).
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Modal: remove a redundant tab stop on the modal content wrapper
2 participants