From: Bill Erickson Date: Tue, 5 Mar 2019 22:07:21 +0000 (-0500) Subject: LP1816480 Angular grid ARIA improvements X-Git-Url: http://git.equinoxoli.org/?p=evergreen-equinox.git;a=commitdiff_plain;h=67e85c40d41c46fd123eed51729f966d9336549f LP1816480 Angular grid ARIA improvements Various navigation and "role" improvements to the Angular grid: * Apply "grid", "row", "columnheader", and "gridcell" role attributes. * Page-Down goes to next page * Page-Up goes to previous page * Shift-UpArrow extends selection one row up (spanning pages). * Shift-DownArrow extends selection one row down (spanning pages). * Shift-Arrow controls support reverse navigation for back-tracking to de-select certain rows. ** E.g. shift-up 3 rows then shift-down 1 will leave 2 rows selected. * Control-A now selects all rows in the page. ** For consistency with the select-all checkbox, only rows in the current page are selected. ** Note we could add an option to extend the selection to all rows, but it would require pre-fetching all of the data, simimar to how grid printing pre-fetches. Signed-off-by: Bill Erickson Signed-off-by: Jane Sandberg --- diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html index 8d495aa..a9f35aa 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html @@ -2,7 +2,7 @@ tabindex=1 so the grid body can capture keyboard events. -->
-
@@ -27,7 +27,8 @@
-
this.context.selectFirstRow(), err => {}); evt.stopPropagation(); break; case 'ArrowRight': + case 'PageDown': this.context.toNextPage() .then(ok => this.context.selectFirstRow(), err => {}); evt.stopPropagation(); break; + case 'a': + // control-a means select all visible rows. + // For consistency, select all rows in the current page only. + if (evt.ctrlKey) { + this.context.rowSelector.clear(); + this.context.selectRowsInPage(); + evt.preventDefault(); + } + break; + case 'Enter': if (this.context.lastSelectedIndex) { this.grid.onRowActivate.emit( diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html index 98a6fbf..96811a3 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html @@ -1,26 +1,31 @@ -
+
-
- +
+
-
+
#
-
notifications
-
- {{col.label}} this.batchRowCheckbox = true + ); + } onColumnDragEnter($event: any, col: any) { if (this.dragColumn && this.dragColumn.name !== col.name) { @@ -71,9 +77,7 @@ export class GridHeaderComponent implements OnInit { } selectAll() { - const rows = this.context.dataSource.getPageOfRows(this.context.pager); - const indexes = rows.map(r => this.context.getRowIndex(r)); - this.context.rowSelector.select(indexes); + this.context.selectRowsInPage(); } allRowsAreSelected(): boolean { diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html index 5dd307f..af223fe 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html @@ -19,7 +19,7 @@ @@ -29,6 +29,9 @@
+
+ {{gridContext.rowSelector.selected().length}} selected +