Доступность в DHTMLX Spreadsheet
Это руководство предназначено для разработчиков, которые встраивают DHTMLX Spreadsheet в приложение с требованиями к доступности. Используйте его, чтобы сверить компонент со своим чек-листом и настроить его для пользователей клавиатуры, скринридеров и высококонтрастных тем.
Spreadsheet выводит в разметке роли и состояния WAI-ARIA. Фокус клавиатуры остается на активной ячейке, а панель инструментов, строка меню и вкладки листов представляют собой по одной точке табуляции. Изменения, у которых нет собственного элемента, например отклоненное редактирование или результат поиска, попадают в live-область, которую скринридеры зачитывают вслух.
DHTMLX Spreadsheet разработан в соответствии с WCAG 2.2 Level AA, Section 508 закона США Rehabilitation Act и EN 301 549 (техническая основа European Accessibility Act).
Соответствие отражено по каждому критерию для DHTMLX Spreadsheet 6.0.4. Доступен подробный Отчет о соответствии требованиям доступности (VPAT® 2.5): Accessibility Conformance Report.
Возможности
| Область | Поддержка |
|---|---|
| Работа с клавиатуры | У каждой команды для ячеек есть клавиша. Панель инструментов, строка меню и вкладки листов представляют собой единые точки табуляции, навигация по ним выполняется стрелками. Для ширины столбца, высоты строки и фильтра столбца есть команды контекстного меню, поэтому перетаскивание или щелчок по иконке не требуются |
| Семантика WAI-ARIA | Ячейки образуют grid с элементами columnheader, rowheader и gridcell. Роли выводятся всегда |
| Модель фокуса | Фокус клавиатуры находится на активной ячейке. Tab входит в лист на активную ячейку и покидает его с последней и первой ячейки. Ctrl + F6 перемещает фокус между меню, панелью инструментов, листом и вкладками листов |
| Модель выделения | Активная ячейка, диапазон и несколько диапазонов передаются через aria-selected, а размер диапазона озвучивается. Выделение можно отключить с помощью опции selection |
| Режим только для чтения | По листу можно перемещаться, выделять, копировать и искать; редактирование отклоняется и озвучивается, контекстное меню недоступно |
| Скринридеры | Протестировано с NVDA, JAWS и VoiceOver |
| Визуальная доступность | Темы contrast-light и contrast-dark, видимый индикатор фокуса в каждой теме и признаки, не зависящие от цвета |
| Масштабирование текста и страницы | Интерфейс остается работоспособным при масштабе 200% и 400% и при переопределении межстрочных и межбуквенных интервалов |
| Настройка | Публичный метод announce() для собственных сообщений и переводимые строки локали aria_* для каждого встроенного имени и уведомления |
| Стандарты | WCAG 2.2 AA, Section 508, EN 301 549 |
Охватываемые области
Это руководство охватывает виджет Spreadsheet:
- ячейки, заголовки столбцов и строк, объединенные ячейки и закрепленные строки и столбцы
- выделение: активная ячейка, диапазоны и несколько диапазонов
- строка формул и редакторы ячеек, включая редактор ячейки со списком значений
- панель инструментов с popup-окнами выбора цвета и границ, строка меню и контекстные меню
- вкладки листов
- сортировка, фильтрация, поиск, валидация данных, ссылки в ячейках, импорт и экспорт
- темы и индикатор фокуса
Доступность итоговой страницы также зависит от приложения-хоста. См. Ответственность страницы-хоста.
Поддержка WAI-ARIA
Spreadsheet автоматически добавляет в разметку роли и атрибуты WAI-ARIA, отключить их нельзя. У каждой части виджета есть своя роль и имя, а имена берутся из локали.
Контейнер Spreadsheet
Части Spreadsheet представляют собой отдельные именованные элементы управления:
| Часть | Роль / атрибут | Доступное имя |
|---|---|---|
| Строка меню | role="menubar" + aria-label | "Main" |
| Панель инструментов | role="toolbar" + aria-label | "Formatting" |
| Строка формул | aria-label на поле ввода | "Formula bar, B7", с адресом активной ячейки |
| Ячейки | role="grid" + aria-label | "Spreadsheet" |
| Вкладки листов | role="toolbar" + aria-label | "Sheets" |
| Live-область | role="status", aria-live="polite", aria-atomic="true" | визуально скрыта, расположена рядом с гридом вне role="grid" |
У корневого элемента Spreadsheet нет роли ориентира (landmark), поэтому вы можете поместить его в подходящий для вашей страницы ориентир.
Поверхность ячеек
Следующие атрибуты описывают ячейки в целом. Их содержит элемент .dhx_grid-content:
| Селектор | Роль / атрибут | Назначение |
|---|---|---|
.dhx_grid-content | role="grid" | Интерактивный грид ячеек |
.dhx_grid-content | aria-label | "Spreadsheet", из ключа локали aria_grid |
.dhx_grid-content | aria-rowcount | Количество строк листа плюс строка заголовка |
.dhx_grid-content | aria-colcount | Количество видимых столбцов плюс столбец с номерами строк |
.dhx_grid-content | aria-readonly | "true" в режиме только для чтения и пока выделение отключено |
.dhx_grid-content | aria-multiselectable | "true"; "false", пока выделение отключено |
Строки и ячейки
В следующей таблице перечислены роли, а также атрибуты позиции и состояния строк и ячеек:
| Селектор | Роль / атрибут | Назначение |
|---|---|---|
| Строка | role="row" + aria-rowindex | Строка листа. У строки 1 листа aria-rowindex="2", так как заголовок столбцов является первой строкой |
| Ячейка | role="gridcell" + aria-colindex | Ячейка. У столбца A aria-colindex="2", так как номера строк являются первым столбцом |
| Номер строки | role="rowheader" | Заголовок строки |
| Ячейка | aria-selected | "true" на активной ячейке и на каждой ячейке выделенных диапазонов |
| Ячейка | aria-readonly | "true" в режиме только для чтения, пока выделение отключено, и на заблокированных ячейках |
| Ячейка | tabindex | "0" на активной ячейке и "-1" на остальных, поэтому ячейки представляют собой одну точку табуляции |
| Активная ячейка | DOM-фокус | Фокус клавиатуры находится на самой активной ячейке, а не на отдельном поле ввода. Пока ячейка редактируется, фокус находится на редакторе ячейки |
| Объединенная ячейка | aria-colspan / aria-rowspan | Количество столбцов или строк, которые занимает объединенная ячейка. Покрытые ею ячейки скрыты с помощью aria-hidden="true" |
| Ссылка в ячейке | <a href> с target="_blank" и rel="noopener noreferrer" | Ссылка со схемой http, https, mailto, ftp или tel |
Ячейка также содержит визуально скрытый текст, который скринридеры зачитывают вместе со значением:
| Скрытый текст | Когда |
|---|---|
| Адрес ячейки, например "B7" | На активной ячейке и на каждой ячейке выделенного диапазона. Скринридеры зачитывают адрес перед значением |
| "link" | На выделенной ячейке со ссылкой. Alt + Enter открывает ссылку |
| "locked" | На выделенной заблокированной ячейке |
| Описание ошибки формулы, например "Reference error. Check the cell references" | На ячейке с ошибкой формулы |
| "Invalid value. Choose a value from the list" | На ячейке, значения которой нет в ее списке значений |
| "Filter" / "Filter applied" | На ячейке с иконкой фильтра |
Заголовки столбцов и строк
| Селектор | Роль / атрибут | Назначение |
|---|---|---|
| Буква столбца | role="columnheader" + aria-colindex | Заголовок столбца |
| Угол выделения всего листа | role="columnheader" | Имя "Select all" |
| Номер строки | role="rowheader" | Заголовок строки |
| Иконка меню столбца, иконки скрытых строк и столбцов | aria-hidden="true" | Декоративные. Команды находятся в контекстном меню |
Заголовки не являются точками табуляции. Щелчок по букве столбца, номеру строки или углу выделяет строки или столбцы и возвращает фокус на активную ячейку.
Строка формул и редакторы
| Селектор | Роль / атрибут | Назначение |
|---|---|---|
| Поле ввода строки формул | aria-label | "Formula bar, B7", с адресом активной ячейки. На заблокированной ячейке поле ввода имеет атрибут readonly, поэтому его значение по-прежнему можно прочитать. Пока выделение отключено, строка формул пуста и заблокирована |
| Поле ввода редактора ячейки | aria-label | "Cell editor, B7" |
| Редактор ячейки со списком значений | role="combobox", aria-controls, aria-expanded, aria-activedescendant | Список значений представляет собой listbox из элементов option, а у выделенной опции есть aria-selected |
| Редактор с недопустимым значением | aria-invalid="true" | Сохраненного значения ячейки нет в ее списке значений. Атрибут обновляется после сохранения значения, а не во время ввода |
| Иконка закрытия справки по формуле | role="button" + aria-label | "Close formula help" |
Панель инструментов и меню
| Селектор | Роль / атрибут | Назначение |
|---|---|---|
| Панель инструментов | role="toolbar" + aria-label | "Formatting"; панели инструментов popup-окна границ, строки поиска и popup-окна ссылки называются "Borders", "Search" и "Link" |
| Кнопка панели инструментов | aria-label | Значение кнопки. Кнопка с иконкой получает имя из подсказки, например "Bold (ctrl+b)". Иконки скрыты с помощью aria-hidden="true" |
| Bold, Italic, Underline, Strikethrough, Lock, Filter | aria-pressed | Включено ли форматирование или фильтр |
| Кнопка, открывающая выпадающий список | aria-haspopup="menu", aria-expanded | Выпадающий список представляет собой menu, названное по своей кнопке |
| Выравнивание, перенос текста, числовые форматы | role="menuitemradio" + aria-checked | Один вариант из взаимоисключающего набора |
| Text color, Background color, Border color | aria-label | Название элемента управления и текущего цвета, например "Text color: dark gray" |
| Цветовая палитра | role="grid" из элементов gridcell | Грид называется "Color palette". Каждая цветовая ячейка названа по своему цвету, а у выбранной есть aria-selected="true" |
| Список стилей границ | role="listbox" из элементов option | Опции называются "Thin line", "Medium line", "Thick line", "Dashed line", "Dotted line", "Double line" |
| Строка меню | role="menubar" + aria-label | "Main". Ее пункты открывают popup-окна с role="menu". В popup-окнах у пунктов форматирования role="menuitemcheckbox", а у пунктов выравнивания, переноса текста и числовых форматов role="menuitemradio". Оба вида сообщают свое состояние через aria-checked |
| Контекстные меню | role="menu" + aria-label | "Cell" для ячеек и "Sheet" для вкладок листов |