]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add aria-sort to Grid (#10007)
authorKnoobie <Knoobie@gmx.de>
Mon, 18 Sep 2017 07:47:46 +0000 (09:47 +0200)
committerHenri Sara <henri.sara@gmail.com>
Mon, 18 Sep 2017 07:47:46 +0000 (10:47 +0300)
This adds basic support for aria-sort for Grid (https://www.w3.org/TR/wai-aria-1.1/#aria-sort).

- aria-sort is not added, if the column is not sortable
- aria-sort="none" is added, if the column is sortable but currently not sorted
- aria-sort="ascending" is added, if the column is sorted by asc
- aria-sort="descending" is added, if the column is sorted by desc
- aria-sort="other" is added, if more than 1 column is sorted, currently there is no aria-sort-order

client/src/main/java/com/vaadin/client/widgets/Grid.java
uitest/src/test/java/com/vaadin/tests/components/grid/GridSortIndicatorTest.java

index 92765eec894614c4f9c21af9c73eeef3d6258bff..578f260a1e71bd5157c7ee11f23bd40be7fb2830 100755 (executable)
@@ -5998,6 +5998,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
 
             if (sortable) {
                 cellElement.addClassName("sortable");
+                cellElement.setAttribute("aria-sort", "none");
             }
 
             if (!sortable || sortingOrder == null) {
@@ -6007,16 +6008,18 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
 
             if (SortDirection.ASCENDING == sortingOrder.getDirection()) {
                 cellElement.addClassName("sort-asc");
+                cellElement.setAttribute("aria-sort", "ascending");
             } else {
                 cellElement.addClassName("sort-desc");
+                cellElement.setAttribute("aria-sort", "descending");
             }
 
             int sortIndex = Grid.this.getSortOrder().indexOf(sortingOrder);
             if (sortIndex > -1 && Grid.this.getSortOrder().size() > 1) {
                 // Show sort order indicator if column is
                 // sorted and other sorted columns also exists.
-                cellElement.setAttribute("sort-order",
-                        String.valueOf(sortIndex + 1));
+                cellElement.setAttribute("sort-order", String.valueOf(sortIndex + 1));
+                cellElement.setAttribute("aria-sort", "other");
             }
 
             if (!sortedBefore) {
@@ -6058,6 +6061,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
         private void cleanup(FlyweightCell cell) {
             Element cellElement = cell.getElement();
             cellElement.removeAttribute("sort-order");
+            cellElement.removeAttribute("aria-sort");
             cellElement.removeClassName("sort-desc");
             cellElement.removeClassName("sort-asc");
             cellElement.removeClassName("sortable");
index 429e5a671ee1882543a52de6d7b6d7e814054c6a..2f623e1c512a9fcd98525aebbc96461bbe9a6376 100644 (file)
@@ -35,18 +35,26 @@ public class GridSortIndicatorTest extends SingleBrowserTest {
         Assert.assertTrue("First column should be sorted ascending",
                 grid.getHeaderCell(0, 0).getAttribute("class")
                         .contains("sort-asc"));
+        Assert.assertEquals("First column should have aria-sort other", "other",
+                grid.getHeaderCell(0, 0).getAttribute("aria-sort"));
         Assert.assertEquals("First column should be first in sort order", "1",
                 grid.getHeaderCell(0, 0).getAttribute("sort-order"));
         Assert.assertTrue("Second column should be sorted ascending",
                 grid.getHeaderCell(0, 1).getAttribute("class")
                         .contains("sort-asc"));
+        Assert.assertEquals("Second column should have aria-sort other", "other",
+                grid.getHeaderCell(0, 1).getAttribute("aria-sort"));
         Assert.assertEquals("Second column should be also sorted", "2",
                 grid.getHeaderCell(0, 1).getAttribute("sort-order"));
 
         $(ButtonElement.class).caption("Sort first").first().click();
+        Assert.assertEquals("First column should have aria-sort ascending", "ascending",
+                grid.getHeaderCell(0, 0).getAttribute("aria-sort"));
         Assert.assertTrue("First column should be sorted ascending",
                 grid.getHeaderCell(0, 0).getAttribute("class")
                         .contains("sort-asc"));
+        Assert.assertEquals("Second column should have aria-sort none", "none",
+                grid.getHeaderCell(0, 1).getAttribute("aria-sort"));
         Assert.assertFalse("Second column should not be sorted",
                 grid.getHeaderCell(0, 1).getAttribute("class")
                         .contains("sort-asc"));