@rodneyrehm rodneyrehm released this Mar 17, 2016 · 184 commits to master since this release

Assets 6

March 18th 2016. We're continuing our journey to make accessibility simpler. Version 1.1.0 - the first major update - follows 4 months after making ally.js public in November 2015. In this time we've released 5 beta versions and pushed about 330 commits in an effort to increase browser support and fix the myriad of bugs typically encountered in version one of any software.

The highlights

  • We got rid of those pesky console warnings triggered by the library's initial tests.
  • We added full support for Internet Explorer 9 and made the library loadable but not executable in IE8 and NodeJS.
  • While version 1.0.0 was targeting specific browsers, version 1.1.0 is targeting rendering engines and thereby adding support for blink based Opera and Yandex Browser, as well as WebKit based browsers.
  • We've considerably increased compatibility with browser behavior in regard to what's "focusable". The test suite we used in version 1.0.0 was flawed in many ways. A complete rewrite of the browser tests and the subsequent overhaul of the what browsers consider focusable tables now paint a much more accurate picture of what's going on. And all of that is covered by ally.js, as the new tables differences between browsers and ally.js show.

Even though this is a "stability release" a few new features snuck in, most notably:

  • The improved ally.when.key now supports modifier keys (shift, alt, control, meta) in a simple notation.
  • With ally.maintain.tabFocus we can now trap TAB focus in the tabsequence.

The numbers

  • ☻ We've increased test coverage from ~93% to ~99%
  • ☹ The library grew from ~20KB to ~28KB gzipped (~80KB to ~126KB minified) - yes, we grew by 50%

A few numbers explaining the increased file size:

  • ~20KB added for ever more tests and logic to identify what's focus-relevant/focusable/tabbable
  • ~6KB added by sorting mechanisms for ally.query.tabsequence
  • ~3KB added by domtokenlist
  • ~3KB added for improved ShadowDOM support
  • ~2KB added for improved keyboard event handling

The changes

The following lists show the changes to the library grouped by domain.


  • Adding full support for Internet Explorer 9 - issue #71
  • Adding full support for Microsoft Edge 12, 13
  • Adding full support for Opera 34 (Blink based, behaves like Chrome)
  • Adding manual focusable tests for Safari 6 and 8 on OSX
  • Dropping manual focusable tests for Safari on iOS 8, keeping Safari on iOS 9
  • Dropping manual focusable tests for Mobile Chrome on Android 4.4, keeping Mobile Chrome on Android 5.1


Browser Behavior

Focusable detection

Keyboard support



  • adding ally/util/get-content-document to obtain the browsing context of <object> and <iframe> elements
  • adding ally/util/get-frame-element to obtain the host element (<object> or <iframe>) of browsing context elements
  • adding supports/focus-in-hidden-iframe to identify if content within a hidden iframe is focusable
  • adding supports/focus-object-svg-hidden to identify if a hidden <object> element is focusable
  • changing modules to be able to load in non-browser environments - issue #92
  • changing user agent sniffing from detecting browser to rendering engine - issue #97
  • refactoring is/is.util.js to extract image map related functions into utils/image-map
  • refactoring is/focus-relevant and is/tabbable to allow running the identification with execptions via is/focus-relevant.rules and is/tabbable.rules, while maintaining module signature
  • refactoring console.log() to go through util/logger
  • refactoring selector/focusable to extract util/select-in-shadows
  • fixing ally.is.* to work with other documents (e.g. iframes) - issue #78
  • fixing supports/* to not raise network errors - issue #68
  • fixing supports/* to run when required instead of on script load, restore scroll position - issue #60
  • fixing supports/supports-cache to respect ally.js version change
  • fixing supports/focus-label-tabindex in Chrome 49
  • fixing ShadowDOM related unit tests in WebKit
  • fixing SVGElement.prototype.focus to identify Microsoft Edge 13


Intern unit and functional tests have been run for the following browsers, covering 99% of the library's code:

  • Internet Explorer 9, 10, 11
  • Edge 13
  • Safari 6.2, 7.1, 8, 9
  • Chrome 47
  • Firefox 42, 42 with ShadowDOM enabled


  • renamed src/util/sort-elements-by-tabindex.js to src/query/tabsequence.sort-tabindex.js