Closed isabela-pf closed 3 years ago
Just a note that you may wanna ping the folks over in https://github.com/jupyter/accessibility/issues/11 as they are all very keen on improving a11y across the Jupyter ecosystem
Martha (@marthacryan ) Max (@telamonian ) Karla (@karlaspuldaro) Alek tony (@tonyfast) Alex (@ajbozarth) Isabela (@isabela-pf)
Introduce yourself however you like. What do you want to get from this meeting?
Max
LabButton
Button
in @jupyterlab/ui-componentstricky part: the button text
.hide {
position: absolute !important;
top: -9999px !important;
left: -9999px !important;
}
or
.visuallyhidden {
position: absolute;
overflow: hidden;
clip: rect(0 0 0 0);
height: 1px; width: 1px;
margin: -1px; padding: 0; border: 0;
}
aria-label
(this is exactly what it's for)? Opinions seem mixedLabFoo
componentsIsabela (and tony, Gonzalo, Eric)
also pinging @manfromjupyter who mentioned they might be interested in joining in on accessibility conversations!
At @choldgraf's suggestion, I'm pinging all of the participants from jupyter/accessibility#11, ie the folks who would have been jupyter a11y workshop attendees, had the workshop happened:
@sinabahram @zorkow @ellisonbg @clapierre @trallard @jasongrout
As we try to renew the push on making jlab accessible, your involvement in the working group would be most welcome. We've got plenty of enthusiasm and jlab know-how, but we are critically short of actual a11y expertise. Any input would be greatly appreciated.
In addition to the meetings, the working group has also been chatting a lot on gitter: https://gitter.im/jupytercalpoly/accessibility. The gitter channel is where we've actually been arranging the meeting times and rooms.
@marthacryan
tricky part: the button text the reccommendation: always use an HTML button element, always label like text for icon buttons (eg all of our toolbar buttons), the suggestion is to hide the text using CSS
That doesn't seem right. I would think that the using aria-label would be the ideal solution here. Not sure why you would need to hide the text of an icon button off-screen that seems ludicrous to me. @sinabahram don't you agree?
A few things.
First, putting text inside the button could be thought of as preferred over using ARIA, and yes, the appropriate way to do that is with an sr-only class on the inner text. This follows the principle often quoted as "The first rule of ARIA is not to use ARIA", and you obviously do not "need" ARIA to label a button.
Having said the above, I'm unaware right now of any lack of support of aria-label amongst the popular screen reader/browser combinations, so this is a trivial issue, and please feel free to use aria-label to label the buttons.
Next, this touches on the point I was trying to make earlier. I think attacking low hanging fruit like unlabeled buttons is wonderful. It will have real impact for sure, but it is a small fraction of a fraction of what is required to actually make significant progress towards an accessible experience. To that end, I suggest that you need a strategy for these various patterns, be it unlabeled controls, grouping techniques, container semantics, heading semantics, traversal patterns with alt+shift+f6 and alt+f6 (you can't use f6 alone because that will conflict with browser's native f6 implementation), image descriptions, when to have automatic announcements, and so forth.
None of the above tackles the trickier issues around content editable, mode toggling, and code-related features, all of which need their own conversations of course.
Moving beyond the above tactical issues into matters more strategic around accessibility, there need to be several conversations around how these semantics are conveyed and reasoned about within the system. It's been a while since I've been in the code, but I remember a dedicated UI library happening via Phosphor or something like that, along with certain assumptions about functionality and accessibility mappings therein being made at various places up/down the stack. Some of these decisions will need to be revisited with an eye towards accessibility because the approaches/patterns I reference above, once agreed upon, can then be templatized in a way that doesn't require doing a ton of work every single time we want to create a button, add it to a toolbar, etc. Same goes for menu options and much more.
I hope this helps a bit, and I'm happy to find time to hop on a synchronous call to discuss further.
Going to second what @sinabahram said. It is the best practice to inject hidden text to the elements over aria-ing if you can.
Max @telamonian Isabela @isabela-pf Martha @marthacryan Alex @ajbozarth Jason Grout @jasongrout
We'd like to propose concrete accessibility goals would be so that we can organize it into JupyterLab's release cycle and encourage people to focus on them. These are some ideas of where to start.
Isabela
Following up on some of the next steps from the 10.21.20 meeting minutes, here's what's next in terms of meetings.
On Monday (Oct 26) 1:00pm Pacific @jasongrout will guide us through some of the accessibility work started at the root of JupyterLab in Phosphor. Meeting on Zoom.
We also agreed on a time to schedule these recurring meetings so that we can post a link publicly. For now, we will meet every other Wednesday at 10:15am Pacific (right after the JupyterLab weekly team meeting ends). That means the next meeting is November 4 at 10:15am Pacific. Meeting on Zoom.
thanks for posting these notes online! If we decide to make a push on getting funding to hire developers for accessibility work, this is something I am happy to help with 👍
These notes are from a supplementary meeting to the regular and more general JupyterLab accessibility meetings we've been holding. It was lead by @jasongrout.
Jason Grout @jasongrout Martha @marthacryan Alex @ajbozarth Karla @karlaspuldaro Alek @biniona Gonzalo @goanpeca Isabela @isabela-pf
This is related to the Web4All Hackathon on Jupyter from 2019 at the LightHouse SF.
Accessibility standards tend to be written based on HTML forms or similar standard web use cases. Sometimes it's difficult to figure out how that impacts JupyterLab since we use lots of things in ways that weren't intended in the design of such standards.
Some people worked on the "low-hanging fruit" in JupyterLab (like dialogs) and some people started working on Phosphor since it makes architectural decisions that interfere accessibility higher up.
Menus and tabs are the main focuses of the Phosphor work
In menus right now, any menu items can be "checked," but you don't have any indication of which menu items can be checked or not, it is inferred from the context. Whether or not something can have these different states is not accessible information.
There seem to be a few main types of work needed:
Where a lot of this work lives. Closed issues were pulled upstream. Open issues hold discussions and work that still needs to be done.
Martha @marthacryan Max @telamonian Alex @ajbozarth Jason @jasongrout Isabela @isabela-pf
If needed, recap/point to the notes and resources for our Phosphor PR meeting last Monday for people who weren't able to make it.
Are these meetings something we'd want to have on the Jupyter community calendar?
Yes! It will be brought up in next week's JupyterLab team meeting for approval/necessary steps.
Need to see if we can find or get data on what developers who use screen readers use in terms of OS
These meetings will now be on the main Jupyter (jovyan) Zoom channel and are on the JupyterLab Community Calendar! Up to date info will be on the calendar.
I will continue posting meeting minutes here, and will note if that is to change. Thanks for everyone's continued interest and work. 🌻
It looks like we now have all 3 of the old phosphor a11y PRs redone as lumino PRs:
jupyterlab/lumino#129 jupyterlab/lumino#131 jupyterlab/lumino#132
The first two have already been merged, jupyterlab/lumino#132 still needs review/merging. Way to go @marthacryan
Martha @marthacryan Karla @karlaspuldaro Alex @ajbozarth Max @telamonian Jason @jasongrout Thomas @manfromjupyter Isabela @isabela-pf
Martha
Max
Isabela
pip install —pre jupyterlab
This is really exciting to see all of this progress - thank you @isabela-pf for posting these notes, I really appreciate it as somebody who is dealing with a 3 month old and thus cannot make these meetings!
Excited to see what an audit comes up with in JupyterLab :-)
Two quick points:
@Tony, per your comment in the meeting about what tools were used, here is exactly what I used to do everything.
For Contrast, Heading structure/ordering, and Landmark usage, I use https://khan.github.io/tota11y/. Simply add the link at the very button of it (detailed in directions) to your browser bookmarks and it creates a pure JS overlay that tests all of those things and very well. No extensions needed. Using the tota11y tool:
Or if you don't trust extensions of foreign JS you can do it manually to each element in question with the Chrome Inspect element which for the last ~8-10 versions has done this. It's pretty cool and works most of the time.
For Screenreading, I tried NVDA this time but disliked it. Just having to push a key at the same time I am also tabbing, arrow keying, jumping to different headers or tables, etc just was annoying and didn't seem to even work half of the time (very possible I just don't know the software fully). Have and will continue to use the JAWS application. It is unfortunately no longer free (as of June 2020), but for people that don't own it, each time you restart your computer you can use it for free for 40 minutes.
For the paragraph, character, font-size, and line-height spacing test, I just manually input the CSS as there are so many different extensions that could be added that it just seems more consistent to do it manually. Just add the following CSS styles to your inspect element for the site you're testing on. No extensions needed.
* {
line-height: 1.5 !important;
letter-spacing: 0.12em !important;
word-spacing: 0.16em !important;
}
p {
margin-bottom: 2em !important;
}
For the Rendering without a Stylesheet test/tab ordering flow is logical test, as tedious as it is, I just manually delete all of the <stylesheet>
style elements in the <head>
section of the HTML. That's how I got it to look the screenshot below. There is probably a better way to do it but that's just what I've been doing. In my defense the web best practice is to use a single stylesheet for all styling, not 50+ that JLab currently uses (just the out of the box product, no JLAB extensions). Anyway no special tools or browser extensions needed to test this.
For Testing Low Vision just magnify your browser to 400% zoom for AA (WCAG version 2.0) support or 500% for AAA (WCAG version 2.1) support for these users (if I remember correctly). For the mobile/tablet tasks I either do the same or open the inspect element > device toolbar emulator. No extensions needed.
And that's it. No extensions needed for anything, just some JS code bookmarked, your screenreader app, and some in-app manipulations you do to the styling. :)
In my defense the web best practice is to use a single stylesheet for all styling, not 50+ that JLab currently uses (just the out of the box product, no JLAB extensions)
FYI, the design of JupyterLab is ~50-100 discrete "extensions" that all work together, and each have their own stylesheet to load.
Hahahaha, touché. Makes sense.
Responding to @choldgraf. I'm glad the meeting notes are helpful! Thanks for your continued feedback on them.
- Don't forget that we have a little bit of funding from Bloomberg to run some kind of event around accessibility. I'm not sure how much flexibility we have with it, but perhaps it is worth discussing if / how this funding could be useful in a future meeting?
Thanks for the reminder! I put it on the agenda to bring up in the next meeting since I'm not sure how we might be interested in using it.
- I see that the plan is to consolidate a11y issues in either Lumino or JupyterLab. I think that's reasonable given that the major improvements to make are there - though just want to note that there are other places in Jupyter that could use a11y improvements too! (e.g. JupyterHub / Binder, Jupyter Book, etc)
You are absolutely right that there are other places that I'm sure could also use accessibility improvements. Right now we made the choice to limit our scope in order to make goals that are reasonable for the number of people we have working on it, the time each can devote to this work, and the fact that we all have been working on JupyterLab lately. I agree though that the ideal case would be to continue building a community around this to work on the whole ecosystem.
tony @tonyfast Max @telamonian Jason @jasongrout Alex @ajbozarth Karla @karlaspuldaro Gonzalo @goanpeca Martha @marthacryan Thomas @manfromjupyter Darian @afshin Isabela @isabela-pf
Triage of existing accessibility issues This will be cross-referenced, updated with #9399, and stored in this project from here on out.
Reviewed from diagram-codesprint/phosphor, diagram-codesprint/jupyterlab, phosphorjs/phosphor, jupyterlab/lumino, and jupyterlab/jupyterlab (jupyter/accessibility has been more organizing focused).
Isabela proposes continuing to focus on what was found in Hack4All first.
Issues Isabela wants to look into more
Other issues
Regarding the last-minute push we talked about that we could rush into JupyterLab 3.0, here is where I filed it (https://github.com/jupyterlab/team-compass/issues/114) . Looks like it's 24 lines of code instead of 8 hahaaha, so apologies for that. Didn't expect some other things that needing addressing. Each of the sections within these landmarks need improving, sure, but provides 85% of the aria landmarks needed and upon deciding on a solution for the header part for screenreader users to parse through them, will make it accessible to them. So users may not be able to parse through the header or sidebar with this alone, but they can get to the container and see if any combination of tabs, arrows, or "screereader start reading here" will let them parse through it. If it's too much of a lift before the release, no worries, just wanted to throw it out there.
P.S. Apologies in advance for screenreader users for the ticket. Included quite a bit of text in images and color-coded them to make them easier to understand because of the rushed situation. If you would like clarity on specifics of the proposed changes just let me know.
@manfromjupyter that "low hanging fruit" diagnosis is awesome, thanks for that :-)
Thanks for everyone's patience with me posting this week's notes. We had a really active discussion so the notes needed some organization to make them better match the meeting (and easier to read later).
These discussions have identified four main accessibility needs for JupyterLab (can probably be extended to other Jupyter projects too)
Our main focus today is the accessibility of JupyterLab's code editor as discussed in #4878 and the comments of #9399.
What steps do we want to take?
Where does this fit on our priority list/who can work on this? One potential path:
Sam's next priority (after editor) would be the toolbar
Jupyter Notebook is just a little more accessible than Lab. "Like you get in a car and everything is backwards."
- Don't forget that we have a little bit of funding from Bloomberg to run some kind of event around accessibility. I'm not sure how much flexibility we have with it, but perhaps it is worth discussing if / how this funding could be useful in a future meeting?
I just wanted to add a small note. Just so that it is explicitly noted, the WAI-ARIA Authoring Practises are directly useful for the points on the screen reader accessibility of the menu bar.
Further, the section on keyboard navigation inside components describes how to manage the focus inside a composite component such as the menu bar. This is critical for screen reader users, as without it the screen reader can't let the user know where they are located in the menu bar! This section describes two ways to achieve this. Either one works well. I would expect the aria-activedescendant method might be easier though in the jupyter instance.
Regarding one of the discussions brought up today, wanted to catalog the different groups or issue topics that users may be concerned about that may not know accessibility or are not paid to work exclusively on accessibility that we could get buy in from to work on accessibility fixes and still have their orgs, companies, etc support it/fund them doing so. May not be a complete list, just a handful I could think of and briefly saw when looking at the project chart.
As per the accessibility only buy-in work needed, have included information of what requires a screenreader or not - as this also came up in the meeting today. All issues above do not require a screenreader, but for contrast fixes for example, or labeling below (instead of a screenreader), user might find it easier to develop and test with the Tota11y toolbar (https://khan.github.io/tota11y/) instead because it's stupid easy and will expose labels of contrast ratio, header number, and aria label directly on the screen. Hopefully this will decrease the analysis paralysis and barrier to entry for developers to begin working on these issues and get their feet wet if they're new to accessibility before jumping into the screenreader issues, or else we can/should encourage them to jump straight to these.
From JupyterLab Team meeting 12.23.20 discussion
Is single-document mode the more accessible UI? [compared to JupyterLab default]
Agenda item from Chris Holdgraf: "Don't forget that we have a little bit of funding from Bloomberg to run some kind of event around accessibility."
Goals for next JupyterLab release? What would we want to prioritize?
Max @telamonian
Thomas @manfromjupyter
Martha @marthacryan
Jason @jasongrout
Tony @tonyfast
Isabela @isabela-pf
Darian @afshin
Alex @ajbozarth
Happy new year!
Hooray for JupyterLab 3.0! Congrats and kudos who everyone who worked hard on it.
Go around the meeting area and ask.
Martha
Tony
Max
Thomas
Isabela
Jason: not actively working on something here specifically, but still available for questions and discussion
Alex and Darian: not actively working on something here, but want to keep track and stay part of the discussion.
We need to take stock of what's being worked on and split up the work we know we need to do.
Hey all - another thought that may be worth considering. I opened up this issue in @jtpio's jupyterlab-classic repo: https://github.com/jtpio/jupyterlab-classic/issues/80
the gist is: I wonder if getting jupyterlab-classic to be more a11y
-friendly would be an easier path than getting JupyterLab to be fully ally
-friendly. Perhaps we should start off with making improvements to jupyterlab-classic
(which will probably benefit JupyterLab more generally anyway) to make some quick progress.
@choldgraf, if there are changes that can be received to improve both, I'm in favor. As per making it the precedent for making it fully compliant, I think is counter productive.
I am not a key contributor or in any of the inner groups, but it's my understanding that Jupyter Classic is deprecated and in a mere maintenance state until it can be decommissioned (JupyterLab would then become the new home page on initial load). Given that JupyterLab is the future and we can guarantee we'd get approval to make said changes unlike classic for the fixes that wouldn't affect both, I feel we shouldn't touch classic (unless changes affect both). The only other exception would be if its deprecation status was premature and for example they're not decommissioning for another 10 years. Elsewise it just seems like an uphill battle for something that may soon go away anyway.
It is true that Classic is more accessible (almost already supporting low vision users entirely, and header/settings more accessible to screenreaders the one times I look) and I agree in that it would require less work, but because it's deprecated, I and I imagine others can't get any sign off to work or even test something that's just going to go away some day soon. We need mobile and tablet support on JupyterLab, that'll make it fully accessibly for low vision users. Rest are just general UX fixes that JupyterLab needs anyway. What remains it is even less than what would take Jupyter Classic to be fully WCAG 2.0 or 2.1 compliant.
@manfromjupyter JupyterLab Classic is a new project https://github.com/jtpio/jupyterlab-classic, basically provide the classic notebook experience but using all the JupyterLab components.
Jupyter Notebook Classic != JupyterLAB Classic :)
Yes! Sorry for not making that clearer - the point of jupyterlab-classic
is to use jupyterlab components to re-build the notebook interface. I think that all a11y
improvements for jupyterlab-classic
would happen in the form of upstream improvements to JupyterLab components. I'm just saying that it might be worth prioritizing the jupyterlab-classic
components first, as it might be a shorter path to having a notebook interface that is more a11y-friendly.
@choldgraf Oh I misread, forgive me
Because of the scale of JupyterLab's usage, I believe we should focus on work that helps JupyterLab itself to become more accessible. Obviously, jupyterlab-classic will benefit from that, which is also a good thing.
On Wed, Jan 20, 2021 at 8:21 AM Man from Jupyter notifications@github.com wrote:
@choldgraf https://github.com/choldgraf Oh I misread, forgive me
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jupyterlab/team-compass/issues/98#issuecomment-763752573, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAGXUD2G53UHFEYKYVYGTTS237I5ANCNFSM4R7J3OPQ .
-- Brian E. Granger
Principal Technical Program Manager, AWS AI Platform (brgrange@amazon.com) On Leave - Professor of Physics and Data Science, Cal Poly @ellisonbg on GitHub
Again my point is not to work on jupyterlab-classic
instead of JupyterLab, my point is that there are likely many things to do in JupyterLab itself to make it more a11y
-friendly, and we'll need to prioritize which things to work on. I'd recommend prioritizing the things that are also used in jupyterlab-classic
if it means that there is a shorter pathway to getting an a11y
-friendly interface.
Basically I'm suggesting that jupyterlab-classic
could be a quick win on the way to making JupyterLab in general more a11y
-friendly.
The reason I say this is because particularly in the educational space, many many people will prefer a streamlined notebook interface (they're still using the "old" classic notebook interface), and having an interface that:
a11y
-friendlyWould greatly increase the likelihood that they would switch.
The trouble with focusing on jupyterlab classic specific changes is that we only have audits and specifications for jupyterlab itself. If there were an audit and specifications for improving classic specific, i think we could move on this idea. without an audit like https://github.com/jupyterlab/jupyterlab/issues/9399 it is hard to know what takes action.
Maybe somebody else can review jupyterlab-classic
for that (if we get there and/or like the idea) but because it is not part of the out-of-the-box experience of jupyterlab
I personally am just not authorized to work on it/test it, so I can't be the one to do it.
I'll let y'all discuss whether to take this approach or not, I'm just a fan of quick wins and iterative progress wherever possible :-)
I'd recommend prioritizing the things that are also used in
jupyterlab-classic
if it means that there is a shorter pathway to getting ana11y
-friendly interface.
I think what this means is focusing on components such as the notebook, file browser and terminal first, since they are also used in JupyterLab Classic.
Instead of the code consoles, status bar and other components in upstream JupyterLab only.
if jupyter lab classic consists of a strict subset of components from jupyter lab, then it makes sense to prioritize components in such a order that jupyter lab only components are prioritized after the ones in classic, since then we would get to some fully accessible version of jupyter lab the most efficiently.
in either case, I think the next priority component, at least for screen reader accessibility is the menu bar, code editor and file browser.
(oops! No one signed in today so I gave my best guess.) Max @telamonian Thomas @manfromjupyter Martha @marthacryan Jason @jasongrout Tony @tonyfast Alex @ajbozarth Karla @karlasupldaro Isabela @isabela-pf
Thank you/great work again Martha and Tony for getting us to that finish line for landmarks. Super awesome!
Given the discussion earlier about some different sections that are top priority that can/should be worked on that will enable other efforts that all can be worked, here's a list I was able to add a lot of detail too and should hopefully be easy. Can all be done at the same time without affecting each other next that aren’t already being looked at:
One that is less important because it's a WCAG 2.1 requirement not WCAG 2.0 requirement but could be done at any time for non-typescript people that just just know CSS:
@manfromjupyter I am not completely sure, but I think officially HTML elements are only supposed to receive keyboard events if they have a tabindex. So, elements without one that have a onclick handler, might not reliably respond to spacebar or enter from a screen reader. Unfortunately, I don't have any time to contribute, but just wanted to say it might be worth adding a tabindex to these clickable elements and see if that resolves the issue.
@SamKacer I think users just can't get focus on those nontraditional actionable elements to begin with, but you can gain focus technically anywhere (with JS or on any element you can get to with a screenreader). You may very well be right though and definitely worth doing first to see if it works on it's own. Either way, we need to add the tabindex="0" on there anyway to complete another requirement (and did include that in the info under point number 1).
I just wanted to bring up that the lift is slightly higher than anticipated because even when making that change in my tests it doesn't expand the dropdowns. The script may need manipulation. But yeah, definitely start with a tabindex="0" to see if that makes it work.
Keyboard shortcuts and default keyboard navigation with assistive devices. This Came up with this PR JLab #9031 but it seems like it could be a bigger discussion for understanding how these things interact now and in the future.
Max has been working on a new filebrowser. Trying to bake accessibility in on a low level. Issue with notes:
Question on Max's lumino PR conflicts with https://github.com/jupyterlab/jupyterlab/pull/9622
Martha's PR at #9622 is ready for final review and to be merged after one more commit to match labels across PRs.
Nick
Updated the top comment with links to each individual meeting's notes. I find this useful when trying to jump down to previous notes. Feel free to remove if you don't want it :)
Not sure it is the best place. But here is a talk by CodeMirror author on accessibility with CodeMirror 6 (FOSDEM 2021): http://bofh.nikhef.nl/events/FOSDEM/2021/D.javascript/codemirror.webm
In case anyone missed it, meeting minutes will be moving to jupyter/accessibility for (hopefully) easier to navigate and more centralized knowledge. I won't close this issue right away, but I don't think an issue like this is the best choice for long term note storage.
We've decided to meet and discuss plans for a coordinated effort to make JupyterLab more accessible. This issue records meeting minutes for easy and public tracking.
These are open meetings, but since we don't have a schedule yet there is not public link to join. If you want to get involved with these meetings, let me know!
Previous meetings