提交 308709b1 编写于 作者: A Alex Dima

Fixes Microsoft/monaco-editor#481: Have aria live work in IE and Edge with Narrator

上级 93101a2d
...@@ -8,16 +8,28 @@ ...@@ -8,16 +8,28 @@
import 'vs/css!./aria'; import 'vs/css!./aria';
import nls = require('vs/nls'); import nls = require('vs/nls');
import { isMacintosh } from 'vs/base/common/platform'; import { isMacintosh } from 'vs/base/common/platform';
import { Builder, $ } from 'vs/base/browser/builder'; import * as dom from 'vs/base/browser/dom';
let ariaContainer: Builder; let ariaContainer: HTMLElement;
let alertContainer: Builder; let alertContainer: HTMLElement;
let statusContainer: Builder; let statusContainer: HTMLElement;
export function setARIAContainer(parent: HTMLElement) { export function setARIAContainer(parent: HTMLElement) {
ariaContainer = $('.monaco-aria-container').appendTo(parent); ariaContainer = document.createElement('div');
ariaContainer.className = 'monaco-aria-container';
alertContainer = $('.monaco-alert').appendTo(ariaContainer).attr({ 'role': 'alert', 'aria-atomic': 'true' }); alertContainer = document.createElement('div');
statusContainer = $('.monaco-status').appendTo(ariaContainer).attr({ 'role': 'status', 'aria-atomic': 'true' }); alertContainer.className = 'monaco-alert';
alertContainer.setAttribute('role', 'alert');
alertContainer.setAttribute('aria-atomic', 'true');
ariaContainer.appendChild(alertContainer);
statusContainer = document.createElement('div');
statusContainer.className = 'monaco-status';
statusContainer.setAttribute('role', 'status');
statusContainer.setAttribute('aria-atomic', 'true');
ariaContainer.appendChild(statusContainer);
parent.appendChild(ariaContainer);
} }
/** /**
...@@ -38,16 +50,20 @@ export function status(msg: string): void { ...@@ -38,16 +50,20 @@ export function status(msg: string): void {
} }
} }
function insertMessage(target: Builder, msg: string): void { function insertMessage(target: HTMLElement, msg: string): void {
if (!ariaContainer) { if (!ariaContainer) {
// console.warn('ARIA support needs a container. Call setARIAContainer() first.'); // console.warn('ARIA support needs a container. Call setARIAContainer() first.');
return; return;
} }
if (target.textContent === msg) {
if (target.getHTMLElement().textContent === msg) {
msg = nls.localize('repeated', "{0} (occurred again)", msg); msg = nls.localize('repeated', "{0} (occurred again)", msg);
} }
$(target).empty(); dom.clearNode(target);
$(target).text(msg); target.textContent = msg;
// See https://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-aria-rolealert-browser-support/
target.style.visibility = 'hidden';
target.style.visibility = 'visible';
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册