Skip to content

Commit 308709b

Browse files
committed
Fixes microsoft/monaco-editor#481: Have aria live work in IE and Edge with Narrator
1 parent 93101a2 commit 308709b

1 file changed

Lines changed: 28 additions & 12 deletions

File tree

src/vs/base/browser/ui/aria/aria.ts

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,28 @@
88
import 'vs/css!./aria';
99
import nls = require('vs/nls');
1010
import { 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;
1616
export 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

Comments
 (0)