Skip to content

Latest commit

 

History

History
557 lines (383 loc) · 33.9 KB

CHANGELOG.md

File metadata and controls

557 lines (383 loc) · 33.9 KB

ally.js change log

1.4.1 - Module Mania

January 31st 2017. This release does not contain any functional changes.


1.4.0 - The SVG Awakens

January 12th 2017. We're continuing our journey to make accessibility simpler (by advancing our understanding of the "platform"). Version 1.4.0 comes 4 months after the last feature release. We pushed about 50 commits in an effort to understand focus behavior in SVG, update the build systems and upgrade automated testing to modern browser versions.

The highlights of v1.4.0

  • Improving utilities for convenient and safe .focus(), .blur() to properly support SVG content
  • Improving identification of focusable status of SVG content
  • Upgrading babel from version 5.x to 6.x, by providing AMD modules via UMD bundles
  • Upgrading to eslint from version 2.x to 3.x, switching to (slightly customized) eslint-config-semistandard

The numbers of v1.4.0

  • Test coverage remained at ~99%
  • The library grew from ~22KB to ~23KB gzipped (~73KB to ~76KB minified)

The changes of v1.4.0

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

Focus management in v1.4.0

Various in v1.4.0

Internals in v1.4.0

  • refactoring supports to pass focused element to validation callback
  • refactoring supports to properly test support of SVG elements in Trident
  • refactoring ally.style.focusSource and ally.style.focusWithin to optimize focusin or focus event name detection
  • fixing various linting errors after upgrading to eslint 3 and semistandard

Build in v1.4.0

Documentation in v1.4.0

Testing of v1.4.0

  • Internet Explorer 9, 10, 11
  • Edge 13, 14 (15 manually)
  • Safari 8, 9, 10 (6.2 and 7.1 were dropped from automated tests)
  • Chrome 55
  • Firefox 50, 50 with ShadowDOM enabled

Missing in v1.4.0

  • MathML elements may be focusable
  • Shadow DOM focus behavior may have changed from v0 to v1

1.3.2 - Publish Panic

November 15th 2016. Version 1.3.1 was not published properly and nobody noticed. This release is basically version 1.3.1 but with the proper directory published to npm.


1.3.1 - Version Panic

November 11th 2016. This release does not contain any functional changes. The release was necessary because platform.js now identifies EdgeHTML (instead of Trident) as a the layout engine of Microsoft Edge and focus detection suffered.

  • Updated to platform.js 1.3.3
  • Separated Edge 12+ from IE9-11 (Trident)

1.3.0 - Return Of The Focus

September 17th 2016. We're continuing our journey to make accessibility simpler. Version 1.3.0 comes 6 months after the last feature release. We pushed about 90 commits in an effort to reduce the bundle's file size, improve startup performance, convert test suites to BDD and add DOM focus utilities.

The highlights of v1.3.0

  • Smaller bundle file size
  • Removed all polyfills modifying DOM prototypes
  • Added utilities for convenient and safe .focus(), .blur(), and obtaining the active element
  • Test suites converted to BDD style

The numbers of v1.3.0

  • ☻ Test coverage remained at ~99%
  • ☻ The library shrunk from ~28KB to ~22KB gzipped (~126KB to ~73KB minified) - yes, we dropped 43% by losing the DOMTokenList shim in v1.2.0 and introducing rollupify

The changes of v1.3.0

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

Focus management in v1.3.0

Keyboard support in v1.3.0

Various in v1.3.0

Internals in v1.3.0

  • running all supports tests in a batch to limit number of reflows - issue #142
  • removing svgelement.prototype.focus as this should be covered more elegantly by ally.element.focus
  • refactoring element.prototype.matches to util/matches-element

Build in v1.3.0

  • adding rollupify to reduce package overhead in build bundle
  • switching to lint-staged for faster linting during git pre-commit
  • replacing broken metalsmith-packagejson plugin - issue #149
  • refactoring all unit and functional tests to use BDD interface to improve clarity of a test's intent
  • simplify running local tests in a non-WebDriver browser

Documentation in v1.3.0

Testing of 1.3.0

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

Missing in 1.3.0

In order to avoid shipping any more temporary code than we already do in the focusable detection code, we'll provide a separate release once we've properly investigated the following behavioral changes:

  • Firefox 51 and Edge 14 ship some sort of support for the tabindex attribute on SVG elements
  • Chrome 55 seems to have changed keyboard focusability of SVG content within <object> elements
  • SVG <use> elements may be focusable depending on the content they reference
  • MathML elements may be focusable

1.2.0 - Adios DOMTokenList

August 23rd 2016. We're releasing this fix to remove a dependency we've loaded directly off a forked github repository, rather than from npm.

The changes of v1.2.0


1.1.1 - Augmented Reality

August 6th 2016. We're releasing a few fixes that have been hanging in the master branch as a bugfix release to 1.1, because waiting for 1.2 to come together is not an option for everyone.

The changes of v1.1.1


1.1.0 - Reality Strikes Back

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 of v1.1.0

  • 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 of v1.1.0

  • ☻ 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 of v1.1.0

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

Browsers in v1.1.0

  • 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

Dependencies in v1.1.0

Browser Behavior in v1.1.0

Focusable detection in v1.1.0

Keyboard support in v1.1.0

Various in v1.1.0

Internals in v1.1.0

  • 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

Testing in v1.1.0

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

Sources in v1.1.0

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

1.0.1 (November 20th 2015)

  • aligning package.json in repository and npm artifact for compatibility with cdnjs

1.0.0 - A New Hope

November 18th 2015. We're embarking on a journey to make accessibility simpler. Version 1.0.0 - the official release - of ally.js has been 14 months in the making, but it's only the beginning of a long story - or so I hope.

The mission

Making accessibility simpler (for developers) by providing

  • providing core functionality (not complete solutions)
  • documentation to learn about accessibility requirements
  • the basis figure out how specifications need to evolve
  • a common ground for the community to collaborate

The plan

I've laid the foundation for collaboration. My goals are laid out. Everything is done on github, in the open. Everything is up for discussion. Anyone can join. See contributing to ally.js for more.

The past

Version 1.0.0 is a complete rewrite from the the early 0.0.x releases, there are no breaking changes, it is a giant breaking change. More than 400 commits have been made since 0.0.7, resulting in a few changes:

Breaking changes (compared to 0.0.7)

Renamed Files

  • renamed dom/active-elements.js to get/active-elements.js
  • renamed dom/focus-target.js to get/focus-target.js
  • renamed dom/is-disabled.js to is/disabled.js
  • renamed dom/is-focusable.js to is/focusable.js
  • renamed dom/is-shadowed.js to is/shadowed.js
  • renamed dom/is-tabbable.js to is/tabbable.js
  • renamed dom/is-valid-area.js to is/valid-area.js
  • renamed dom/is-valid-tabindex.js to is/valid-tabindex.js
  • renamed dom/is-visible.js to is/visible.js
  • renamed dom/node-array.js to util/node-array.js
  • renamed dom/path.js to get/parents.js
  • renamed dom/query-focusable.js to query/focusable.js
  • renamed dom/query-tabbable.js to query/tabbable.js
  • renamed dom/query-tabsequence.js to query/tabsequence.js
  • renamed dom/shadow-host-ancestors.js to get/shadow-host-parents.js
  • renamed dom/when-visible.js to when/visible-area.js
  • renamed dom/shadow-host.js to get/shadow-host.js
  • renamed dom/sort-tabindex.js to util/sort-elements-by-tabindex.js
  • renamed dom/visible-quotient.js to util/visible-area.js
  • renamed event/interaction-type-listener.js to observe/interaction-type.js
  • renamed focus/source.js to style/focus-source.js
  • renamed focus/when-visible.js to when/focusable.js
  • renamed focus/within.js to style/focus-within.js
  • renamed focus/disable-focus to maintain/disabled

0.0.7 (July 8th 2015)

  • adding event/shadow-focus to emit custom event when focus changes within the ShadowDOM - extracted from focus/within
  • adding event/interaction-type-listener to track user input to differentiate keyboard and pointer input
  • adding focus/source to allow styling of :focus dependent on user input (keyboard, pinter, script)
  • adding focus/disable-focus to render elements inert and remove them from the document's focus navigation sequence
  • deprecating focus/trap, use focus/disable-focus instead

0.0.6 (June 17th 2015)


0.0.5 (June 15th 2015)


0.0.4 (February 3rd 2015)


0.0.3 (January 7th 2015)

  • adding fix-browser/pointer-focus-children
  • adding dom/focus-target to find the first focusable element in an element's ancestry
  • improving fix-browser/pointer-focus-parent for less complexity
  • improving fix-browser by only engaging handlers for affected browsers (yes, user agent sniffing, deal with it)
  • fixing dom/is-visible to look at computed styles, not the element's styles (duh!)

0.0.2 (January 5th 2015)

  • adding fix-browser/pointer-focus-input
  • adding dom/active-elements to identify the actually focsued element and its host elements in ShadowDOM
  • adding focus/within to "polyfill" :focus-within
  • adding warning to browser support detection when document does not have focus
  • adding supports/supports-cache to store browser compatibility data
  • adding focus/first to identify and focus the first [autofocus] or non positive tabindex ([tabindex=1]) element
  • adding dom/query-domsequence to separate sorting and mutating the list from dom/query-tabbable
  • improving fix-browser/pointer-focus-parent for fewer DOM interactions and less code
  • improving focus/trap to allow nothing being focus and re-acquire focus when required
  • improving selector/focusable (thus dom/query-focusable) by also finding focusable shadowed elements (via >>> or /deep/, ShadowDOM) - #11
  • fixing event/active-element to be dispatched on document rather than document.body
  • fixing prototype/svgelement.prototype.focus to also cover SVGElement.prototype.blur
  • fixing linting errors

0.0.1 (December 25th 2014)

  • initial release "focus"