diff --git a/gutenberg.php b/gutenberg.php index 6c3ab3681b2c9..c04d95ba3d035 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -65,16 +65,17 @@ function gutenberg_menu() { 'gutenberg_navigation_page' ); } - if ( array_key_exists( 'gutenberg-full-site-editing', get_option( 'gutenberg-experiments' ) ) ) { - add_menu_page( - __( 'Site Editor (beta)', 'gutenberg' ), - __( 'Site Editor (beta)', 'gutenberg' ), - 'edit_theme_options', - 'gutenberg-edit-site', - 'gutenberg_edit_site_page', - 'dashicons-layout' - ); - } + } + + if ( gutenberg_is_fse_theme() ) { + add_menu_page( + __( 'Site Editor (beta)', 'gutenberg' ), + __( 'Site Editor (beta)', 'gutenberg' ), + 'edit_theme_options', + 'gutenberg-edit-site', + 'gutenberg_edit_site_page', + 'dashicons-layout' + ); } if ( current_user_can( 'edit_posts' ) ) { diff --git a/lib/blocks.php b/lib/blocks.php index 4245d4cc14c7b..e1d334660af29 100644 --- a/lib/blocks.php +++ b/lib/blocks.php @@ -49,25 +49,20 @@ function gutenberg_reregister_core_block_types() { ), 'block_names' => array_merge( array( - 'archives.php' => 'core/archives', - 'block.php' => 'core/block', - 'calendar.php' => 'core/calendar', - 'categories.php' => 'core/categories', - 'cover.php' => 'core/cover', - 'latest-comments.php' => 'core/latest-comments', - 'latest-posts.php' => 'core/latest-posts', - 'navigation.php' => 'core/navigation', - 'navigation-link.php' => 'core/navigation-link', - 'rss.php' => 'core/rss', - 'search.php' => 'core/search', - 'shortcode.php' => 'core/shortcode', - 'social-link.php' => 'core/social-link', - 'tag-cloud.php' => 'core/tag-cloud', - ), - ! gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ) - ? array() - : - array( + 'archives.php' => 'core/archives', + 'block.php' => 'core/block', + 'calendar.php' => 'core/calendar', + 'categories.php' => 'core/categories', + 'cover.php' => 'core/cover', + 'latest-comments.php' => 'core/latest-comments', + 'latest-posts.php' => 'core/latest-posts', + 'navigation.php' => 'core/navigation', + 'navigation-link.php' => 'core/navigation-link', + 'rss.php' => 'core/rss', + 'search.php' => 'core/search', + 'shortcode.php' => 'core/shortcode', + 'social-link.php' => 'core/social-link', + 'tag-cloud.php' => 'core/tag-cloud', 'post-author.php' => 'core/post-author', 'post-comment.php' => 'core/post-comment', 'post-comment-author.php' => 'core/post-comment-author', diff --git a/lib/experiments-page.php b/lib/experiments-page.php index 03d94d3ebf441..208063729a7e1 100644 --- a/lib/experiments-page.php +++ b/lib/experiments-page.php @@ -51,17 +51,6 @@ function gutenberg_initialize_experiments_settings() { 'id' => 'gutenberg-navigation', ) ); - add_settings_field( - 'gutenberg-full-site-editing', - __( 'Full Site Editing', 'gutenberg' ), - 'gutenberg_display_experiment_field', - 'gutenberg-experiments', - 'gutenberg_experiments_section', - array( - 'label' => __( 'Enable Full Site Editing (Warning: A block-based theme is required for this experiment to work properly. We recommend using this only in a development environment.)', 'gutenberg' ), - 'id' => 'gutenberg-full-site-editing', - ) - ); register_setting( 'gutenberg-experiments', 'gutenberg-experiments' @@ -109,10 +98,9 @@ function gutenberg_display_experiment_section() { */ function gutenberg_experiments_editor_settings( $settings ) { $experiments_settings = array( - '__experimentalEnableFullSiteEditing' => gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ), + '__unstableEnableFullSiteEditingBlocks' => gutenberg_is_fse_theme(), ); - - $gradient_presets = current( (array) get_theme_support( 'editor-gradient-presets' ) ); + $gradient_presets = current( (array) get_theme_support( 'editor-gradient-presets' ) ); if ( false !== $gradient_presets ) { $experiments_settings['gradients'] = $gradient_presets; } diff --git a/lib/full-site-editing.php b/lib/full-site-editing.php new file mode 100644 index 0000000000000..2541aed693c57 --- /dev/null +++ b/lib/full-site-editing.php @@ -0,0 +1,30 @@ + +
+

+
+ __( 'Template Parts', 'gutenberg' ), 'singular_name' => __( 'Template Part', 'gutenberg' ), @@ -88,6 +92,10 @@ function gutenberg_filter_wp_template_part_wp_unique_post_slug( $slug, $post_ID, * Fixes the label of the 'wp_template_part' admin menu entry. */ function gutenberg_fix_template_part_admin_menu_entry() { + if ( ! gutenberg_is_fse_theme() ) { + return; + } + global $submenu; if ( ! isset( $submenu['themes.php'] ) ) { return; diff --git a/lib/templates.php b/lib/templates.php index 878459f795cc8..406026bc59905 100644 --- a/lib/templates.php +++ b/lib/templates.php @@ -28,6 +28,10 @@ function gutenberg_get_template_paths() { * Registers block editor 'wp_template' post type. */ function gutenberg_register_template_post_type() { + if ( ! gutenberg_is_fse_theme() ) { + return; + } + $labels = array( 'name' => __( 'Templates', 'gutenberg' ), 'singular_name' => __( 'Template', 'gutenberg' ), @@ -124,6 +128,9 @@ function gutenberg_filter_wp_template_wp_unique_post_slug( $slug, $post_ID, $pos * Fixes the label of the 'wp_template' admin menu entry. */ function gutenberg_fix_template_admin_menu_entry() { + if ( ! gutenberg_is_fse_theme() ) { + return; + } global $submenu; if ( ! isset( $submenu['themes.php'] ) ) { return; diff --git a/packages/block-editor/README.md b/packages/block-editor/README.md index c6adb164ff4b1..5865e820d1d79 100644 --- a/packages/block-editor/README.md +++ b/packages/block-editor/README.md @@ -497,7 +497,6 @@ _Properties_ - _codeEditingEnabled_ `boolean`: Whether or not the user can switch to the code editor - _\_\_experimentalCanUserUseUnfilteredHTML_ `boolean`: Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes. - _\_\_experimentalBlockDirectory_ `boolean`: Whether the user has enabled the Block Directory -- _\_\_experimentalEnableFullSiteEditing_ `boolean`: Whether the user has enabled Full Site Editing - _\_\_experimentalBlockPatterns_ `Array`: Array of objects representing the block patterns - _\_\_experimentalBlockPatternCategories_ `Array`: Array of objects representing the block pattern categories diff --git a/packages/block-editor/src/store/defaults.js b/packages/block-editor/src/store/defaults.js index 20119e038a92b..8bbcbff537dbb 100644 --- a/packages/block-editor/src/store/defaults.js +++ b/packages/block-editor/src/store/defaults.js @@ -27,7 +27,6 @@ export const PREFERENCES_DEFAULTS = { * @property {boolean} codeEditingEnabled Whether or not the user can switch to the code editor * @property {boolean} __experimentalCanUserUseUnfilteredHTML Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes. * @property {boolean} __experimentalBlockDirectory Whether the user has enabled the Block Directory - * @property {boolean} __experimentalEnableFullSiteEditing Whether the user has enabled Full Site Editing * @property {Array} __experimentalBlockPatterns Array of objects representing the block patterns * @property {Array} __experimentalBlockPatternCategories Array of objects representing the block pattern categories */ @@ -149,7 +148,6 @@ export const SETTINGS_DEFAULTS = { availableLegacyWidgets: {}, __experimentalCanUserUseUnfilteredHTML: false, __experimentalBlockDirectory: false, - __experimentalEnableFullSiteEditing: false, __mobileEnablePageTemplates: false, __experimentalBlockPatterns: [], __experimentalBlockPatternCategories: [], diff --git a/packages/block-library/src/index.js b/packages/block-library/src/index.js index 45d04f2a76c8b..b5b7493bef6f6 100644 --- a/packages/block-library/src/index.js +++ b/packages/block-library/src/index.js @@ -192,8 +192,7 @@ export const registerCoreBlocks = ( /** * Function to register experimental core blocks depending on editor settings. * - * @param {Object} settings Editor settings. - * + * @param {boolean} enableFSEBlocks Whether to enable the full site editing blocks. * @example * ```js * import { __experimentalRegisterExperimentalCoreBlocks } from '@wordpress/block-library'; @@ -203,15 +202,13 @@ export const registerCoreBlocks = ( */ export const __experimentalRegisterExperimentalCoreBlocks = process.env.GUTENBERG_PHASE === 2 - ? ( settings ) => { - const { __experimentalEnableFullSiteEditing } = settings; - + ? ( enableFSEBlocks ) => { [ navigation, navigationLink, // Register Full Site Editing Blocks. - ...( __experimentalEnableFullSiteEditing + ...( enableFSEBlocks ? [ siteLogo, siteTagline, diff --git a/packages/block-library/src/site-logo/index.php b/packages/block-library/src/site-logo/index.php index efadd3ce16c61..3b24c721a854b 100644 --- a/packages/block-library/src/site-logo/index.php +++ b/packages/block-library/src/site-logo/index.php @@ -43,16 +43,14 @@ function render_block_core_site_logo( $attributes ) { * Registers the `core/site-logo` block on the server. */ function register_block_core_site_logo() { - if ( gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ) ) { - register_block_type_from_metadata( - __DIR__ . '/site-logo', - array( - 'render_callback' => 'render_block_core_site_logo', - ) - ); - add_filter( 'pre_set_theme_mod_custom_logo', 'sync_site_logo_to_theme_mod' ); - add_filter( 'theme_mod_custom_logo', 'override_custom_logo_theme_mod' ); - } + register_block_type_from_metadata( + __DIR__ . '/site-logo', + array( + 'render_callback' => 'render_block_core_site_logo', + ) + ); + add_filter( 'pre_set_theme_mod_custom_logo', 'sync_site_logo_to_theme_mod' ); + add_filter( 'theme_mod_custom_logo', 'override_custom_logo_theme_mod' ); } add_action( 'init', 'register_block_core_site_logo' ); diff --git a/packages/e2e-test-utils/src/themes.js b/packages/e2e-test-utils/src/themes.js index 3a3bba83b27ca..64e4c96c0a09d 100644 --- a/packages/e2e-test-utils/src/themes.js +++ b/packages/e2e-test-utils/src/themes.js @@ -23,5 +23,10 @@ export async function activateTheme( slug ) { } const activateButton = await themeCard.$( '.button.activate' ); await activateButton.click(); + await page.waitForFunction( + () => + document.body && + document.body.innerText.includes( 'New theme activated' ) + ); await switchUserToTest(); } diff --git a/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js b/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js index 111b0e0ea0f59..3ed88faf4583f 100644 --- a/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js +++ b/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js @@ -19,10 +19,7 @@ import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ -import { - useExperimentalFeatures, - navigationPanel, -} from '../../experimental-features'; +import { navigationPanel } from '../../experimental-features'; const visitSiteEditor = async () => { const query = addQueryArgs( '', { @@ -149,12 +146,10 @@ describe( 'Multi-entity editor states', () => { const templatePartName = 'Test Template Part Name Edit'; const nestedTPName = 'Test Nested Template Part Name Edit'; - useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] ); - beforeAll( async () => { + await activateTheme( 'twentytwentyone-blocks' ); await trashAllPosts( 'wp_template' ); await trashAllPosts( 'wp_template_part' ); - await activateTheme( 'twentytwentyone-blocks' ); } ); afterAll( async () => { diff --git a/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js b/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js index 36b999c38f8ca..fdbd0a22d7096 100644 --- a/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js +++ b/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js @@ -14,10 +14,7 @@ import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ -import { - useExperimentalFeatures, - navigationPanel, -} from '../../experimental-features'; +import { navigationPanel } from '../../experimental-features'; describe( 'Multi-entity save flow', () => { // Selectors - usable between Post/Site editors. @@ -58,12 +55,10 @@ describe( 'Multi-entity save flow', () => { } }; - useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] ); - beforeAll( async () => { + await activateTheme( 'twentytwentyone-blocks' ); await trashAllPosts( 'wp_template' ); await trashAllPosts( 'wp_template_part' ); - await activateTheme( 'twentytwentyone-blocks' ); } ); afterAll( async () => { diff --git a/packages/e2e-tests/specs/experiments/template-part.test.js b/packages/e2e-tests/specs/experiments/template-part.test.js index b94cf407d0b77..68d995a6b28f9 100644 --- a/packages/e2e-tests/specs/experiments/template-part.test.js +++ b/packages/e2e-tests/specs/experiments/template-part.test.js @@ -14,18 +14,13 @@ import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ -import { - useExperimentalFeatures, - navigationPanel, -} from '../../experimental-features'; +import { navigationPanel } from '../../experimental-features'; describe( 'Template Part', () => { - useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] ); - beforeAll( async () => { + await activateTheme( 'twentytwentyone-blocks' ); await trashAllPosts( 'wp_template' ); await trashAllPosts( 'wp_template_part' ); - await activateTheme( 'twentytwentyone-blocks' ); } ); afterAll( async () => { await trashAllPosts( 'wp_template' ); diff --git a/packages/e2e-tests/specs/performance/site-editor.test.js b/packages/e2e-tests/specs/performance/site-editor.test.js index 02ab516a255bf..f6331296aa122 100644 --- a/packages/e2e-tests/specs/performance/site-editor.test.js +++ b/packages/e2e-tests/specs/performance/site-editor.test.js @@ -4,11 +4,6 @@ import { basename, join } from 'path'; import { writeFileSync } from 'fs'; -/** - * Internal dependencies - */ -import { useExperimentalFeatures } from '../../experimental-features'; - /** * WordPress dependencies */ @@ -22,12 +17,10 @@ import { addQueryArgs } from '@wordpress/url'; jest.setTimeout( 1000000 ); describe( 'Site Editor Performance', () => { - useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] ); - beforeAll( async () => { + await activateTheme( 'twentytwentyone-blocks' ); await trashAllPosts( 'wp_template' ); await trashAllPosts( 'wp_template_part' ); - await activateTheme( 'twentytwentyone-blocks' ); } ); afterAll( async () => { await trashAllPosts( 'wp_template' ); diff --git a/packages/edit-navigation/src/index.js b/packages/edit-navigation/src/index.js index 09516a1c99134..174d7f4b1272d 100644 --- a/packages/edit-navigation/src/index.js +++ b/packages/edit-navigation/src/index.js @@ -168,7 +168,7 @@ export function initialize( id, settings ) { registerCoreBlocks(); if ( process.env.GUTENBERG_PHASE === 2 ) { - __experimentalRegisterExperimentalCoreBlocks( settings ); + __experimentalRegisterExperimentalCoreBlocks(); } settings.__experimentalFetchLinkSuggestions = partialRight( diff --git a/packages/edit-post/src/index.js b/packages/edit-post/src/index.js index f93ece6ce7f23..a83aeb241d4b4 100644 --- a/packages/edit-post/src/index.js +++ b/packages/edit-post/src/index.js @@ -97,7 +97,9 @@ export function initializeEditor( ); registerCoreBlocks(); if ( process.env.GUTENBERG_PHASE === 2 ) { - __experimentalRegisterExperimentalCoreBlocks( settings ); + __experimentalRegisterExperimentalCoreBlocks( + settings.__unstableEnableFullSiteEditingBlocks + ); } // Show a console log warning if the browser is not in Standards rendering mode. diff --git a/packages/edit-site/src/index.js b/packages/edit-site/src/index.js index 7c040442e9b87..e3febadf3b7e2 100644 --- a/packages/edit-site/src/index.js +++ b/packages/edit-site/src/index.js @@ -61,7 +61,7 @@ export function initialize( id, settings ) { registerCoreBlocks(); if ( process.env.GUTENBERG_PHASE === 2 ) { - __experimentalRegisterExperimentalCoreBlocks( settings ); + __experimentalRegisterExperimentalCoreBlocks( true ); } render( , document.getElementById( id ) ); diff --git a/packages/edit-widgets/src/index.js b/packages/edit-widgets/src/index.js index 6823343f6174f..303b4994a79ee 100644 --- a/packages/edit-widgets/src/index.js +++ b/packages/edit-widgets/src/index.js @@ -36,7 +36,7 @@ export function initialize( id, settings ) { registerCoreBlocks( coreBlocks ); if ( process.env.GUTENBERG_PHASE === 2 ) { - __experimentalRegisterExperimentalCoreBlocks( settings ); + __experimentalRegisterExperimentalCoreBlocks(); } registerBlock( createLegacyWidget( settings ) ); registerBlock( widgetArea ); diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js index 5f058cff6a73c..792a88d3a03ca 100644 --- a/packages/editor/src/components/provider/index.js +++ b/packages/editor/src/components/provider/index.js @@ -169,7 +169,6 @@ class EditorProvider extends Component { '__experimentalBlockDirectory', '__experimentalBlockPatterns', '__experimentalBlockPatternCategories', - '__experimentalEnableFullSiteEditing', '__experimentalFeatures', '__experimentalGlobalStylesUserEntityId', '__experimentalGlobalStylesBaseStyles', diff --git a/packages/editor/src/store/selectors.js b/packages/editor/src/store/selectors.js index 764c3c63ba0e0..c4394cb0db56a 100644 --- a/packages/editor/src/store/selectors.js +++ b/packages/editor/src/store/selectors.js @@ -144,12 +144,6 @@ export const isEditedPostDirty = createRegistrySelector( */ export const hasNonPostEntityChanges = createRegistrySelector( ( select ) => ( state ) => { - const enableFullSiteEditing = getEditorSettings( state ) - .__experimentalEnableFullSiteEditing; - if ( ! enableFullSiteEditing ) { - return false; - } - const dirtyEntityRecords = select( 'core' ).__experimentalGetDirtyEntityRecords(); diff --git a/packages/editor/src/store/test/selectors.js b/packages/editor/src/store/test/selectors.js index 4d6bf5f9a98dc..58cf8a795bef2 100644 --- a/packages/editor/src/store/test/selectors.js +++ b/packages/editor/src/store/test/selectors.js @@ -452,26 +452,9 @@ describe( 'selectors', () => { } ); describe( 'hasNonPostEntityChanges', () => { - it( 'should return false if the full site editing experiment is disabled.', () => { - const state = { - currentPost: { id: 1, type: 'post' }, - editorSettings: { - __experimentalEnableFullSiteEditing: false, - }, - __experimentalGetDirtyEntityRecords() { - return [ - { kind: 'someKind', name: 'someName', key: 'someKey' }, - ]; - }, - }; - expect( hasNonPostEntityChanges( state ) ).toBe( false ); - } ); it( 'should return true if there are changes to an arbitrary entity', () => { const state = { currentPost: { id: 1, type: 'post' }, - editorSettings: { - __experimentalEnableFullSiteEditing: true, - }, __experimentalGetDirtyEntityRecords() { return [ { kind: 'someKind', name: 'someName', key: 'someKey' }, @@ -483,9 +466,6 @@ describe( 'selectors', () => { it( 'should return false if there are only changes for the current post', () => { const state = { currentPost: { id: 1, type: 'post' }, - editorSettings: { - __experimentalEnableFullSiteEditing: true, - }, __experimentalGetDirtyEntityRecords() { return [ { kind: 'postType', name: 'post', key: 1 } ]; }, @@ -495,9 +475,6 @@ describe( 'selectors', () => { it( 'should return true if there are changes to multiple posts', () => { const state = { currentPost: { id: 1, type: 'post' }, - editorSettings: { - __experimentalEnableFullSiteEditing: true, - }, __experimentalGetDirtyEntityRecords() { return [ { kind: 'postType', name: 'post', key: 1 }, @@ -510,9 +487,6 @@ describe( 'selectors', () => { it( 'should return true if there are changes to multiple posts of different post types', () => { const state = { currentPost: { id: 1, type: 'post' }, - editorSettings: { - __experimentalEnableFullSiteEditing: true, - }, __experimentalGetDirtyEntityRecords() { return [ { kind: 'postType', name: 'post', key: 1 }, diff --git a/test/integration/full-content/full-content.test.js b/test/integration/full-content/full-content.test.js index 86f5f5c10e271..5e896387b5662 100644 --- a/test/integration/full-content/full-content.test.js +++ b/test/integration/full-content/full-content.test.js @@ -65,14 +65,11 @@ describe( 'full post content fixture', () => { } ) ); unstable__bootstrapServerSideBlockDefinitions( blockDefinitions ); - const settings = { - __experimentalEnableFullSiteEditing: true, - }; // Load all hooks that modify blocks require( '../../../packages/editor/src/hooks' ); registerCoreBlocks(); if ( process.env.GUTENBERG_PHASE === 2 ) { - __experimentalRegisterExperimentalCoreBlocks( settings ); + __experimentalRegisterExperimentalCoreBlocks( true ); } } );