Fix BlockManager.setCurrentBlockByChildNode() with multiple Editor.js instances

This commit is contained in:
Tomoyuki Hata 2021-01-25 21:06:23 +09:00 committed by Peter Savchenko
parent c0ff646e8e
commit 7c8778acc4
4 changed files with 26 additions and 26 deletions

2
dist/editor.js vendored

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,7 @@
# Changelog
- `Fix` - Fix BlockManager.setCurrentBlockByChildNode() with multiple Editor.js instances [#1503](https://github.com/codex-team/editor.js/issues/1503).
### 2.19.1
- `Improvements` - The [Cypress](https://www.cypress.io) was integrated as the end-to-end testing framework

View file

@ -560,10 +560,8 @@ export default class BlockManager extends Module {
* 2) Mark it as current
*
* @param {Node} childNode - look ahead from this node.
*
* @throws Error - when passed Node is not included at the Block
*/
public setCurrentBlockByChildNode(childNode: Node): Block {
public setCurrentBlockByChildNode(childNode: Node): Block | undefined {
/**
* If node is Text TextNode
*/
@ -573,23 +571,23 @@ export default class BlockManager extends Module {
const parentFirstLevelBlock = (childNode as HTMLElement).closest(`.${Block.CSS.wrapper}`);
if (parentFirstLevelBlock) {
/**
* Update current Block's index
*
* @type {number}
*/
this.currentBlockIndex = this._blocks.nodes.indexOf(parentFirstLevelBlock as HTMLElement);
/**
* Update current block active input
*/
this.currentBlock.updateCurrentInput();
return this.currentBlock;
} else {
throw new Error('Can not find a Block from this child Node');
if (!parentFirstLevelBlock?.closest(`.${this.Editor.UI.CSS.editorWrapper}`)?.isEqualNode(this.Editor.UI.nodes.wrapper)) {
return;
}
/**
* Update current Block's index
*
* @type {number}
*/
this.currentBlockIndex = this._blocks.nodes.indexOf(parentFirstLevelBlock as HTMLElement);
/**
* Update current block active input
*/
this.currentBlock.updateCurrentInput();
return this.currentBlock;
}
/**

View file

@ -87,16 +87,16 @@ export default class DragNDrop extends Module {
/**
* Try to set current block by drop target.
* If drop target (error will be thrown) is not part of the Block, set last Block as current.
* If drop target is not part of the Block, set last Block as current.
*/
try {
const targetBlock = BlockManager.setCurrentBlockByChildNode(dropEvent.target as Node);
const targetBlock = BlockManager.setCurrentBlockByChildNode(dropEvent.target as Node);
if (targetBlock) {
this.Editor.Caret.setToBlock(targetBlock, Caret.positions.END);
} catch (e) {
const targetBlock = BlockManager.setCurrentBlockByChildNode(BlockManager.lastBlock.holder);
} else {
const lastBlock = BlockManager.setCurrentBlockByChildNode(BlockManager.lastBlock.holder);
this.Editor.Caret.setToBlock(targetBlock, Caret.positions.END);
this.Editor.Caret.setToBlock(lastBlock, Caret.positions.END);
}
await Paste.processDataTransfer(dropEvent.dataTransfer, true);