Fix copy in FireFox

This commit is contained in:
Georgy Berezhnoy 2021-04-08 00:20:39 +03:00
commit ca300257db
3 changed files with 19 additions and 8 deletions

View file

@ -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

View file

@ -167,7 +167,7 @@ export default class BlockEvents extends Module {
*
* @param {ClipboardEvent} event - clipboard event
*/
public handleCommandC(event: ClipboardEvent): Promise<void> {
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<void> {
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();

View file

@ -285,7 +285,7 @@ export default class BlockSelection extends Module {
*
* @returns {Promise<void>}
*/
public async copySelectedBlocks(e: ClipboardEvent): Promise<void> {
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
}
});
}
/**