From 04cf2c63ff8114e237c7c067961a52c01755e00a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 16 Sep 2019 16:08:02 -0500 Subject: [PATCH] Backport PR #7202: Allow different mimetypes for the clipboard data --- packages/apputils/src/clipboard.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/apputils/src/clipboard.ts b/packages/apputils/src/clipboard.ts index a85a1fdb31c8..7bbbfa79d4dc 100644 --- a/packages/apputils/src/clipboard.ts +++ b/packages/apputils/src/clipboard.ts @@ -3,6 +3,9 @@ import { MimeData } from '@phosphor/coreutils'; +// 'string' is allowed so as to make it non-breaking for any 1.x releases +export type ClipboardData = string | MimeData; + /** * The clipboard interface. */ @@ -27,11 +30,17 @@ export namespace Clipboard { * #### Notes * This can only be called in response to a user input event. */ - export function copyToSystem(text: string): void { + export function copyToSystem(clipboardData: ClipboardData): void { let node = document.body; let handler = (event: ClipboardEvent) => { let data = event.clipboardData || (window as any).clipboardData; - data.setData('text', text); + if (typeof clipboardData === 'string') { + data.setData('text', clipboardData); + } else { + (clipboardData as MimeData).types().map((mimeType: string) => { + data.setData(mimeType, clipboardData.getData(mimeType)); + }); + } event.preventDefault(); node.removeEventListener('copy', handler); };