On Tuesday, December 13, 2016 at 7:50:43 AM UTC-2, Thomas Broyer wrote:
>
>
>
> On Tuesday, December 13, 2016 at 8:14:50 AM UTC+1, Julio Feferman wrote:
>>
>> I am instrumenting an application for best possible support for assistive 
>> technologies (ATs) such as screen readers, using GWT's ARIA implementation. 
>> I see that the CustomButton widget setEnabled() method sets the 
>> aria-pressed attribute on the button element if it is enabled. This is fine 
>> for a ToggleButton but wouldn't it be incorrect for a PushButton? When the 
>> aria-pressed attribute is present, screen readers interpret the widget as a 
>> toggle button. In the case of a push button, however, this attribute should 
>> not be present, in order to allow the AT to click the widget via keyboard 
>> commands, instead of toggling it. 
>>
>
> From the code, it looks like it sets the aria-pressed state to either true 
> or false depending on the current pressed state when enabled, and un-sets 
> the state when disabled.
> The thing is, a PushButton is CustomButton, which actually is a kind of 
> "toggle button". The ToggleButton makes it easier to work with by adding 
> style names corresponding to the "faces", providing constructors to easily 
> create such "faces", and having a boolean value corresponding to the 
> "pressed" state. And the PushButton is actually one such button that is 
> only "pressed" while the mouse button or keyboard key is depressed.
> This seems to be in line with the WAI ARIA spec: 
> https://www.w3.org/TR/wai-aria/states_and_properties#aria-pressed, with 
> the exception that most people don't see a PushButton as such a "special 
> kind of toggle button"; so I'd agree with you that aria-pressed shouldn't 
> be used for a PushButton (leaky abstraction).
>
> Actually, I strongly believe CustomButton and derivatives are a legacy 
> that should be avoided. They're from a time where you couldn't easily style 
> <button>, or <input type=checkbox> to create toggle buttons; this is no 
> longer the case.
> Don't use a PushButton, use a Button instead. And I'd even say don't use a 
> ToggleButton, use a Checkbox (or RadioButton) with proper styling, and 
> possibly add ARIA attributes to make it "appear" like a toggle button to 
> ATs too.
>
> Even though I believe those widgets should be deprecated, feel free to 
> propose a patch, I'll (help) review it. I'm not sure we could come up with 
> a viable patch though: CustomButton is "too abstract", and yet we don't 
> want to move the ARIA handling to subclasses as that would remove it from 
> existing custom widgets people could have written based on CustomButton. 
> Maybe add a boolean (add constructor overloads) telling the CustomButton 
> whether it's a toggle button or a command button? (that seems slightly 
> wrong though, as that'd mean the onClick/onClickStart/onClickCancel could 
> probably use that information too instead of relying on subclasses to 
> change the button's behavior).
> No, really, the long-term solution is to deprecate at least PushButton and 
> move on to Button.
>

I agree that we should perhaps switch our uses of PushButton to a Button. 
However, I still believe ToggleButton is convenient for a series of use 
cases. For instance, a disclosure arrow that has an untoggled/toggled face 
(pointing right or down), in which case radio/checkbox are not appropriate. 
I'm submitting a patch here for CustomButton that inserts aria-pressed only 
in the case of (instanceof) a ToggleButton, completely removing the 
attribute for PushButton without interfering with the subclasses or current 
uses. The functionality would be preserved while only removing aria-pressed 
from PushButton. Thank you very much for your help.

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.
--- CustomButton.java   2016-12-13 14:54:01.000000000 -0200
+++ CustomButtonNew.java        2016-12-13 14:51:30.000000000 -0200
@@ -749,7 +749,7 @@
       if (!enabled) {
         cleanupCaptureState();
         Roles.getButtonRole().removeAriaPressedState(getElement());
-      } else {
+      } else if (this instanceof ToggleButton) {
         setAriaPressed(getCurrentFace());
       }
     }
@@ -925,7 +925,7 @@
       setCurrentFaceElement(newFace.getFace());
       addStyleDependentName(curFace.getName());
 
-      if (isEnabled()) {
+      if (isEnabled() && this instanceof ToggleButton) {
         setAriaPressed(newFace);
       }
     }
@@ -1102,4 +1102,3 @@
     setCurrentFace(newFaceID);
   }
 }
-

Reply via email to