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() {