From a77d89f4c7259a0b2049e649870c46703fd99776 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 26 May 2025 12:18:21 +0300 Subject: [PATCH] feat(ckeditor5/codeblock): implement copy to clipboard function --- .../src/plugins/copy_to_clipboard_button.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts b/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts index 1de7e6f0e..d212c1e49 100644 --- a/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts +++ b/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts @@ -43,7 +43,29 @@ export class CopyToClipboardEditing extends Plugin { export class CopyToClipboardCommand extends Command { execute(...args: Array) { - console.log("Copy to clipboard!"); + const editor = this.editor; + const model = editor.model; + const selection = model.document.selection; + + const codeBlockEl = selection.getFirstPosition()?.findAncestor("codeBlock"); + if (!codeBlockEl) { + console.warn("Unable to find code block element to copy from."); + return; + } + + const codeText = Array.from(codeBlockEl.getChildren()) + .map(child => "data" in child ? child.data : "\n") + .join(""); + + if (codeText) { + navigator.clipboard.writeText(codeText).then(() => { + console.log('Code block copied to clipboard'); + }).catch(err => { + console.error('Failed to copy code block', err); + }); + } else { + console.warn('No code block selected or found.'); + } } }