From 142df23163239d2fea8a1768382bf06b54e07876 Mon Sep 17 00:00:00 2001 From: Andrew Serong <14988353+andrewserong@users.noreply.github.com> Date: Tue, 18 Jul 2023 15:55:11 +1000 Subject: [PATCH 1/3] Parse / Site Editor: Ensure autop is not run when freeform block is set to core/html --- packages/blocks/src/api/parser/index.js | 1 + packages/blocks/src/api/parser/test/index.js | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/packages/blocks/src/api/parser/index.js b/packages/blocks/src/api/parser/index.js index 52facfb212c8c..d2c1055e2f776 100644 --- a/packages/blocks/src/api/parser/index.js +++ b/packages/blocks/src/api/parser/index.js @@ -101,6 +101,7 @@ export function normalizeRawBlock( rawBlock, options ) { // meaning there are no negative consequences to repeated autop calls. if ( rawBlockName === fallbackBlockName && + rawBlockName !== 'core/html' && ! options?.__unstableSkipAutop ) { rawInnerHTML = autop( rawInnerHTML ).trim(); diff --git a/packages/blocks/src/api/parser/test/index.js b/packages/blocks/src/api/parser/test/index.js index 589d6b81be553..c6bd9a71f7cd1 100644 --- a/packages/blocks/src/api/parser/test/index.js +++ b/packages/blocks/src/api/parser/test/index.js @@ -100,6 +100,17 @@ describe( 'block parser', () => { expect( block.attributes ).toEqual( { content: '

content

' } ); } ); + it( 'skips adding paragraph tags if freeform block is set to core/html', () => { + registerBlockType( 'core/html', unknownBlockSettings ); + setFreeformContentHandlerName( 'core/html' ); + + const block = parseRawBlock( { + innerHTML: 'content', + } ); + expect( block.name ).toEqual( 'core/html' ); + expect( block.attributes ).toEqual( { content: 'content' } ); + } ); + it( 'skips adding paragraph tags if __unstableSkipAutop is passed as an option', () => { registerBlockType( 'core/freeform-block', unknownBlockSettings ); setFreeformContentHandlerName( 'core/freeform-block' ); From 61f0bd8c1ef1b3531366dd34e5262a846b202555 Mon Sep 17 00:00:00 2001 From: Andrew Serong <14988353+andrewserong@users.noreply.github.com> Date: Wed, 19 Jul 2023 09:23:40 +1000 Subject: [PATCH 2/3] Switch to equals freeform instead of not equals core/html --- packages/blocks/src/api/parser/index.js | 2 +- packages/blocks/src/api/parser/test/index.js | 12 ++++++------ packages/blocks/src/api/serializer.js | 3 ++- packages/blocks/src/api/test/serializer.js | 16 ++++++++-------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/blocks/src/api/parser/index.js b/packages/blocks/src/api/parser/index.js index d2c1055e2f776..f8ff0c68964dc 100644 --- a/packages/blocks/src/api/parser/index.js +++ b/packages/blocks/src/api/parser/index.js @@ -101,7 +101,7 @@ export function normalizeRawBlock( rawBlock, options ) { // meaning there are no negative consequences to repeated autop calls. if ( rawBlockName === fallbackBlockName && - rawBlockName !== 'core/html' && + rawBlockName === 'core/freeform' && ! options?.__unstableSkipAutop ) { rawInnerHTML = autop( rawInnerHTML ).trim(); diff --git a/packages/blocks/src/api/parser/test/index.js b/packages/blocks/src/api/parser/test/index.js index c6bd9a71f7cd1..85e51e9d0af02 100644 --- a/packages/blocks/src/api/parser/test/index.js +++ b/packages/blocks/src/api/parser/test/index.js @@ -90,13 +90,13 @@ describe( 'block parser', () => { } ); it( 'should fall back to the freeform content handler if block type not specified', () => { - registerBlockType( 'core/freeform-block', unknownBlockSettings ); - setFreeformContentHandlerName( 'core/freeform-block' ); + registerBlockType( 'core/freeform', unknownBlockSettings ); + setFreeformContentHandlerName( 'core/freeform' ); const block = parseRawBlock( { innerHTML: 'content', } ); - expect( block.name ).toEqual( 'core/freeform-block' ); + expect( block.name ).toEqual( 'core/freeform' ); expect( block.attributes ).toEqual( { content: '

content

' } ); } ); @@ -112,8 +112,8 @@ describe( 'block parser', () => { } ); it( 'skips adding paragraph tags if __unstableSkipAutop is passed as an option', () => { - registerBlockType( 'core/freeform-block', unknownBlockSettings ); - setFreeformContentHandlerName( 'core/freeform-block' ); + registerBlockType( 'core/freeform', unknownBlockSettings ); + setFreeformContentHandlerName( 'core/freeform' ); const block = parseRawBlock( { @@ -123,7 +123,7 @@ describe( 'block parser', () => { __unstableSkipAutop: true, } ); - expect( block.name ).toEqual( 'core/freeform-block' ); + expect( block.name ).toEqual( 'core/freeform' ); expect( block.attributes ).toEqual( { content: 'content' } ); } ); diff --git a/packages/blocks/src/api/serializer.js b/packages/blocks/src/api/serializer.js index fff687767b7fa..92559b1a0e717 100644 --- a/packages/blocks/src/api/serializer.js +++ b/packages/blocks/src/api/serializer.js @@ -390,7 +390,8 @@ export function __unstableSerializeAndClean( blocks ) { // pre-block-editor removep'd content formatting. if ( blocks.length === 1 && - blocks[ 0 ].name === getFreeformContentHandlerName() + blocks[ 0 ].name === getFreeformContentHandlerName() && + blocks[ 0 ].name === 'core/freeform' ) { content = removep( content ); } diff --git a/packages/blocks/src/api/test/serializer.js b/packages/blocks/src/api/test/serializer.js index 22fa5bc7b6dc6..6cb21470f9e1f 100644 --- a/packages/blocks/src/api/test/serializer.js +++ b/packages/blocks/src/api/test/serializer.js @@ -244,7 +244,7 @@ describe( 'block serializer', () => { describe( 'serializeBlock()', () => { it( 'serializes the freeform content fallback block without comment delimiters', () => { - registerBlockType( 'core/freeform-block', { + registerBlockType( 'core/freeform', { category: 'text', title: 'freeform block', attributes: { @@ -254,8 +254,8 @@ describe( 'block serializer', () => { }, save: ( { attributes } ) => attributes.fruit, } ); - setFreeformContentHandlerName( 'core/freeform-block' ); - const block = createBlock( 'core/freeform-block', { + setFreeformContentHandlerName( 'core/freeform' ); + const block = createBlock( 'core/freeform', { fruit: 'Bananas', } ); @@ -264,7 +264,7 @@ describe( 'block serializer', () => { expect( content ).toBe( 'Bananas' ); } ); it( 'serializes the freeform content fallback block with comment delimiters in nested context', () => { - registerBlockType( 'core/freeform-block', { + registerBlockType( 'core/freeform', { category: 'text', title: 'freeform block', attributes: { @@ -274,17 +274,17 @@ describe( 'block serializer', () => { }, save: ( { attributes } ) => attributes.fruit, } ); - setFreeformContentHandlerName( 'core/freeform-block' ); - const block = createBlock( 'core/freeform-block', { + setFreeformContentHandlerName( 'core/freeform' ); + const block = createBlock( 'core/freeform', { fruit: 'Bananas', } ); const content = serializeBlock( block, { isInnerBlocks: true } ); expect( content ).toBe( - '\n' + + '\n' + 'Bananas\n' + - '' + '' ); } ); it( 'serializes the unregistered fallback block without comment delimiters', () => { From 4c01a3b066cb80102f2fa488c3729de80d64f40b Mon Sep 17 00:00:00 2001 From: Andrew Serong <14988353+andrewserong@users.noreply.github.com> Date: Wed, 19 Jul 2023 10:13:12 +1000 Subject: [PATCH 3/3] Rename core/test-freeform to core/freeform in tests --- .../block-editor/src/store/test/selectors.js | 10 +++---- packages/editor/src/store/test/selectors.js | 26 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/block-editor/src/store/test/selectors.js b/packages/block-editor/src/store/test/selectors.js index fc4db2c41f8a3..9140248391cf8 100644 --- a/packages/block-editor/src/store/test/selectors.js +++ b/packages/block-editor/src/store/test/selectors.js @@ -121,7 +121,7 @@ describe( 'selectors', () => { parent: [ 'core/test-block-b' ], } ); - registerBlockType( 'core/test-freeform', { + registerBlockType( 'core/freeform', { save: ( props ) => { props.attributes.content }, category: 'text', title: 'Test Freeform Content Handler', @@ -177,7 +177,7 @@ describe( 'selectors', () => { ancestor: [ 'core/test-block-ancestor' ], } ); - setFreeformContentHandlerName( 'core/test-freeform' ); + setFreeformContentHandlerName( 'core/freeform' ); cachedSelectors.forEach( ( { clear } ) => clear() ); } ); @@ -187,7 +187,7 @@ describe( 'selectors', () => { unregisterBlockType( 'core/test-block-a' ); unregisterBlockType( 'core/test-block-b' ); unregisterBlockType( 'core/test-block-c' ); - unregisterBlockType( 'core/test-freeform' ); + unregisterBlockType( 'core/freeform' ); unregisterBlockType( 'core/post-content-child' ); unregisterBlockType( 'core/test-block-ancestor' ); unregisterBlockType( 'core/test-block-parent' ); @@ -3450,7 +3450,7 @@ describe( 'selectors', () => { expect( firstBlockFirstCall.map( ( item ) => item.id ) ).toEqual( [ 'core/test-block-a', 'core/test-block-b', - 'core/test-freeform', + 'core/freeform', 'core/test-block-ancestor', 'core/test-block-parent', 'core/block/1', @@ -3466,7 +3466,7 @@ describe( 'selectors', () => { expect( secondBlockFirstCall.map( ( item ) => item.id ) ).toEqual( [ 'core/test-block-a', 'core/test-block-b', - 'core/test-freeform', + 'core/freeform', 'core/test-block-ancestor', 'core/test-block-parent', 'core/block/1', diff --git a/packages/editor/src/store/test/selectors.js b/packages/editor/src/store/test/selectors.js index 2a22b4523444b..8b36e78961453 100644 --- a/packages/editor/src/store/test/selectors.js +++ b/packages/editor/src/store/test/selectors.js @@ -260,7 +260,7 @@ describe( 'selectors', () => { parent: [ 'core/test-block-b' ], } ); - registerBlockType( 'core/test-freeform', { + registerBlockType( 'core/freeform', { save: ( props ) => { props.attributes.content }, category: 'text', title: 'Test Freeform Content Handler', @@ -287,7 +287,7 @@ describe( 'selectors', () => { save: () => null, } ); - setFreeformContentHandlerName( 'core/test-freeform' ); + setFreeformContentHandlerName( 'core/freeform' ); setDefaultBlockName( 'core/test-default' ); cachedSelectors.forEach( ( { clear } ) => clear() ); @@ -298,7 +298,7 @@ describe( 'selectors', () => { unregisterBlockType( 'core/test-block-a' ); unregisterBlockType( 'core/test-block-b' ); unregisterBlockType( 'core/test-block-c' ); - unregisterBlockType( 'core/test-freeform' ); + unregisterBlockType( 'core/freeform' ); unregisterBlockType( 'core/test-default' ); setFreeformContentHandlerName( undefined ); @@ -1335,7 +1335,7 @@ describe( 'selectors', () => { value: [ { clientId: 123, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: '', @@ -1362,7 +1362,7 @@ describe( 'selectors', () => { value: [ { clientId: 123, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: '', @@ -1736,7 +1736,7 @@ describe( 'selectors', () => { value: [ { clientId: 123, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: '', @@ -1762,7 +1762,7 @@ describe( 'selectors', () => { value: [ { clientId: 123, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: '', @@ -1790,7 +1790,7 @@ describe( 'selectors', () => { value: [ { clientId: 123, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: 'Test Data', @@ -1818,7 +1818,7 @@ describe( 'selectors', () => { value: [ { clientId: 123, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: '', @@ -1826,7 +1826,7 @@ describe( 'selectors', () => { }, { clientId: 456, - name: 'core/test-freeform', + name: 'core/freeform', isValid: true, attributes: { content: '', @@ -2409,7 +2409,7 @@ describe( 'selectors', () => { } ); it( "returns removep'd serialization of blocks for single unknown", () => { - const unknownBlock = createBlock( 'core/test-freeform', { + const unknownBlock = createBlock( 'core/freeform', { content: '

foo

', } ); const state = { @@ -2431,10 +2431,10 @@ describe( 'selectors', () => { } ); it( "returns non-removep'd serialization of blocks for multiple unknown", () => { - const firstUnknown = createBlock( 'core/test-freeform', { + const firstUnknown = createBlock( 'core/freeform', { content: '

foo

', } ); - const secondUnknown = createBlock( 'core/test-freeform', { + const secondUnknown = createBlock( 'core/freeform', { content: '

bar

', } ); const state = {