blob: a6af2bd3631133664bbc70db6bc84a288d1f2ad1 [file] [log] [blame]
{
metadata: {
namespace: "HTML",
namespacePrefix: "xhtml",
namespaceURI: "http://www.w3.org/1999/xhtml",
attrsNullNamespace: true,
export: "CORE_EXPORT",
},
attributes: [
{name: "aria-activedescendant", type: "IDREF"},
{name: "aria-atomic", default: "false", type: "boolean"},
{
name: "aria-autocomplete",
default: "none",
enum: ["inline", "list", "both", "none"],
type: "token"
},
{name: "aria-busy", default: "false", type: "boolean"},
{
name: "aria-checked",
default: "undefined",
enum: ["true", "false", "mixed", "undefined"],
type: "token"
},
{name: "aria-colcount", type: "integer"},
{name: "aria-colindex", type: "integer"},
{name: "aria-colspan", type: "integer"},
{name: "aria-controls", type: "IDREF_list"},
{
name: "aria-current",
default: "false",
enum: ["page", "step", "location", "date", "time", "true", "false"],
type: "token"
},
{name: "aria-describedby", type: "IDREF_list"},
{name: "aria-details", type: "IDREF"},
{name: "aria-disabled", default: "false", type: "boolean"},
{
name: "aria-dropeffect",
default: "none",
enum: ["copy", "move", "link", "execute", "popup", "none"],
type: "token_list"
},
{name: "aria-errormessage", type: "IDREF"},
{
name: "aria-expanded",
default: "undefined",
enum: ["true", "false", "undefined"],
type: "token"
},
{name: "aria-flowto", type: "IDREF_list"},
{
name: "aria-grabbed",
default: "undefined",
enum: ["true", "false", "undefined"],
type: "token"
},
{
name: "aria-haspopup",
default: "false",
enum: ["false", "true", "menu", "listbox", "tree", "grid", "dialog"],
type: "token"
},
// aria-help is not specced but we have historically supported it.
{name: "aria-help", type: "string"},
{
name: "aria-hidden",
default: "undefined",
enum: ["true", "false", "undefined"],
type: "token"
},
{
name: "aria-invalid",
default: "false",
enum: ["grammar", "false", "spelling", "true"],
type: "token"
},
{name: "aria-keyshortcuts", type: "string"},
{name: "aria-label", type: "string"},
{name: "aria-labelledby", type: "IDREF_list"},
{name: "aria-labeledby", type: "IDREF_list"}, // alias for labelledby
{name: "aria-level", type: "integer"},
{
name: "aria-live",
default: "off",
enum: ["off", "polite", "assertive"],
type: "token"
},
{name: "aria-modal", default: "false", type: "boolean"},
{name: "aria-multiline", default: "false", type: "boolean"},
{name: "aria-multiselectable", default: "false", type: "boolean"},
{
name: "aria-orientation",
default: "undefined",
enum: ["horizontal", "undefined", "vertical"],
type: "token"
},
{name: "aria-owns", type: "IDREF_list"},
{name: "aria-placeholder", type: "string"},
{name: "aria-posinset", type: "integer"},
{
name: "aria-pressed",
default: "undefined",
enum: ["true", "false", "mixed", "undefined"],
type: "token"
},
{name: "aria-readonly", default: "false", type: "boolean"},
{
name: "aria-relevant",
default: "additions text",
enum: ["additions", "removals", "text", "all"],
type: "token_list"
},
{name: "aria-required", default: "false", type: "boolean"},
{name: "aria-roledescription", type: "string"},
{name: "aria-rowcount", type: "integer"},
{name: "aria-rowindex", type: "integer"},
{name: "aria-rowspan", type: "integer"},
{
name: "aria-selected",
default: "undefined",
enum: ["true", "false", "undefined"],
type: "token"
},
{name: "aria-setsize", type: "integer"},
{
name: "aria-sort",
default: "none",
enum: ["ascending", "descending", "none", "other"],
type: "token"
},
{name: "aria-valuemax", type: "decimal"},
{name: "aria-valuemin", type: "decimal"},
{name: "aria-valuenow", type: "decimal"},
{name: "aria-valuetext", type: "string"},
],
roles: [
{
name: "alert",
nameFrom: ["author"],
superclasses: ["section"],
"implicitValues": {
"aria-live": "assertive",
"aria-atomic": "true"
}
},
{
name: "alertdialog",
nameFrom: ["author"],
superclasses: ["alert", "dialog"],
nameRequired: true
},
{
name: "application",
nameFrom: ["author"],
superclasses: ["structure"],
nameRequired: true
},
{
name: "article",
nameFrom: ["author"],
superclasses: ["document"],
supportedAttributes: ["aria-posinset", "aria-setsize"]
},
{name: "banner", nameFrom: ["author"], superclasses: ["landmark"]},
{
name: "button",
nameFrom: ["contents", "author"],
superclasses: ["command"],
supportedAttributes: ["aria-expanded", "aria-pressed"],
nameRequired: true,
childrenPresentational: true
},
{
name: "cell",
namefrom: ["contents", "author"],
scope: "row",
superclasses: ["section"],
supportedAttributes: [
"aria-colindex", "aria-colspan", "aria-rowindex", "aria-rowspan"
]
},
{
name: "checkbox",
nameFrom: ["contents", "author"],
requiredAttributes: ["aria-checked"],
superclasses: ["input"],
supportedAttributes: ["aria-readonly"],
nameRequired: true,
implicitValues: {"aria-checked": false}
},
{
name: "columnheader",
nameFrom: ["contents", "author"],
scope: ["row"],
superclasses: ["gridcell", "sectionhead", "widget"],
supportedAttributes: ["aria-sort"],
nameRequired: true
},
{
name: "combobox",
// TODO(aboxhall): Follow up with Nektarios and Aaron regarding role
// on textbox
mustContain: ["textbox"],
nameFrom: ["author"],
requiredAttributes: ["aria-controls", "aria-expanded"],
superclasses: ["select"],
supportedAttributes:
["aria-autocomplete", "aria-readonly", "aria-required"],
nameRequired: true,
implicitValues: {
"aria-expanded": "false",
"aria-haspopup": "listbox"
}
},
{
name: "command",
abstract: true,
nameFrom: ["author"],
superclasses: ["widget"]
},
{name: "complementary", nameFrom: ["author"], superclasses: ["landmark"]},
{
name: "composite",
abstract: true,
nameFrom: ["author"],
superclasses: ["widget"],
supportedAttributes: ["aria-activedescendant"],
},
{name: "contentinfo", nameFrom: ["author"], superclasses: ["landmark"]},
{name: "definition", nameFrom: ["author"], superclasses: ["section"]},
{
name: "dialog",
nameFrom: ["author"],
superclasses: ["window"],
nameRequired: true
},
{name: "directory", nameFrom: ["author"], superclasses: ["list"]},
{
name: "document",
nameFrom: ["author"],
superclasses: ["structure"],
supportedAttributes: ["aria-expanded"],
nameRequired: false
},
{
name: "feed",
nameFrom: ["author"],
superclasses: ["list"],
mustContain: ["article"],
nameRequired: false
},
{
name: "figure",
namefrom: ["author"],
superclasses: ["section"],
nameRequired: false
},
{name: "form", nameFrom: ["author"], superclasses: ["landmark"]},
{
name: "grid",
nameFrom: ["author"],
superclasses: ["composite", "table"],
// TODO(aboxhall): Figure out how to express "rowgroup --> row" here.
mustContain: ["row"],
supportedAttributes:
["aria-level", "aria-multiselectable", "aria-readonly"],
nameRequired: true
},
{
name: "gridcell",
nameFrom: ["contents", "author"],
scope: ["row"],
superclasses: ["cell", "widget"],
supportedAttributes:
["aria-readonly", "aria-required", "aria-selected"],
nameRequired: true
},
{
name: "group",
nameFrom: ["author"],
superclasses: ["section"],
supportedAttributes: ["aria-activedescendant"]
},
{
name: "heading",
namefrom: ["contents", "author"],
superclasses: ["sectionhead"],
supportedAttributes: ["aria-level"],
nameRequired: true,
implicitValues: {"aria-level": "2"}
},
{
name: "img",
nameFrom: ["author"],
superclasses: ["section"],
nameRequired: true,
childrenPresentational: true
},
{
name: "input",
abstract: true,
nameFrom: ["author"],
superclasses: ["widget"]
},
{
name: "landmark",
abstract: true,
nameFrom: ["author"],
superclasses: ["section"],
nameRequired: false
},
{
name: "link",
nameFrom: ["contents", "author"],
superclasses: ["command"],
supportedAttributes: ["aria-expanded"],
nameRequired: true
},
{
name: "list",
// TODO(aboxhall): Figure out how to express "group --> listitem"
mustContain: ["listitem"],
nameFrom: ["author"],
superclasses: ["section"],
implicitValues: {"aria-orientation": "vertical"}
},
{
name: "listbox",
nameFrom: ["author"],
superclasses: ["select"],
mustContain: ["option"],
supportedAttributes:
["aria-multiselectable", "aria-readonly", "aria-required"],
nameRequired: true,
implicitValues: {"aria-orientation": "vertical"}
},
{
name: "listitem",
nameFrom: ["author"],
superclasses: ["section"],
scope: ["group", "list"],
supportedAttributes: ["aria-level", "aria-posinset", "aria-setsize"]
},
{
name: "log",
nameFrom: ["author"],
superclasses: ["section"],
nameRequired: true,
implicitValues: {"aria-live": "polite"}
},
{name: "main", nameFrom: ["author"], superclasses: ["landmark"]},
{
name: "marquee",
nameFrom: ["author"],
superclasses: ["section"],
nameRequired: true
},
{
name: "math",
nameFrom: ["author"],
superclasses: ["section"],
nameRequired: true,
// TODO(aboxhall/aleventhal): this is what the spec says, but seems
// wrong.
childrenPresentational: true
},
{
name: "menu",
mustContain: [
"group", "menuitemradio", "menuitem", "menuitemcheckbox",
"menuitemradio"
],
nameFrom: ["author"],
superclasses: ["select"],
implicitValues: {"aria-orientation": "vertical"}
},
{
name: "menubar",
nameFrom: ["author"],
superclasses: ["menu"],
// TODO(aboxhall): figure out how to express "group --> {menuitem,
// menuitemradio, menuitemcheckbox}"
mustContain: ["menuitem", "menuitemradio", "menuitemcheckbox"],
implicitValues: {"aria-orientation": "horizontal"}
},
{
name: "menuitem",
nameFrom: ["contents", "author"],
scope: ["group", "menu", "menubar"],
superclasses: ["command"],
nameRequired: true
},
{
name: "menuitemcheckbox",
nameFrom: ["contents", "author"],
scope: ["menu", "menubar"],
superclasses: ["checkbox", "menuitem"],
nameRequired: true,
childrenPresentational: true,
implicitValues: {"aria-checked": false}
},
{
name: "menuitemradio",
nameFrom: ["contents", "author"],
scope: ["menu", "menubar", "group"],
superclasses: ["menuitemcheckbox", "radio"],
nameRequired: true,
childrenPresentational: true,
implicitValues: {"aria-checked": false}
},
{name: "navigation", nameFrom: ["author"], superclasses: ["landmark"]},
{name: "none", superclasses: ["structure"]},
{name: "note", nameFrom: ["author"], superclasses: ["section"]},
{
name: "option",
nameFrom: ["contents", "author"],
scope: ["listbox"],
superclasses: ["input"],
requiredAttributes: ["aria-selected"],
supportedAttributes:
["aria-checked", "aria-posinset", "aria-setsize"],
nameRequired: true,
childrenPresentational: true,
implicitValues: {"aria-selected": "false"}
},
{name: "presentation", superclasses: ["structure"]},
{
name: "progressbar",
nameFrom: ["author"],
superclasses: ["range"],
nameRequired: true,
childrenPresentational: true
},
{
name: "radio",
nameFrom: ["contents", "author"],
superclasses: ["input"],
requiredAttributes: ["aria-checked"],
supportedAttributes: ["aria-posinset", "aria-setsize"],
nameRequired: true,
childrenPresentational: true,
implicitValues: {"aria-checked": "false"}
},
{
name: "radiogroup",
nameFrom: ["author"],
superclasses: ["select"],
mustContain: ["radio"],
supportedAttributes: ["aria-readonly", "aria-required"],
nameRequired: true
},
{
name: "range",
abstract: true,
nameFrom: ["author"],
superclasses: ["widget"],
supportedAttributes: [
"aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-valuetext"
]
},
{
name: "region",
nameFrom: ["author"],
superclasses: ["landmark"],
nameRequired: true
},
{
name: "roletype",
abstract: true,
supportedAttributes: [
"aria-atomic", "aria-busy", "aria-controls",
"aria-current", "aria-describedby", "aria-details",
"aria-disabled", "aria-dropeffect", "aria-errormessage",
"aria-flowto", "aria-grabbed", "aria-haspopup",
"aria-hidden", "aria-invalid", "aria-keyshortcuts",
"aria-label", "aria-labelledby", "aria-live",
"aria-owns", "aria-relevant", "aria-roledescription"
]
},
{
name: "row",
nameFrom: ["contents", "author"],
superclasses: ["group", "widget"],
mustContain: ["cell", "columnheader", "gridcell", "rowheader"],
scope: ["grid", "rowgroup", "table", "treegrid"],
// TODO(aboxhall/aleventhal): This is not in the spec yet, but
// setsize and posinset are included here for treegrid
// purposes. Issue already filed on spec. Remove this comment
// when spec updated.
supportedAttributes: [
"aria-colindex", "aria-level", "aria-rowindex", "aria-selected",
"aria-setsize", "aria-posinset"
]
},
{
name: "rowgroup",
nameFrom: ["contents", "author"],
superclasses: ["structure"],
mustContain: ["row"],
scope: ["grid", "table", "treegrid"],
},
{
name: "rowheader",
nameFrom: ["contents", "author"],
scope: ["row"],
superclasses: ["cell", "gridcell", "sectionhead"],
supportedAttributes: ["aria-sort"],
nameRequired: true
},
{
name: "scrollbar",
nameFrom: ["author"],
requiredAttributes: [
"aria-controls", "aria-orientation", "aria-valuemax",
"aria-valuemin", "aria-valuenow"
],
superclasses: ["range"],
nameRequired: false,
childrenPresentational: true,
implicitValues: {
"aria-orientation": "vertical",
"aria-valuemin": "0", "aria-valuemax": "100"
}
},
{name: "search", nameFrom: ["author"], superclasses: ["landmark"]},
{
name: "searchbox",
nameFrom: ["author"],
superclasses: ["textbox"],
nameRequired: true
},
{
name: "section",
abstract: true,
superclasses: ["structure"],
supportedAttributes: ["aria-expanded"]
},
{
name: "sectionhead",
abstract: true,
nameFrom: ["contents", "author"],
superclasses: ["structure"],
supportedAttributes: ["aria-expanded"]
},
{
name: "select",
abstract: true,
nameFrom: ["author"],
superclasses: ["composite", "group"]
},
{
name: "separator",
nameFrom: ["author"],
// TODO(aboxhall): superclass depends on focusability, but
// doesn"t affect required/supported attributes
superclasses: ["structure"],
// TODO(aboxhall): required attributes depend on focusability
supportedAttributes: [
"aria-orientation", "aria-valuemin", "aria-valuemax",
"aria-valuenow", "aria-valuetext"
]
},
{
name: "slider",
nameFrom: ["author"],
requiredAttributes:
["aria-valuemax", "aria-valuemin", "aria-valuenow"],
superclasses: ["input", "range"],
supportedAttributes: ["aria-orientation"],
nameRequired: true,
childrenPresentational: true,
// TODO(aboxhall): aria-valuenow default is halfway between
// aria-valuemin and aria-valuemax
implicitValues: {
"aria-orientation": "horizontal",
"aria-valuemin": "0", "aria-valuemax": "100"
}
},
{
name: "spinbutton",
nameFrom: ["author"],
requiredAttributes:
["aria-valuemax", "aria-valuemin", "aria-valuenow"],
superclasses: ["composite", "input", "range"],
supportedAttributes: ["aria-required", "aria-readonly"],
nameRequired: true,
implicitValues: {"aria-valuenow": "0" }
},
{
name: "status",
nameFrom: ["author"],
superclasses: ["section"],
implicitValues: {"aria-live": "polite", "aria-atomic": "true" }
},
{name: "structure", abstract: true, superclasses: ["roletype"]},
{
name: "switch", nameFrom: ["contents", "author"],
superclasses: ["checkbox"], requiredAttributes: ["aria-checked"],
nameRequired: true, childrenPresentational: true,
implicitValues: {"aria-checked": "false"}
},
{
name: "tab",
nameFrom: ["contents", "author"],
scope: ["tablist"],
superclasses: ["sectionhead", "widget"],
supportedAttributes: ["aria-selected"],
childrenPresentational: true,
implicitValues: {"aria-selected": "false"}
},
{
name: "table",
nameFrom: ["author"],
superclasses: ["section"],
// TODO(aboxhall): Figure out how to express "rowgroup --> row"
mustContain: ["row"],
supportedAttributes: ["aria-colcount", "aria-rowcount"],
nameRequired: true
},
{
name: "tablist",
nameFrom: ["author"],
superclasses: ["composite"],
mustContain: ["tab"],
supportedAttributes:
["aria-level", "aria-multiselectable", "aria-orientation"],
implicitValues: {"aria-orientation": "horizontal"}
},
{
name: "tabpanel",
nameFrom: ["author"],
superclasses: ["section"],
nameRequired: true
},
{name: "term", nameFrom: ["author"], superclasses: ["section"]},
{
name: "textbox",
nameFrom: ["author"],
superclasses: ["input"],
supportedAttributes: [
"aria-activedescendant", "aria-autocomplete", "aria-multiline",
"aria-placeholder", "aria-readonly", "aria-required"
],
nameRequired: true
},
{name: "timer", nameFrom: ["author"], superclasses: ["status"]},
{
name: "toolbar",
nameFrom: ["author"],
superclasses: ["group"],
supportedAttributes: ["aria-orientation"],
implicitValues: {"aria-orientation": "horizontal"
}
},
{
name: "tooltip",
nameFrom: ["contents", "author"],
superclasses: ["section"],
nameRequired: true
},
{
name: "tree",
nameFrom: ["author"],
mustContain: ["group", "treeitem"],
superclasses: ["select"],
supportedAttributes: ["aria-multiselectable", "aria-required"],
nameRequired: true,
implicitValues: {"aria-orientation": "vertical"
}
},
{
name: "treegrid",
// TODO(aboxhall): Figure out how to express "rowgroup --> row"
mustContain: ["row"],
nameFrom: ["author"],
superclasses: ["grid", "tree"],
nameRequired: true
},
{
name: "treeitem",
nameFrom: ["contents", "author"],
scope: ["group", "tree"],
superclasses: ["listitem", "option"],
nameRequired: true
},
{name: "widget", abstract: true, superclasses: ["roletype"]},
{
name: "window",
abstract: true,
nameFrom: ["author"],
superclasses: ["roletype"],
supportedAttributes: ["aria-expanded", "aria-modal"]
}
]
}