From 4037b943b9d9b2b44ef9ab96dd09b42363c96c93 Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Thu, 2 Mar 2023 14:51:32 -0600 Subject: [PATCH] remove `AccessibleBuffer` (#4427) * remove AccessibleBuffer * rm more * Update src/browser/Terminal.ts * rm css --- css/xterm.css | 23 ------- src/browser/AccessibleBuffer.ts | 101 ------------------------------ src/browser/LocalizableStrings.ts | 3 - src/browser/Terminal.ts | 14 ----- src/browser/Types.d.ts | 1 - src/browser/public/Terminal.ts | 3 - typings/xterm.d.ts | 13 ---- 7 files changed, 158 deletions(-) delete mode 100644 src/browser/AccessibleBuffer.ts diff --git a/css/xterm.css b/css/xterm.css index a9c050c9..e9fd8153 100644 --- a/css/xterm.css +++ b/css/xterm.css @@ -151,29 +151,6 @@ color: transparent; } -.xterm .xterm-accessible-buffer div { - white-space: pre-wrap; -} - -.xterm .xterm-accessible-buffer { - position: absolute; - left: 0; - top: 0; - bottom: 0; - right: 0; - padding: .5em; - background: #000; - color: #fff; - opacity: 0; - overflow: scroll; - overflow-x: hidden; -} - -.xterm .xterm-accessible-buffer:focus-within { - opacity: 1; - z-index: 20; -} - .xterm .live-region { position: absolute; left: -9999px; diff --git a/src/browser/AccessibleBuffer.ts b/src/browser/AccessibleBuffer.ts deleted file mode 100644 index 72721ebc..00000000 --- a/src/browser/AccessibleBuffer.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * Copyright (c) 2017 The xterm.js authors. All rights reserved. - * @license MIT - */ - -import * as Strings from 'browser/LocalizableStrings'; -import { IBufferElementProvider, ITerminal, ReadonlyColorSet } from 'browser/Types'; -import { addDisposableDomListener } from 'browser/Lifecycle'; -import { Disposable, toDisposable } from 'common/Lifecycle'; -import { IRenderService, IThemeService } from 'browser/services/Services'; -import { IOptionsService } from 'common/services/Services'; -import { ITerminalOptions } from 'xterm'; -import { IDisposable } from 'common/Types'; - -export class AccessibleBuffer extends Disposable { - private _element: HTMLElement; - private _isAccessibleBufferActive: boolean = false; - public get isAccessibleBufferActive(): boolean { return this._isAccessibleBufferActive; } - private _provider: IBufferElementProvider | undefined; - constructor( - private readonly _terminal: ITerminal, - @IOptionsService optionsService: IOptionsService, - @IRenderService private readonly _renderService: IRenderService, - @IThemeService themeService: IThemeService - ) { - super(); - if (!this._terminal.element) { - throw new Error('Cannot enable accessible buffer before Terminal.open'); - } - - this._element = document.createElement('div'); - this._element.setAttribute('role', 'document'); - this._element.ariaRoleDescription = Strings.accessibleBuffer; - this._element.tabIndex = 0; - this._element.classList.add('xterm-accessible-buffer'); - this._terminal.element.insertAdjacentElement('afterbegin', this._element); - - this.register(addDisposableDomListener(this._element, 'keydown', (ev: KeyboardEvent) => { - if (ev.key === 'Tab') { - this._isAccessibleBufferActive = false; - } - } - )); - this.register(addDisposableDomListener(this._element, 'focus', () => this._refreshAccessibleBuffer())); - this.register(addDisposableDomListener(this._element, 'focusout', (e) => { - if (!this._element.contains(e.srcElement)) { - this._isAccessibleBufferActive = false; - } - })); - - this._handleColorChange(themeService.colors); - this.register(themeService.onChangeColors(e => this._handleColorChange(e))); - this._handleFontOptionChange(optionsService.options); - this.register(optionsService.onMultipleOptionChange(['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'], () => this._handleFontOptionChange(optionsService.options))); - this.register(toDisposable(() => this._element.remove())); - } - - public registerBufferElementProvider(bufferProvider: IBufferElementProvider): IDisposable { - if (this._provider) { - throw new Error('Buffer element provider already registered'); - } - this._provider = bufferProvider; - return { - dispose: () => { - this._provider = undefined; - } - }; - } - - private _refreshAccessibleBuffer(): void { - if (!this._terminal.viewport) { - return; - } - this._isAccessibleBufferActive = true; - this._element.scrollTop = this._element.scrollHeight; - const bufferElements = this._provider?.provideBufferElements(); - if (!bufferElements) { - const { bufferElements } = this._terminal.viewport.getBufferElements(0); - for (const element of bufferElements) { - if (element.textContent) { - element.textContent = element.textContent.replace(new RegExp(' ', 'g'), '\xA0'); - } - } - this._element.replaceChildren(...bufferElements); - } else { - this._element.replaceChildren(bufferElements); - } - } - - private _handleColorChange(colorSet: ReadonlyColorSet): void { - this._element.style.backgroundColor = colorSet.background.css; - this._element.style.color = colorSet.foreground.css; - } - - private _handleFontOptionChange(options: Required): void { - this._element.style.fontFamily = options.fontFamily; - this._element.style.fontSize = `${options.fontSize}px`; - this._element.style.lineHeight = `${options.lineHeight * (this._renderService.dimensions.css.cell.height)}px`; - this._element.style.letterSpacing = `${options.letterSpacing}px`; - } -} diff --git a/src/browser/LocalizableStrings.ts b/src/browser/LocalizableStrings.ts index de358230..d8bcc2c6 100644 --- a/src/browser/LocalizableStrings.ts +++ b/src/browser/LocalizableStrings.ts @@ -10,6 +10,3 @@ export let promptLabel = 'Terminal input'; // eslint-disable-next-line prefer-const export let tooMuchOutput = 'Too much output to announce, navigate to rows manually to read'; - -// eslint-disable-next-line prefer-const -export let accessibleBuffer = 'Accessibility buffer'; diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index 7d224d3c..1890de77 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -33,7 +33,6 @@ import * as Browser from 'common/Platform'; import { addDisposableDomListener } from 'browser/Lifecycle'; import * as Strings from 'browser/LocalizableStrings'; import { AccessibilityManager } from './AccessibilityManager'; -import { AccessibleBuffer } from './AccessibleBuffer'; import { ITheme, IMarker, IDisposable, ILinkProvider, IDecorationOptions, IDecoration } from 'xterm'; import { DomRenderer } from 'browser/renderer/dom/DomRenderer'; import { KeyboardResultType, CoreMouseEventType, CoreMouseButton, CoreMouseAction, ITerminalOptions, ScrollSource, IColorEvent, ColorIndex, ColorRequestType } from 'common/Types'; @@ -72,7 +71,6 @@ export class Terminal extends CoreTerminal implements ITerminal { private _viewportElement: HTMLElement | undefined; private _helperContainer: HTMLElement | undefined; private _compositionView: HTMLElement | undefined; - private _accessibleBuffer: AccessibleBuffer | undefined; private _overviewRulerRenderer: OverviewRulerRenderer | undefined; @@ -193,13 +191,6 @@ export class Terminal extends CoreTerminal implements ITerminal { })); } - public registerBufferElementProvider(bufferProvider: IBufferElementProvider): IDisposable { - if (!this._accessibleBuffer) { - throw new Error ('Cannot register buffer element provider when terminal has not been opened yet'); - } - return this._accessibleBuffer.registerBufferElementProvider(bufferProvider); - } - /** * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112. * An event from OSC 4|104 may contain multiple set or report requests, and multiple @@ -585,8 +576,6 @@ export class Terminal extends CoreTerminal implements ITerminal { // Listen for mouse events and translate // them into terminal mouse protocols. this.bindMouse(); - - this._accessibleBuffer = this._instantiationService.createInstance(AccessibleBuffer, this); } private _createRenderer(): IRenderer { @@ -778,9 +767,6 @@ export class Terminal extends CoreTerminal implements ITerminal { */ this.register(addDisposableDomListener(el, 'mousedown', (ev: MouseEvent) => { ev.preventDefault(); - if (this._accessibleBuffer?.isAccessibleBufferActive) { - return; - } this.focus(); // Don't send the mouse button to the pty if mouse events are disabled or diff --git a/src/browser/Types.d.ts b/src/browser/Types.d.ts index ef54d2a9..3da4bfc0 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.d.ts @@ -80,7 +80,6 @@ export interface IPublicTerminal extends IDisposable { refresh(start: number, end: number): void; clearTextureAtlas(): void; reset(): void; - registerBufferElementProvider(bufferProvider: IBufferElementProvider): IDisposable; } export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean; diff --git a/src/browser/public/Terminal.ts b/src/browser/public/Terminal.ts index 43e92cf6..6012dd76 100644 --- a/src/browser/public/Terminal.ts +++ b/src/browser/public/Terminal.ts @@ -236,9 +236,6 @@ export class Terminal implements ITerminalApi { public loadAddon(addon: ITerminalAddon): void { return this._addonManager.loadAddon(this, addon); } - public registerBufferElementProvider(bufferProvider: IBufferElementProvider): IDisposable { - return this._core.registerBufferElementProvider(bufferProvider); - } public static get strings(): ILocalizableStrings { return Strings; } diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index 9facd4bd..ed329715 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -498,11 +498,6 @@ declare module 'xterm' { * being printed to the terminal when `screenReaderMode` is enabled. */ tooMuchOutput: string; - - /** - * The aria label for the accessibility buffer - */ - accessibleBuffer: string; } /** @@ -1108,14 +1103,6 @@ declare module 'xterm' { * @param addon The addon to load. */ loadAddon(addon: ITerminalAddon): void; - - /* - * Registers a buffer element provider which will provide a custom element to - * use in the terminal's accessible buffer. Using this an xterm.js embedder - * has full control over how the buffer is represented in the DOM. - * @param bufferElementProvider The buffer element provider. - */ - registerBufferElementProvider(bufferProvider: IBufferElementProvider): IDisposable; } /**