accessibility

Wagtail 6.3 ATAG 2.0 audit & accessibility roadmap

Audit findings overview

At the success criteria level as per the W3C ATAG report tool, pass/fail:

At the success criteria level, by level of conformance:

At the guidelines level as per the W3C Authoring Tools list, with partial support:

A. Make the authoring tool user interface accessible

B. Support the production of accessible content

A. Make the authoring tool user interface accessible

A.1. Authoring tool user interfaces follow applicable accessibility guidelines

A.1.1. (For the authoring tool user interface) Ensure that web-based functionality is accessible

See Implementing A.1.1.

A.1.1.1 Web-Based Accessible (WCAG)

(Level A / AA / AAA). See Implementing A.1.1.1.

Fail. Evaluated as: Level AA. Wagtail currently targets WCAG 2.2 AA and ATAG 2.0 AA conformance for the administrative interface of the CMS. Though a lot of progress has been made, there are still known conformance issues and possible improvements.

As a representation of the state of Wagtail’s WCAG 2.1 AA conformance, here is a summary of WCAG 2.2 AA and best practice issues across releases, for the page editor UI (tested with Welcome to the Wagtail bakery!):

Version Total Color contrast nested-interactive aria-valid-attr-value aria-input-field-name Links purpose Empty heading Heading order region Landmark unique
6.3 2 0 0 0 2 0 0 0 0 0
6.2 2 0 0 0 2 0 0 0 0 0
6.1 2 0 0 0 2 0 0 0 0 0
6.0 2 0 0 0 2 0 0 0 0 0
5.2 6 2 0 1 2 0 0 0 0 1
5.1 6 2 0 1 2 0 0 0 0 1
5.0 7 2 0 1 2 2 0 0 0 0
4.2 13 8 0 1 2 2 0 0 0 0
4.1 12 7 0 1 2 2 0 0 0 0
4.0 7 1 0 1 2 2 1 0 0 0
3.0 24 16 0 2 2 2 1 1 0 0
2.16 30 16 3 3 2 2 1 1 1 0

Suggested next steps:

References:

Full list of 21 currently-documented accessibility issues in GitHub:

There have been 19 issues fixed since the last ATAG 2.0 audit:

A.1.2. (For the authoring tool user interface) Ensure that non-web-based functionality is accessible

See Implementing A.1.2.

A.1.2.1 Accessibility Guidelines

(Level A). See Implementing A.1.2.1.

Not applicable. Wagtail is a web-based CMS.

A.1.2.2 Platform Accessibility Services

(Level A). See Implementing A.1.2.2.

Not applicable. Wagtail is a web-based CMS.

A.2. Editing-views are perceivable

A.2.1. (For the authoring tool user interface) Make alternative content available to authors

See Implementing A.2.1.

A.2.1.1 Text Alternatives for Rendered Non-Text Content

(Level A). See Implementing A.2.1.1.

Fail. For icons within the CMS, all have appropriate alt text. For CMS-managed images, Wagtail renders non-text content in nine scenarios, five of which are related to editing views and would require changes:

Outside editing views (possibly not part of ATAG requirements), Wagtail renders images in the following scenarios:

Recommendation for Wagtail: Consider how best to sign-post the Description field as the image’s alt text in the CMS, and potentially also in the frontend (with clear options to mark images as decorative or define alt text in context).

Reference: RFC 97: Alt Text Capabilities.

A.2.1.2 Alternatives for Rendered Time-Based Media

(Level A). See Implementing A.2.1.2.

Fail. Wagtail’s only time-based media is animated GIFs. Their text alternatives work identically to other images in Wagtail, with the same characteristics listed in SC A.2.1.1.

A.2.2. (For the authoring tool user interface) Ensure that editing-view presentation can be programmatically determined

See Implementing A.2.2.

A.2.2.1 Editing-View Status Indicators

(Level A). See Implementing A.2.2.1.

Fail. Wagtail uses the following status indicators in editing views:

Outside editing views (possibly not part of ATAG requirements), Wagtail renders status indicators in the following scenarios:

A.2.2.2 Access to Rendered Text Properties

(Level AA). See Implementing A.2.2.2.

Not applicable. Wagtail doesn’t allow editing of any text properties associated with the content.

A.3. Editing-views are operable

A.3.1. (For the authoring tool user interface) Provide keyboard access to authoring features

See Implementing A.3.1.

A.3.1.1 Keyboard Access (Minimum)

(Level A). See Implementing A.3.1.1.

Fail. Though the majority of the authoring tool’s functionality is keyboard accessible, there are specific areas that aren’t:

A.3.1.2 No Keyboard Traps

(Level A). See Implementing A.3.1.2.

Pass. There are no known keyboard traps in the administrative interface.

A.3.1.3 Efficient Keyboard Access

(Level AA). See Implementing A.3.1.3.

Pass. The administrative interface provides the following mechanisms to improve keyboard navigation:

A.3.1.4 Keyboard Access (Enhanced)

(Level AAA). See Implementing A.3.1.4.

Fail. See A.3.1.1 Keyboard Access. We would expect addressing all aspects listed in A.3.1.1 to also address this criterion.

A.3.1.5 Customize Keyboard Access

(Level AAA). See Implementing A.3.1.5.

Fail. None of Wagtail’s keyboard commands can be customized.

Proposed actions:

A.3.1.6 Present Keyboard Commands

(Level AAA). See Implementing A.3.1.6.

Pass. Across specific areas:

Proposed actions:

A.3.2. (For the authoring tool user interface) Provide authors with enough time

See Implementing A.3.2.

A.3.2.1 Auto-Save (Minimum)

(Level A). See Implementing A.3.2.1.

Fail. Wagtail doesn’t provide auto-save functionality. For Wagtail sites, the default session time limit is 2 weeks. See Autosave #24 on the Wagtail roadmap.

A.3.2.2 Timing Adjustable

(Level A). See Implementing A.3.2.2.

Pass. For Wagtail sites, the default session time limit is 2 weeks.

A.3.2.3 Static Input Components

(Level A). See Implementing A.3.2.3.

Pass. There are no moving input components in the CMS.

A.3.2.4 Content Edits Saved (Extended)

(Level AAA). See Implementing A.3.2.4.

Fail. Wagtail doesn’t provide auto-save functionality. See A.3.2.1 Auto-Save (Minimum). We expect the same approach to be followed for both SCs.

A.3.3. (For the authoring tool user interface) Help authors avoid flashing that could cause seizures

See Implementing A.3.3.

A.3.3.1 Static View Option

(Level A). See Implementing A.3.3.1.

Fail. Animated GIFs auto-play when rendered, with no option to pause them.

Proposed actions:

A.3.4. (For the authoring tool user interface) Enhance navigation and editing via content structure

See Implementing A.3.4.

A.3.4.1 Navigate By Structure

(Level AA). See Implementing A.3.4.1.

Not applicable. Markup elements aren’t exposed in the CMS.

A.3.4.2 Navigate by Programmatic Relationships

(Level AAA). See Implementing A.3.4.2.

Pass. The only editable programmatic relationships are headings and element nesting in rich text fields, which can be navigated via the keyboard.

A.3.5. (For the authoring tool user interface) Provide text search of the content

See Implementing A.3.5.

(Level AA). See Implementing A.3.5.1.

Fail. Wagtail supports browsers’ built-in text search which meets all criteria, but only allows searching within the currently-active tab of the editing view. For example, for pages, content under the “Promote” tab will only be searchable when this tab is active.

Proposed actions:

A.3.6. (For the authoring tool user interface) Manage preference settings

See Implementing A.3.6.

A.3.6.1 Independence of Display

(Level A). See Implementing A.3.6.1.

Pass. All of Wagtail’s UI settings can be adjusted without modifying the content.

A.3.6.2 Save Settings

(Level AA). See Implementing A.3.6.2.

Pass. Specific settings are saved differently. The following settings are persistent for a given user profile, across all sessions of said user:

The following settings are persistent for a given browser, across all sessions within said browser:

A.3.6.3 Apply Platform Settings

(Level AA). See Implementing A.3.6.3.

Pass. Wagtail’s language, time zone, and theme settings default to respecting platform settings until set to a specific value by the user.

A.3.7. (For the authoring tool user interface) Ensure that previews are at least as accessible as in-market user agents

See Implementing A.3.7.

A.3.7.1 Preview (Minimum)

(Level A). See Implementing A.3.7.1.

Pass. Wagtail’s live preview for pages and snippets and its draft renders within the user’s browser.

A.3.7.2 Preview (Enhanced)

(Level AAA). See Implementing A.3.7.2.

Pass. Wagtail’s live preview for pages and snippets can only display within the user’s browser, but all saved draft content can be previewed in any browser/device the user is logged in.

A.4. Editing-views are understandable

A.4.1. (For the authoring tool user interface) Help authors avoid and correct mistakes

See Implementing A.4.1.

A.4.1.1 Content Changes Reversible (Minimum)

(Level A). See Implementing A.4.1.1.

Fail. Though a large number of authoring actions are reversible, not all are. The following actions are reversible:

The following actions are not reversible but do require confirmation to proceed:

The following actions are not reversible and do not require confirmation to proceed:

A.4.1.2 Settings Change Confirmation

(Level A). See Implementing A.4.1.2.

Pass. All of Wagtail’s UI settings saved at the browser level can be reversed by the user directly within the UI. All of the settings saved at the user profile level can be set to an “unset” default value.

Recommendation for Wagtail:

A.4.1.3 Content Changes Reversible (Enhanced)

(Level AAA). See Implementing A.4.1.3.

Pass. Reversible plain text and rich text content changes can be reversed sequentially while the user remains on the page. Content supporting revisions can be restored at any point in the content’s history.

A.4.2. (For the authoring tool user interface) Document the user interface, including all accessibility features

See Implementing A.4.2.

A.4.2.1 Describe Accessibility Features

(Level A). See Implementing A.4.2.1.

Pass. The following functionality would be used to meet Part A and needs to be described either in the documentation or in the user interface:

The following functionality is described in the user interface:

The following functionality is described in the documentation:

The following functionality is provided by the underlying platform:

A.4.2.2 Document All Features

(Level AA). See Implementing A.4.2.2.

Fail. Here is a high-level record of whether given functionality is documented. As a summary:

This record does not cover functionality provided by the underlying platform (for example; automated embed creation) or unused by authors.

Functionality Documented?
Global Partial
Skip link Yes
No-JS warning message No
Sidebar Yes
Header No
Messages No
Relative date No
Status tag Yes
Table listing No
Pagination No
Dashboard Yes
Unauthorized access (403) No
Page not found (404) No
Accessibility checker No
Wagtail userbar No
Pages Partial
Pages explorer Yes
Add child page Yes
Page type usage Yes
Privacy Yes
Move pages No
Copy Yes
Delete No
Publish No
Unpublish No
View all revisions Yes
Compare revisions No
Review revision Yes
Create Yes
Edit Yes
Edit - Promote tab No
Preview No
Scheduled publishing Yes
Explorer - Bulk actions Yes
Explorer - Bulk move No
Explorer - Bulk delete No
Explorer - Bulk publish No
Explorer - Bulk unpublish No
Explorer - View child pages Yes
Explorer - View child pages - Reorder child pages No
Explorer - View child pages - Sort by column No
Explorer - Root level No
Search Yes
Search - Filtered No
Images Partial
View all No
Search No
Search - Filtered No
Edit Yes
Add an image No
Add multiple images No
Delete No
Image URL generator No
Bulk actions Yes
Bulk add tags No
Bulk add to collection No
Bulk add delete No
Documents Partial
View all No
Search No
Search - Filtered No
Edit Yes
Add a document No
Add multiple documents No
Delete No
Bulk actions Yes
Bulk add tags No
Bulk add to collection No
Bulk add delete No
Snippets Partial
View all types Yes
View all No
Search snippets No
Edit Yes
Add No
Delete No
Bulk delete No
Publish No
Unpublish No
Preview No
Scheduled publishing No
View all revisions No
Compare revisions No
Review revision No
Forms No
View all No
View submissions No
Reports Yes
Locked Pages Yes
Workflows Yes
Workflow tasks Yes
Site history Yes
Aging pages Yes
Page types usage Yes
Workflows Partial
View all Yes
Add No
Usage No
Edit Yes
Workflow tasks Partial
View all Yes
Add Yes
Edit No
Disable No
Users Partial
View all Yes
Search No
Edit No
Edit - Edit roles No
Add No
Add - Add roles No
Delete No
Bulk actions Yes
Bulk delete No
Bulk set active state No
Bulk assign role No
Groups No
View all No
Search No
Add a group No
Edit No
Delete No
Group users No
Sites No
View all No
Edit No
Add a site No
Delete No
Locales No
View all No
Edit No
Add a locale No
Delete No
Collections Partial
View all Yes
Edit No
Add a collection Yes
Privacy Yes
Redirects Yes
View all Yes
Search Yes
Import redirects Yes
Add Yes
Export Redirects Yes
Edit Yes
Delete Yes
Promoted search Yes
View all Yes
Search Yes
Edit Yes
Add results Yes
Delete Yes
User account Yes
Account profile Yes
Account notifications Yes
Styleguide No
Styleguide No
Auth No
Login No
Password reset No
Password reset done No

B. Support the production of accessible content

B.1. Fully automatic processes produce accessible content

B.1.1. Ensure that automatically-specified content is accessible

See Implementing B.1.1.

B.1.1.1 Content Auto-Generation After Authoring Sessions (WCAG)

(Level A / AA / AAA). See Implementing B.1.1.1.

Pass. Evaluated as: Level AAA. Wagtail doesn’t automatically generate content after authoring sessions. Processes that operate after authoring sessions and could alter the content are scheduled publishing and search index updates, but in both cases any automatically-generated content would already be present during the session.

B.1.1.2 Content Auto-Generation During Authoring Sessions (WCAG)

(Level A / AA / AAA). See Implementing B.1.1.2.

Pass. Evaluated as: Level AA. Wagtail automatically generates content in a few scenarios. In the following scenarios, markup is accessible without further work:

Proposed actions:

B.1.2. Ensure that accessibility information is preserved

See Implementing B.1.2.

B.1.2.1 Restructuring and Recoding Transformations (WCAG)

(Level A / AA / AAA). See Implementing B.1.2.1.

Not applicable. Evaluated as: Level AA. The only transformation present in Wagtail is processing of clipboard paste information in rich text fields to sanitize the content, which preserves accessibility semantics for preserved content, but isn’t considered a content transformation per ATAG.

If it was considered a content transformation – rich paste processing preserves all formatting supported in rich text fields. Heading levels, bullet lists, and image alt text are preserved in particular.

B.1.2.2 Copy-Paste Inside Authoring Tool (WCAG)

(Level A / AA / AAA). See Implementing B.1.2.2.

Pass. Evaluated as: Level AA. Wagtail supports copy-paste of rich text content, which is fully preserved when copy-pasting between fields configured to support the same formatting. Fields configured differently will accordingly have their formatting stripped as needed.

B.1.2.3 Optimizations Preserve Accessibility

(Level A). See Implementing B.1.2.3.

Not applicable. Wagtail doesn’t perform any optimizations that would affect accessibility.

B.1.2.4 Text Alternatives for Non-Text Content are Preserved

(Level A). See Implementing B.1.2.4.

Not applicable. See B.1.2.1 Restructuring and Recoding Transformations (WCAG).

B.2. Authors are supported in producing accessible content

B.2.1. Ensure that accessible content production is possible

See Implementing B.2.1.

B.2.1.1 Accessible Content Possible (WCAG)

(Level A / AA / AAA). See Implementing B.2.1.1.

Fail. Evaluated as: Level AA. Wagtail places extensive restrictions on the production of web content, which all nonetheless allow for the production of accessible content, with the exception of:

Proposed actions:

B.2.2. Guide authors to produce accessible content

See Implementing B.2.2.

B.2.2.1 Accessible Option Prominence (WCAG)

(Level A / AA / AAA). See Implementing B.2.2.1.

Pass. Evaluated as: Level AA. Where text styling options are available, they are presented alongside semantic formatting options such as headings. This is for example the case in rich text formatting options.

For StreamField block formats, the order is up to each site implementer to decide on. There are no built-in formats that are automatically included.

B.2.2.2 Setting Accessibility Properties (WCAG)

(Level A / AA / AAA). See Implementing B.2.2.2.

Not applicable. Evaluated as: Level AAA. Wagtail doesn’t support setting web content attribute values. This has been discussed extensively for links, as well as an option to set aria-label, but hasn’t been implemented yet.

See:

B.2.3. Assist authors with managing alternative content for non-text content

See Implementing B.2.3.

B.2.3.1 Alternative Content is Editable (WCAG)

(Level A / AA / AAA). See Implementing B.2.3.1.

Pass. Evaluated as: Level AA. All areas where images can be used support providing alt text. This includes:

B.2.3.2 Automating Repair of Text Alternatives

(Level A). See Implementing B.2.3.2.

Pass. Wagtail doesn’t attempt to repair text alternatives. It does use the image’s file name as the default value for the image’s title field when creating a new image, which is used for alt text, but this is part of the upload/editing process (In-Session Repairs) and not an automated process. Said file name is filtered by default to remove the file extension.

B.2.3.3 Save for Reuse

(Level AAA). See Implementing B.2.3.3.

Fail. By default, Wagtail saves each image’s text alternative and reuses it everywhere the image is reused (“Save and Suggest”). It is possible to replace this text alternative with a new one, but it isn’t possible to delete it.

Suggested action: incorporate this requirement into the contextual alt text support.

B.2.4. Assist authors with accessible templates

See Implementing B.2.4.

B.2.4.1 Accessible Template Options (WCAG)

(Level A / AA / AAA). See Implementing B.2.4.1.

Fail. Evaluated as: Level AA. With rich text formatting and StreamField blocks, Wagtail provides templates for basic text content as well as complex formatting like tables. Wagtail also provides templates for form fields within its forms module. Specific templates have accessibility issues.

Rich text formats

Note: Blockquote formatting does not support the optional blockquote cite attribute or <cite> element.

Field block types
Template Accessibility issues with output
CharBlock None
TextBlock None
EmailBlock None
IntegerBlock None
FloatBlock None
DecimalBlock None
RegexBlock None
URLBlock None
BooleanBlock None
DateBlock None
TimeBlock None
DateTimeBlock None
RichTextBlock None
RawHTMLBlock None
BlockQuoteBlock None
ChoiceBlock None
MultipleChoiceBlock None
PageChooserBlock None
DocumentChooserBlock None
ImageBlock None
ImageChooserBlock None
SnippetChooserBlock None
EmbedBlock None
TableBlock None
TypedTableBlock None

Note: BlockQuoteBlock does not support the optional blockquote cite attribute or <cite> element.

Structural block types

Structural block types do not render any content and as such have no accessibility issues.

Template Accessibility issues
StaticBlock None
StructBlock None
ListBlock None
StreamBlock None
Form builder field types

All form builder fields suffer from the same issue: Error messages aren’t programmatically associated with the field.

Template Accessibility issues
Single line text Errors association with fields.
Multi-line text Errors association with fields.
Email Errors association with fields.
Number Errors association with fields.
URL Errors association with fields.
Checkbox Errors association with fields.
Checkboxes Errors association with fields.
Drop down Errors association with fields.
Multiple select Errors association with fields.
Radio buttons Errors association with fields.
Date Errors association with fields.
Date/time Errors association with fields.
Hidden field None

This may be addressed in the future, via improvements in Django. See:

Proposed actions:

B.2.4.2 Identify Template Accessibility

(Level AA). See Implementing B.2.4.2.

Pass. Wagtail’s template selection mechanism is the block chooser (or field chooser for form builder fields). In both cases, there would be no options defined unless configured by site implementers, which can customize block icons or labels / names to indicate accessible block types.

B.2.4.3 Author-Created Templates

(Level AA). See Implementing B.2.4.3.

Not applicable. Wagtail doesn’t allow authors to create custom block templates.

B.2.4.4 Accessible Template Options (Enhanced)

(Level AAA). See Implementing B.2.4.4.

Fail. Some of Wagtail’s template options aren’t accessible. See B.2.4.1 Accessible Template Options.

B.2.5. Assist authors with accessible pre-authored content

See Implementing B.2.5.

B.2.5.1 Accessible Pre-Authored Content Options

(Level AA). See Implementing B.2.5.1.

Not applicable. Wagtail doesn’t provide pre-authored content.

B.2.5.2 Identify Pre-Authored Content Accessibility

(Level AA). See Implementing B.2.5.2.

Not applicable. Wagtail doesn’t provide pre-authored content.

B.3. Authors are supported in improving the accessibility of existing content

B.3.1. Assist authors in checking for accessibility problems

See Implementing B.3.1.

B.3.1.1 Checking Assistance (WCAG)

(Level A / AA / AAA). See Implementing B.3.1.1.

Pass. Evaluated as: Level A. There are a number of formatting / content entry options in the CMS that can lead to accessibility issues. The built-in accessibility checker provides automated tests for a number of possible issues, but not all. Available checks are:

There are a number of success criteria that do not have automated checks nor instructions for manual checking:

Proposed actions:

B.3.1.2 Help Authors Decide

(Level A). See Implementing B.3.1.2.

Not applicable. Currently all of Wagtail’s automated checks are pass/fail with no author input required. Discussion on further checks: Content quality checkers #11063

B.3.1.3 Help Authors Locate

(Level A). See Implementing B.3.1.3.

Not applicable. Currently all of Wagtail’s automated checks are pass/fail with no author input required. Those checks do indicate which elements they are flagging. Proposed improvements:

B.3.1.4 Status Report

(Level AA). See Implementing B.3.1.4.

Pass. Wagtail’s accessibility checker reports on the number of detected issues, and upon interaction lists all rules that detected problems and where on the page.

Possible improvements:

B.3.1.5 Programmatic Association of Results

(Level AA). See Implementing B.3.1.5.

Fail. Currently the association isn’t programmatic, due to expected compatibility issues.

Possible resolution: Correct identification of Wagtail content so errors are only reported on CMS-managed content.

B.3.2. Assist authors in repairing accessibility problems

See Implementing B.2.3.

B.3.2.1 Repair Assistance (WCAG)

(Level A / AA / AAA). See Implementing B.3.2.1.

Fail. Evaluated as: Level A. Currently Wagtail’s 9 rules report the presence of a problem but do not suggest specific solutions.

Proposed improvements:

B.4. Authoring tools promote and integrate their accessibility features

B.4.1. Ensure the availability of features that support the production of accessible content

See Implementing B.4.1.

B.4.1.1 Features Active by Default

(Level A). See Implementing B.4.1.1.

Pass. Wagtail’s accessibility checker is on by default and cannot be turned off unless site implementers make CMS customizations in code.

B.4.1.2 Option to Reactivate Features

(Level A). See Implementing B.4.1.2.

Pass. See B.4.1.1 Features Active by Default.

B.4.1.3 Feature Deactivation Warning

(Level AA). See Implementing B.4.1.3.

Pass. See B.4.1.1 Features Active by Default.

B.4.1.4 Feature Prominence

(Level AA). See Implementing B.4.1.4.

Pass. Wagtail currently has no features relating to invalid markup, syntax errors, spelling errors, grammar errors. Possible future changes:

B.4.2. Ensure that documentation promotes the production of accessible content

See Implementing B.4.2.

B.4.2.1 Model Practice (WCAG)

(Level A / AA / AAA). See Implementing B.4.2.1.

Fail. Evaluated as: Level AA. Wagtail’s documentation for content authors does not demonstrate accessible authoring practices. The documentation for developers does: Accessibility considerations.

Proposed actions:

B.4.2.2 Feature Instructions

(Level A). See Implementing B.4.2.2.

Pass. Wagtail’s accessibility checker, heading levels, and alt text implementation are documented in the guide for content authors. The documentation for developers also cover this.

Proposed actions:

B.4.2.3 Tutorial

(Level AAA). See Implementing B.4.2.3.

Fail. Wagtail’s accessibility features doesn’t have a tutorial.

Proposed actions:

B.4.2.4 Instruction Index

(Level AAA). See Implementing B.4.2.4.

Fail. Wagtail’s documentation for content author does not have such an index. The documentation for developers does.

Proposed actions: