diff --git a/packages/ckeditor5/src/icons/copy.svg b/packages/ckeditor5/src/icons/copy.svg new file mode 100644 index 000000000..41710638b --- /dev/null +++ b/packages/ckeditor5/src/icons/copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ckeditor5/src/plugins/code_block_toolbar.ts b/packages/ckeditor5/src/plugins/code_block_toolbar.ts index 8e4e1081a..4f886efa8 100644 --- a/packages/ckeditor5/src/plugins/code_block_toolbar.ts +++ b/packages/ckeditor5/src/plugins/code_block_toolbar.ts @@ -1,10 +1,11 @@ import { CodeBlock, Plugin, ViewDocumentFragment, WidgetToolbarRepository, type ViewNode } from "ckeditor5"; import CodeBlockLanguageDropdown from "./code_block_language_dropdown"; +import CopyToClipboardButton from "./copy_to_clipboard_button"; export default class CodeBlockToolbar extends Plugin { static get requires() { - return [ WidgetToolbarRepository, CodeBlock, CodeBlockLanguageDropdown ] as const; + return [ WidgetToolbarRepository, CodeBlock, CodeBlockLanguageDropdown, CopyToClipboardButton ] as const; } afterInit() { @@ -13,7 +14,9 @@ export default class CodeBlockToolbar extends Plugin { widgetToolbarRepository.register("codeblock", { items: [ - "codeBlockDropdown" + "codeBlockDropdown", + "|", + "copyToClipboard" ], getRelatedElement(selection) { const selectionPosition = selection.getFirstPosition(); diff --git a/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts b/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts new file mode 100644 index 000000000..2b67ea820 --- /dev/null +++ b/packages/ckeditor5/src/plugins/copy_to_clipboard_button.ts @@ -0,0 +1,21 @@ +import { ButtonView, Plugin } from "ckeditor5"; +import copyIcon from "../icons/copy.svg?raw"; + +export default class CopyToClipboardButton extends Plugin { + + public init() { + const editor = this.editor; + const componentFactory = editor.ui.componentFactory; + + componentFactory.add("copyToClipboard", locale => { + const button = new ButtonView(locale); + button.set({ + tooltip: "Copy to clipboard", + icon: copyIcon + }); + + return button; + }); + } + +}