From 6bce616153c70b1310aacf79c4c8f2b6b22fcffc Mon Sep 17 00:00:00 2001 From: Mikhaela Tapia Date: Thu, 24 Jul 2025 11:26:42 +0800 Subject: [PATCH 1/6] deprecate block defaults --- plugin.php | 2 +- src/deprecated/block-defaults.php | 64 +++++++++++++++++++ .../block-defaults}/custom-block-styles.php | 0 .../global-settings}/editor.scss | 0 .../block-defaults/global-settings}/index.js | 2 +- .../block-defaults/global-settings}/readme.md | 0 src/deprecated/block-defaults/index.js | 7 ++ .../save-block/custom-block-styles-editor.js | 0 .../block-defaults}/save-block/editor.scss | 0 .../block-defaults}/save-block/index.js | 2 +- .../block-defaults}/save-block/save-hooks.js | 0 .../block-defaults}/save-block/save-menu.js | 0 .../block-defaults}/save-block/store.js | 0 .../use-saved-default-block-style.js | 2 +- .../save-block/variation-picker.js | 0 src/hooks/index.js | 1 - src/plugins/global-settings/editor-loader.js | 1 - src/plugins/global-settings/index.js | 1 - src/plugins/index.js | 2 +- src/welcome/admin.js | 20 ++++-- 20 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 src/deprecated/block-defaults.php rename src/{ => deprecated/block-defaults}/custom-block-styles.php (100%) rename src/{plugins/global-settings/block-defaults => deprecated/block-defaults/global-settings}/editor.scss (100%) rename src/{plugins/global-settings/block-defaults => deprecated/block-defaults/global-settings}/index.js (99%) rename src/{plugins/global-settings/block-defaults => deprecated/block-defaults/global-settings}/readme.md (100%) create mode 100644 src/deprecated/block-defaults/index.js rename src/{plugins => deprecated/block-defaults}/save-block/custom-block-styles-editor.js (100%) rename src/{plugins => deprecated/block-defaults}/save-block/editor.scss (100%) rename src/{plugins => deprecated/block-defaults}/save-block/index.js (93%) rename src/{plugins => deprecated/block-defaults}/save-block/save-hooks.js (100%) rename src/{plugins => deprecated/block-defaults}/save-block/save-menu.js (100%) rename src/{plugins => deprecated/block-defaults}/save-block/store.js (100%) rename src/{hooks => deprecated/block-defaults/save-block}/use-saved-default-block-style.js (98%) rename src/{plugins => deprecated/block-defaults}/save-block/variation-picker.js (100%) 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 99% rename from src/plugins/global-settings/block-defaults/index.js rename to src/deprecated/block-defaults/global-settings/index.js index aa1f96f78b..767fdfae64 100644 --- a/src/plugins/global-settings/block-defaults/index.js +++ b/src/deprecated/block-defaults/global-settings/index.js @@ -51,7 +51,7 @@ addFilter( 'stackable.global-settings.inspector', 'stackable/default-blocks', ou >

{ __( '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 282b56c771..429f129cdb 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 938323510f..b34476579a 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 (Deprecated)', i18n ), ], }, { @@ -766,7 +767,7 @@ const EditorSettings = props => { } } help={ __( 'Adds a toolbar button for advanced copying and pasting block styles', i18n ) } /> - { handleSettingsChange( { stackable_enable_reset_layout: value } ) // eslint-disable-line camelcase } } help={ __( 'Adds a toolbar button for resetting the layout of a stackble block back to the original', i18n ) } - /> - } + { settings.stackable_enable_block_defaults && { 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 && From 653ff3c3ae8074c6f5ee26d35c9896713bfe323f Mon Sep 17 00:00:00 2001 From: Benjamin Intal Date: Tue, 29 Jul 2025 08:50:45 +0800 Subject: [PATCH 2/6] Update src/welcome/admin.js [skip ci] --- src/welcome/admin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome/admin.js b/src/welcome/admin.js index b34476579a..436613c192 100644 --- a/src/welcome/admin.js +++ b/src/welcome/admin.js @@ -1518,7 +1518,7 @@ const AdditionalOptions = props => { { handleSettingsChange( { From 82594d780c615660142514dabf651a1e69f4bd2a Mon Sep 17 00:00:00 2001 From: Benjamin Intal Date: Tue, 29 Jul 2025 08:52:37 +0800 Subject: [PATCH 3/6] Update src/welcome/admin.js [skip ci] --- src/welcome/admin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome/admin.js b/src/welcome/admin.js index 436613c192..44b50f7f43 100644 --- a/src/welcome/admin.js +++ b/src/welcome/admin.js @@ -219,7 +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 (Deprecated)', i18n ), + __( 'Block Defaults (Sunsetted)', i18n ), ], }, { From 1582de423db4b4a90c88109f9401de5a42d760a1 Mon Sep 17 00:00:00 2001 From: Benjamin Intal Date: Tue, 29 Jul 2025 08:52:43 +0800 Subject: [PATCH 4/6] Update src/welcome/admin.js --- src/welcome/admin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/welcome/admin.js b/src/welcome/admin.js index 44b50f7f43..b6c8bf7327 100644 --- a/src/welcome/admin.js +++ b/src/welcome/admin.js @@ -1517,7 +1517,7 @@ const AdditionalOptions = props => { /> { From e4b57c6db11d4ba1c9e860ec26e3e8a7fd49d1a9 Mon Sep 17 00:00:00 2001 From: Mikhaela Tapia Date: Tue, 29 Jul 2025 11:12:53 +0800 Subject: [PATCH 5/6] minor fix --- src/welcome/admin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/welcome/admin.js b/src/welcome/admin.js index b6c8bf7327..179b34ae77 100644 --- a/src/welcome/admin.js +++ b/src/welcome/admin.js @@ -767,7 +767,7 @@ const EditorSettings = props => { } } help={ __( 'Adds a toolbar button for advanced copying and pasting block styles', i18n ) } /> - { settings.stackable_enable_block_defaults && { handleSettingsChange( { stackable_enable_reset_layout: value } ) // eslint-disable-line camelcase } } help={ __( 'Adds a toolbar button for resetting the layout of a stackble block back to the original', i18n ) } - /> } + /> { settings.stackable_enable_block_defaults && Date: Wed, 30 Jul 2025 00:33:19 +0800 Subject: [PATCH 6/6] remove test, add note --- e2e/tests/global-settings.spec.ts | 67 ------------------- .../block-defaults/global-settings/index.js | 3 + 2 files changed, 3 insertions(+), 67 deletions(-) diff --git a/e2e/tests/global-settings.spec.ts b/e2e/tests/global-settings.spec.ts index c4fe99e360..146ba0f6bd 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 Settings' ).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 Settings' ).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/src/deprecated/block-defaults/global-settings/index.js b/src/deprecated/block-defaults/global-settings/index.js index 767fdfae64..3852fa19a7 100644 --- a/src/deprecated/block-defaults/global-settings/index.js +++ b/src/deprecated/block-defaults/global-settings/index.js @@ -50,6 +50,9 @@ 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 ) }