-
-
Notifications
You must be signed in to change notification settings - Fork 5.2k
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
Accessibility: Comply with WCAG 2.2 #10795
Comments
This pull request improves focus handling in the **Markdown editor**'s toolbar. See laurent22#10795.
I am loving this! I am not sure what the desktop app is programmed in, but I am worried there is an over reliance on ARIA where native controls and functions could be used, such as, the below for example regarding links. I genuinely do not think links need an ARIALABEL if link text/titles are descriptive enough. But I am beyond excited to see this progress so will watch closely! If I knew what the mobile apps and desktop apps were made in, I could better advise but this is a great start! |
The general rule is that if you have to use things like |
Thank you for the feedback! There are cases where links/buttons in Joplin have no text content but have a
Based on this, Related links:
The desktop app is built with Electron and React. The mobile app is built with React Native. |
Thank you for the feedback! Currently, Joplin does use
An alternative to webfont+ |
Yeah, icon fonts are not good for accessibility since they are basically a hack to display images instead of text (as should be expected with fonts normally), so they have issues with screen readers, and they also cause problems when the user wants (or needs due to a particular disability) to use their own font for the whole application or website. SVG icons are much better in this aspect, but as you've said, implementing them would require a major rewrite of the code 🙁. |
[Suggest close] When attaching a video, it puts the filename as the title, eg
We use
[Suggest close] Very hard to say but generally we use semantic markup so I would think there are not many such instances. The link provides example of using
[Suggest close] Same comment as above - as the HTML is relatively clean I suspect we don't have too many strange out of order sequences. We don't use
[Suggest close] We do not officially support RTL for now. If certain things work it's great but I know there are still issues and fixing this would be a project of its own.
[Suggest close] I've searched for basic colours in the documentation - green, blue, etc. and didn't find any instructions based on colours. Only possible exception is here where it says "The active line should now have a light-yellow background". But I'm not sure how that could be improved. Possibly also out of scope for this project (which is about accessibility for the end user rather than for developers).
[Suggest close] I'd think this is out of scope for the desktop app because we provide the mobile app for smaller devices
I think these three items are similar? Basically about having sufficient contrasts between adjacent elements. I couldn't actually find a tool to check this. The WebAIM contrast checker is to compare foreground and background colour, which is not the same as comparing, for example, the colour the selected notebook background against the whole sidebar background colour. We need something to test adjacent colours it seems. We have a visible focus indicator in any case which would be part of the Sufficient Techniques: "G195: Using an author-supplied, visible focus indicator"
I think that's for web pages where user can provide a user CSS stylesheet? As a test I think we should try to set a custom stylesheet for the Markdown editor, RTE and viewer with the mentioned properties and see if it still works. If it doesn't we should evaluate if there are simple fixes we can implement - if it's too complex we should drop it. And we shouldn't support this for the rest of the interface. The guideline mentions "content" which I think is understood to be articles, etc., not user interface elements.
[Suggest close] Not sure if something has changed but I was able to move the focus to all these buttons with both TAB and Shift+TAB
[Suggest close] I tried and couldn't get anything to flash three times. Including loading HTML notes. So I'd say we can skip this one.
[Suggest close] I'm not sure I understand this guideline. But using the keyboard I could give focus to the notification "Cancel" button as would be expected. That notification also doesn't hide enough of the content or for long enough to be a problem.
Should we skip the AAA items?
[Suggest close] Even without accessibility in mind that would be bad design probably, and I can't think of any such instance.
I'm not sure why it was done this way, and I don't feel it's very good. We should change it to display the message below the keyboard shortcut, unless there's a good reason for the current UI. |
See WCAG 2.2 SC 2.1.2 (and laurent22#10795). This commit adds a menu item to the desktop app that allows toggling tab indentation. Associated with this menu item is the standard [ctrl]-[m] keyboard shortcut.
Am a screen reader user and developer, would it be helpful at this point to give the desktop app a quick runthrough to find blockers? |
That would be very helpful! There have been a few accessibility-related changes since the last v3.2 release. If you test on v3.2.12, here are some of the unreleased screen-reader-related changes to be aware of: Desktop: Recent screen-reader-related changes
Edited: Changed v3.2.11 to v3.2.12 as the stable release version. This version is built from the |
@personalizedrefrigerator would you be able to toss me a dist of the windows build of that branch? I'd rather test with latest, but I spent a few hours trying to get it to build and was not really getting anywhere with it :) if that's tricky I can test with stable, just figured it'd be aeasier to work with something that already has the latest fixes integrated so I'm not covering old ground as it were |
I'll look into creating a new 3.3 pre-release after some of the recent accessibility pull requests have been merged! Update: This might take a day or two — there are two major regressions that should be fixed first (a crash and missing menu items). Update 2: Waiting for #11737 to be reviewed... |
I've been playing with the latest release and so far, very much liking what I'm seeing. There is one question I have that I might just be misunderstanding. |
Here are two ways:
I think @pedr has recommended creating a walkthrough or tutorial for the keyboard shortcuts available in the app.
Thank you for the suggestion! Related notes
|
Update: Making an official prerelease is taking a while (related to this issue). If you would like help building the Windows version, I would be happy to assist. |
Summary
[ Progress: Desktop ] | [ Progress: Mobile ]
This issue tracks Joplin's progress towards compliance with the WCAG (Web Content Accessibility Guidelines) v2.2.
Updated at 2025-02-03
About the WCAG
The WCAG (Web Content Accessibility Guidelines) is a set of guidelines for improving web accessibility.
The WCAG is divided into success criteria. Each is labelled with "Level A", "Level AA", or "Level AAA". These correspond to different conformance levels.
Conformance levels
There are three different conformance levels1:
According to WebAIM.org2,
The WCAG's definition of the different conformance levels1 confirms WebAIM's statement that Level AAA is not always achievable:
Note
It is not recommended that Level AAA conformance be required as a general policy for entire sites because it is not possible to satisfy all Level AAA success criteria for some content.
Based on the above, for now, this issue targets Level AA conformance with the WCAG.
This issue: General tasks
Notes: In this issue, different task priorities are marked differently. For example,
Note
The tasks below are a work-in-progress and based on the WCAG 2.2 spec. Completing the tasks below does not guarantee compliance with the spec.
Quick list of general issues
react-native-paper
.role
information (not announced as buttons). (SC 4.1.2)Desktop
Note
Several relevant changes were made shortly before this issue was created:
1. Perceivable
Summary: All non-decorative components of the user interface should be described in a way perceivable to the user.
1.1.1 Non-text content (Level A)
To meet this requirement, all inputs controls and inputs must be labeled.
Tasks:
1.2.1. Audio-only and Video-only, 1.2.2. Captions (Prerecorded), and 1.2.3. Audio Description or Media Alternative (Prerecorded)
Joplin allows users to include prerecorded audio and video in notes. When included as a link (e.g.
[link](:/resourceidhere000000000000000000)
), the generated HTML video element has no associated description.In the desktop app, we should:
image
s,video
s andaudio
elements?Also see the spec for related tasks.
1.3 Adaptable
Summary: Content must be presentable in different ways without losing information.
1.3.1. Info and Relationships (Level A)
role=search
#11644role=navigation
-- Desktop: Accessibility: Mark secondary screen navigation bars as navigation regions #11650role=main
-- Desktop: Fix errors found by automated accessibility testing #11246role=navigation
-- Desktop: Fix errors found by automated accessibility testing #11246aria-labelledby
(or perhapsaria-label
) for groups and landmarkslabel
elements to label form controlsNote: This is important even if the icons are hidden from a screen reader — some accessibility tools replace fonts on a page for readability. Marking icons created from a font as such should prevent these accessibility tools from treating them as text.
Effect: It's currently impossible or difficult to tell whether some item is a subsection of another.
aria-level
along with thetree
pattern -- Desktop: Accessibility: Add ARIA information to the sidebar's notebook and tag list #11196aria-errormessage
to associate the error message with the input on the "Keyboard shortcuts" page. #11637::before
or::after
to include non-decorative content (see F87)?1.3.2. Meaningful Sequence (Level A)
flex-order
or similar order-changing CSS. Are we usingflex-order
anywhere? See F1.1.3.3. Sensory Characteristics (Level A)
Note: §1.4 covers color guidelines.
This task refers to instructions.
For example, "press the red button in the bottom right corner of the screen to edit" would be bad.
We should:
1.3.4. Orientation (Level AA)
Currently, Joplin doesn't restrict devices to a single orientation. However, it may be difficult to use the desktop app on a phone-sized device in portrait mode. In particular, without moving the sidebars from "View" > "Change application layout".
1.3.5. Identify input purpose (AA)
In particular
See input-purposes for a list of input purposes such that
type=text
for setting note alarms (perhaps use<input type=datetime-local>
). Desktop: Accessibility: Replacing library used for datetime with native input element #11725type=search
for search inputsautocomplete=
attributes in settings1.4 Distinguishable
Color for distinguishing content (§1.4.1, A):
Audio control (§1.4.2, A)
At present, all audio should be user-created (and only auto-play if this is set by the user in HTML). Additionally, audio included with
[](:/resourceidhere)
has Electron-provided controls.Minimum contrast (§1.4.3, AA):
Note: It might not be necessary to improve contrast of inactive buttons (despite having low contrast). See discussion and "incidental" in §1.4.3.
Resize text (§1.4.4, AA):
Joplin already supports zoom with ctrl-+ and ctrl--
Avoid images of text unless customizable/essential (§1.4.5, AA):
SubNotebooks.png
, which includes text that isn't presented elsewhere. Addressed in Desktop: Resolves #11642: Add alt text to welcome notes #11643Note: See the WCAG spec for §1.4.6-1.4.9 (all level AAA).
1.4.10: Reflow (AA)
1.4.11: Non-text contrast (AA)
1.4.12: Text spacing (AA)
Users should be able to override Joplin's styles (through OS accessibility settings?) in the following ways and still use the app:
In particular, content should not be clipped.
1.4.13: Content on Hover or Focus (AA)
When content (e.g. tooltips) can be shown by hovering with the mouse pointer, it should also be possible to show them with a keyboard.
At present, this isn't possible with most
title=
tooltips (at least on Linux). However, the WCAG includes an exception that might be relevant here:As an Electron app, however, Joplin is the user agent, and so this might not apply.
2. Operable
2.1.1. Keyboard (A)
Make it possible toDocument how to navigate to the Rich Text Editor toolbar with just a keyboard.2.1.2. No Keyboard Trap (A)
2.1.3. Keyboard (No Exception) (AAA):
Equivalent to §2.1.1, but removes exceptions.
2.1.4. Character Key Shortcuts (A)
If there are unmodified keyboard shortcuts implemented with just a letter/punctuation/special character, then at least one of the following must be true:
Joplin doesn't seem to have character key shortcuts.
2.2. Provide users enough time to read and use content
2.2.1. Timing Adjustable (A)
2.2.2. Pause, Stop, Hide
This includes:
§2.2.3-2.2.6 (Level AAA): Concerned with interruptions and timing.
2.3. Seizures: Don't design content in a way that is known to cause seizures
2.4. Navigable
2.4.1. Bypass Blocks (Level A)
Joplin currently has menu items and keyboard shortcuts to jump focus to the note list, sidebar, note title, and note editor (Go > Focus > ...).
2.4.2. Page Titled (Level A)
2.4.3. Focus Order (Level A)
Related (§2.4.3): #10817
2.4.4. Link Purpose (In Context) (Level A)
aria-labelledby
attribute?2.4.5. Multiple Ways (Level AA)
2.4.6. Headings and Labels (Level AA)
<h1>
/etc. tag for the "NOTEBOOKS" heading. This may need to be changed.role=navigation
and has anaria-label
. As such, marking "NOTEBOOKS" as a heading might not be necessary (or even be distracting/redundant).2.4.7. Focus Visible (Level AA)
<select>
elements -- Desktop: Accessibility: Make keyboard focus visible for dropdowns #111772.4.9. Link Purpose (Link Only) (Level AAA)
Based on the "sufficient techniques" section and the "ambiguous to users in general", this seems to be primarily targeted at screen reader users (e.g. when cycling through the links available on a page). To meet this, we might start by:
Also to research:
2.4.10. Section Headings (Level AAA)
Given the second note above, this section likely applies mostly to Joplin's welcome notes and settings screen. At present, the welcome notes use headings.
2.4.11. Focus Not Obscured (Minimum) (Level AA)
2.4.12. Focus Not Obscured (Enhanced) (Level AAA)
2.4.12 is equivalent to 2.4.11, but removes exceptions. See the task list for § 2.4.11.
2.4.13. Focus Appearance (Level AAA)
Skipped (level AAA).
2.5.1. Pointer Gestures (Level A)
Also:
2.5.2. Pointer Cancellation (Level A)
Note dragging: Dragging the note back to its original location cancels the action.
Notebook dragging: Dragging a notebook back to its original location (before lifting the pointer) cancels the action.
[🟡] Clicking on a dialog's dimmed background seems to only be cancellable by dragging the pointer outside the main Joplin window.
Note
A search for
mousedown
andpointerdown
in Joplin's GitHub repository results in very few matches:mousedown
event for the editor's plugin compatibility layer.pointerdown
This suggests (but does not imply) that Joplin desktop doesn't directly handle pointer down events.
2.5.3. Label in Name (Level A)
Welcome notes:
2.5.4. Motion Actuation (Level A)
Joplin for desktop seems to not have functionality that can be activated by device motion (e.g. accelerometer).
2.5.5. Target Size (Enhanced) (Level AAA)
Skipped (Level AAA).
2.5.6. Concurrent Input Mechanisms (Level AAA)
Skipped (Level AAA).
2.5.7. Dragging Movements (Level AA)
Based on the description of §2.5.1, satisfying 2.5.1 seems to imply that 2.5.7 is also satisfied.
Note that the extended description of this section states:
...and later...
For now, see the checklist for §2.5.1.
2.5.8. Target Size (Minimum) (Level AA)
To change:
3.1.1. Language of Page (Level A)
For HTML, H57 recommends using the
lang
attribute. Among other reasons, this is so thatlang
attribute to match Joplin's current locale -- Desktop: Accessibility: Declare app locale with the HTML lang attribute #11218.3.1.2. Language of Parts (Level AA)
lang="en"
.3.1.3. Unusual words (Level AAA)
3.1.4. Abbreviations (Level AAA)
Skipped (Level AAA)
3.1.5. Reading Level (Level AAA)
Skipped (Level AAA)
3.1.6. Pronunciation
3.2 - Predictable
3.2.1. On Focus (Level A)
Note
The WCAG defines "changes of context" to be:
It includes "focus" and "content that changes the meaning of the web page" as examples.
3.2.2. On Input (Level A)
3.3.1. Error identification (A)
3.3.2. Labels or instructions (A)
The description of this success criterion includes:
As such, this may also apply to repeated buttons or other controls used to select options.
3.3.3. Error Suggestion (Level AA)
aria-invalid="true"
. This might be sufficient.3.3.4. Error Prevention (Legal, Financial, Data) (Level AA)
This guideline is described as applying to systems that "modify or delete user-controllable data in data storage systems". Joplin manages user data. Checking whether Joplin complies with this guideline might involve:
3.3.5. Help (Level AAA)
This success criterion suggests, for example,
3.3.6. Error Prevention (All) (Level AAA)
This is equivalent to SC 3.3.4, but applies to a larger set of applications.
3.3.7. Redundant Entry (Level A)
The success criterion's extended description also states:
I'm unaware of cases where Joplin requests data re-entry (except in the case of passwords). The success criterion does include search as an example, however. As such,
3.3.8. Accessible Authentication (Minimum) (Level AA)
The guidelines also state that supporting password manager input and allowing copy/paste to reduce re-typing satisfy this criterion.
3.3.9. Accessible Authentication (Enhanced) (Level AAA)
The WCAG states:
Joplin should allow pasting passwords from password managers or other applications when signing in to sync targets that authenticate through the app. Sync targets that authenticate through a web browser (e.g. Joplin Cloud) should also allow using the user's password manager.
§4 - Robust
4.1.2. Name, Role, Value (Level A)
At present, most ARIA-related tasks are listed under SC 1.3.1. In addition to those, issues include:
role=
).aria
information (e.g.aria-controls
).4.1.3. Status Messages (Level AA)
Several status messages need appropriate accessibility information to be exposed:
role=status
could be distracting when navigating with a screen reader. Implement Add a button to hide the synchronisation panel #8611 first.role=log
is one possible alternative.Footnotes
https://www.w3.org/WAI/WCAG22/Understanding/conformance#conf-req1 ↩ ↩2
https://webaim.org/standards/wcag/#current ↩
The text was updated successfully, but these errors were encountered: