88import 'vs/css!./aria' ;
99import nls = require( 'vs/nls' ) ;
1010import { isMacintosh } from 'vs/base/common/platform' ;
11- import { Builder , $ } from 'vs/base/browser/builder ' ;
11+ import * as dom from 'vs/base/browser/dom ' ;
1212
13- let ariaContainer : Builder ;
14- let alertContainer : Builder ;
15- let statusContainer : Builder ;
13+ let ariaContainer : HTMLElement ;
14+ let alertContainer : HTMLElement ;
15+ let statusContainer : HTMLElement ;
1616export function setARIAContainer ( parent : HTMLElement ) {
17- ariaContainer = $ ( '.monaco-aria-container' ) . appendTo ( parent ) ;
17+ ariaContainer = document . createElement ( 'div' ) ;
18+ ariaContainer . className = 'monaco-aria-container' ;
1819
19- alertContainer = $ ( '.monaco-alert' ) . appendTo ( ariaContainer ) . attr ( { 'role' : 'alert' , 'aria-atomic' : 'true' } ) ;
20- statusContainer = $ ( '.monaco-status' ) . appendTo ( ariaContainer ) . attr ( { 'role' : 'status' , 'aria-atomic' : 'true' } ) ;
20+ alertContainer = document . createElement ( 'div' ) ;
21+ alertContainer . className = 'monaco-alert' ;
22+ alertContainer . setAttribute ( 'role' , 'alert' ) ;
23+ alertContainer . setAttribute ( 'aria-atomic' , 'true' ) ;
24+ ariaContainer . appendChild ( alertContainer ) ;
25+
26+ statusContainer = document . createElement ( 'div' ) ;
27+ statusContainer . className = 'monaco-status' ;
28+ statusContainer . setAttribute ( 'role' , 'status' ) ;
29+ statusContainer . setAttribute ( 'aria-atomic' , 'true' ) ;
30+ ariaContainer . appendChild ( statusContainer ) ;
31+
32+ parent . appendChild ( ariaContainer ) ;
2133}
2234
2335/**
@@ -38,16 +50,20 @@ export function status(msg: string): void {
3850 }
3951}
4052
41- function insertMessage ( target : Builder , msg : string ) : void {
53+ function insertMessage ( target : HTMLElement , msg : string ) : void {
4254 if ( ! ariaContainer ) {
4355 // console.warn('ARIA support needs a container. Call setARIAContainer() first.');
4456 return ;
4557 }
46-
47- if ( target . getHTMLElement ( ) . textContent === msg ) {
58+ if ( target . textContent === msg ) {
4859 msg = nls . localize ( 'repeated' , "{0} (occurred again)" , msg ) ;
4960 }
5061
51- $ ( target ) . empty ( ) ;
52- $ ( target ) . text ( msg ) ;
62+ dom . clearNode ( target ) ;
63+ target . textContent = msg ;
64+
65+
66+ // See https://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-aria-rolealert-browser-support/
67+ target . style . visibility = 'hidden' ;
68+ target . style . visibility = 'visible' ;
5369}
0 commit comments