From 8ffdc14143d139383f328a164f76ae57567ee656 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 25 May 2019 11:46:02 -0700 Subject: [PATCH] Only update a11y announcements on animation frame Fixes #1965 --- src/AccessibilityManager.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/AccessibilityManager.ts b/src/AccessibilityManager.ts index 7f1d8eaa..cf6dbdda 100644 --- a/src/AccessibilityManager.ts +++ b/src/AccessibilityManager.ts @@ -43,6 +43,8 @@ export class AccessibilityManager extends Disposable { */ private _charsToConsume: string[] = []; + private _charsToAnnounce: string = ''; + constructor( private _terminal: ITerminal, private _dimensions: IRenderDimensions @@ -202,10 +204,10 @@ export class AccessibilityManager extends Disposable { // Have the screen reader ignore the char if it was just input const shiftedChar = this._charsToConsume.shift(); if (shiftedChar !== char) { - this._announceCharacter(char); + this._charsToAnnounce += char; } } else { - this._announceCharacter(char); + this._charsToAnnounce += char; } if (char === '\n') { @@ -260,6 +262,7 @@ export class AccessibilityManager extends Disposable { element.setAttribute('aria-setsize', setSize); } } + this._announceCharacters(); } private _refreshRowsDimensions(): void { @@ -283,13 +286,11 @@ export class AccessibilityManager extends Disposable { element.style.height = `${this._dimensions.actualCellHeight}px`; } - private _announceCharacter(char: string): void { - if (char === ' ') { - // Always use nbsp for spaces in order to preserve the space between characters in - // voiceover's caption window - this._liveRegion.innerHTML += ' '; - } else { - this._liveRegion.textContent += char; + private _announceCharacters(): void { + if (this._charsToAnnounce.length === 0) { + return; } + this._liveRegion.textContent += this._charsToAnnounce; + this._charsToAnnounce = ''; } }