chore(patch): pull 2.28.1 patch to the next (#2507)

* fix(paste): delay onPaste call to be sure that block is ready (#2506)

* chore(package.json): increment patch version

* Update CHANGELOG.md
This commit is contained in:
Peter Savchenko 2023-10-11 20:28:16 +03:00 committed by GitHub
parent c9014e670d
commit 7d0db9b622
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 4 deletions

View file

@ -7,6 +7,10 @@
- `Fix` — Multiple Tooltip elements creation fixed - `Fix` — Multiple Tooltip elements creation fixed
- `Fix` — When the focusing Block is out of the viewport, the page will be scrolled. - `Fix` — When the focusing Block is out of the viewport, the page will be scrolled.
### 2.28.1
- `Fix` — Some Block were be skipped on saving after pasting them as HTML
### 2.28.0 ### 2.28.0
- `New` - Block ids now displayed in DOM via a data-id attribute. Could be useful for plugins that want to access a Block's element by id. - `New` - Block ids now displayed in DOM via a data-id attribute. Could be useful for plugins that want to access a Block's element by id.
@ -31,6 +35,7 @@
- `Improvement` - `blocks.update(id, data)` now will trigger onChange with only `block-change` event. - `Improvement` - `blocks.update(id, data)` now will trigger onChange with only `block-change` event.
- `Improvement` - `blocks.update(id, data)` will return a promise with BlockAPI object of the changed block. - `Improvement` - `blocks.update(id, data)` will return a promise with BlockAPI object of the changed block.
### 2.27.2 ### 2.27.2
- `Fix` - `onChange` won't be called when element with data-mutation-free changes some attribute - `Fix` - `onChange` won't be called when element with data-mutation-free changes some attribute

View file

@ -1,6 +1,6 @@
{ {
"name": "@editorjs/editorjs", "name": "@editorjs/editorjs",
"version": "2.29.0-rc.1", "version": "2.29.0-rc.2",
"description": "Editor.js — Native JS, based on API and Open Source", "description": "Editor.js — Native JS, based on API and Open Source",
"main": "dist/editorjs.umd.js", "main": "dist/editorjs.umd.js",
"module": "dist/editorjs.mjs", "module": "dist/editorjs.mjs",

View file

@ -399,7 +399,16 @@ export default class BlockManager extends Module {
}); });
try { try {
block.call(BlockToolAPI.ON_PASTE, pasteEvent); /**
* We need to call onPaste after Block will be ready
* because onPaste could change tool's root element, and we need to do that after block.watchBlockMutations() bound
* to detect tool root element change
*
* @todo make this.insert() awaitable and remove requestIdleCallback
*/
window.requestIdleCallback(() => {
block.call(BlockToolAPI.ON_PASTE, pasteEvent);
});
} catch (e) { } catch (e) {
_.log(`${toolName}: onPaste callback call is failed`, 'error', e); _.log(`${toolName}: onPaste callback call is failed`, 'error', e);
} }

View file

@ -1,8 +1,10 @@
import Header from '@editorjs/header'; import Header from '@editorjs/header';
import Image from '@editorjs/simple-image'; import Image from '@editorjs/simple-image';
import * as _ from '../../../src/components/utils'; import * as _ from '../../../src/components/utils';
import { BlockTool, BlockToolData } from '../../../types'; import { BlockTool, BlockToolData, OutputData } from '../../../types';
import $ from '../../../src/components/dom'; import $ from '../../../src/components/dom';
import type EditorJS from '../../../types/index';
describe('Copy pasting from Editor', function () { describe('Copy pasting from Editor', function () {
context('pasting', function () { context('pasting', function () {
@ -111,7 +113,7 @@ describe('Copy pasting from Editor', function () {
tools: { tools: {
header: Header, header: Header,
}, },
}); }).as('editorInstance');
cy.get('[data-cy=editorjs]') cy.get('[data-cy=editorjs]')
.get('div.ce-block') .get('div.ce-block')
@ -121,6 +123,9 @@ describe('Copy pasting from Editor', function () {
'text/html': '<h2>First block</h2><p>Second block</p>', 'text/html': '<h2>First block</h2><p>Second block</p>',
}); });
/**
* Check inserted blocks
*/
cy.get('[data-cy=editorjs]') cy.get('[data-cy=editorjs]')
.get('h2.ce-header') .get('h2.ce-header')
.should('contain', 'First block'); .should('contain', 'First block');
@ -128,6 +133,28 @@ describe('Copy pasting from Editor', function () {
cy.get('[data-cy=editorjs]') cy.get('[data-cy=editorjs]')
.get('div.ce-paragraph') .get('div.ce-paragraph')
.should('contain', 'Second block'); .should('contain', 'Second block');
/**
* Check saved data as well
*/
cy.get<EditorJS>('@editorInstance')
.then(async (editor) => {
cy.wrap<OutputData>(await editor.save())
.then((data) => {
/**
* <h2> has been correctly saved
*/
expect(data.blocks[0].type).to.eq('header');
expect(data.blocks[0].data.text).to.eq('First block');
expect(data.blocks[0].data.level).to.eq(2);
/**
* <p> has been correctly saved
*/
expect(data.blocks[1].type).to.eq('paragraph');
expect(data.blocks[1].data.text).to.eq('Second block');
});
});
}); });
it('should parse pattern', function () { it('should parse pattern', function () {