Accessibility Support
Out of the box, the Telerik and Kendo UI Scheduler provides extensive accessibility support and enables users with disabilities to acquire complete control over its features.
The Scheduler is compliant with the Web Content Accessibility Guidelines (WCAG) 2.2 standards and Section 508 requirements, follows the Web Accessibility Initiative - Accessible Rich Internet Applications (WAI-ARIA) best practices for implementing the keyboard navigation for its component
role, provides options for managing its focus and is tested against the most popular screen readers.
WAI-ARIA
This section lists the selectors, attributes, and behavior patterns supported by the component and its composite elements, if any.
The component is a single tab stop, so the arrows must be used for internal navigation. Notable exception is that scrollable containers in non-agenda views should be focusable too.
Scheduler Wrapping Element
Selector | Attribute | Usage |
---|---|---|
.k-scheduler | role=application | Specifies the role of the component. |
aria-activedescendant=.k-event.k-selected id | Points to the currently active appointment in the Scheduler. |
Scheduler Toolbar
The Scheduler toolbar must implement the specification for a ToolBar component.
Below are listed the requirements for those components part of the ToolBar.
Selector | Attribute | Usage |
---|---|---|
.k-nav-prev,.k-nav-next | aria-label | Required as those buttons contain only icon (no text). |
.k-nav-current | aria-live=polite | The new date of the Scheduler view will be announced upon navigation to new time span / view type. |
.k-views-dropdown | aria-label | Specifies the purpose of the element. The <select> element visible on the toolbar on small screens must have its aria-label set. |
Depending on the current view, The Scheduler component implements different roles. Below are described the three possible approaches:
Scheduler in Agenda view
In case of an Agenda view, the role assigned to the Scheduler layout table (k-scheduler-layout
element) must be grid
.
Table element
Selector | Attribute | Usage |
---|---|---|
.k-scheduler-agendaview | role=grid | The main table of the Agenda view must indicate it is a Data Grid. |
.k-scheduler-agendaview>tbody | role=none/presentation | The <tbody> element must have its semantics removed. |
.k-scheduler-agendaview .k-scheduler-table | role=none/presentation | Those <table> elements within the Scheduler must have their semantic role removed. |
.k-scheduler-agendaview .k-scheduler-table>tbody | role=rowgroup | Those elements must have their role explicitly set as it has been removed by the <table> role set (none/presentation). |
.k-scheduler-agendaview .k-scheduler-table>tbody>tr | role=row | Those elements must have their role explicitly set as it has been removed by the <table> role set (none/presentation). |
.k-scheduler-agendaview .k-scheduler-table>tbody>tr>th | role=columnheader | Those elements must have their role explicitly set as it has been removed by the <table> role set (none/presentation). |
.k-scheduler-agendaview .k-scheduler-content tr .k-selected | aria-selected | aria-selected attribute must be used to signify the currently selected row. As in Agenda view the selection follows focus, that would be the current active descendant row. |
Content table td.k-scheduler-groupcolumn and td.k-scheduler-datecolumn elements
Selector | Attribute | Usage |
---|---|---|
.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-groupcolumn,.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-datecolumn | role=rowheader | Those elements must have their role explicitly set as it has been removed by the <table> role set (none/presentation). |
.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-timecolumn,.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-timecolumn+td | role=gridcell | Those elements must have their role explicitly set as it has been removed by the <table> role set (none/presentation). |
Scheduler in Year view
Scheduler in Year view implements the ARIA specification of the MultiViewCalendar.
Scheduler in all other views
For the rest of the views the role="none/presentation"
must be used on all inner <table>
elements in the widget. This way we could freely implement managed focused inside the component based on the arrow keys.
Selector | Attribute | Usage |
---|---|---|
.k-scheduler-dayview,.k-scheduler-monthview,.k-scheduler-timelineview | role=none/presentation | All <table> elements within the Scheduler must have their semantic role removed. |
.k-event | role=button | Indicating that the events element is interactive. |
aria-label | Label containing the title, start, and end date of the appointment, so that all of them are announced upon navigation to an appointment. | |
.k-scheduler-layout:not(.k-scheduler-agendaview) .k-scheduler-content | tabindex=0 | Scrollable elements need to be focusable (does not apply to agenda view) to ensure scrolling with the arrow keys is available. |
Managing the Focus
The component is a single tab stop, so the arrows must be used for internal navigation.
The navigation will be always on, and won't need a Navigable
parameter like the Grid. Focusing the Component will have the following effect, depending on whether appointments are loaded, or the component is empty:
- empty scheduler - the focus is on the scheduler component itself.
- non-empty - the first appointment is focused.
Roving tab index is used to track the currently focused appointment.
After CRUD operation, if the manipulated appointment remains in the current view, the focus should return to that appointment. If it has been deleted, or it has been edited, so that it moves outside of the current view, the focus should reset to the first appointment in the view (if any), or to the Scheduler itself.
Keyboard Shortcuts
Scheduler Content
Actions applied to the content
Shortcut | Behavior |
---|---|
t | navigates to today's time period |
c | opens the popup for creation of new appointment |
b | toggles view between business hours and full day (where available) |
Shift+ Left Arrow | navigates to the previous time period |
Shift+ Right Arrow | navigates to the next time period |
Alt/Opt(Mac) + 1,2,3,... | navigates to the view with the respective number |
F10 | Focuses the ToolBar. |
Actions applied to focusable appointments
All of the content keyboard shortcuts work when focus is on the appointment. In addition to that we also have:
Shortcut | Behavior |
---|---|
Arrow Keys | move focus through appointments |
Enter | opens the Edit Popup to modify the appointment |
Delete/Backspace | opens the Delete confirmation popup to modify the appointment |
Actions when Scheduler is in Year view
Scheduler content in Year view implements keyboard navigation spec for the MultiViewCalendar. In addition it also has the following shortcuts:
Shortcut | Behavior |
---|---|
Enter | If date is focused, opens its Tooltip. |
Enter | If Tooltip is focused, navigates to Day view displaying the Tooltip date. |
Delete/Backspace | If a Tooltip is focused, closes that and returns focus to its target date. |
Scheduler Toolbar
Shortcut | Behavior |
---|---|
Left/Right ArrowKeys | move focus through tools |
Down ArrowKeys | moves focus to the selected (if present), or the first event (if any) in the view |
Scheduler Popups
Using the default Window component shortcuts
Testing
The Scheduler has been extensively tested automatically with axe-core and manually with the most popular screen readers.
Screen Readers
The Scheduler has been tested with the following screen readers and browsers combinations:
Environment | Tool |
---|---|
Firefox | NVDA |
Chrome | JAWS |
Microsoft Edge | JAWS |