]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add aria-modal attribute and role='dialog' for modal Window (#10447)
authorOlli Tietäväinen <ollit@vaadin.com>
Tue, 9 Jan 2018 13:36:55 +0000 (15:36 +0200)
committerTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>
Mon, 15 Jan 2018 09:43:19 +0000 (11:43 +0200)
Fixes #10424

client/src/main/java/com/vaadin/client/ui/VWindow.java
uitest/src/test/java/com/vaadin/tests/components/window/ModalWindowFocusTest.java

index 02d3ce63cd05d1e72360bffb3750da9c35f85f99..a07a08ef99a06f8018a091e1df67e0c8b97616b7 100644 (file)
@@ -444,7 +444,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
                     && nativeEvent.getKeyCode() == KeyCodes.KEY_TAB
                     && nativeEvent.getShiftKey()) {
                 nativeEvent.preventDefault();
-                FocusUtil.focusOnLastFocusableElement(this.getElement());
+                FocusUtil.focusOnLastFocusableElement(getElement());
             }
             if (nativeEvent.getEventTarget().cast() == topTabStop
                     && nativeEvent.getKeyCode() == KeyCodes.KEY_BACKSPACE) {
@@ -461,7 +461,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
                     && nativeEvent.getKeyCode() == KeyCodes.KEY_TAB
                     && !nativeEvent.getShiftKey()) {
                 nativeEvent.preventDefault();
-                FocusUtil.focusOnFirstFocusableElement(this.getElement());
+                FocusUtil.focusOnFirstFocusableElement(getElement());
             }
             if (nativeEvent.getEventTarget().cast() == bottomTabStop
                     && nativeEvent.getKeyCode() == KeyCodes.KEY_BACKSPACE) {
@@ -706,12 +706,16 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
     public void setVaadinModality(boolean modality) {
         vaadinModality = modality;
         if (vaadinModality) {
+            getElement().setAttribute("aria-modal", "true");
+            Roles.getDialogRole().set(getElement());
             if (isAttached()) {
                 showModalityCurtain();
             }
             addTabBlockHandlers();
             deferOrdering();
         } else {
+            getElement().removeAttribute("aria-modal");
+            Roles.getDialogRole().remove(getElement());
             if (modalityCurtain != null) {
                 if (isAttached()) {
                     hideModalityCurtain();
index b01a9ded14f3c816a260b26e27c9f3e9fe92c682..8cbb9d6ae96e134af60d91ff900fed29fc3f3eac 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.vaadin.tests.components.window;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -91,6 +92,21 @@ public class ModalWindowFocusTest extends MultiBrowserTest {
 
     }
 
+    @Test
+    public void verifyAriaModalAndRoleAttributes() {
+        waitForElementPresent(By.id("firstButton"));
+        WebElement button = findElement(By.id("firstButton"));
+        button.click();
+
+        waitForElementPresent(By.className("v-window"));
+        WebElement windowElement = findElement(By.className("v-window"));
+        String ariaModal = windowElement.getAttribute("aria-modal");
+        assertEquals("true", ariaModal);
+        String role = windowElement.getAttribute("role");
+        assertEquals("dialog", role);
+
+    }
+
     private void pressEscAndWait() {
         new Actions(driver).sendKeys(Keys.ESCAPE).build().perform();
         sleep(100);