mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
remove AccessibleBuffer (#4427)
* remove AccessibleBuffer * rm more * Update src/browser/Terminal.ts * rm css
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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<ITerminalOptions>): 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`;
|
||||
}
|
||||
}
|
||||
@@ -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';
|
||||
|
||||
@@ -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
|
||||
|
||||
Vendored
-1
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Vendored
-13
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user