This document discusses designing for accessibility in web applications. It begins with examples of designing and links to accessibility concepts. It then covers exploring ways to focus the screen reader on the appropriate content when routes change dynamically in Ember applications. Potential solutions are proposed, such as having routes call a focus hook and setting the focus after transitions. Research into screen readers and Ember is presented. An API is designed to call the focus hook and integration details are discussed. The changes are contributed back via an RFC. Usage notes caution that all content must be wrapped in elements and automatically generated templates may have issues. Learnings focus on the differences from static sites and controlling focusing programmatically.
23. Learnings
• Screen readers start reading from the top of the
page on each page load.
• Dynamically updating the DOM results in no
information being passed to the user by default.
• Markup is still important. Ember's real links and the
code you write in your templates is important.
• ARIA roles still do what we expect.
25. Page Loading
We want to emulate the page load behavior
demonstrated with static pages.
26. End-User Goals
• Have the screen reader automatically start reading
the content of the page.
• Have it start reading the content from the best point
in the application hierarchy.
• Make it clear to the user that the content on the
page has changed.
• Follow other recommended patterns that screen
reader users are familiar with.
27. Ember Goals
• Have the solution work with current idiomatic
Ember code or minimize migration cost.
• Make the change in a backwards compatible way
to meet Ember's stability without stagnation goal.
• The default approach should be accessible, API
design is a feature.
• Provide for extensibility with hooks enabling
enhancement of this higher-level feature.
32. Screen Readers
• It's like the Internet Explorer and Netscape HTML/
CSS/JS compatibility workarounds all over again.
• Screen readers tend to read whatever you focus.
• Nobody likes being dumped into forms mode.
• Screen readers are aware of content on the page
changing, but don't present that to the user until it
is asked for.
33. Ember
• The top level outlet is generated and wrapped in a
containing DIV.
• All other outlets are populated by their templates
without first being wrapped in a containing DIV.
• Routes have no reference to their rendered output.
• You can have multiple outlets in a single route.
• No-op transitions trigger no route hooks.
45. Usage Notes
• You can use this today! http://bit.ly/outletfocusing
• All template content must be wrapped in a `<div>`.
Child outlets must also appear inside that `<div>`.
• Automatically generated templates are just
`{{outlet}}` and will thus have problems.
• Provide feedback on RFC #66!
47. Learnings
• It's a different experience from the static site.
• We have programmatic control over the focusing
behavior.
• Setting the focus has additional consequences in
terms of scrolling behavior.