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

Remove tabindex of -1 on upload image input in the write a post editor #10543

Merged
merged 4 commits into from Oct 8, 2020
Merged

Remove tabindex of -1 on upload image input in the write a post editor #10543

merged 4 commits into from Oct 8, 2020

Conversation

Manaswini1832
Copy link
Contributor

@Manaswini1832 Manaswini1832 commented Oct 3, 2020

What type of PR is this? (check all applicable)

  • Refactor
  • Feature
  • Bug Fix
  • Optimization
  • Documentation Update

Description

In the "Write a post" editor, the "Upload Image" button is skipped while tabbing i.e. while navigating with a keyboard, making it inaccessible to keyboard users. This happens due to the tabindex of -1 set on the "Upload Image" input element. Removing it enables tabbing, thus solving the issue.

Related Tickets & Documents

Resolves #10521 (second part of the issue)

This article talks more about how a tabindex of -1 on HTML elements that need to be interacted with, makes them inaccessible to keyboard users

Added tests?

  • yes
  • no, because they aren't needed
  • no, because I need help

Added to documentation?

  • docs.forem.com
  • readme
  • no documentation needed

@pr-triage pr-triage bot added the PR: unreviewed bot applied label for PR's with no review label Oct 3, 2020
@CLAassistant
Copy link

CLAassistant commented Oct 3, 2020

CLA assistant check
All committers have signed the CLA.

@ludwiczakpawel
Copy link
Contributor

ludwiczakpawel commented Oct 5, 2020

Just to be clear, what happens currently (in the prod) is:

  • Focus on title.
  • [TAB]
  • Focus on tags.
  • [TAB]
  • Focus on body.

What instead is being proposed here in this PR is:

  • Focus on title.
  • [TAB]
  • Focus on tags.
  • [TAB]
  • Focus on image uploader.
  • [TAB]
  • Focus on body.

^ I'm not sure if this is an improvement - it's very unlikely someone will ever want to upload an image BEFORE writing a content.
Another thing is that we may soon add more controls to the toolbar (so not only image uploader but also "bold", "italic", "list" etc..) which means that user would have to tab several time to get to the body field.

I'm not saying the image uploader should NOT be accessible with keyboard - it's definitely accessibility issue. I'm saying it should be accessible in slightly different way... Maybe (just maybe):

  • Focus on title.
  • [TAB]
  • Focus on tags.
  • [TAB]
  • Focus on body.
  • [TAB]
  • Focus on image uploader.

?

@Manaswini1832
Copy link
Contributor Author

Yes @ludwiczakpawel that sounds fair. Since giving a negative tab index to any element on the page will skip tabbing to it, adding a positive tab index seems to be the only solution that I can think of right now. So if

  1. A positive tab index (of let's say 1) is added to the title, tags and the content and
  2. The negative tab index on the image uploader is removed,

then the order of tabbing that you specified will work. Should I go ahead with that then?

@ludwiczakpawel
Copy link
Contributor

If it gonna work like that, then I think so.. I'm not an expert with figuring out tabindexes etc :D so i'd have to play with it first.

@Manaswini1832
Copy link
Contributor Author

I've done some research and I've come to realize that using positive tab indexes might not be a very good idea.

Also, it can make our lives much harder in the future when more elements will have to be introduced on the page and then we'll have to manually check and change the tab indexes of almost every element on the page.

On experimenting a little bit with the Dev tools on the editor view, I came upon this solution, which is to introduce a "Skip to content" link above the Image uploader.

This GIF shows the tabbing order if the user doesn't want to skip to the main content
GIF showing the tabbing order if the user DOESN'T WANT TO SKIP to the main content

Now, this GIF shows the tabbing order if the user WANTS TO SKIP to the main content
 GIF showing the tabbing order if the user wants to skip to the main content

OR

If the "Skip to content" button needs to be avoided, then we could settle for the previous solution too, where I removed the tab index of -1 from the image uploader. In this case, even though the user reaches the image uploader before writing any content, they can tab ahead if they wish to not upload an image and then tab back when they want to upload something.

The following GIF shows this solution in action

GIF showing the previous solution in action
For this solution though, the pull request I made earlier has a small mistake that I'll correct if this is the solution that we will be going for.

@Link2Twenty
Copy link
Contributor

Personally, I think things should be tabbed through in the order they appear on the screen. People that use a mouse won't notice and people that need to use their keyboard are aware that they will need to tab over things to get to what they want.

I also think it's worth thinking about keyboard shortcuts

We could do something quite simple like this then a user could press ALT + I, or something similar to add an image.

@Manaswini1832
Copy link
Contributor Author

Yeah the third GIF that I attached does this. Tabbing follows the order of the elements on the page. If a user doesn't want to upload an image before writing, they can simply tab ahead.
I'm not sure how to implement the keyboard shortcuts though.

@nickytonline nickytonline added the area: accessibility issues that need accessibility improvements (a11y) label Oct 5, 2020
Copy link
Contributor

@nickytonline nickytonline left a comment

Choose a reason for hiding this comment

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

Thanks so much for this fix @Manaswini1832. I've tested it out and it works great. One thing we should address within this PR is to also give it some focusable styling. I knew the button would work because of the PR description, but visually there is no indicator so show it has focus. Most likely the hover state would be good for this. cc: @ludwiczakpawel

@Manaswini1832
Copy link
Contributor Author

Manaswini1832 commented Oct 5, 2020

Thanks for the review! I missed removing the negative tab index on the outer button of the image uploader, which I'll correct and create a proper pull request here again. For the hover state, we could possibly go with an outline on the button.

@nickytonline
Copy link
Contributor

I'll defer to @ludwiczakpawel for the focus styling. Outline, the default focus styling is a good option, but let's wait to hear back from Pawel. Thanks for being patient.

@ludwiczakpawel
Copy link
Contributor

Outline, the default focus styling is a good option

+1

@Manaswini1832
Copy link
Contributor Author

Manaswini1832 commented Oct 6, 2020

I've figured out how to tab to the uploader by altering the tab index but I'm not able to figure out how to apply this hover style to that uploader button. I'm unable to get to the class that has to be changed to apply that hover effect. Could you all help please?

OR

Should I create an issue for this asking for improvements in the focus styles and leave this pull request to include only the tab index changes?

@ludwiczakpawel
Copy link
Contributor

ludwiczakpawel commented Oct 7, 2020

@Manaswini1832 I can help you with with styling but I've just pulled your branch locally and there's something off: I need to tab twice through "Upload image" button now..

UPDATE: As mentioned above: there's something off with jumping between fields since I had to tab through the "Upload image" button twice. It looks like all you have to do is bring back first of the negative indexes (so you gonna have that negative tabindex on <Button /> element but not on the input inside.: https://github.com/forem/forem/pull/10543/files#diff-3ee8f3fc4573e7aa12fab2d9f4b5f7fbL138

As for styling, in _buttons.scss file, replace line 71 with:

&:focus:enabled,
&:focus-within {

^ this should do the trick.

@Link2Twenty
Copy link
Contributor

Is there are reason we have button wrapping an input?

@ludwiczakpawel
Copy link
Contributor

@Link2Twenty Nope. Likely a mixture of legacy code with I'll get back to this later.

@Manaswini1832
Copy link
Contributor Author

UPDATE: As mentioned above: there's something off with jumping between fields since I had to tab through the "Upload image" button twice. It looks like all you have to do is bring back first of the negative indexes (so you gonna have that negative tabindex on <Button /> element

Yep got it! I'll do that right away

@Manaswini1832
Copy link
Contributor Author

I've done this but unexpectedly the build failed. Wonder why that happens. Any clues?

@Link2Twenty
Copy link
Contributor

There error is

Failure/Error: expect(page).to have_text(new_comment_text)

Which is this code though I don't think your changes should have caused this.

@Manaswini1832
Copy link
Contributor Author

Yeah. I just changed the buttons.scss and the ImageUploader.jsx files

@ludwiczakpawel
Copy link
Contributor

I'm restarting the build for you, lets see if that helps 🤷‍♂️

@Manaswini1832
Copy link
Contributor Author

That helped! Thank you so much 😊

@ludwiczakpawel ludwiczakpawel requested a review from a team October 7, 2020 15:07
Copy link
Contributor

@nickytonline nickytonline left a comment

Choose a reason for hiding this comment

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

Looks good to me @Manaswini1832. I tested it out in Safari, Firefox, Edge and Chrome. Thanks so much for the PR! 👏🏻

@pr-triage pr-triage bot added PR: partially-approved bot applied label for PR's where a single reviewer approves changes and removed PR: unreviewed bot applied label for PR's with no review labels Oct 8, 2020
@Manaswini1832
Copy link
Contributor Author

Thanks a lot for helping me out with this PR :D

@pr-triage pr-triage bot added PR: reviewed-approved bot applied label for PR's where reviewer approves changes and removed PR: partially-approved bot applied label for PR's where a single reviewer approves changes labels Oct 8, 2020
@ludwiczakpawel ludwiczakpawel merged commit e920155 into forem:master Oct 8, 2020
@pr-triage pr-triage bot added PR: merged bot applied label for PR's that are merged and removed PR: reviewed-approved bot applied label for PR's where reviewer approves changes labels Oct 8, 2020
@Manaswini1832 Manaswini1832 deleted the Manaswini1832/improve-keyboard-accessiblility-in-the-editor-view-10521 branch October 9, 2020 05:04
citizen428 pushed a commit that referenced this pull request Oct 12, 2020
#10543)

* Remove tabindex of -1 on upload image input in the write a post editor

* Remove negative tabindex on image uploader's outer button

* Give tabindex of -1 to outer button on image uploader

* Update buttons.scss
boardfish pushed a commit to boardfish/forem that referenced this pull request Oct 17, 2020
forem#10543)

* Remove tabindex of -1 on upload image input in the write a post editor

* Remove negative tabindex on image uploader's outer button

* Give tabindex of -1 to outer button on image uploader

* Update buttons.scss
benhalpern added a commit that referenced this pull request Oct 20, 2020
* chore: update the profile to be more dynamic. Maps out the group + field name   + value for field

* feat: add the correct input type to the form tying it to the correct method to update

* feat: update the value and the label

* feat: update the profile with a submit

* refactor: ensure we dont show empty groups on the settings/profile

* fix: this shoudl be dribbble

* fix: use attributes! to refresh the cache to ensure that we font run into the case where Profile.attributes is []

* feat: show group description only when it exists

* chore: add some classes

* feat: use the profile update service to update the relevant user information

* chore: rename variable

* chore: use a scope to not return empty groups

* fix: only update user if the profile sync is update is successful. Also capture errors

* feat: style the crayons field checkbox

* refactor: rename the attribute to user instead of profile

* refactor: service object

* Fix CodeClimate warning and rearrange code

* Fix service object, add missing attribute

* Fix flash and add redirect

* Fix service object + spec

* Fix user edits profile spec

* Disable spec

* Fix more specs

* Undo vim fail

* Add data update scripts

* Update where clause in data update script

* Rename method

* Make sync_to_user conditional

* Add after update actions and Honeycomb

* feat: handle checkbox allow chcekbox to check

* Don't set experience cookie in ProfilesController

* Clean up Profiles::Update object

* Fix spec

* Remove Twitch integration (#10732)

* Remove Twitch integration

* Ignore columns

* Change admin password in docs (#10735)

Update default admin password in documentation

* Do not require meta_keywords to be set (#10721)

* Remove extra character from meta_keywords in /listings/index.html.erb

* Remove meta_keywords from MANDATORY_CONFIGS

* Add and use meta_keywords_tag helper

* Use modern tag syntax instead of deprecated syntax

* Add and use meta_keywords_default helper

* Add and use meta_keywords_article helper

* Remove * from meta_keywords_field.label

* Update meta_keyword specs to account for no keywords being set

* Generalizes Connect welcome message and settings nav tab and refactors tests (#10741) [deploy]

* [deploy] fix: Clear chat input after Enter key submit (#10487)

* fix: Clear chat input after Enter key submit

* fix: Rename Composer component

* test: Add integration tests for input value

* After pressing Enter
* After clicking Send
* After clicking Save edit
* After clicking Close edit

* Remove tabindex of -1 on upload image input in the write a post editor (#10543)

* Remove tabindex of -1 on upload image input in the write a post editor

* Remove negative tabindex on image uploader's outer button

* Give tabindex of -1 to outer button on image uploader

* Update buttons.scss

* [deploy] Add recaptcha keys to as site-configurable keys (#10736)

* Add recaptcha keys to as site-configurable keys

* Add recaptcha to site config view

* Use site config key

* Make ReCAPTCHA tag optional if keys are blank

* Use proper capitalization of recaptcha

Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>

* Refactor logic for readability

* Use proper capitalization of recaptcha

Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>

* Use proper capitalization of recaptcha

Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>

* Use proper capitalization of recaptcha

Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>

Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>

* Add Section for Series/Collections (#10719)

* Add Section for Series/Collections

I added a small section in this area of the docs to share some information about collections/ series. 

There is not much information in the documentation about collections or series and I felt like this would be beneficial to others looking to help with the Series feature of the website.

* Updated wording of collections section.

* Articles API: filtering by tags (#3654) (#10614)

* Articles API: filtering by tags (#3654)

* Address CR comments (#3654)

* Add test case
* Move tests
* Update docs

* Use _any_ option for querying by tags (#3654)

* Move Imgproxy endpoint config to Images::Optimizer (#10742)

* Link Email Account creation UI to existing Create Account UI (#10746) [deploy]

* Conditional button to link to email accout creation

* Rename email signup state param

* Test for email account creation button scenarios

* Add forem meta tags (#10747)

* Add forem meta tags

* Add docs

* Update docs/technical-overview/compatibility.md

Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>

* Update docs/technical-overview/compatibility.md

Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>

* Update docs/technical-overview/compatibility.md

Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>

* Update docs/technical-overview/compatibility.md

Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>

* Remove Twitch-related columns from users table (#10750)

* [deploy] Long text goes outside cards (#10740)

* Add word-break to crayons-card

Add word-break to crayons-card this will allow words to be broken if the word is too long but will wrap normally otherwise.

* Use overflow-wrap: anywhere;

`break-word` is deprecated though `anywhere` does not work in IE

* Removes superfluous sign_in from users_onboarding_spec.rb (#10757) [deploy]

* [deploy] Allow glitch id starting with ~ (#10544)

* [deploy] crayons prep (#10737)

* Add DEV special case for following hiring tag

* Move image validation to Profiles::Update object

* spec: move over the tests for validating images

* Move follow_hiring_tag into the service object

Co-authored-by: Ridhwana <ridhwana.khan16@gmail.com>
Co-authored-by: Andrew Bone <AndrewB05@gmail.com>
Co-authored-by: Vaidehi Joshi <vaidehi.sj@gmail.com>
Co-authored-by: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com>
Co-authored-by: Robin Gagnon <me@reobin.dev>
Co-authored-by: Manaswini <58681405+Manaswini1832@users.noreply.github.com>
Co-authored-by: Andy Zhao <17884966+Zhao-Andy@users.noreply.github.com>
Co-authored-by: Christopher Wray <53663762+cwray-tech@users.noreply.github.com>
Co-authored-by: Rafal Trojanowski <rt.trojanowski@gmail.com>
Co-authored-by: Mac Siri <mac@dev.to>
Co-authored-by: Josh Puetz <josh@dev.to>
Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>
Co-authored-by: irmela <irmela@berlin-coding.de>
Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: accessibility issues that need accessibility improvements (a11y) PR: merged bot applied label for PR's that are merged
Projects
None yet
Development

Successfully merging this pull request may close these issues.

A11y: improve keyboard access for buttons on /new editor view
5 participants