WordPress/wp-includes/js/wp-a11y.js
Andrea Fercia 6b7f68855b Accessibility: Remove the ARIA roles from the wp.a11y.speak() live regions.
When Firefox repaints some elements, NVDA may announce "alert" even when there's
no actual message dispatched to the live region. The NVDA implementation differs
from other screen readers and is currently under discussion. To avoid a subpar
user experience better to remove the roles since they're basically redundant.

Fixes #36289.
Built from https://develop.svn.wordpress.org/trunk@37734


git-svn-id: http://core.svn.wordpress.org/trunk@37699 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-16 21:51:27 +00:00

86 lines
2.0 KiB
JavaScript

window.wp = window.wp || {};
( function ( wp, $ ) {
'use strict';
var $containerPolite,
$containerAssertive;
/**
* Update the ARIA live notification area text node.
*
* @since 4.2.0
* @since 4.3.0 Introduced the 'ariaLive' argument.
*
* @param {String} message The message to be announced by Assistive Technologies.
* @param {String} ariaLive Optional. The politeness level for aria-live. Possible values:
* polite or assertive. Default polite.
*/
function speak( message, ariaLive ) {
// Clear previous messages to allow repeated strings being read out.
clear();
if ( $containerAssertive && 'assertive' === ariaLive ) {
$containerAssertive.text( message );
} else if ( $containerPolite ) {
$containerPolite.text( message );
}
}
/**
* Build the live regions markup.
*
* @since 4.3.0
*
* @param {String} ariaLive Optional. Value for the 'aria-live' attribute, default 'polite'.
*
* @return {Object} $container The ARIA live region jQuery object.
*/
function addContainer( ariaLive ) {
ariaLive = ariaLive || 'polite';
var $container = $( '<div>', {
'id': 'wp-a11y-speak-' + ariaLive,
'aria-live': ariaLive,
'aria-relevant': 'additions text',
'aria-atomic': 'true',
'class': 'screen-reader-text wp-a11y-speak-region'
});
$( document.body ).append( $container );
return $container;
}
/**
* Clear the live regions.
*
* @since 4.3.0
*/
function clear() {
$( '.wp-a11y-speak-region' ).text( '' );
}
/**
* Initialize wp.a11y and define ARIA live notification area.
*
* @since 4.2.0
* @since 4.3.0 Added the assertive live region.
*/
$( document ).ready( function() {
$containerPolite = $( '#wp-a11y-speak-polite' );
$containerAssertive = $( '#wp-a11y-speak-assertive' );
if ( ! $containerPolite.length ) {
$containerPolite = addContainer( 'polite' );
}
if ( ! $containerAssertive.length ) {
$containerAssertive = addContainer( 'assertive' );
}
});
wp.a11y = wp.a11y || {};
wp.a11y.speak = speak;
}( window.wp, window.jQuery ));