diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 599322b7..ebfb1a8e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +### 2.20.1 + +- `Fix` — Fix copy in FireFox [1625](https://github.com/codex-team/editor.js/issues/1625) + ### 2.20.0 - `New` — [Block Tunes API](block-tunes.md) added diff --git a/src/components/modules/blockEvents.ts b/src/components/modules/blockEvents.ts index 89cd5077..b1372901 100644 --- a/src/components/modules/blockEvents.ts +++ b/src/components/modules/blockEvents.ts @@ -167,7 +167,7 @@ export default class BlockEvents extends Module { * * @param {ClipboardEvent} event - clipboard event */ - public handleCommandC(event: ClipboardEvent): Promise { + public handleCommandC(event: ClipboardEvent): void { const { BlockSelection } = this.Editor; if (!BlockSelection.anyBlockSelected) { @@ -175,7 +175,7 @@ export default class BlockEvents extends Module { } // Copy Selected Blocks - return BlockSelection.copySelectedBlocks(event); + BlockSelection.copySelectedBlocks(event); } /** @@ -183,14 +183,14 @@ export default class BlockEvents extends Module { * * @param {ClipboardEvent} event - clipboard event */ - public async handleCommandX(event: ClipboardEvent): Promise { + public handleCommandX(event: ClipboardEvent): void { const { BlockSelection, BlockManager, Caret } = this.Editor; if (!BlockSelection.anyBlockSelected) { return; } - await BlockSelection.copySelectedBlocks(event); + BlockSelection.copySelectedBlocks(event); const selectionPositionIndex = BlockManager.removeSelectedBlocks(); diff --git a/src/components/modules/blockSelection.ts b/src/components/modules/blockSelection.ts index 1c05d239..c35e8d51 100644 --- a/src/components/modules/blockSelection.ts +++ b/src/components/modules/blockSelection.ts @@ -285,7 +285,7 @@ export default class BlockSelection extends Module { * * @returns {Promise} */ - public async copySelectedBlocks(e: ClipboardEvent): Promise { + public copySelectedBlocks(e: ClipboardEvent): void { /** * Prevent default copy */ @@ -304,15 +304,22 @@ export default class BlockSelection extends Module { fakeClipboard.appendChild(fragment); }); - const savedData = await Promise.all(this.selectedBlocks.map((block) => block.save())); - const textPlain = Array.from(fakeClipboard.childNodes).map((node) => node.textContent) .join('\n\n'); const textHTML = fakeClipboard.innerHTML; e.clipboardData.setData('text/plain', textPlain); e.clipboardData.setData('text/html', textHTML); - e.clipboardData.setData(this.Editor.Paste.MIME_TYPE, JSON.stringify(savedData)); + + Promise + .all(this.selectedBlocks.map((block) => block.save())) + .then(savedData => { + try { + e.clipboardData.setData(this.Editor.Paste.MIME_TYPE, JSON.stringify(savedData)); + } catch (err) { + // In Firefox we can't set data in async function + } + }); } /**