[]
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を渡すことで、AccessibilityExtenderを作成し、FlexGridに関連付けます。 次に、このオブジェクトの alert メソッドを使用して、グリッドとの対話がフィルタリングか並べ替えかを問わず、ユーザーに通知できます。
FlexGridは、キーボード処理を含む多くの操作のモデルとしてMicrosoftExcelを使用します。 ただし、アクセシビリティに対応するために、キーボード処理ロジックにいくつかの変更を加えました。
FlexGridで使用される他のキーボードコマンドはARIAの推奨事項に従っており、Excelとほぼ互換性があります。
キーボードの組み合わせ | アクション Performed |
---|---|
Shift + Space | 行を選択 |
Ctrl + Space | 列を選択 |
Space | 編集を開始するか、チェックボックスを切り替えます |
Ctrl + A | グリッドコンテンツ全体を選択します |
Left/Right | 選択範囲の左/右にあるセルを選択します |
Shift + Left/Right | 選択範囲を拡張して、選択範囲の左/右にセルを含めます |
Shift + Up/Down | 選択範囲を拡張して、選択範囲の上/下のセルを含めます |
Alt + Up/Down | 現在のセルのリストボックスエディタをドロップダウンします |
PageUp/Down | 選択範囲の1ページ上/下のセルを選択します |
Shift + PageUp/Down | 選択範囲を拡張して、選択範囲の1ページ上/下のセルを含めます |
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は、子要素へのイベントハンドラーの追加を回避し、代わりにそれらをグリッドのホスト要素にアタッチします。 次に、ヒットテストロジックに基づいてコマンドを適切な子要素に転送します。 これは、子要素の「クリック」メソッドを直接呼び出すことによって、子要素への参照を取得し、コードでイベントを発生させることを期待するアクセシビリティシナリオでいくつかの問題を提示します。
このシナリオに対応するために、Wijmoには、要素をパラメーターとして受け取り、必要なヒットテスト情報を構築する新しい HitTest コンストラクターが追加されました。これにより、グリッドはコード内のクリックイベントの発生を受け入れることができます。 たとえば、次のコードを使用して、列ヘッダーに「クリック」イベントを生成できます。
// 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();
同じアプローチに従って、クリックをシミュレートしてセルを選択したり、ノードを展開/折りたたんだり、セルに関連付けられたリストボックスをドロップダウンしたりできます。