[]
        
(Showing Draft Content)

Accessibility Extender

앱별 접근성 추가

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을 모델로 사용합니다. 그러나 접근성을 더 잘 지원하기 위해 키보드 처리 로직에 몇 가지 변경을 추가했습니다.

  1. Ctrl+UP/DOWN: Excel은 해당 키들을 사용하여 선택을 그리드의 첫 번째/마지막 행으로 이동시키지만, 제어 화살표는 접근성 도구에서 광범위하게 사용됩니다. 따라서 FlexGrid는 첫 번째 및 마지막 행으로 이동하기 위해 대신 Alt+PAGEUP/DOWN을 사용합니다.

  2. Tab: Excel에서는 Tab 키를 사용하여 셀을 순환합니다. 그러나 이는 기본적인 브라우저 동작인 포커스를 다음 요소로 이동시키는 동작과 충돌이 날 수 있습니다. 이를 방지하기 위해서 FlexGrid의 기본 동작은 브라우저가 포커스를 처리하도록 하지만, 사용자가 Excel과 유사한 동작으로 되돌릴 수 있도록 keyActionTab 속성을 추가했습니다.

  3. 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();  

셀을 클릭하거나 선택하고, 노드를 확장/축소하거나, 셀과 관련된 드롭다운 리스트 상자를 펼치는 등의 작업을 시뮬레이션하는 데 동일한 접근 방식을 사용할 수 있습니다.