[]
Wijmo의 FlexGrid 컨트롤은 광범위한 내장 접근성 지원 기능을 가지고 있지만, 애플리케이션이나 사용자 기반하여 특정 추가 지원을 제공하고 싶은 상황이 있을 수 있습니다.
접근성 지원 기능을 확장하는 방법을 보여드리기 위해, 열이 정렬되었을 때와 필터가 적용되었을 때 사용자에게 알리는 방법에 대해 설명하겠습니다.
// Extend accessibility features
var acX = new AccessibilityExtender(theGrid);
// Notify users when columns are sorted
theGrid.sortedColumn.addHandler(function(s, e) {
let col = s.columns[e.col];
acX.alert('column ' + col.header + ' sorted in ' + (col.currentSort == '+' ? 'ascending' : 'descending') + ' order');
});
// Hook up to filter
var toSearch = null;
document.getElementById('filter').addEventListener('input', function(e) {
clearTimeout(toSearch);
toSearch = setTimeout(function () {
var search = e.target.value, rx = new RegExp(search, 'i');
theGrid.collectionView.filter = function (item) {
return !search || JSON.stringify(item).match(rx) != null;
};
// notify users that a filter was applied
setTimeout(function () {
var msg = search ? 'grid filtered on ' + search : 'filter removed';
msg += ': ' + theGrid.rows.length + ' items displayed';
acX.alert(msg);
}, 200);
}, 900);
})
우리는 AccessibilityExtender 객체를 생성하고 우리의 FlexGrid를 인수로 전달하여 접근성 확장기를 만들고 FlexGrid에 연결합니다. 그런 다음 이 객체의 alert 메서드를 사용하여 사용자가 그리드와 상호 작용할 때, 즉 필터링이나 정렬을 할 때 사용자에게 알릴 수 있습니다.
FlexGrid는 키보드 처리 등 많은 작업에서 Microsoft Excel을 모델로 사용합니다. 그러나 접근성을 더 잘 지원하기 위해 키보드 처리 로직에 몇 가지 변경을 추가했습니다.
Ctrl+UP/DOWN: Excel은 해당 키들을 사용하여 선택을 그리드의 첫 번째/마지막 행으로 이동시키지만, 제어 화살표는 접근성 도구에서 광범위하게 사용됩니다. 따라서 FlexGrid는 첫 번째 및 마지막 행으로 이동하기 위해 대신 Alt+PAGEUP/DOWN을 사용합니다.
Tab: Excel에서는 Tab 키를 사용하여 셀을 순환합니다. 그러나 이는 기본적인 브라우저 동작인 포커스를 다음 요소로 이동시키는 동작과 충돌이 날 수 있습니다. 이를 방지하기 위해서 FlexGrid의 기본 동작은 브라우저가 포커스를 처리하도록 하지만, 사용자가 Excel과 유사한 동작으로 되돌릴 수 있도록 keyActionTab 속성을 추가했습니다.
Enter: 사용자가 Enter 키의 동작을 사용자 정의할 수 있도록 keyActionEnter 속성을 추가했습니다.
FlexGrid에서 사용하는 다른 키보드 명령은 ARIA 권장 사항을 따르며 대체로 Excel과 호환됩니다.
키보드 조합 | 수행되는 작업 |
---|---|
Shift + Space | 행 선택 |
Ctrl + Space | 열 선택 |
Space | 편집 시작 또는 체크박스 전환 |
Ctrl + A | 전체 그리드 컨텐츠 선택 |
Left/Right | 선택한 왼쪽/오른쪽 셀 선택 |
Shift + Left/Right | 현재 선택 영역을 왼쪽/오른쪽 셀을 포함하여 확장 |
Shift + Up/Down | 현재 선택 영역을 위/아래 셀을 포함하여 확장 |
Alt + Up/Down | 현재 셀의 드롭다운 리스트 상자의 편집기를 펼 |
PageUp/Down | 현재 선택 영역 위/아래로 한 페이지 셀을 선택 |
Shift + PageUp/Down | 현재 선택 영역을 위/아래로 한 페이지 셀을 포함하여 확장 |
Alt + PageUp/Down | 선택영역을 첫 번째/마지막 행으로 이동 |
Shift + Alt + PageUp/Down | 현재 선택 영역을 첫 번째/마지막 행을 포함하여 확장 |
Home/End | 선택영역을 첫 번째/마지막 열로 이동 |
Shift + Home/End | 현재 선택 영역을 첫 번째/마지막 열을 포함하여 확장 |
Ctrl + Home/End | 선택 영을 첫 번째/마지막 행과 열로 이동 |
Shift + Ctrl + Home/End | 현재 선택 영역을 첫 번째/마지막 행과 열을 포함하여 확장 |
Escape | 현재 셀이나 행 편집 작업을 취소 |
Tab | 페이지에서 다음 포커스 가능한 요소로 이동 (keyActionTab 속성을 사용하여 재정의할 수 있음). |
Enter | 편집 모드를 종료하고 현재 셀 아래로 선택을 이동 (keyActionEnter 속성을 사용하여 재정의할 수 있음). |
Delete, Backspace | 현재 선택된 행을 삭제 (allowDelete 속성이 true로 설정된 경우), 또는 선택된 셀의 내용을 지 (값이 필요하지 않은 경우). |
Ctrl + C or Ctrl + Insert | 선택 영역을 클립보드로 복사(autoClipboard 속성이 true로 설정된 경우) |
Ctrl + V or Shift + Insert | 클립보드의 내용을 선택된 영역에 붙여넣기 (autoClipboard 속성이 true로 설정된 경우). |
FlexGrid은 자식 요소에 이벤트 핸들러를 추가하는 것을 피하는 대신 그리드의 호스트 요소에 이벤트 핸들러를 추가합니다. 그런 다음 hit-testing 로직을 기반으로 적절한 자식 요소로 명령을 전달해줍니다. 이로 인해 코드에서 자식 요소의 "click" 메서드를 직접 호출하여 이벤트를 발생시키고 참조를 얻기를 기대하는 접근성 시나리오에서 일부 문제가 발생할 수 있습니다.
이러한 시나리오를 수용하기 위해, Wijmo는 이제 요소를 매개변수로 사용하여 필요한 히트 테스트 정보를 구축하는 새로운 HitTest 생성자를 제공합니다. 예를 들어, 다음 코드를 사용하여 열 머리글에서 "click" 이벤트를 생성할 수 있습니다:
// Get the header cell
var headerCell = grid.columnHeaders.getCellElement(0,0);
// Invoke the “click” event on the header cell
headerCell.click();
또는 다음 코드를 사용하여 특정 열의 필터 편집기를 펼칠 수 있습니다:
// Get the filter glyph element using a CSS selector
var selector = '.wj-flexgrid .wj-colheaders .wj-cell .wj-elem-filter'; var filterBtn = grid.hostElement.querySelector(selector);
columnHeaders.getCellElement(0, 0);
// Invoke the “click” event on the filter glyph
filterBtn.click();
셀을 클릭하거나 선택하고, 노드를 확장/축소하거나, 셀과 관련된 드롭다운 리스트 상자를 펼치는 등의 작업을 시뮬레이션하는 데 동일한 접근 방식을 사용할 수 있습니다.