1 / 22

Accessible DHTML Implementation

Firefox 1.5. Accessible DHTML Implementation. Aaron Leventhal IBM Senior Engineer Firefox accessibility lead. Current support. Navigation: keyboard & mouse Semantics Roles: 42, not yet author extensible Properties States Value Relations Events (automatic). Navigation Scenarios.

cindyn
Télécharger la présentation

Accessible DHTML Implementation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Firefox 1.5 Accessible DHTMLImplementation Aaron Leventhal IBM Senior Engineer Firefox accessibility lead

  2. Current support • Navigation: keyboard & mouse • Semantics • Roles: 42, not yet author extensible • Properties • States • Value • Relations • Events (automatic)

  3. Navigation Scenarios • Simple controlsare in tab order • Examples: checkbox, slider • Container controls group focusable children • Examples: trees, lists, radio groups, spreadsheets • The last focused child is in the tab order • Other children can be focused via the pointer • Key navigation managed by the container widget (often arrows) • Non-interactive content won’t take input • Examples: progress meter, alerts, doc structural elements • Click to focus skips, goes up parent chain for focus • On screen keyboards don’t list them as choices • Screen readers skip them in navigation order • Voice input skips them during “say what you see” vocab buildup

  4. Element “Navigability” Choices for elements normally not focusable: • Tab key focusable tabindex >= “0” • Script-or click- only tabindex <= “-1” • Notfocusable default / no tabindex Issue: how does XHTML2implement these?

  5. Tab key focus How to cycle: • First: Elements with tabindex > “0” (Navigate in tabindex order) • Next: All other focusable elements (Navigate in document order)

  6. Click focus • Find most specific elementcontaining click • If focusable, focus it • Else go to parent, repeat #2

  7. Semantics spreadsheet Roles alert application tree slider menu & more … description progressbar tab panel valuenow invalid Properties labeledby multiselect required & more … selected checked haspopup describedby expanded

  8. Accessible tree • Subset of the DOM tree <td> #text <html> <table> <tbody> <tr> <td> #text <p> <i> #text <a> • Exposed as MSAA or ATK • Name: e.g. “click here” • Role: ROLE_LINK • States: • STATE_FOCUSABLE | • STATE_FOCUSED | • STATE_LINKED | • STATE_TRAVERSED <div> #text <div role=“”> #text #text

  9. No xhtml2:role Namespace + Tag Accessible object implementation ATRole AdditonalAT interfaces ATValue AtkTable, AtkValue, etc. Base ATinterface ATName Acquired from Gecko BooleanAT States IAccessible or AtkComponent. Often from <label>, attribute or inner content Collected from attributes,focus state & layout info

  10. Has xhtml2:role Namespace + Tag xhtml2:roleattribute Use genericimplementation for vanilla<div>, <span>, etc. override Accessible object implementation ATRole AdditonalAT interfaces ATValue Base ATinterface ATName BooleanAT States

  11. Each mapped role [1-4] • Role name as a string, e.g. “checkbox” • Role constant for API • Name rule • eNameLabelOrTitle • eNameOkFromChildren • Value rule • eNoValue • eHasValueMinMax • Can support unknown value via aaa:valuenow=“unknown” (progressbar)

  12. Each mapped role [5-6] 5. States always on for that role • Role “secret” → STATE_PROTECTED • Role “spreadsheet” → STATE_MULTISELECTABLE 6. Attribute → state rules • Name/value pairs to AT states,e.g. valuenow=“unknown” → STATE_MIXED • For some ‘bool’ attributes: set/unset is important!If checked is set → checkableif selected is set → selectableif expanded is set → expandable • “false” always means false, unlike HTML!

  13. A simple mapping {"menuitem", ROLE_MENUITEM, eNameOkFromChildren, eNoValue, eNoReqStates, {"haspopup", BOOL_STATE, STATE_HASPOPUP}, {"checked", BOOL_STATE, STATE_CHECKED | STATE_CHECKABLE}, {"checked", "false", STATE_CHECKABLE}, END_ENTRY} Role constant Name rule Value rule OR’d states always used Attributeto staterules

  14. Name computation • eNameLabelOrTitle • First try aaa:labeledby • Try typical rules for element, e.g. <label for=“”> • Finally try title attribute • eNameOkFromChildren • Loop through DOM subtree • Append text or text equivalent for each node • If image or using display:block, insert spaces (to avoid jammed-together words)

  15. Special cased roles • “application”, “dialog”, “document”, “alert” • The only roles allowed on <body>/<html> • Indicates class of document • Can also occur on any element • “alert” inside of document • Fires alert event whenever made visible or changed • “presentation” • Hides element from accessible hierarchy • If on table, cells w/o own role not exposed • “menu”, “menuitem” • Show/hide translated toEVENT_MENUSTART, EVENT_MENUEND, EVENT_MENUPOPUPSTART, EVENT_MENUPOPUPEND

  16. Mutations DOMNodeInserted /Removed InternalLayoutEvents • EVENT_SHOW or EVENT_HIDE • – plus – • EVENT_REORDER on the container forchanging child[ren]

  17. Attribute changes • aaa:valuenow → EVENT_VALUE_CHANGE • aaa: checked expanded readonlydisabled → EVENT_STATE_CHANGE required invalid • xhtml2:roleaaa:multiselect → EVENT_REORDER

  18. Selection changes • Change to attribute aaa:selection • MultiselectIf inside a container with multiselect=“true”, fire • EVENT_SELECTION_WITHIN on container • EVENT_SELECTION_ADD or _REMOVE on child • Single selectWhen aaa:selected=“true”, fire • EVENT_SELECTION

  19. Relations Exposed in fields: • “labeledby” → name • “describedby” → description Exposed via relation support in APIs: • Labeled_by • Label_for • Described_by • Description_for

  20. Role issues Not implemented in Firefox: • Role extensibility via RDF • Expose role inheritance via new APIs,e.g. Schedule -> Calendar -> Table • Navigation role API (unclear API model) • Natural role vs. navigation role • Multiple roles • Unclear model & use cases • Strange possibilities,e.g. a radio button that is also a spreadsheet! Role issues: strange combos,conflicts, confusion

  21. Other issues Not implemented in Firefox: • Advanced relations, extensible relations • Needed for SVG accessibility • Event handler descriptions • Firefox needs UI model … context menu? Issue: need more relation for diagrams Issue: how to definenew relations? Issue: how to move on described handlers?

  22. For more info: Authors: http://www.mozilla.org/access/dhtml Role table: http://www.mozilla.org/access/windows/at-apis#roletable Source code: http://lxr.mozilla.org/seamonkey/source/accessible Email: aleventh@us.ibm.com

More Related