Removed the instance method get(Element element) method from the
Role.java and RoleImpl.java. Added a static method to Roles.java to get
the Role object from an Element.
Also removed Id.of(Widget) to avoid a circular dependency.
Fixes issue 7567
Review by: skybrian@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11274 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/aria/client/Id.java b/user/src/com/google/gwt/aria/client/Id.java
index e15580c..3f43adb 100644
--- a/user/src/com/google/gwt/aria/client/Id.java
+++ b/user/src/com/google/gwt/aria/client/Id.java
@@ -18,7 +18,6 @@
/////////////////////////////////////////////////////////
import com.google.gwt.dom.client.Element;
-import com.google.gwt.user.client.ui.Widget;
/**
* Id reference attribute type
@@ -45,18 +44,6 @@
return new Id(elementId);
}
- /**
- * Creates an Id instance for the {@code element} by getting
- * the element 'id' attribute.
- *
- * @param widget An widget associated with a DOM element which should have a
- * non empty, unique 'id' attribute set.
- */
- public static Id of(Widget widget) {
- assert widget != null : "Widget cannot be null";
- return new Id(widget.getElement());
- }
-
private String id;
/**
diff --git a/user/src/com/google/gwt/aria/client/Role.java b/user/src/com/google/gwt/aria/client/Role.java
index a5773bb..36bd758 100644
--- a/user/src/com/google/gwt/aria/client/Role.java
+++ b/user/src/com/google/gwt/aria/client/Role.java
@@ -34,14 +34,6 @@
*/
public interface Role {
/**
- * Returns the value of the 'role' attribute for the {@code element}
- * or the empty string if no 'role' attribute is present.
- *
- * @see <a href="http://www.w3.org/TR/wai-aria/roles">Roles documentation</a>
- */
- String get(Element element);
-
- /**
* Returns the value of the
* <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-atomic">
* aria-atomic</a> attribute for the {@code element} or "" if no
diff --git a/user/src/com/google/gwt/aria/client/RoleImpl.java b/user/src/com/google/gwt/aria/client/RoleImpl.java
index 48d6abe..8db4830 100644
--- a/user/src/com/google/gwt/aria/client/RoleImpl.java
+++ b/user/src/com/google/gwt/aria/client/RoleImpl.java
@@ -34,18 +34,6 @@
}
@Override
- public String get(Element element) {
- assert element != null : "Element cannot be null.";
- String roleAttributeValue = element.getAttribute(ATTR_NAME_ROLE);
- for (String testRoleName : roleAttributeValue.split(" ")) {
- if (Roles.isRoleName(testRoleName)) {
- return testRoleName;
- }
- }
- return "";
- }
-
- @Override
public String getAriaAtomicProperty(Element element) {
return Property.ATOMIC.get(element);
}
diff --git a/user/src/com/google/gwt/aria/client/Roles.java b/user/src/com/google/gwt/aria/client/Roles.java
index c04a4a0..776bed8 100644
--- a/user/src/com/google/gwt/aria/client/Roles.java
+++ b/user/src/com/google/gwt/aria/client/Roles.java
@@ -17,8 +17,10 @@
// This is auto-generated code. Do not manually edit! //
/////////////////////////////////////////////////////////
-import java.util.ArrayList;
-import java.util.List;
+import com.google.gwt.dom.client.Element;
+
+import java.util.HashMap;
+import java.util.Map;
/**
* <p>A factory providing each concrete role in the ARIA specification. Each role implements
@@ -132,82 +134,70 @@
private static final TreeitemRole TREEITEM = new TreeitemRoleImpl("treeitem");
private static final TreeRole TREE = new TreeRoleImpl("tree");
- private static List<String> ROLE_NAMES = new ArrayList();
+ private static final Map<String, Role> ROLES_MAP = new HashMap<String, Role>();
static {
- ROLE_NAMES.add("roletype");
- ROLE_NAMES.add("structure");
- ROLE_NAMES.add("section");
- ROLE_NAMES.add("region");
- ROLE_NAMES.add("alert");
- ROLE_NAMES.add("window");
- ROLE_NAMES.add("dialog");
- ROLE_NAMES.add("alertdialog");
- ROLE_NAMES.add("landmark");
- ROLE_NAMES.add("application");
- ROLE_NAMES.add("document");
- ROLE_NAMES.add("article");
- ROLE_NAMES.add("banner");
- ROLE_NAMES.add("widget");
- ROLE_NAMES.add("command");
- ROLE_NAMES.add("button");
- ROLE_NAMES.add("input");
- ROLE_NAMES.add("checkbox");
- ROLE_NAMES.add("gridcell");
- ROLE_NAMES.add("sectionhead");
- ROLE_NAMES.add("columnheader");
- ROLE_NAMES.add("composite");
- ROLE_NAMES.add("group");
- ROLE_NAMES.add("select");
- ROLE_NAMES.add("combobox");
- ROLE_NAMES.add("complementary");
- ROLE_NAMES.add("contentinfo");
- ROLE_NAMES.add("definition");
- ROLE_NAMES.add("list");
- ROLE_NAMES.add("directory");
- ROLE_NAMES.add("form");
- ROLE_NAMES.add("grid");
- ROLE_NAMES.add("heading");
- ROLE_NAMES.add("img");
- ROLE_NAMES.add("link");
- ROLE_NAMES.add("listbox");
- ROLE_NAMES.add("listitem");
- ROLE_NAMES.add("log");
- ROLE_NAMES.add("main");
- ROLE_NAMES.add("marquee");
- ROLE_NAMES.add("math");
- ROLE_NAMES.add("menu");
- ROLE_NAMES.add("menubar");
- ROLE_NAMES.add("menuitem");
- ROLE_NAMES.add("menuitemcheckbox");
- ROLE_NAMES.add("option");
- ROLE_NAMES.add("radio");
- ROLE_NAMES.add("menuitemradio");
- ROLE_NAMES.add("navigation");
- ROLE_NAMES.add("note");
- ROLE_NAMES.add("presentation");
- ROLE_NAMES.add("range");
- ROLE_NAMES.add("progressbar");
- ROLE_NAMES.add("radiogroup");
- ROLE_NAMES.add("row");
- ROLE_NAMES.add("rowgroup");
- ROLE_NAMES.add("rowheader");
- ROLE_NAMES.add("search");
- ROLE_NAMES.add("separator");
- ROLE_NAMES.add("scrollbar");
- ROLE_NAMES.add("slider");
- ROLE_NAMES.add("spinbutton");
- ROLE_NAMES.add("status");
- ROLE_NAMES.add("tab");
- ROLE_NAMES.add("tablist");
- ROLE_NAMES.add("tabpanel");
- ROLE_NAMES.add("textbox");
- ROLE_NAMES.add("timer");
- ROLE_NAMES.add("toolbar");
- ROLE_NAMES.add("tooltip");
- ROLE_NAMES.add("tree");
- ROLE_NAMES.add("treegrid");
- ROLE_NAMES.add("treeitem");
+ ROLES_MAP.put("region", REGION);
+ ROLES_MAP.put("alert", ALERT);
+ ROLES_MAP.put("dialog", DIALOG);
+ ROLES_MAP.put("alertdialog", ALERTDIALOG);
+ ROLES_MAP.put("application", APPLICATION);
+ ROLES_MAP.put("document", DOCUMENT);
+ ROLES_MAP.put("article", ARTICLE);
+ ROLES_MAP.put("banner", BANNER);
+ ROLES_MAP.put("button", BUTTON);
+ ROLES_MAP.put("checkbox", CHECKBOX);
+ ROLES_MAP.put("gridcell", GRIDCELL);
+ ROLES_MAP.put("columnheader", COLUMNHEADER);
+ ROLES_MAP.put("group", GROUP);
+ ROLES_MAP.put("combobox", COMBOBOX);
+ ROLES_MAP.put("complementary", COMPLEMENTARY);
+ ROLES_MAP.put("contentinfo", CONTENTINFO);
+ ROLES_MAP.put("definition", DEFINITION);
+ ROLES_MAP.put("list", LIST);
+ ROLES_MAP.put("directory", DIRECTORY);
+ ROLES_MAP.put("form", FORM);
+ ROLES_MAP.put("grid", GRID);
+ ROLES_MAP.put("heading", HEADING);
+ ROLES_MAP.put("img", IMG);
+ ROLES_MAP.put("link", LINK);
+ ROLES_MAP.put("listbox", LISTBOX);
+ ROLES_MAP.put("listitem", LISTITEM);
+ ROLES_MAP.put("log", LOG);
+ ROLES_MAP.put("main", MAIN);
+ ROLES_MAP.put("marquee", MARQUEE);
+ ROLES_MAP.put("math", MATH);
+ ROLES_MAP.put("menu", MENU);
+ ROLES_MAP.put("menubar", MENUBAR);
+ ROLES_MAP.put("menuitem", MENUITEM);
+ ROLES_MAP.put("menuitemcheckbox", MENUITEMCHECKBOX);
+ ROLES_MAP.put("option", OPTION);
+ ROLES_MAP.put("radio", RADIO);
+ ROLES_MAP.put("menuitemradio", MENUITEMRADIO);
+ ROLES_MAP.put("navigation", NAVIGATION);
+ ROLES_MAP.put("note", NOTE);
+ ROLES_MAP.put("presentation", PRESENTATION);
+ ROLES_MAP.put("progressbar", PROGRESSBAR);
+ ROLES_MAP.put("radiogroup", RADIOGROUP);
+ ROLES_MAP.put("row", ROW);
+ ROLES_MAP.put("rowgroup", ROWGROUP);
+ ROLES_MAP.put("rowheader", ROWHEADER);
+ ROLES_MAP.put("search", SEARCH);
+ ROLES_MAP.put("separator", SEPARATOR);
+ ROLES_MAP.put("scrollbar", SCROLLBAR);
+ ROLES_MAP.put("slider", SLIDER);
+ ROLES_MAP.put("spinbutton", SPINBUTTON);
+ ROLES_MAP.put("status", STATUS);
+ ROLES_MAP.put("tab", TAB);
+ ROLES_MAP.put("tablist", TABLIST);
+ ROLES_MAP.put("tabpanel", TABPANEL);
+ ROLES_MAP.put("textbox", TEXTBOX);
+ ROLES_MAP.put("timer", TIMER);
+ ROLES_MAP.put("toolbar", TOOLBAR);
+ ROLES_MAP.put("tooltip", TOOLTIP);
+ ROLES_MAP.put("tree", TREE);
+ ROLES_MAP.put("treegrid", TREEGRID);
+ ROLES_MAP.put("treeitem", TREEITEM);
}
public static AlertdialogRole getAlertdialogRole() {
@@ -454,7 +444,21 @@
return TREE;
}
- public static boolean isRoleName(String testRoleName) {
- return ROLE_NAMES.contains(testRoleName);
+ /**
+ * Returns the WAI-ARIA role for the {@code element}. If no 'role' attribute is set to the
+ * {@code element} or if the set role tokens do not include a WAI-ARIA role,
+ * null is returned. Otherwise, if a WAI_ARIA role is among the role tokens in the the 'role'
+ * attribute token list, a {@link Role} corresponding the WAI-ARIA role is returned.
+ */
+ public static Role roleOf(Element element) {
+ assert element != null : "Element cannot be null.";
+ String roleAttributeValue = element.getAttribute("role");
+ for (String testRoleName : roleAttributeValue.split("\\s+")) {
+ Role role = ROLES_MAP.get(testRoleName);
+ if (role != null) {
+ return role;
+ }
+ }
+ return null;
}
}
diff --git a/user/test/com/google/gwt/aria/client/RoleImplTest.java b/user/test/com/google/gwt/aria/client/RoleImplTest.java
index 0fc476e..79831b2 100644
--- a/user/test/com/google/gwt/aria/client/RoleImplTest.java
+++ b/user/test/com/google/gwt/aria/client/RoleImplTest.java
@@ -27,17 +27,17 @@
private RegionRole regionRole;
public void testSetGetRemoveRole() {
- assertEquals("", regionRole.get(div));
+ assertEquals(null, Roles.roleOf(div));
regionRole.set(div);
- assertEquals(regionRole.getName(), regionRole.get(div));
+ assertEquals(regionRole, Roles.roleOf(div));
regionRole.remove(div);
- assertEquals("", regionRole.get(div));
+ assertEquals(null, Roles.roleOf(div));
div.setAttribute("role", "region fallback1 fallback2");
- assertEquals("region", regionRole.get(div));
+ assertEquals(regionRole, Roles.roleOf(div));
div.setAttribute("role", "fallback1 region fallback2");
- assertEquals("region", regionRole.get(div));
+ assertEquals(regionRole, Roles.roleOf(div));
div.setAttribute("role", "fallback1 fallback2 fallback3");
- assertEquals("", regionRole.get(div));
+ assertEquals(null, Roles.roleOf(div));
}
public void testSetGetRemoveProperty() {