Path: blob/main/src/vs/editor/contrib/hover/browser/hoverCopyButton.ts
4779 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Disposable } from '../../../../base/common/lifecycle.js';6import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';7import { IHoverService } from '../../../../platform/hover/browser/hover.js';8import { localize } from '../../../../nls.js';9import { Codicon } from '../../../../base/common/codicons.js';10import { SimpleButton } from '../../find/browser/findWidget.js';11import { status } from '../../../../base/browser/ui/aria/aria.js';1213/**14* A button that appears in hover parts to copy their content to the clipboard.15*/16export class HoverCopyButton extends Disposable {1718private readonly _button: SimpleButton;1920constructor(21private readonly _container: HTMLElement,22private readonly _getContent: () => string,23@IClipboardService private readonly _clipboardService: IClipboardService,24@IHoverService private readonly _hoverService: IHoverService,25) {26super();2728this._container.classList.add('hover-row-with-copy');2930this._button = this._register(new SimpleButton({31label: localize('hover.copy', "Copy"),32icon: Codicon.copy,33onTrigger: () => this._copyContent(),34className: 'hover-copy-button',35}, this._hoverService));3637this._container.appendChild(this._button.domNode);38}3940private async _copyContent(): Promise<void> {41const content = this._getContent();42if (content) {43await this._clipboardService.writeText(content);44status(localize('hover.copied', "Copied to clipboard"));45}46}47}484950