Bug 746358 - Implement new role for definition lists. r=tbsaunde

This commit is contained in:
Hub Figuière 2012-04-24 11:35:23 -07:00
parent b426c47594
commit ac62a1790e
13 changed files with 84 additions and 39 deletions

View File

@ -797,10 +797,25 @@ interface nsIAccessibleRole : nsISupports
*/
const unsigned long ROLE_CHECK_RICH_OPTION = 125;
/**
* An HTML definition list <dl>
*/
const unsigned long ROLE_DEFINITION_LIST = 126;
/**
* An HTML definition term <dt>
*/
const unsigned long ROLE_TERM = 127;
/**
* An HTML definition <dd>
*/
const unsigned long ROLE_DEFINITION = 128;
/**
* It's not role actually. This constant is important to help ensure
* nsRoleMap's are synchronized.
*/
const unsigned long ROLE_LAST_ENTRY = 126;
const unsigned long ROLE_LAST_ENTRY = 129;
};

View File

@ -171,6 +171,9 @@ static const PRUint32 atkRoleMap[] = {
ATK_ROLE_SECTION, // roles::NOTE 123
ATK_ROLE_PANEL, // roles::FIGURE 124
ATK_ROLE_CHECK_BOX, // roles::CHECK_RICH_OPTION 125
ATK_ROLE_LIST, // roles::DEFINITION_LIST 126
ATK_ROLE_LIST_ITEM, // roles::TERM 127
ATK_ROLE_PARAGRAPH, // roles::DEFINITION 128
kROLE_ATK_LAST_ENTRY // roles::LAST_ENTRY
};

View File

@ -798,11 +798,26 @@ namespace roles {
*/
CHECK_RICH_OPTION = 125,
/**
* Represent a definition list (dl in HTML).
*/
DEFINITION_LIST = 126,
/**
* Represent a term in a definition list (dt in HTML).
*/
TERM = 127,
/**
* Represent a definition in a definition list (dd in HTML)
*/
DEFINITION = 128,
/**
* It's not role actually. This constant is important to help ensure
* nsRoleMap's are synchronized.
*/
LAST_ENTRY = 126
LAST_ENTRY = 129
};
} // namespace role
typedef enum mozilla::a11y::roles::Role role;

View File

@ -423,7 +423,10 @@ static const char kRoleNames[][20] = {
"embedded object", //ROLE_EMBEDDED_OBJECT
"note", //ROLE_NOTE
"figure", //ROLE_FIGURE
"check rich option" //ROLE_CHECK_RICH_OPTION
"check rich option", //ROLE_CHECK_RICH_OPTION
"definitionlist", //ROLE_DEFINITION_LIST
"term", //ROLE_TERM
"definition" //ROLE_DEFINITION
};
/**

View File

@ -259,6 +259,9 @@ nsHTMLLIAccessible::Shutdown()
role
nsHTMLLIAccessible::NativeRole()
{
if (mContent->Tag() == nsGkAtoms::dt)
return roles::TERM;
return roles::LISTITEM;
}
@ -410,6 +413,9 @@ NS_IMPL_ISUPPORTS_INHERITED0(nsHTMLListAccessible, nsHyperTextAccessible)
role
nsHTMLListAccessible::NativeRole()
{
if (mContent->Tag() == nsGkAtoms::dl)
return roles::DEFINITION_LIST;
return roles::LIST;
}

View File

@ -123,6 +123,9 @@ nsHyperTextAccessible::NativeRole()
{
nsIAtom *tag = mContent->Tag();
if (tag == nsGkAtoms::dd)
return roles::DEFINITION;
if (tag == nsGkAtoms::form)
return roles::FORM;

View File

@ -467,36 +467,18 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
- (NSString*)subrole
{
if (!mGeckoAccessible)
return nil;
nsIContent* content = mGeckoAccessible->GetContent();
if (!content || !content->IsHTML())
return nil;
nsIAtom* tag = content->Tag();
switch (mRole) {
case roles::LIST:
if ((tag == nsGkAtoms::ul) || (tag == nsGkAtoms::ol))
return NSAccessibilityContentListSubrole;
return NSAccessibilityContentListSubrole;
if (tag == nsGkAtoms::dl)
return NSAccessibilityDefinitionListSubrole;
case roles::DEFINITION_LIST:
return NSAccessibilityDefinitionListSubrole;
break;
case roles::TERM:
return @"AXTerm";
case roles::LISTITEM:
if (tag == nsGkAtoms::dt)
return @"AXTerm";
break;
case roles::PARAGRAPH:
if (tag == nsGkAtoms::dd)
return @"AXDefinition";
break;
case roles::DEFINITION:
return @"AXDefinition";
default:
break;

View File

@ -168,5 +168,8 @@ static const NSString* AXRoles [] = {
NSAccessibilityGroupRole, // roles::NOTE 123
NSAccessibilityGroupRole, // roles::FIGURE 124
NSAccessibilityCheckBoxRole, // roles::CHECK_RICH_OPTION 125
NSAccessibilityListRole, // roles::DEFINITION_LIST 126
NSAccessibilityGroupRole, // roles::TERM 127
NSAccessibilityGroupRole, // roles::DEFINITION 128
@"ROLE_LAST_ENTRY" // roles::LAST_ENTRY Bogus role that will never be shown (just marks the end of this array)!
};

View File

@ -452,6 +452,15 @@ static const WindowsRoleMapItem gWindowsRoleMap[] = {
// roles::CHECK_RICH_OPTION
{ ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CHECKBUTTON },
// roles::DEFINITION_LIST
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::TERM
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::DEFINITION
{ USE_ROLE_STRING, IA2_ROLE_PARAGRAPH },
// roles::LAST_ENTRY
{ ROLE_WINDOWS_LAST_ENTRY, ROLE_WINDOWS_LAST_ENTRY }
};

View File

@ -16,6 +16,8 @@ const ROLE_COMBOBOX = nsIAccessibleRole.ROLE_COMBOBOX;
const ROLE_COMBOBOX_LIST = nsIAccessibleRole.ROLE_COMBOBOX_LIST;
const ROLE_COMBOBOX_OPTION = nsIAccessibleRole.ROLE_COMBOBOX_OPTION;
const ROLE_COLUMNHEADER = nsIAccessibleRole.ROLE_COLUMNHEADER;
const ROLE_DEFINITION = nsIAccessibleRole.ROLE_DEFINITION;
const ROLE_DEFINITION_LIST = nsIAccessibleRole.ROLE_DEFINITION_LIST;
const ROLE_DIALOG = nsIAccessibleRole.ROLE_DIALOG;
const ROLE_DOCUMENT = nsIAccessibleRole.ROLE_DOCUMENT;
const ROLE_EMBEDDED_OBJECT = nsIAccessibleRole.ROLE_EMBEDDED_OBJECT;
@ -62,6 +64,7 @@ const ROLE_SEPARATOR = nsIAccessibleRole.ROLE_SEPARATOR;
const ROLE_SLIDER = nsIAccessibleRole.ROLE_SLIDER;
const ROLE_STATICTEXT = nsIAccessibleRole.ROLE_STATICTEXT;
const ROLE_TABLE = nsIAccessibleRole.ROLE_TABLE;
const ROLE_TERM = nsIAccessibleRole.ROLE_TERM;
const ROLE_TEXT_CONTAINER = nsIAccessibleRole.ROLE_TEXT_CONTAINER;
const ROLE_TEXT_LEAF = nsIAccessibleRole.ROLE_TEXT_LEAF;
const ROLE_TOGGLE_BUTTON = nsIAccessibleRole.ROLE_TOGGLE_BUTTON;

View File

@ -53,9 +53,9 @@
testRole("p", ROLE_PARAGRAPH);
// Test dl, dt, dd
testRole("definitionlist", ROLE_LIST);
testRole("definitionterm", ROLE_LISTITEM);
testRole("definitiondescription", ROLE_PARAGRAPH);
testRole("definitionlist", ROLE_DEFINITION_LIST);
testRole("definitionterm", ROLE_TERM);
testRole("definitiondescription", ROLE_DEFINITION);
// Has click, mousedown or mouseup listeners.
testRole("span1", ROLE_TEXT_CONTAINER);

View File

@ -88,17 +88,17 @@
// dl list
var tree =
{ LIST: [ // dl
{ LISTITEM: [ // dt
{ DEFINITION_LIST: [ // dl
{ TERM: [ // dt
{ TEXT_LEAF: [] },
] },
{ PARAGRAPH: [ // dd
{ DEFINITION: [ // dd
{ TEXT_LEAF: [] }
] },
{ LISTITEM: [ // dt
{ TERM: [ // dt
{ TEXT_LEAF: [] }
] },
{ PARAGRAPH: [ // dd
{ DEFINITION: [ // dd
{ TEXT_LEAF: [] }
] }
] };
@ -110,11 +110,11 @@
{ LIST: [ // ol
{ LISTITEM: [ // li
{ STATICTEXT: [ ] },
{ LIST: [ // dl
{ LISTITEM: [ // dt
{ DEFINITION_LIST: [ // dl
{ TERM: [ // dt
{ TEXT_LEAF: [] }
] },
{ PARAGRAPH: [ // dd
{ DEFINITION: [ // dd
{ TEXT_LEAF: [] }
] }
] }

View File

@ -65,6 +65,9 @@ flatequation = flat equation
gridcell = gridcell
note = note
figure = figure
definitionlist = definition list
term = term
definition = definition
# More sophisiticated object descriptions
headingLevel = heading level %S