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(v-b-modal): open modal using `ENTER` key on non-button elements for A11Y #4364

Merged
merged 4 commits into from Nov 9, 2019

Conversation

@markcarver
Copy link
Contributor

markcarver commented Nov 9, 2019

Describe the PR

When the v-b-modal directive is used on non-link elements (a), users can only open it using the spacebar. This adds inconsistency where other implementations (because they're link elements) can be opened using the Enter key.

From https://www.w3.org/WAI/GL/wiki/Making_actions_keyboard_accessible_by_using_keyboard_event_handlers_with_WAI-ARIA_controls#Example_1:_Using_Space_to_activate_a_button:

Adding the ARIA role "button" makes it clear that this is a button control and not a link. Because we are using an anchor element, the control is focusable and the browser will automatically call the onclick handler for the Enter keystroke. Since users expect to be able to activate buttons with either Enter or Space, a keyboard handler provides the support for activating the button via the Space character.

Note that supporting SPACE in addition to ENTER is not required by WCAG 2.0; this control would still be keyboard accessible without the key event handler for SPACE. However, supporting platform keyboard conventions for controls is strongly encouraged.

PR checklist

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Enhancement
  • ARIA accessibility
  • Documentation update
  • Other (please describe)

Does this PR introduce a breaking change? (check one)

  • No
  • Yes (please describe)

The PR fulfills these requirements:

  • It's submitted to the dev branch, not the master branch
  • When resolving a specific issue, it's referenced in the PR's title (i.e. [...] (fixes #xxx[,#xxx]), where "xxx" is the issue number)
  • It should address only one issue or feature. If adding multiple features or fixing a bug and adding a new feature, break them into separate PRs if at all possible.
  • The title should follow the Conventional Commits naming convention (i.e. fix(alert): not alerting during SSR render, docs(badge): update pill examples, fix typos, chore: fix typo in README, etc). This is very important, as the CHANGELOG is generated from these messages.

If new features/enhancement/fixes are added or changed:

  • Includes documentation updates (including updating the component's package.json for slot and event changes)
  • Includes any needed TypeScript declaration file updates
  • New/updated tests are included and passing (if required)
  • Existing test suites are passing
  • The changes have not impacted the functionality of other components or directives
  • ARIA Accessibility has been taken into consideration (Does it affect screen reader users or keyboard only users? Clickable items should be in the tab index, etc.)

If adding a new feature, or changing the functionality of an existing feature, the PR's
description above includes:

  • A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)
@codecov

This comment has been minimized.

Copy link

codecov bot commented Nov 9, 2019

Codecov Report

Merging #4364 into dev will increase coverage by <.01%.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff             @@
##              dev    #4364      +/-   ##
==========================================
+ Coverage   99.91%   99.91%   +<.01%     
==========================================
  Files         238      238              
  Lines        4598     4599       +1     
  Branches     1292     1292              
==========================================
+ Hits         4594     4595       +1     
  Misses          3        3              
  Partials        1        1
Impacted Files Coverage Δ
src/directives/modal/modal.js 100% <100%> (ø) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e7a7f97...322fe63. Read the comment docs.

@tmorehouse tmorehouse changed the title fix(v-b-modal): open using enter key on non-link elements fix(v-b-modal): open using `ENTER` key on non-button elements Nov 9, 2019
@tmorehouse

This comment has been minimized.

Copy link
Member

tmorehouse commented Nov 9, 2019

@markcarver Thanks!

I've tweaked the code a bit to use KeyCode constants utility, as well as added in two unit tests to ensure both ENTER and SPACE triggers work.

@tmorehouse tmorehouse changed the title fix(v-b-modal): open using `ENTER` key on non-button elements fix(v-b-modal): open modal using `ENTER` key on non-button elements for A11Y Nov 9, 2019
@tmorehouse tmorehouse merged commit 0d27d7b into bootstrap-vue:dev Nov 9, 2019
8 checks passed
8 checks passed
ci/circleci: build Your tests passed on CircleCI!
Details
ci/circleci: lint Your tests passed on CircleCI!
Details
ci/circleci: setup Your tests passed on CircleCI!
Details
ci/circleci: test Your tests passed on CircleCI!
Details
codecov/patch 100% of diff hit (target 99.91%)
Details
codecov/project 99.91% (+<.01%) compared to e7a7f97
Details
deploy/netlify Deploy preview ready!
Details
security/snyk - package.json (pi0) No manifest changes detected
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.