diff --git a/e2e/tests/global-settings.spec.ts b/e2e/tests/global-settings.spec.ts index 8ef74aa573..9183359e71 100644 --- a/e2e/tests/global-settings.spec.ts +++ b/e2e/tests/global-settings.spec.ts @@ -116,71 +116,4 @@ test.describe( 'Global Settings', () => { await deleteRequest await expect( resetButton ).not.toBeVisible() } ) - - test( 'When a default block is created, adding the block should have the default block\'s attributes', async ( { - page, - editor, - } ) => { - await page.getByLabel( 'Stackable Design System' ).click() - await page.getByRole( 'button', { name: 'Block Defaults' } ).click() - - // Open the Default Text Block Editor - const defaultBlockPagePromise = page.waitForEvent( 'popup' ) - - // Reset the block defaults first if it has been edited - const resetButton = page.locator( '.components-panel__body', { hasText: 'Block Defaults' } ).locator( '.stk-block-default-control', { hasText: /^Text$/ } ).first().getByLabel( 'Reset' ) - - if ( await resetButton.isVisible() ) { - await resetButton.click() - } - - const textBlock = page.locator( '.components-panel__body', { hasText: 'Block Defaults' } ).locator( '.stk-block-default-control', { hasText: /^Text$/ } ).first().getByLabel( 'Edit' ) - await textBlock.click() - const defaultBlockPage = await defaultBlockPagePromise - - // Set a color for the default Text Block - await defaultBlockPage.locator( '.stk-color-palette-control .stk-control-content > .components-dropdown > .components-button' ).first().click() - await defaultBlockPage.getByLabel( 'Hex color' ).fill( 'ff0000' ) - await defaultBlockPage.locator( '.stk-color-palette-control .stk-control-content > .components-dropdown > .components-button' ).first().click() - - // The default timeout is 30s, extend it to 90s - const updateRequest = defaultBlockPage.waitForResponse( response => response.url().includes( 'update_block_style' ) && response.request().method() === 'POST', { timeout: 90_000 } ) - - // In older WP versions, the button text is 'Update' instead of 'Save' - if ( await defaultBlockPage.getByRole( 'button', { - name: 'Save', exact: true, disabled: false, - } ).isVisible() ) { - await defaultBlockPage.getByRole( 'button', { name: 'Save', exact: true } ).click() - } else if ( await defaultBlockPage.getByRole( 'button', { name: 'Update', disabled: false } ).isVisible() ) { - await defaultBlockPage.getByRole( 'button', { name: 'Update' } ).click() - } - - // Make sure default block has been updated - await ( await updateRequest ).finished() - - // Insert a Stackable Text Block, and check if the color is the same as the one set in the default block - const timeouts = [ 1_000, 5_000, 30_000 ] - for ( const timeout of timeouts ) { - try { - await page.reload() - await editor.insertBlock( { - name: 'stackable/text', - attributes: { - text: 'test', - }, - } ) - - await expect( editor.canvas.locator( '[data-type="stackable/text"] > .stk-block-text > p[role="textbox"]' ) ).toHaveCSS( 'color', 'rgb(255, 0, 0)' ) - break - } catch ( e ) { - // Ignore the error and try again because the default block might not be updated yet - await page.waitForTimeout( timeout ) - } - } - - // Reset Default Block - await page.getByLabel( 'Stackable Design System' ).click() - await page.getByRole( 'button', { name: 'Block Defaults' } ).click() - await page.locator( '.components-panel__body', { hasText: 'Block Defaults' } ).locator( '.stk-block-default-control', { hasText: /^Text$/ } ).first().getByLabel( 'Reset' ).click() - } ) } ) diff --git a/plugin.php b/plugin.php index ca5bf4e027..ae01b88bf6 100644 --- a/plugin.php +++ b/plugin.php @@ -239,7 +239,6 @@ function is_frontend() { require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/color-schemes/deprecated/index.php' ); // We need to add this so the filter for deprecation gets applied. require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/color-schemes/index.php' ); require_once( plugin_dir_path( __FILE__ ) . 'src/plugins/global-settings/preset-controls/index.php' ); -require_once( plugin_dir_path( __FILE__ ) . 'src/custom-block-styles.php' ); require_once( plugin_dir_path( __FILE__ ) . 'src/css-optimize.php' ); require_once( plugin_dir_path( __FILE__ ) . 'src/compatibility/index.php' ); if ( ! is_admin() ) { @@ -292,6 +291,7 @@ function is_frontend() { require_once( plugin_dir_path( __FILE__ ) . 'src/deprecated/navigation-panel-pre-enabled.php' ); require_once( plugin_dir_path( __FILE__ ) . 'src/deprecated/font-awesome-version.php' ); require_once( plugin_dir_path( __FILE__ ) . 'src/deprecated/global-color-schemes.php' ); +require_once( plugin_dir_path( __FILE__ ) . 'src/deprecated/block-defaults.php' ); /** * V2 Deprecated diff --git a/src/deprecated/block-defaults.php b/src/deprecated/block-defaults.php new file mode 100644 index 0000000000..0c02fd0409 --- /dev/null +++ b/src/deprecated/block-defaults.php @@ -0,0 +1,64 @@ + 'boolean', + 'description' => __( 'Use Block Defaults in the editor', STACKABLE_I18N ), + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => true, + 'default' => false, + ) + ); + } + + function stackable_add_deprecated_block_defaults_setting( $settings ) { + $settings['stackable_enable_block_defaults'] = boolval( get_option( 'stackable_enable_block_defaults', false ) ); + return $settings; + } + + // Make setting available in the editor. + add_filter( 'stackable_js_settings', 'stackable_add_deprecated_block_defaults_setting' ); + add_action( 'init', 'stackable_deprecated_block_defaults_option' ); +} + +if ( ! function_exists( 'stackable_deprecated_block_defaults' ) ) { + + /** + * Upon upgrading to v3.18.0 or later, Block Defaults will be enabled only if existing Block Defaults are present; + * otherwise, they will be disabled. + * For new installations, Block Defaults will be disabled by default. + */ + function stackable_deprecated_block_defaults( $old_version, $new_version ) { + if ( ! empty( $old_version ) && version_compare( $old_version, "3.18.0", "<" ) ) { + + // set option to true if there are saved block defaults + if ( ! empty( get_option( 'stackable_block_styles', [] ) ) ) { + update_option( 'stackable_enable_block_defaults', true, false ); + } + } + } + + function stackable_require_block_defaults_script() { + if ( get_option( 'stackable_enable_block_defaults', false ) ) { + require_once( plugin_dir_path( __FILE__ ) . 'block-defaults/custom-block-styles.php' ); + } + } + + add_action( 'stackable_early_version_upgraded', 'stackable_deprecated_block_defaults', 10, 2 ); + add_action( 'init', 'stackable_require_block_defaults_script' ); +} diff --git a/src/custom-block-styles.php b/src/deprecated/block-defaults/custom-block-styles.php similarity index 100% rename from src/custom-block-styles.php rename to src/deprecated/block-defaults/custom-block-styles.php diff --git a/src/plugins/global-settings/block-defaults/editor.scss b/src/deprecated/block-defaults/global-settings/editor.scss similarity index 100% rename from src/plugins/global-settings/block-defaults/editor.scss rename to src/deprecated/block-defaults/global-settings/editor.scss diff --git a/src/plugins/global-settings/block-defaults/index.js b/src/deprecated/block-defaults/global-settings/index.js similarity index 93% rename from src/plugins/global-settings/block-defaults/index.js rename to src/deprecated/block-defaults/global-settings/index.js index aa1f96f78b..3852fa19a7 100644 --- a/src/plugins/global-settings/block-defaults/index.js +++ b/src/deprecated/block-defaults/global-settings/index.js @@ -50,8 +50,11 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/default-blocks', ou onToggle={ isOpen => setIsOpen( isOpen ) } >

+ + { __( 'Please use the Design System options instead of this. Block Defaults will be sunset and removed from a future version.', i18n ) } + { __( 'Manage how Stackable blocks look when they\'re inserted.', i18n ) } -   +   { __( 'Learn more about Block Defaults', i18n ) } diff --git a/src/plugins/global-settings/block-defaults/readme.md b/src/deprecated/block-defaults/global-settings/readme.md similarity index 100% rename from src/plugins/global-settings/block-defaults/readme.md rename to src/deprecated/block-defaults/global-settings/readme.md diff --git a/src/deprecated/block-defaults/index.js b/src/deprecated/block-defaults/index.js new file mode 100644 index 0000000000..3b9bdcee03 --- /dev/null +++ b/src/deprecated/block-defaults/index.js @@ -0,0 +1,7 @@ +import { settings as stackableSettings } from 'stackable' + +// Conditionally import scripts +if ( stackableSettings.stackable_enable_block_defaults ) { + import( './save-block' ) + import( './global-settings' ) +} diff --git a/src/plugins/save-block/custom-block-styles-editor.js b/src/deprecated/block-defaults/save-block/custom-block-styles-editor.js similarity index 100% rename from src/plugins/save-block/custom-block-styles-editor.js rename to src/deprecated/block-defaults/save-block/custom-block-styles-editor.js diff --git a/src/plugins/save-block/editor.scss b/src/deprecated/block-defaults/save-block/editor.scss similarity index 100% rename from src/plugins/save-block/editor.scss rename to src/deprecated/block-defaults/save-block/editor.scss diff --git a/src/plugins/save-block/index.js b/src/deprecated/block-defaults/save-block/index.js similarity index 93% rename from src/plugins/save-block/index.js rename to src/deprecated/block-defaults/save-block/index.js index bb8c594de4..1d6c0dc054 100644 --- a/src/plugins/save-block/index.js +++ b/src/deprecated/block-defaults/save-block/index.js @@ -5,7 +5,7 @@ import './store' import './variation-picker' import './custom-block-styles-editor' import SaveMenu from './save-menu' -import { useSavedDefaultBlockStyle } from '~stackable/hooks' +import { useSavedDefaultBlockStyle } from './use-saved-default-block-style' import { settings } from 'stackable' /** diff --git a/src/plugins/save-block/save-hooks.js b/src/deprecated/block-defaults/save-block/save-hooks.js similarity index 100% rename from src/plugins/save-block/save-hooks.js rename to src/deprecated/block-defaults/save-block/save-hooks.js diff --git a/src/plugins/save-block/save-menu.js b/src/deprecated/block-defaults/save-block/save-menu.js similarity index 100% rename from src/plugins/save-block/save-menu.js rename to src/deprecated/block-defaults/save-block/save-menu.js diff --git a/src/plugins/save-block/store.js b/src/deprecated/block-defaults/save-block/store.js similarity index 100% rename from src/plugins/save-block/store.js rename to src/deprecated/block-defaults/save-block/store.js diff --git a/src/hooks/use-saved-default-block-style.js b/src/deprecated/block-defaults/save-block/use-saved-default-block-style.js similarity index 98% rename from src/hooks/use-saved-default-block-style.js rename to src/deprecated/block-defaults/save-block/use-saved-default-block-style.js index 12103da5a6..c6a54d8f2e 100644 --- a/src/hooks/use-saved-default-block-style.js +++ b/src/deprecated/block-defaults/save-block/use-saved-default-block-style.js @@ -1,7 +1,7 @@ /** * Internal dependencies */ -import { getDefinedBlockStyles } from './use-block-style' +import { getDefinedBlockStyles } from '~stackable/hooks' import { CONTENT_ATTRIBUTES, recursivelyAddUniqueIdToInnerBlocks } from '~stackable/util' /** diff --git a/src/plugins/save-block/variation-picker.js b/src/deprecated/block-defaults/save-block/variation-picker.js similarity index 100% rename from src/plugins/save-block/variation-picker.js rename to src/deprecated/block-defaults/save-block/variation-picker.js diff --git a/src/hooks/index.js b/src/hooks/index.js index 26a2e2bc77..5664d5f3fc 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -5,7 +5,6 @@ export * from './use-block-attributes' export * from './use-block-attributes-context' export * from './use-block-style' export * from './use-context-selector' -export * from './use-saved-default-block-style' export * from './use-font-loader' export * from './use-attribute-edit-handlers' export * from './use-attribute-name' diff --git a/src/plugins/global-settings/editor-loader.js b/src/plugins/global-settings/editor-loader.js index 878d5ca058..981710bbbe 100644 --- a/src/plugins/global-settings/editor-loader.js +++ b/src/plugins/global-settings/editor-loader.js @@ -11,7 +11,6 @@ import { GlobalTypographyStyles } from './typography' import { GlobalSpacingAndBordersStyles } from './spacing-and-borders' import { GlobalButtonsAndIconsStyles } from './buttons-and-icons' import { GlobalPresetControlsStyles } from './preset-controls' -import './block-defaults' /** * External dependencies diff --git a/src/plugins/global-settings/index.js b/src/plugins/global-settings/index.js index 156b26e68a..6de44fc83f 100644 --- a/src/plugins/global-settings/index.js +++ b/src/plugins/global-settings/index.js @@ -5,7 +5,6 @@ import './editor-loader' import './color-schemes' import './buttons-and-icons' import './spacing-and-borders' -import './block-defaults' import './icon-library' import './preset-controls' diff --git a/src/plugins/index.js b/src/plugins/index.js index 7f5880c507..5622a0ef99 100644 --- a/src/plugins/index.js +++ b/src/plugins/index.js @@ -6,7 +6,6 @@ import './theme-block-size' import './design-library-button' import './layout-picker-reset' // import './v2-migration-popup' // Probably 1.5yrs of checking for backward compatibility is enough. -import './save-block' import './editor-device-preview-class' import './theme-block-style-inheritance' import { BlockLinking } from './block-linking' @@ -27,6 +26,7 @@ import { registerPlugin } from '@wordpress/plugins' import { ConvertToContainerButton, GetBlockAttributesButton } from '~stackable/components' import { devMode } from 'stackable' import { fetchSettings } from '~stackable/util' +import '~stackable/deprecated/block-defaults' registerPlugin( 'stackable-convert-to-container-button', { render: ConvertToContainerButton } ) registerPlugin( 'stackable-block-hover-state', { render: BlockHoverState } ) diff --git a/src/welcome/admin.js b/src/welcome/admin.js index e6dd3682a2..63ee636319 100644 --- a/src/welcome/admin.js +++ b/src/welcome/admin.js @@ -219,6 +219,7 @@ const SEARCH_TREE = [ __( 'Generate Global Colors for native blocks', i18n ), __( 'Inherit Block Styles from theme.json', i18n ), __( 'Use v3.16.0 Color Scheme Inheritance', i18n ), + __( 'Block Defaults (Sunsetted)', i18n ), ], }, { @@ -775,7 +776,7 @@ const EditorSettings = props => { } } help={ __( 'Adds a toolbar button for resetting the layout of a stackble block back to the original', i18n ) } /> - { handleSettingsChange( { stackable_enable_save_as_default_block: value } ) // eslint-disable-line } } help={ __( 'Adds a toolbar button for saving a block as the default block', i18n ) } - /> + /> } } { inspector.children.length > 0 && @@ -1514,6 +1515,17 @@ const AdditionalOptions = props => { } ) } } /> + { + handleSettingsChange( { + stackable_enable_block_defaults: checked, // eslint-disable-line camelcase + } ) + } } + /> } { migrationSettings.children.length > 0 &&