]> source.dussan.org Git - vaadin-framework.git/commitdiff
WAI-ARIA button (#11380)
authormichaelvogt <michael@vaadin.com>
Wed, 20 Mar 2013 16:09:49 +0000 (18:09 +0200)
committerVaadin Code Review <review@vaadin.com>
Thu, 28 Mar 2013 16:03:45 +0000 (16:03 +0000)
Accessibility functions for Button

Change-Id: I12ddfd8232d4d35135add1cb4406bfdc20b758f2

client/src/com/vaadin/client/ui/VButton.java
client/src/com/vaadin/client/ui/button/ButtonConnector.java
server/src/com/vaadin/ui/Button.java
shared/src/com/vaadin/shared/ui/button/ButtonState.java

index decfb7c0cc1ba9dd1c5c66c221660589dfdb5c15..28a2221380dd40245b8dbb2011fa20d3fb19f5e6 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.vaadin.client.ui;
 
+import com.google.gwt.aria.client.Roles;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
@@ -25,7 +26,6 @@ import com.google.gwt.event.dom.client.KeyCodes;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.Accessibility;
 import com.google.gwt.user.client.ui.FocusWidget;
 import com.vaadin.client.ApplicationConnection;
 import com.vaadin.client.BrowserInfo;
@@ -103,7 +103,7 @@ public class VButton extends FocusWidget implements ClickHandler {
                 | Event.KEYEVENTS);
 
         // Add a11y role "button"
-        Accessibility.setRole(getElement(), Accessibility.ROLE_BUTTON);
+        Roles.getButtonRole().set(getElement());
 
         getElement().appendChild(wrapper);
         wrapper.appendChild(captionElement);
@@ -357,14 +357,12 @@ public class VButton extends FocusWidget implements ClickHandler {
             this.enabled = enabled;
             if (!enabled) {
                 cleanupCaptureState();
-                Accessibility.removeState(getElement(),
-                        Accessibility.STATE_PRESSED);
                 super.setTabIndex(-1);
             } else {
-                Accessibility.setState(getElement(),
-                        Accessibility.STATE_PRESSED, "false");
                 super.setTabIndex(tabIndex);
             }
+
+            Roles.getButtonRole().setAriaDisabledState(getElement(), !enabled);
         }
     }
 
index 9733d206c712a32fad7a382777a8d666fec485e7..fff983c1687da09691a084a3408d8730a581c779 100644 (file)
@@ -24,6 +24,7 @@ import com.google.gwt.event.dom.client.FocusEvent;
 import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
 import com.vaadin.client.EventHelper;
 import com.vaadin.client.MouseEventDetailsBuilder;
 import com.vaadin.client.communication.StateChangeEvent;
@@ -83,8 +84,10 @@ public class ButtonConnector extends AbstractComponentConnector implements
                 if (getIcon() != null) {
                     if (getWidget().icon == null) {
                         getWidget().icon = new Icon(getConnection());
-                        getWidget().wrapper.insertBefore(
-                                getWidget().icon.getElement(),
+                        Element iconElement = getWidget().icon.getElement();
+                        iconElement.setAttribute("alt", getState().iconAltText);
+
+                        getWidget().wrapper.insertBefore(iconElement,
                                 getWidget().captionElement);
                     }
                     getWidget().icon.setUri(getIcon());
index fcfc55aadc86c3a5a755b968e10eec3c929ebb6e..1bcf802f126cf0263d04226f3f5dbfee112453e0 100644 (file)
@@ -32,6 +32,7 @@ import com.vaadin.event.ShortcutAction;
 import com.vaadin.event.ShortcutAction.KeyCode;
 import com.vaadin.event.ShortcutAction.ModifierKey;
 import com.vaadin.event.ShortcutListener;
+import com.vaadin.server.Resource;
 import com.vaadin.shared.MouseEventDetails;
 import com.vaadin.shared.ui.button.ButtonServerRpc;
 import com.vaadin.shared.ui.button.ButtonState;
@@ -580,6 +581,35 @@ public class Button extends AbstractComponent implements
         return (ButtonState) super.getState();
     }
 
+    /**
+     * Sets the component's icon and alt text.
+     * 
+     * An alt text is shown when an image could not be loaded, and read by
+     * assisitve devices.
+     * 
+     * @param icon
+     *            the icon to be shown with the component's caption.
+     * @param iconAltText
+     *            String to use as alt text
+     */
+    public void setIcon(Resource icon, String iconAltText) {
+        super.setIcon(icon);
+        getState().iconAltText = iconAltText == null ? "" : iconAltText;
+    }
+
+    /**
+     * Returns the icon's alt text.
+     * 
+     * @return String with the alt text
+     */
+    public String getIconAlternateText() {
+        return getState().iconAltText;
+    }
+
+    public void setIconAlternateText(String iconAltText) {
+        getState().iconAltText = iconAltText;
+    }
+
     /**
      * Set whether the caption text is rendered as HTML or not. You might need
      * to retheme button to allow higher content than the original text style.
index a33a9f78dba75b0aedb95b061edd56b73fc4198d..7e1fd52ed7c321f6cf050bbd5a761f38293bdb81 100644 (file)
@@ -37,4 +37,5 @@ public class ButtonState extends TabIndexState {
      * If caption should be rendered in HTML
      */
     public boolean htmlContentAllowed = false;
+    public String iconAltText = "";
 }