Accessibility/IA2 1.3: Difference between revisions
No edit summary |
(added the need to support text descriptions) |
||
Line 240: | Line 240: | ||
See [https://lists.linux-foundation.org/pipermail/accessibility-ia2/2010-June/001186.html IA2 list] for discussion. | See [https://lists.linux-foundation.org/pipermail/accessibility-ia2/2010-June/001186.html IA2 list] for discussion. | ||
==Text Descriptions and Subtitles for Video and Audio== | |||
The <track> element in HTML5 exposes captions, subtitles and text descriptions to a HTML5 video player. | |||
See the [http://www.w3.org/TR/html5/the-iframe-element.html#the-track-element HTML5 track element] for the specification. | |||
The captions have a visual presentation, but are probably not relevant to be exposed to screen readers, because they repeat what is already available in the audio. | |||
The subtitles have a visual presentation. They could be made available as an alternative to the video's native audio track. | |||
The text descriptions have no visual presentation, but are supposed to be exposed to screen readers. | |||
Text description cues (i.e. a single instance of a text description that is to be rendered from a certain start time to a certain stop time) exist in HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#texttrackcue . They need to be exposed through IA2 to screen readers during video playback whenever they become active. Screen readers should, upon receiving a TextTrackCue start reading out the text. However, often the time that is available during the video playback for reading out the description text is not sufficient for the screenreader. | |||
We therefore need a means for the screenreader to reach back to the browser and pause the video playback until it finishes reading. | |||
HTML5 has JavaScript interfaces for this to happen, in particular the "pauseOnExit" attribute and the play() function, which will allow the kind of interaction that is required. This needs to be worked out for IA2. |
Revision as of 10:04, 6 June 2011
Summary
This page describes proposed changes to next IAccessible2 specification.
Proposal
Relations
Propose: a way to get relations by type
interface IAccessible2_2: public IAccessible { /** * Return IEnumVariant of IAccessible2 objects for the given type. */ [propget] HRESULT relationTargets ( [in] BSTR type, [out, retval] IEnumVariant* relations ); };
See IA2 thread for discussion.
Object attribute
Propose: performant way to get object attribute value by name.
interface IAccessible2_2: public IAccessible { [propget] HRESULT attribute ( [in] BSTR name, [out, retval] BSTR* value ); };
See IA2 thread for discussion.
Text attributes
Propose: way to get range for list of text attributes.
interface IAccessibleText2 : public IAccessibleText { /** * Return range (start and end offsets) and text attributes that corresponds * the given attributes filter (filter format: "attr1, attr2") at the given * offset. */ [propget] HRESULT attributeRange ( [in] long offset, [in] BSTR attributesFilter, [out] long *startOffset, [out] long *endOffset, [out, retval] BSTR *textAttributes ); };
Hyperlinks from hypertext
Propose: performant way to iterate through hyper links
interface IAccessibleHypertext2 : public IAccessibleText { /** * Return IEnumVariant of IAccessibleHyperlink objects. */ [propget] HRESULT hyperlinks ( [out, retval] IEnumVariant* hyperlinks ); };
See IA2 thread for discussion.
Caret offset and accessible containing the caret
Propose: performant way to get caret offset within direct hypertext accessible containing the caret.
interface IAccessible2_2 : public IAccessible2 { /** * Return hypertext accessible in subtree of the accessible and caret * offset within it. */ [propget] HRESULT accessibleWithCaret ( [out, retval] IUnknown **accessible, [out] long* caretOffset ); };
Note: AT should call the method on document accessible for performance reason.
See IA2 thread for discussion.
Anchor target
Propose: a way to get anchor target (#anchor URL) if any since AT may miss scrolling_start event due to various reasons.
interface IAccessibleDocument : public IAccessible2 { /** * Return anchor target if any and still valid. */ [propget] HRESULT anchorTarget ( [out, retval] IUnknown **accessible ); };
See bug 617544 for original propose.
Document accessible
Propose: performant way to get a document accessible (IAccessibleDocument) the given accessible resides in.
interface IAccessible2_2 : public IAccessible2 { /** * Return document accessible (IAccessibleDocument) containing the accessible. */ [propget] HRESULT document ( [out, retval] IUnknown **accessible ); };
New relation types
Propose: be compatible with ATK and for relation types symmetry.
/** This object is a parent of a target object. */ const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf"; /** opposite to IA2_RELATION_MEMBER_OF (Pete's possible addition) */ const WCHAR *const IA2_RELATION_GROUPING_OBJECT_FOR = L"groupingObjectFor"; /** opposite to IA2_RELATION_POPUP_INITIATOR_FOR (Pete's possible addition) */ const WCHAR *const IA2_RELATION_POPUP_INITIATOR_FOR = L"popupInitiatorFor";
See IA2 thread for discussion.
Reorder event details
Propose: performant way to update virtual buffers.
typedef struct IA2ChildrenChange { bool isInserted; long startIndex; long endIndex; }; interface IAccessible2_2: public IAccessible2 { [propget] HRESULT childrenChange ( [in] long maxChanges, [out, size_is(maxChanges), length_is(*nChanges)] IA2ChildrenChange **relations, [out, retval] long *nChanges ) };
Explicit name
Propose: let AT to ignore fallback names, i.e. names calculated from subtree of the object
interface IAccessible2_2 : public IAccessible2 { /** * Return accessible name pointed by author. */ [propget] HRESULT explicitName ( [out, retval] BSTR* name ); };
See bug 637578 for original idea.
Other ideas
Registry API
Note: IsWinEventHookInstalled may do all we need. See Mick's suggestion.
Propose: a way to enable set of features.
interface IAccessibleApplication2 : public IAccessibleApplication { /** * Enable set of features. Return set of features that were enabled. */ HRESULT requestFeature( [in] long features, [out] long supportedFeatures] };
Initially proposed features:
- Events
- ShowHideEvents - fire show/hide events
- ReorderEvent - fire reorder event
- TextEvents - fire text inserted/deleted/modified events
- TableEvents - fire table events
- HyperlinkEvents - fire hyper link events
- HypertextEvents - fire hyper text events
- Interfaces (?)
- davidb: Alexander do you mean something like IAccessible2 or more granular? - alex: more granular
- Accessible Tree (?)
- davidb: Alexander, what did you mean here?
Server implementation: it's up to the server to define set of base features that's always enabled (e.g. focus events); others are considered as optional and should be enabled on request. In order not to break existing AT, the server should maintain a whitelist of ATs for which the current support is preserved.
See IA2 list for discussion.
Text Descriptions and Subtitles for Video and Audio
The <track> element in HTML5 exposes captions, subtitles and text descriptions to a HTML5 video player.
See the HTML5 track element for the specification.
The captions have a visual presentation, but are probably not relevant to be exposed to screen readers, because they repeat what is already available in the audio.
The subtitles have a visual presentation. They could be made available as an alternative to the video's native audio track.
The text descriptions have no visual presentation, but are supposed to be exposed to screen readers.
Text description cues (i.e. a single instance of a text description that is to be rendered from a certain start time to a certain stop time) exist in HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#texttrackcue . They need to be exposed through IA2 to screen readers during video playback whenever they become active. Screen readers should, upon receiving a TextTrackCue start reading out the text. However, often the time that is available during the video playback for reading out the description text is not sufficient for the screenreader.
We therefore need a means for the screenreader to reach back to the browser and pause the video playback until it finishes reading.
HTML5 has JavaScript interfaces for this to happen, in particular the "pauseOnExit" attribute and the play() function, which will allow the kind of interaction that is required. This needs to be worked out for IA2.