From b3fb8db6b35c7c7363e36da06d9e52eb3f1f6760 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 5 Jan 2023 09:14:16 -0800 Subject: [PATCH] Replace dom helper with HTMLElement.remove() --- .../xterm-addon-canvas/src/BaseRenderLayer.ts | 3 +- src/browser/AccessibilityManager.ts | 5 +-- src/browser/Dom.test.ts | 41 ------------------- src/browser/Dom.ts | 10 ----- src/browser/renderer/dom/DomRenderer.ts | 6 ++- typings/xterm.d.ts | 2 +- 6 files changed, 8 insertions(+), 59 deletions(-) delete mode 100644 src/browser/Dom.test.ts delete mode 100644 src/browser/Dom.ts diff --git a/addons/xterm-addon-canvas/src/BaseRenderLayer.ts b/addons/xterm-addon-canvas/src/BaseRenderLayer.ts index 2fc1ce7a..88d929f1 100644 --- a/addons/xterm-addon-canvas/src/BaseRenderLayer.ts +++ b/addons/xterm-addon-canvas/src/BaseRenderLayer.ts @@ -3,7 +3,6 @@ * @license MIT */ -import { removeElementFromParent } from 'browser/Dom'; import { acquireTextureAtlas } from 'browser/renderer/shared/CharAtlasCache'; import { TEXT_BASELINE } from 'browser/renderer/shared/Constants'; import { tryDrawCustomChar } from 'browser/renderer/shared/CustomGlyphs'; @@ -74,7 +73,7 @@ export abstract class BaseRenderLayer extends Disposable implements IRenderLayer })); this.register(toDisposable(() => { - removeElementFromParent(this._canvas); + this._canvas.remove(); this._charAtlas?.dispose(); })); } diff --git a/src/browser/AccessibilityManager.ts b/src/browser/AccessibilityManager.ts index 80e777a3..cf40fd8d 100644 --- a/src/browser/AccessibilityManager.ts +++ b/src/browser/AccessibilityManager.ts @@ -12,7 +12,6 @@ import { addDisposableDomListener } from 'browser/Lifecycle'; import { Disposable, toDisposable } from 'common/Lifecycle'; import { ScreenDprMonitor } from 'browser/ScreenDprMonitor'; import { IRenderService } from 'browser/services/Services'; -import { removeElementFromParent } from 'browser/Dom'; const MAX_ROWS_TO_READ = 20; @@ -105,7 +104,7 @@ export class AccessibilityManager extends Disposable { // media query that drives the ScreenDprMonitor isn't supported this.register(addDisposableDomListener(window, 'resize', () => this._refreshRowsDimensions())); this.register(toDisposable(() => { - removeElementFromParent(this._accessibilityTreeRoot); + this._accessibilityTreeRoot.remove(); this._rowElements.length = 0; })); } @@ -240,7 +239,7 @@ export class AccessibilityManager extends Disposable { // Only detach/attach on mac as otherwise messages can go unaccounced if (isMac) { - removeElementFromParent(this._liveRegion); + this._liveRegion.remove(); } } diff --git a/src/browser/Dom.test.ts b/src/browser/Dom.test.ts deleted file mode 100644 index 14f3d26f..00000000 --- a/src/browser/Dom.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2020 The xterm.js authors. All rights reserved. - * @license MIT - */ - -import jsdom = require('jsdom'); -import { removeElementFromParent } from 'browser/Dom'; -import { strictEqual, doesNotThrow } from 'assert'; - -describe('Dom', () => { - const dom = new jsdom.JSDOM(); - const document = dom.window.document; - - describe('removeElementFromParent', () => { - it('should remove single child', () => { - const e = document.createElement('div'); - document.body.appendChild(e); - strictEqual(e.parentElement, document.body); - removeElementFromParent(e); - strictEqual(e.parentElement, null); - }); - it('should remove multiple elements', () => { - const e1 = document.createElement('div'); - const e2 = document.createElement('div'); - document.body.appendChild(e1); - document.body.appendChild(e2); - strictEqual(e1.parentElement, document.body); - strictEqual(e2.parentElement, document.body); - removeElementFromParent(e1, e2); - strictEqual(e1.parentElement, null); - strictEqual(e2.parentElement, null); - }); - it('should not throw on undefined', () => { - const e = document.createElement('div'); - document.body.appendChild(e); - strictEqual(e.parentElement, document.body); - doesNotThrow(() => removeElementFromParent(undefined, e)); - strictEqual(e.parentElement, null); - }); - }); -}); diff --git a/src/browser/Dom.ts b/src/browser/Dom.ts deleted file mode 100644 index c558a8b1..00000000 --- a/src/browser/Dom.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) 2020 The xterm.js authors. All rights reserved. - * @license MIT - */ - -export function removeElementFromParent(...elements: (HTMLElement | undefined)[]): void { - for (const e of elements) { - e?.parentElement?.removeChild(e); - } -} diff --git a/src/browser/renderer/dom/DomRenderer.ts b/src/browser/renderer/dom/DomRenderer.ts index 700a62b6..d80c3b98 100644 --- a/src/browser/renderer/dom/DomRenderer.ts +++ b/src/browser/renderer/dom/DomRenderer.ts @@ -3,7 +3,6 @@ * @license MIT */ -import { removeElementFromParent } from 'browser/Dom'; import { BOLD_CLASS, CURSOR_BLINK_CLASS, CURSOR_CLASS, CURSOR_STYLE_BAR_CLASS, CURSOR_STYLE_BLOCK_CLASS, CURSOR_STYLE_UNDERLINE_CLASS, DomRendererRowFactory, ITALIC_CLASS } from 'browser/renderer/dom/DomRendererRowFactory'; import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants'; import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; @@ -87,7 +86,10 @@ export class DomRenderer extends Disposable implements IRenderer { // Outside influences such as React unmounts may manipulate the DOM before our disposal. // https://github.com/xtermjs/xterm.js/issues/2960 - removeElementFromParent(this._rowContainer, this._selectionContainer, this._themeStyleElement, this._dimensionsStyleElement); + this._rowContainer.remove(); + this._selectionContainer.remove(); + this._themeStyleElement.remove(); + this._dimensionsStyleElement.remove(); })); } diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index dc7c38b2..0a849270 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -1179,7 +1179,7 @@ declare module 'xterm' { * @param range The buffer range of the link. */ leave?(event: MouseEvent, text: string, range: IBufferRange): void; - + /** * Whether to receive non-HTTP URLs from LinkProvider. When false, any usage of non-HTTP URLs * will be ignored. Enabling this option without proper protection in `activate` function