Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hide the Classic block in the Site Editor #44554

Merged
merged 2 commits into from
Sep 30, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions packages/edit-site/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { store as preferencesStore } from '@wordpress/preferences';
import { __ } from '@wordpress/i18n';
import { store as viewportStore } from '@wordpress/viewport';
import { getQueryArgs } from '@wordpress/url';
import { addFilter } from '@wordpress/hooks';

/**
* Internal dependencies
Expand Down Expand Up @@ -51,6 +52,26 @@ export function reinitializeEditor( target, settings ) {
return;
}

/*
* Prevent adding the Clasic block in the site editor.
* Only add the filter when the site editor is initialized, not imported.
* Also only add the filter(s) after registerCoreBlocks()
* so that common filters in the block library are not overwritten.
*
* This usage here is inspired by previous usage of the filter in the post editor:
* https://github.com/WordPress/gutenberg/pull/37157
*/
addFilter(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did we try just unregistering (or not registering) the block instead of using a filter?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't!

Let me try it out quickly.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see something quite strange: when not registering the block, three core/freeform blocks get inserted into the site editor:

first_vid.mp4
trimmed_vid.mp4

Any idea why that might be? I now remember that I've seen this behaviour before when working on this PR which is why I've opted for the fix by using a filter but I didn't investigate the root cause.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess, it's something in the parser (probably related about the fallback block being used). Also makes me wonder what happens now in trunk when you edit the HTML of templates manually and add random stuff. Do we have a block that handles random HTML.

Copy link
Contributor

@talldan talldan Oct 31, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the widget editor there was also a situation where freeform blocks were inserted, but I think that only happened when pasting blocks. I guess it wasn't happening when loading content because the widget editor doesn't store blocks as html, while the site editor does.

The fix that was used in the widget editor was to use the html block as the freeform block (instead of the classic block). But that caused some other issues - no block delimiter for the html block and autop running on freeform content.

My suggestion for a longer term fix would be a new (non-classic) freeform block for the site and widget editors. It probably wouldn't be too difficult to implement, borrowing parts from the html and classic block.

'blockEditor.__unstableCanInsertBlockType',
'removeClassicBlockFromInserter',
( canInsert, blockType ) => {
if ( blockType.name === 'core/freeform' ) {
return false;
}
return canInsert;
}
);

// This will be a no-op if the target doesn't have any React nodes.
unmountComponentAtNode( target );
const reboot = reinitializeEditor.bind( null, target, settings );
Expand Down