From 98c5f2082abdb93513df23cf3ed792750d1c1a24 Mon Sep 17 00:00:00 2001 From: Jan-Niklas Spangenberg Date: Tue, 23 Jun 2020 18:02:16 +0200 Subject: [PATCH] not working version, using clipboardService --- .../output/src/browser/output-contribution.ts | 48 ++++--------------- 1 file changed, 8 insertions(+), 40 deletions(-) diff --git a/packages/output/src/browser/output-contribution.ts b/packages/output/src/browser/output-contribution.ts index 44f33bf5bc69a..64360cbf655c1 100644 --- a/packages/output/src/browser/output-contribution.ts +++ b/packages/output/src/browser/output-contribution.ts @@ -14,16 +14,17 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { injectable } from 'inversify'; +import { injectable, inject } from 'inversify'; import URI from '@theia/core/lib/common/uri'; import { Widget } from '@theia/core/lib/browser/widgets/widget'; import { MaybePromise } from '@theia/core/lib/common/types'; -import { CommonCommands, quickCommand, OpenHandler, OpenerOptions, isFirefox, KeybindingRegistry } from '@theia/core/lib/browser'; +import { CommonCommands, quickCommand, OpenHandler, OpenerOptions, KeybindingRegistry } from '@theia/core/lib/browser'; import { Command, CommandRegistry, MenuModelRegistry } from '@theia/core/lib/common'; import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-contribution'; import { OutputWidget } from './output-widget'; import { OutputContextMenu } from './output-context-menu'; import { OutputUri } from '../common/output-uri'; +import { ClipboardService } from '@theia/core/src/browser/clipboard-service'; export namespace OutputCommands { @@ -110,8 +111,10 @@ export namespace OutputCommands { @injectable() export class OutputContribution extends AbstractViewContribution implements OpenHandler { + @inject(ClipboardService) + protected readonly clipboardService: ClipboardService; + readonly id: string = `${OutputWidget.ID}-opener`; - private textToCopy: string; constructor() { super({ @@ -144,9 +147,8 @@ export class OutputContribution extends AbstractViewContribution i }); registry.registerCommand(OutputCommands.COPY_ALL, { execute: () => { - this.widget.then(widget => { - const textToCopy = widget.getText(); - this.copy(textToCopy); + this.widget.then(async widget => { + this.clipboardService.writeText(widget.getText()); }); } }); @@ -197,39 +199,5 @@ export class OutputContribution extends AbstractViewContribution i return widget instanceof OutputWidget ? predicate(widget) : false; } - private async clipBoardCopyIsGranted(): Promise { - // Unfortunately Firefox doesn't support permission check `clipboard-write`, so let try to copy anyway, - if (isFirefox) { - return true; - } - try { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const permissions = (navigator as any).permissions; - const { state } = await permissions.query({ name: 'clipboard-write' }); - if (state === 'granted') { - return true; - } - } catch (e) { } - - return false; - } - - private async writeToClipBoard(): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const clipboard = (navigator as any).clipboard; - try { - await clipboard.writeText(this.textToCopy); - } catch (e) {} - } - - async copy(text: string): Promise { - this.textToCopy = text; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const permissions = (navigator as any).permissions; - if (permissions && permissions.query && await this.clipBoardCopyIsGranted()) { - await this.writeToClipBoard(); - } - } }