Releases: medialize/ally.js
1.4.1 - Module Mania
January 31st 2017. This release does not contain any functional changes.
- replacing array.prototype.findindex by
ally.util.arrayFindIndex
- PR #154 - adding
dist/esm
which provides the modules compiled to ES5 but exposing them in ES6 modules for simplified use in TypeScript projects - PR #154
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
- Improving
ally.element.focus
to focus SVG elements in MS Edge - Improving
ally.element.blur
to remove focus from SVG elements in MS Edge and Firefox <51
Various in v1.4.0
- fixing
ally.is.validTabindex
to account for wrong-casedtabIndex
attribute on SVG elements in MS Edge 14 - fixing
ally.is.focusRelevant
to understandtabindex
on SVG in Firefox and MS Edge - fixing
ally.is.focusRelevant
to understand<use tabindex="-1">
- fixing
ally.is.focusRelevant
to understand<foreignObject tabindex="-1">
- fixing
ally.is.focusRelevant
to include<svg>
when it is its own browsing context in Firefox - fixing
ally.is.tabbable
to consider SVG content tabbable in Firefox and Internet Explorer - fixing
ally.is.tabbable
to consider SVG elements in browsing contexts in Blink - fixing
ally.is.tabbable
to considertabindex="-1"
on SVG elements in<object>
in Edge - fixing
ally.is.tabbable
to consider<use … tabindex="-1">
tabbable in Chrome - fixing
ally.is.tabbable
to remove iOS version restriction on filter - fixing
ally.is.onlyTabbable
to stop considering SVG elements in IE, Edge and Firefox 51+ - fixing
ally.query.tabsequence
to properly sort SVG elements with tabindex in Edge 14+
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
andally.style.focusWithin
to optimizefocusin
orfocus
event name detection - fixing various linting errors after upgrading to eslint 3 and semistandard
Build in v1.4.0
- upgrading babel from 5.x to 6.x - issue #51
- upgrading eslint from 2.x to 3.x
- introducing eslint-config-semistandard
- upgrading lint-staged
- upgrading intern to 3.4.2
- upgrading TravisCI to run build and tests on NodeJS 6.1
Documentation in v1.4.0
- adding Managing focus in SVG
- adding various notes to API docs
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 ~40% 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
- adding
ally.get.activeElement
- issue #119 - adding
ally.element.blur
- issue #120 - adding
ally.element.focus
- issue #121
Keyboard support in v1.3.0
- fixing
ally.maintain.tabFocus
to also work with Option Tab in Safari for macOS - issue #146
Various in v1.3.0
- fixing
ally.element.disabled
to remove SVG links from the document's tabbing order in Firefox - fixing
ally.is.tabbable
to respectexcept.scrollable
- improving
ally.style.focusSource
by adding.unlock()
- issue #151 - refactoring
ally.when.visibleArea
to always execute the callback asynchronously
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 byally.element.focus
- refactoring
element.prototype.matches
toutil/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
- added Hiding DOM elements
- added Managing focus in animated UI
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
- replacing domtokenlist-shim by
ally.util.toggleClass
- issue #147
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
- fixing
supports/focus-in-hiden-iframe
to avoiddocument.write()
- issue #126 - fixing
ally.maintain.disabled
to not disable ancestorsfilter
elements - fixing
ally.event.shadowFocus
to not accessdocument.body
before it's available - issue #144
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
- 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.
Browsers
- 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
- upgrading css.escape to version 1.5.0 to work around WebKit 149175
- upgrading platform.js to version 1.3.1
- adding domtokenlist-shim for IE9 DOM
classList
and SVGclassList
in IE11
Browser Behavior
- fixing
ally.fix.pointerFocusChildren
to use focus identity exceptions - issue #103 - fixing
ally.fix.pointerFocusInput
to properly target nested content of<button>
and<label>
elements
Focusable detection
- adding
ally.get.focusRedirectTarget
to identify elements focus is forwarded to - adding
ally.is.activeElement
to identify if an element is the activeElement within its context - adding option
includeOnlyTabbable
toally.query.firstTabbable
,ally.query.focusable
,ally.query.tabbable
,ally.query.tabsequence
- issue #100 - changing
ally.is.focusRelevant
andally.is.focusable
to regard<keygen>
and<embed>
focus-relevant but not focusable - issue #82 - changing
ally.is.validArea
to properly handle<area href="…">
vs.<area>
- issue #72 - changing
ally.is.focusRelevant
to properly handle<object type="application/x-shockwave-flash">
in IE9 - Issue #71 - refactoring
ally.is.focusRelevant
to identify all elements that are either focusable, tabbable, only-tabbable or redirect focus - refactoring
ally.query.tabsequence
to extractutil/merge-dom-order
andutil/sort-dom-order
- fixing
ally.is.focusRelevant
to identify Flexbox Layout in IE10 and IE11 - fixing
ally.is.focusRelevant
to consider Shadow DOM host elements - fixing
ally.is.focusRelevant
to properly identify scrollable containers in Internet Explorer - fixing
ally.is.focusRelevant
to consider all<area>
elements focus relevant, moving the focusable to verification toally.is.focusable
- fixing
ally.is.focusRelevant
to properly identify SVG links in IE9 - fixing
ally.is.focusable
,ally.is.tabbable
andally.is.onlyTabbable
to consider the state of the hosting<iframe>
or<object>
element - fixing
ally.is.focusable
to compensate Chrome being able to focus hidden<object>
elements - Blink 586191 - fixing
ally.is.tabbable
to consider<iframe>
elements not tabbable - fixing
ally.is.onlyTabbable
to not consider<object>
elements only tabbable anymore - fixing
ally.is.onlyTabbable
to not require elements to satisfyally.is.visible
- fixing
ally.is.visible
to consider the state of the hosting<iframe>
or<object>
element - fixing
ally.is.disabled
to properly handle<form disabled>
in IE9 - IE11 - fixing
ally.get.focusTarget
to resolve elements redirecting focus to other elements - fixing
ally.query.tabsequence
to return<area>
elements at the correct position - issue #5 - fixing
ally.query.tabsequence
to properly sort within Shadow DOM - issue #6
Keyboard support
- adding
ally.maintain.tabFocus
to trap TAB focus in the tabsequence - issue #63 - changing
ally.when.key
to handle modifier keys and respectcontext
andfilter
options - issue #59 - changing
ally.map.keycode
to provide alphanumeric keys and aliasing
Various
- adding
ally.query.shadowHosts
to find elements hostingShadowRoot
s - issue #110 - adding
ally.observe.shadowMutations
to registerMutationObserver
s across nestedShadowRoot
s - issue #110 - fixing
ally.maintain.disabled
to properly handletabindex
attribute changes - fixing
ally.maintain.disabled
to properly disengage within ShadowHosts - issue #107, PR #108 - fixing
ally.maintain.disabled
to properly observe within ShadowHosts - issue #110 - fixing
ally.maintain.disabled
to handle initially disabled elements - issue #123 - fixing
ally.get.parents
to resolve ancestry forSVGElement
in Internet Explorer - fixing
ally.style.focusWithin
to support SVG in IE10 and IE11
Internals
- 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 ...
1.1.0-beta.5
Highlights
- Adding support for focus state detection for content in
<object>
and<iframe>
elements (browsing contexts) - Adding support to load (not execute!) ally.js in IE8
- Automated testing in iOS 9 (Simulator)
- Increased test coverage to ~99%
Bug fixes
- fix(maintain/disabled): properly react to tabindex attribute changes
- fix(maintain/disabled): remember disabled elements for disengage
- fix(maintain/tab-focus): make sure supports tests are performed before first Tab key event
- fix(is/visible): handle browsing contexts
- fix(get/parents): IE does know support parentElement on SVGElement
- fix(is): handle browsing contexts
- fix(is): handle hidden browsing contexts
- fix(is/tabbable): removing iOS version limit
- fix(is/only-tabbable): respect visibility of the tested element
- fix(is/focusable): hidden object element in Chrome
- fix(supports): do not break if focus method is not available (e.g. intests/focusable)
- fix(SVGElement.prototype.focus): do not break loading in IE8 - #112
- fix(svg.prototype.focus): IE may throw error upon accessing activeElement on an SVG document
New Features
- feature(util/get-content-document): adding module to resolve and <iframe> elements to document references
- feature(util/get-frame-element): find browsing context's host element (<iframe> or )
- refactor(selector/focusable): extracting shadow selection to util/select-in-shadows
- Changes (66 commits since 1.1.0-beta.4, 297 commits since 1.0.1)
- Documentation
- Milestone
Resources
The website is not published officially for beta releases, but a Website Preview is available.
To install this version run
npm install ally.js@beta
1.1.0-beta.4
Bug fixes
- fix(supports): reset scroll position of
<body>
element - #60 - fix(supports): detect focus support off-screen - #60
- fix(supports): allow non-boolean cache values
- fix(is/focus-relevant): consider all focusable/tabbable/only-tabbable/focus-redirecting elements
- fix(is/focus-relevant): properly identify SVG links in IE9
- fix(selector/focusable): dropping namespace attribute to find SVG links in IE9
- fix(svgelement.prototype.focus): Edge 13 does not allow reassignment anymore
- fix(fix/pointer-focus-children): identify the correct element to focus
- fix(fix/pointer-focus-input): handle nested content of
<button>
and<label>
New Features
- feature(is/active-element): adding utility to verify if an element has focus
- feature(maintain/tab-focus): adding utility to trap TAB key in tabsequence - #63
- feature(util/context-to-element): adding ability to resolve documentsto their root element
- feature(get/focus-target): adding ability focus-identification-exceptions
- feature(query): adding option includeOnlyTabbale - #100
- feature(supports): adding test to identify if
<svg>
is focusable - feature(supports): adding test to identify if
<text focusable="true">
is focusable - feature(supports): adding test to identify if
<text tabindex="-1">
is focusable
Resources
- Changes (66 commits since 1.1.0-beta.3, 231 commits since 1.0.1)
- Documentation
- Milestone
The website is not published officially for beta releases, but a Website Preview is available.
To install this version run
npm install ally.js@beta