
Security News
TypeScript is Porting Its Compiler to Go for 10x Faster Builds
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
@accede-web/tablist
Advanced tools
WAI-ARIA tablist plugin based on AcceDe Web accessibility guidelines
WAI-ARIA tab plugin without dependencies.
Basic HTML structure with roles tablist
, tab
, and tabpanel
.
<ul role="tablist">
<li role="tab" aria-controls="tab-1">Tab 1</li>
<li role="tab" aria-controls="tab-2">Tab 2</li>
<li role="tab" aria-disabled="true" aria-controls="tab-3">Tab 3</li>
<li role="tab" aria-controls="tab-4">Tab 4</li>
</ul>
<div role="tabpanel" id="tab-1">
<p>---</p>
</div>
<div role="tabpanel" id="tab-2">
<p>---</p>
</div>
<div role="tabpanel" id="tab-3">
<p>---</p>
</div>
<div role="tabpanel" id="tab-4">
<p>---</p>
</div>
An aria-disabled
attribute set to true
on a tab
will disable the tab
and the associated tabpanel
making them unfocusable and unselectable.
If you wish to open one specific tab when the script starts, just add the data-open
attribute with the value of true
on the desired tab
:
<ul role="tablist">
<li role="tab" aria-controls="tab-1">Tab 1</li>
<li role="tab" aria-controls="tab-2" data-open="true">Tab 2</li>
<li role="tab" aria-controls="tab-3">Tab 3</li>
<li role="tab" aria-controls="tab-4">Tab 4</li>
</ul>
<!-- -->
At least a CSS selector for panels to be hidden when not selected:
[role=tabpanel][aria-hidden=true] {
display: none;
}
The selector can be anything you want, like a class, as the script allows callback when opening or closing a panel; you can add your own class using the callbacks.
The script itself, either from npm:
$ npm install @accede-web/tablist
and later in your code:
var Tablist = require( '@accede-web/tablist' );
// or
import Tablist from @accede-web/tablist
or downloaded from Github and added to the page (minified and non minified versions available in the dist
folder)
<script src="./js/tablist.min.js"></script>
Using the later, the script will be available on window
under the namespace Tablist
.
Now to kick off the script:
// get the tablist element
var list = document.querySelector( '[role="tablist"]' );
// create the tablist instance
var tablist = new window.Tablist( list );
// optionnaly add callbacks to on show and hide a tab
tablist.on( 'show', function( tab, tabPanel ){
…
});
tablist.on( 'hide', function( tab, tabPanel ){
…
});
// start the plugin
tablist.mount();
The script takes one parameter:
tablist
DOM elementAs the script takes only one tablist
element as parameter you have to loop over each tablist
to kick off the script on each of them.
var lists = document.querySelectorAll( '[role="tablist"]' );
Array.prototype.forEach.call( lists, function( list ) {
new window.Tablist( list ).mount();
});
The Tablist
constructor returns 4 methods:
mount()
- bind all events and apply required attributesunmount()
- unbind keyboard and mouse eventson( event, callback )
- bind a callback to either the show
or hide
event triggered when changing tab. Both tab
and tabPanel
HTMLElement are passed on the callbackoff( event, callback )
- unbind a callback to either the show
or hide
event triggered when changing tabTo know which tab
and tabPanel
is open use tablist.current
. It will return an array containing tab
and tabPanel
// ES6 destructuring array
const { tab, tabPanel } = tablist.current;
tab; // return the `tab`
tabPanel; // return the `tabPanel`
// ES5
var elements = tablist.current;
elements.tab; // return the `tab`
elements.tabPanel; // return the `tabPanel`
The keyboard interactions are based on Atalan's AcceDe Web guidelines (in French) and the WAI-AIRA 1.0 Authoring Practices
Tab
- only the active tab is in the tab order. The user reaches the tabbed panel component by pressing the tab key until the active tab title receives focus.Left Arrow
- with focus on a tab, pressing the left arrow will move focus to the previous tab in the tab list and activate that tab. Pressing the left arrow when the focus is on the first tab in the tab list will move focus and activate the last tab in the list.Right Arrow
- with focus on a tab, pressing the right arrow will move focus to the next tab in the tab list and activate that tab. Pressing the right arrow when the focus is on the last tab in the tab list will move focus to and activate the first tab in the list.Up arrow
- behaves the same as left arrow in order to support vertical tabs.Down arrow
- behaves the same as right arrow in order to support vertical tabs.Home
- with focus on a tab, pressing the Home key will move the focus to the first tabEnd
- with focus on a tab, pressing the End key will move the focus to the last tabControl+Up Arrow
- with focus anywhere within the tab panel, pressing Control+Up Arrow will move focus to the tab for that panel. This is not standard behavior.Control+PageUp
- When focus is inside of a tab panel, pressing Control+PageUp moves focus to the tab of the previous tab in the tab list and activates that tab. When focus is in the first tab panel in the tab list, pressing Control+PageUp will move focus to the last tab in the tab list and activate that tab.Control+PageDown
When focus is inside of a tab panel, pressing Control+PageDown moves focus to the tab of the next tab in the tab list and activates that tab. When focus is in the last tab panel in the tab list, pressing Control+PageUpwill move focus to the first tab in the tab list and activate that tab.This plugin is tested against the following browsers:
Install the project dependencies:
$ npm install
Run the automated test cases:
$ npm test
FAQs
WAI-ARIA tablist plugin based on AcceDe Web accessibility guidelines
The npm package @accede-web/tablist receives a total of 144 weekly downloads. As such, @accede-web/tablist popularity was classified as not popular.
We found that @accede-web/tablist demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.