JavaScript library to help modern web applications with accessibility concerns
January 31st 2017. This release does not contain any functional changes.
ally.util.arrayFindIndex
- PR #154
dist/esm
which provides the modules compiled to ES5 but exposing them in ES6 modules for simplified use in TypeScript projects - PR #154
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.
.focus()
, .blur()
to properly support SVG contentThe following lists show the changes to the library grouped by domain.
ally.element.focus
to focus SVG elements in MS Edgeally.element.blur
to remove focus from SVG elements in MS Edge and Firefox <51ally.is.validTabindex
to account for wrong-cased tabIndex
attribute on SVG elements in MS Edge 14ally.is.focusRelevant
to understand tabindex
on SVG in Firefox and MS Edgeally.is.focusRelevant
to understand <use tabindex="-1">
ally.is.focusRelevant
to understand <foreignObject tabindex="-1">
ally.is.focusRelevant
to include <svg>
when it is its own browsing context in Firefoxally.is.tabbable
to consider SVG content tabbable in Firefox and Internet Explorerally.is.tabbable
to consider SVG elements in browsing contexts in Blinkally.is.tabbable
to consider tabindex="-1"
on SVG elements in <object>
in Edgeally.is.tabbable
to consider <use … tabindex="-1">
tabbable in Chromeally.is.tabbable
to remove iOS version restriction on filterally.is.onlyTabbable
to stop considering SVG elements in IE, Edge and Firefox 51+ally.query.tabsequence
to properly sort SVG elements with tabindex in Edge 14+ally.style.focusSource
and ally.style.focusWithin
to optimize focusin
or focus
event name detectionNovember 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.
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.
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.
.focus()
, .blur()
, and obtaining the active elementThe following lists show the changes to the library grouped by domain.
ally.get.activeElement
- issue #119
ally.element.blur
- issue #120
ally.element.focus
- issue #121
ally.maintain.tabFocus
to also work with Option Tab in Safari for macOS - issue #146
ally.element.disabled
to remove SVG links from the document's tabbing order in Firefoxally.is.tabbable
to respect except.scrollable
ally.style.focusSource
by adding .unlock()
- issue #151
ally.when.visibleArea
to always execute the callback asynchronously
svgelement.prototype.focus
as this should be covered more elegantly by ally.element.focus
element.prototype.matches
to util/matches-element
Intern unit and functional tests have been run for the following browsers, covering 99% of the library's code:
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:
<object>
elements<use>
elements may be focusable depending on the content they referenceAugust 23rd 2016. We're releasing this fix to remove a dependency we've loaded directly off a forked github repository, rather than from npm.
ally.util.toggleClass
- issue #147
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.
supports/focus-in-hiden-iframe
to avoid document.write()
- issue #126
ally.maintain.disabled
to not disable ancestors filter
elementsally.event.shadowFocus
to not access document.body
before it's available - issue #144
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.
Even though this is a "stability release" a few new features snuck in, most notably:
ally.when.key
now supports modifier keys (shift, alt, control, meta) in a simple notation.ally.maintain.tabFocus
we can now trap TAB focus in the tabsequence.A few numbers explaining the increased file size:
ally.query.tabsequence
The following lists show the changes to the library grouped by domain.
classList
and SVG classList
in IE11ally.fix.pointerFocusChildren
to use focus identity exceptions - issue #103
ally.fix.pointerFocusInput
to properly target nested content of <button>
and <label>
elementsally.get.focusRedirectTarget
to identify elements focus is forwarded toally.is.activeElement
to identify if an element is the activeElement within its contextincludeOnlyTabbable
to ally.query.firstTabbable
, ally.query.focusable
, ally.query.tabbable
, ally.query.tabsequence
- issue #100
ally.is.focusRelevant
and ally.is.focusable
to regard <keygen>
and <embed>
focus-relevant but not focusable - issue #82
ally.is.validArea
to properly handle <area href="…">
vs. <area>
- issue #72
ally.is.focusRelevant
to properly handle <object type="application/x-shockwave-flash">
in IE9 - Issue #71
ally.is.focusRelevant
to identify all elements that are either focusable, tabbable, only-tabbable or redirect focusally.query.tabsequence
to extract util/merge-dom-order
and util/sort-dom-order
ally.is.focusRelevant
to identify Flexbox Layout in IE10 and IE11ally.is.focusRelevant
to consider Shadow DOM host elementsally.is.focusRelevant
to properly identify scrollable containers in Internet Explorerally.is.focusRelevant
to consider all <area>
elements focus relevant, moving the focusable to verification to ally.is.focusable
ally.is.focusRelevant
to properly identify SVG links in IE9ally.is.focusable
, ally.is.tabbable
and ally.is.onlyTabbable
to consider the state of the hosting <iframe>
or <object>
elementally.is.focusable
to compensate Chrome being able to focus hidden <object>
elements - Blink 586191
ally.is.tabbable
to consider <iframe>
elements not tabbableally.is.onlyTabbable
to not consider <object>
elements only tabbable anymoreally.is.onlyTabbable
to not require elements to satisfy ally.is.visible
ally.is.visible
to consider the state of the hosting <iframe>
or <object>
elementally.is.disabled
to properly handle <form disabled>
in IE9 - IE11ally.get.focusTarget
to resolve elements redirecting focus to other elementsally.query.tabsequence
to return <area>
elements at the correct position - issue #5
ally.query.tabsequence
to properly sort within Shadow DOM - issue #6
ally.maintain.tabFocus
to trap TAB focus in the tabsequence - issue #63
ally.when.key
to handle modifier keys and respect context
and filter
options - issue #59
ally.map.keycode
to provide alphanumeric keys and aliasingally.query.shadowHosts
to find elements hosting ShadowRoot
s - issue #110
ally.observe.shadowMutations
to register MutationObserver
s across nested ShadowRoot
s - issue #110
ally.maintain.disabled
to properly handle tabindex
attribute changesally.maintain.disabled
to properly disengage within ShadowHosts - issue #107, PR #108
ally.maintain.disabled
to properly observe within ShadowHosts - issue #110
ally.maintain.disabled
to handle initially disabled elements - issue #123
ally.get.parents
to resolve ancestry for SVGElement
in Internet Explorerally.style.focusWithin
to support SVG in IE10 and IE11ally/util/get-content-document
to obtain the browsing context of <object>
and <iframe>
elementsally/util/get-frame-element
to obtain the host element (<object>
or <iframe>
) of browsing context elementssupports/focus-in-hidden-iframe
to identify if content within a hidden iframe is focusablesupports/focus-object-svg-hidden
to identify if a hidden <object>
element is focusableis/is.util.js
to extract image map related functions into utils/image-map
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 signatureconsole.log()
to go through util/logger
selector/focusable
to extract util/select-in-shadows
ally.is.*
to work with other documents (e.g. iframes) - issue #78
supports/*
to not raise network errors - issue #68
supports/*
to run when required instead of on script load, restore scroll position - issue #60
supports/supports-cache
to respect ally.js version changesupports/focus-label-tabindex
in Chrome 49SVGElement.prototype.focus
to identify Microsoft Edge 13Intern unit and functional tests have been run for the following browsers, covering 99% of the library's code:
src/util/sort-elements-by-tabindex.js
to src/query/tabsequence.sort-tabindex.js
<object>
and <iframe>
elements (browsing contexts)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
<body>
element - #60<button>
and <label>
<svg>
is focusable<text focusable="true">
is focusable<text tabindex="-1">
is focusableThe website is not published officially for beta releases, but a Website Preview is available.
To install this version run
npm install ally.js@beta