Rotate rows to ensure an item will be read in nav mode when scrolling

This commit is contained in:
Daniel Imms
2018-01-17 14:10:03 -08:00
parent abfa58fca9
commit 0f04f9fbb4
2 changed files with 18 additions and 3 deletions
+17 -2
View File
@@ -187,14 +187,24 @@ export class AccessibilityManager implements IDisposable {
private _renderRows(start: number, end: number): void {
const buffer: IBuffer = (<any>this._terminal.buffer);
const setSize = (buffer.lines.length).toString();
for (let i = start; i <= end; i++) {
const lineData = buffer.translateBufferLineToString(buffer.ydisp + i, true);
this._rowElements[i].textContent = lineData;
this._rowElements[i].setAttribute('aria-posinset', (buffer.ydisp + i + 1).toString());
this._rowElements[i].setAttribute('aria-setsize', (buffer.lines.length).toString());
const posInSet = (buffer.ydisp + i + 1).toString();
this._rowElements[i].setAttribute('aria-posinset', posInSet);
this._rowElements[i].setAttribute('aria-setsize', setSize);
}
}
public rotateRows(): void {
this._rowContainer.removeChild(this._rowElements.shift());
const newRowIndex = this._rowElements.length;
this._rowElements[newRowIndex] = this._createAccessibilityTreeNode();
this._rowContainer.appendChild(this._rowElements[newRowIndex]);
this._refreshRowsDimensions();
}
private _refreshRowsDimensions(): void {
const buffer: IBuffer = (<any>this._terminal.buffer);
const dimensions = this._terminal.renderer.dimensions;
@@ -342,6 +352,11 @@ class NavigationMode implements IDisposable {
}
private _navigateToElement(absoluteRow: number): void {
if (absoluteRow < this._terminal.buffer.ydisp || absoluteRow >= this._terminal.buffer.ydisp + this._terminal.rows) {
// Rotate rows to ensure the next focused item is read out correctly
this._accessibilityManager.rotateRows();
}
absoluteRow = this._terminal.scrollToRow(absoluteRow);
if (this._focusedElement) {
+1 -1
View File
@@ -251,7 +251,7 @@ export interface IEventEmitter {
export interface IListenerType {
(data?: any): void;
listener?: (data?: any) => void;
};
}
export interface ILinkMatcherOptions {
/**