2021-04-15 17:19:43 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Layout block support flag.
|
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @since 5.8.0
|
|
|
|
*/
|
|
|
|
|
2021-05-25 09:36:58 +02:00
|
|
|
/**
|
|
|
|
* Registers the layout block attribute for block types that support it.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
* @access private
|
|
|
|
*
|
|
|
|
* @param WP_Block_Type $block_type Block Type.
|
|
|
|
*/
|
|
|
|
function wp_register_layout_support( $block_type ) {
|
|
|
|
$support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false );
|
|
|
|
if ( $support_layout ) {
|
|
|
|
if ( ! $block_type->attributes ) {
|
|
|
|
$block_type->attributes = array();
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! array_key_exists( 'layout', $block_type->attributes ) ) {
|
|
|
|
$block_type->attributes['layout'] = array(
|
|
|
|
'type' => 'object',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-09 03:17:17 +01:00
|
|
|
/**
|
|
|
|
* Generates the CSS corresponding to the provided layout.
|
|
|
|
*
|
|
|
|
* @since 5.9.0
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
* @since 6.1.0 Added `$block_spacing` param, use style engine to enqueue styles.
|
2021-11-09 03:17:17 +01:00
|
|
|
* @access private
|
|
|
|
*
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
* @param string $selector CSS selector.
|
|
|
|
* @param array $layout Layout object. The one that is passed has already checked
|
|
|
|
* the existence of default block layout.
|
2022-09-21 15:42:09 +02:00
|
|
|
* @param bool $has_block_gap_support Optional. Whether the theme has support for the block gap. Default false.
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
* @param string|string[]|null $gap_value Optional. The block gap value to apply. Default null.
|
2022-09-21 15:42:09 +02:00
|
|
|
* @param bool $should_skip_gap_serialization Optional. Whether to skip applying the user-defined value set in the editor. Default false.
|
|
|
|
* @param string $fallback_gap_value Optional. The block gap value to apply. Default '0.5em'.
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
* @param array|null $block_spacing Optional. Custom spacing set on the block. Default null.
|
2022-09-21 15:42:09 +02:00
|
|
|
* @return string CSS styles on success. Else, empty string.
|
2021-11-09 03:17:17 +01:00
|
|
|
*/
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false, $gap_value = null, $should_skip_gap_serialization = false, $fallback_gap_value = '0.5em', $block_spacing = null ) {
|
|
|
|
$layout_type = isset( $layout['type'] ) ? $layout['type'] : 'default';
|
|
|
|
$layout_styles = array();
|
2021-11-09 03:17:17 +01:00
|
|
|
|
|
|
|
if ( 'default' === $layout_type ) {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if ( $has_block_gap_support ) {
|
|
|
|
if ( is_array( $gap_value ) ) {
|
|
|
|
$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
|
|
|
|
}
|
|
|
|
if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
|
2022-09-26 16:58:12 +02:00
|
|
|
// Get spacing CSS variable from preset value if provided.
|
|
|
|
if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
|
|
|
|
$index_to_splice = strrpos( $gap_value, '|' ) + 1;
|
|
|
|
$slug = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
|
|
|
|
$gap_value = "var(--wp--preset--spacing--$slug)";
|
|
|
|
}
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
array_push(
|
|
|
|
$layout_styles,
|
|
|
|
array(
|
|
|
|
'selector' => "$selector > *",
|
|
|
|
'declarations' => array(
|
|
|
|
'margin-block-start' => '0',
|
|
|
|
'margin-block-end' => '0',
|
|
|
|
),
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'selector' => "$selector$selector > * + *",
|
|
|
|
'declarations' => array(
|
|
|
|
'margin-block-start' => $gap_value,
|
|
|
|
'margin-block-end' => '0',
|
|
|
|
),
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} elseif ( 'constrained' === $layout_type ) {
|
|
|
|
$content_size = isset( $layout['contentSize'] ) ? $layout['contentSize'] : '';
|
|
|
|
$wide_size = isset( $layout['wideSize'] ) ? $layout['wideSize'] : '';
|
|
|
|
$justify_content = isset( $layout['justifyContent'] ) ? $layout['justifyContent'] : 'center';
|
2021-11-09 03:17:17 +01:00
|
|
|
|
|
|
|
$all_max_width_value = $content_size ? $content_size : $wide_size;
|
|
|
|
$wide_max_width_value = $wide_size ? $wide_size : $content_size;
|
|
|
|
|
|
|
|
// Make sure there is a single CSS rule, and all tags are stripped for security.
|
2022-03-12 01:29:04 +01:00
|
|
|
$all_max_width_value = safecss_filter_attr( explode( ';', $all_max_width_value )[0] );
|
|
|
|
$wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] );
|
2021-11-09 03:17:17 +01:00
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$margin_left = 'left' === $justify_content ? '0 !important' : 'auto !important';
|
|
|
|
$margin_right = 'right' === $justify_content ? '0 !important' : 'auto !important';
|
|
|
|
|
2021-11-09 03:17:17 +01:00
|
|
|
if ( $content_size || $wide_size ) {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
array_push(
|
|
|
|
$layout_styles,
|
|
|
|
array(
|
|
|
|
'selector' => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
|
|
|
|
'declarations' => array(
|
|
|
|
'max-width' => $all_max_width_value,
|
|
|
|
'margin-left' => $margin_left,
|
|
|
|
'margin-right' => $margin_right,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'selector' => "$selector > .alignwide",
|
|
|
|
'declarations' => array( 'max-width' => $wide_max_width_value ),
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'selector' => "$selector .alignfull",
|
|
|
|
'declarations' => array( 'max-width' => 'none' ),
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
if ( isset( $block_spacing ) ) {
|
|
|
|
$block_spacing_values = wp_style_engine_get_styles(
|
|
|
|
array(
|
|
|
|
'spacing' => $block_spacing,
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Handle negative margins for alignfull children of blocks with custom padding set.
|
|
|
|
* They're added separately because padding might only be set on one side.
|
|
|
|
*/
|
|
|
|
if ( isset( $block_spacing_values['declarations']['padding-right'] ) ) {
|
|
|
|
$padding_right = $block_spacing_values['declarations']['padding-right'];
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => "$selector > .alignfull",
|
|
|
|
'declarations' => array( 'margin-right' => "calc($padding_right * -1)" ),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if ( isset( $block_spacing_values['declarations']['padding-left'] ) ) {
|
|
|
|
$padding_left = $block_spacing_values['declarations']['padding-left'];
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => "$selector > .alignfull",
|
|
|
|
'declarations' => array( 'margin-left' => "calc($padding_left * -1)" ),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( 'left' === $justify_content ) {
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
|
|
|
|
'declarations' => array( 'margin-left' => '0 !important' ),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( 'right' === $justify_content ) {
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
|
|
|
|
'declarations' => array( 'margin-right' => '0 !important' ),
|
|
|
|
);
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( $has_block_gap_support ) {
|
2022-04-06 13:41:05 +02:00
|
|
|
if ( is_array( $gap_value ) ) {
|
|
|
|
$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
|
|
|
|
}
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
|
|
|
|
// Get spacing CSS variable from preset value if provided.
|
|
|
|
if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
|
|
|
|
$index_to_splice = strrpos( $gap_value, '|' ) + 1;
|
|
|
|
$slug = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
|
|
|
|
$gap_value = "var(--wp--preset--spacing--$slug)";
|
|
|
|
}
|
|
|
|
|
|
|
|
array_push(
|
|
|
|
$layout_styles,
|
|
|
|
array(
|
|
|
|
'selector' => "$selector > *",
|
|
|
|
'declarations' => array(
|
|
|
|
'margin-block-start' => '0',
|
|
|
|
'margin-block-end' => '0',
|
|
|
|
),
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'selector' => "$selector$selector > * + *",
|
|
|
|
'declarations' => array(
|
|
|
|
'margin-block-start' => $gap_value,
|
|
|
|
'margin-block-end' => '0',
|
|
|
|
),
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
|
|
|
} elseif ( 'flex' === $layout_type ) {
|
|
|
|
$layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal';
|
|
|
|
|
|
|
|
$justify_content_options = array(
|
|
|
|
'left' => 'flex-start',
|
|
|
|
'right' => 'flex-end',
|
|
|
|
'center' => 'center',
|
|
|
|
);
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$vertical_alignment_options = array(
|
|
|
|
'top' => 'flex-start',
|
|
|
|
'center' => 'center',
|
|
|
|
'bottom' => 'flex-end',
|
|
|
|
);
|
|
|
|
|
2021-11-09 03:17:17 +01:00
|
|
|
if ( 'horizontal' === $layout_orientation ) {
|
2023-02-03 01:36:17 +01:00
|
|
|
$justify_content_options += array( 'space-between' => 'space-between' );
|
|
|
|
$vertical_alignment_options += array( 'stretch' => 'stretch' );
|
|
|
|
} else {
|
|
|
|
$justify_content_options += array( 'stretch' => 'stretch' );
|
|
|
|
$vertical_alignment_options += array( 'space-between' => 'space-between' );
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if ( ! empty( $layout['flexWrap'] ) && 'nowrap' === $layout['flexWrap'] ) {
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'flex-wrap' => 'nowrap' ),
|
|
|
|
);
|
|
|
|
}
|
2021-11-09 03:17:17 +01:00
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if ( $has_block_gap_support && isset( $gap_value ) ) {
|
|
|
|
$combined_gap_value = '';
|
|
|
|
$gap_sides = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );
|
|
|
|
|
|
|
|
foreach ( $gap_sides as $gap_side ) {
|
|
|
|
$process_value = is_string( $gap_value ) ? $gap_value : _wp_array_get( $gap_value, array( $gap_side ), $fallback_gap_value );
|
|
|
|
// Get spacing CSS variable from preset value if provided.
|
|
|
|
if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
|
|
|
|
$index_to_splice = strrpos( $process_value, '|' ) + 1;
|
|
|
|
$slug = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
|
|
|
|
$process_value = "var(--wp--preset--spacing--$slug)";
|
|
|
|
}
|
|
|
|
$combined_gap_value .= "$process_value ";
|
|
|
|
}
|
|
|
|
$gap_value = trim( $combined_gap_value );
|
|
|
|
|
|
|
|
if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'gap' => $gap_value ),
|
|
|
|
);
|
2022-04-06 13:41:05 +02:00
|
|
|
}
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
2022-04-06 13:41:05 +02:00
|
|
|
|
2021-11-09 03:17:17 +01:00
|
|
|
if ( 'horizontal' === $layout_orientation ) {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
/*
|
2021-11-09 03:17:17 +01:00
|
|
|
* Add this style only if is not empty for backwards compatibility,
|
|
|
|
* since we intend to convert blocks that had flex layout implemented
|
|
|
|
* by custom css.
|
|
|
|
*/
|
|
|
|
if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'justify-content' => $justify_content_options[ $layout['justifyContent'] ] ),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'align-items' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
|
|
|
|
);
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
|
|
|
} else {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'flex-direction' => 'column' ),
|
|
|
|
);
|
2021-11-09 03:17:17 +01:00
|
|
|
if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'align-items' => $justify_content_options[ $layout['justifyContent'] ] ),
|
|
|
|
);
|
2022-04-06 13:41:05 +02:00
|
|
|
} else {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'align-items' => 'flex-start' ),
|
|
|
|
);
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
2023-02-03 01:36:17 +01:00
|
|
|
if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
|
|
|
|
$layout_styles[] = array(
|
|
|
|
'selector' => $selector,
|
|
|
|
'declarations' => array( 'justify-content' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
|
|
|
|
);
|
|
|
|
}
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
}
|
2021-11-09 03:17:17 +01:00
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if ( ! empty( $layout_styles ) ) {
|
|
|
|
/*
|
|
|
|
* Add to the style engine store to enqueue and render layout styles.
|
|
|
|
* Return compiled layout styles to retain backwards compatibility.
|
|
|
|
* Since https://github.com/WordPress/gutenberg/pull/42452,
|
|
|
|
* wp_enqueue_block_support_styles is no longer called in this block supports file.
|
|
|
|
*/
|
|
|
|
return wp_style_engine_get_stylesheet_from_css_rules(
|
|
|
|
$layout_styles,
|
|
|
|
array(
|
|
|
|
'context' => 'block-supports',
|
|
|
|
'prettify' => false,
|
|
|
|
)
|
|
|
|
);
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
return '';
|
2021-11-09 03:17:17 +01:00
|
|
|
}
|
|
|
|
|
2021-05-25 09:36:58 +02:00
|
|
|
/**
|
|
|
|
* Renders the layout config to the block wrapper.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
* @access private
|
|
|
|
*
|
2021-07-01 23:29:56 +02:00
|
|
|
* @param string $block_content Rendered block content.
|
|
|
|
* @param array $block Block object.
|
|
|
|
* @return string Filtered block content.
|
2021-05-25 09:36:58 +02:00
|
|
|
*/
|
|
|
|
function wp_render_layout_support_flag( $block_content, $block ) {
|
|
|
|
$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
|
|
|
|
$support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false );
|
2021-11-09 03:17:17 +01:00
|
|
|
|
|
|
|
if ( ! $support_layout ) {
|
2021-05-25 09:36:58 +02:00
|
|
|
return $block_content;
|
|
|
|
}
|
|
|
|
|
Update: Improve performance of gutenberg_render_layout_support_flag.
Backports https://github.com/WordPress/gutenberg/pull/46074 into the core.
render_layout_support_flag is run per block, and inside we called get_global_settings three times. get_global_settings calls get_merged_data, which is costly. render_layout_support_flag is a filter called during the block render. When the blocks start rendering, there is no expectation that the theme.json settings change during the block render, so the settings and their derived information should all be static information of this function.
This simple change removes 3*NUMBER_OF_BLOCKS calls of get_merged_data to just one call.
Props oandregal, aristath, felixarntz, tellthemachines, andrewserong, aaronrobertshaw, aaronrobertshaw.
Built from https://develop.svn.wordpress.org/trunk@55167
git-svn-id: http://core.svn.wordpress.org/trunk@54700 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-01-31 16:24:14 +01:00
|
|
|
$global_settings = wp_get_global_settings();
|
|
|
|
$block_gap = _wp_array_get( $global_settings, array( 'spacing', 'blockGap' ), null );
|
|
|
|
$has_block_gap_support = isset( $block_gap );
|
|
|
|
$global_layout_settings = _wp_array_get( $global_settings, array( 'layout' ), null );
|
|
|
|
$root_padding_aware_alignments = _wp_array_get( $global_settings, array( 'useRootPaddingAwareAlignments' ), false );
|
|
|
|
|
|
|
|
$default_block_layout = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() );
|
|
|
|
$used_layout = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout;
|
|
|
|
|
|
|
|
if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] && ! $global_layout_settings ) {
|
|
|
|
return $block_content;
|
2021-05-25 09:36:58 +02:00
|
|
|
}
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$class_names = array();
|
|
|
|
$layout_definitions = _wp_array_get( $global_layout_settings, array( 'definitions' ), array() );
|
|
|
|
$block_classname = wp_get_block_default_classname( $block['blockName'] );
|
|
|
|
$container_class = wp_unique_id( 'wp-container-' );
|
|
|
|
$layout_classname = '';
|
|
|
|
|
|
|
|
// Set the correct layout type for blocks using legacy content width.
|
|
|
|
if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] || isset( $used_layout['contentSize'] ) && $used_layout['contentSize'] ) {
|
|
|
|
$used_layout['type'] = 'constrained';
|
|
|
|
}
|
2022-06-24 01:09:09 +02:00
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if (
|
Update: Improve performance of gutenberg_render_layout_support_flag.
Backports https://github.com/WordPress/gutenberg/pull/46074 into the core.
render_layout_support_flag is run per block, and inside we called get_global_settings three times. get_global_settings calls get_merged_data, which is costly. render_layout_support_flag is a filter called during the block render. When the blocks start rendering, there is no expectation that the theme.json settings change during the block render, so the settings and their derived information should all be static information of this function.
This simple change removes 3*NUMBER_OF_BLOCKS calls of get_merged_data to just one call.
Props oandregal, aristath, felixarntz, tellthemachines, andrewserong, aaronrobertshaw, aaronrobertshaw.
Built from https://develop.svn.wordpress.org/trunk@55167
git-svn-id: http://core.svn.wordpress.org/trunk@54700 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-01-31 16:24:14 +01:00
|
|
|
$root_padding_aware_alignments &&
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
isset( $used_layout['type'] ) &&
|
|
|
|
'constrained' === $used_layout['type']
|
|
|
|
) {
|
|
|
|
$class_names[] = 'has-global-padding';
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The following section was added to reintroduce a small set of layout classnames that were
|
|
|
|
* removed in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719). It is
|
|
|
|
* not intended to provide an extended set of classes to match all block layout attributes
|
|
|
|
* here.
|
|
|
|
*/
|
2022-06-24 01:09:09 +02:00
|
|
|
if ( ! empty( $block['attrs']['layout']['orientation'] ) ) {
|
|
|
|
$class_names[] = 'is-' . sanitize_title( $block['attrs']['layout']['orientation'] );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! empty( $block['attrs']['layout']['justifyContent'] ) ) {
|
|
|
|
$class_names[] = 'is-content-justification-' . sanitize_title( $block['attrs']['layout']['justifyContent'] );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! empty( $block['attrs']['layout']['flexWrap'] ) && 'nowrap' === $block['attrs']['layout']['flexWrap'] ) {
|
|
|
|
$class_names[] = 'is-nowrap';
|
|
|
|
}
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
// Get classname for layout type.
|
|
|
|
if ( isset( $used_layout['type'] ) ) {
|
|
|
|
$layout_classname = _wp_array_get( $layout_definitions, array( $used_layout['type'], 'className' ), '' );
|
2022-04-06 13:41:05 +02:00
|
|
|
} else {
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
$layout_classname = _wp_array_get( $layout_definitions, array( 'default', 'className' ), '' );
|
2022-04-06 13:41:05 +02:00
|
|
|
}
|
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
if ( $layout_classname && is_string( $layout_classname ) ) {
|
|
|
|
$class_names[] = sanitize_title( $layout_classname );
|
|
|
|
}
|
2022-05-20 16:32:40 +02:00
|
|
|
|
Editor: Improves layout block support in `wp_get_layout_style()`.
This commit merges the remaining changes from [https://github.com/WordPress/gutenberg/pull/40875 Gutenberg PR 40875]. It's Part 2 (see [54162] for Part 1) of a layout improvement initiative and targets `wp_get_layout_style()` in `layout.php`.
Context:
The overall initiative is to improve layout block support:
>to use centralised layout definitions, output base layout styles from global styles, introduce a layout type semantic classname, reduce duplication of container class and style tag output, and fix blockGap at the block level in global styles.
Changes include:
* Adding an optional parameter `$block_spacing` to `wp_get_layout_style()` for setting a custom spacing on the block.
* Adding handle for the block spacing.
* Using the style engine to to enqueue and render layout styles via `wp_style_engine_get_stylesheet_from_css_rules()`.
* Introduces a new test file for `wp_get_layout_style()`.
Follow-up to [54162], [54160], [54159], [53421], [52380], [53085], [52069].
Props andrewserong, isabel_brison, costdev, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54274
git-svn-id: http://core.svn.wordpress.org/trunk@53833 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-21 15:02:09 +02:00
|
|
|
/*
|
|
|
|
* Only generate Layout styles if the theme has not opted-out.
|
|
|
|
* Attribute-based Layout classnames are output in all cases.
|
|
|
|
*/
|
|
|
|
if ( ! current_theme_supports( 'disable-layout-styles' ) ) {
|
|
|
|
|
|
|
|
$gap_value = _wp_array_get( $block, array( 'attrs', 'style', 'spacing', 'blockGap' ) );
|
|
|
|
/*
|
|
|
|
* Skip if gap value contains unsupported characters.
|
|
|
|
* Regex for CSS value borrowed from `safecss_filter_attr`, and used here
|
|
|
|
* to only match against the value, not the CSS attribute.
|
|
|
|
*/
|
|
|
|
if ( is_array( $gap_value ) ) {
|
|
|
|
foreach ( $gap_value as $key => $value ) {
|
|
|
|
$gap_value[ $key ] = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$gap_value = $gap_value && preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ? null : $gap_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
$fallback_gap_value = _wp_array_get( $block_type->supports, array( 'spacing', 'blockGap', '__experimentalDefault' ), '0.5em' );
|
|
|
|
$block_spacing = _wp_array_get( $block, array( 'attrs', 'style', 'spacing' ), null );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If a block's block.json skips serialization for spacing or spacing.blockGap,
|
|
|
|
* don't apply the user-defined value to the styles.
|
|
|
|
*/
|
|
|
|
$should_skip_gap_serialization = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'blockGap' );
|
|
|
|
|
|
|
|
$style = wp_get_layout_style(
|
|
|
|
".$block_classname.$container_class",
|
|
|
|
$used_layout,
|
|
|
|
$has_block_gap_support,
|
|
|
|
$gap_value,
|
|
|
|
$should_skip_gap_serialization,
|
|
|
|
$fallback_gap_value,
|
|
|
|
$block_spacing
|
|
|
|
);
|
|
|
|
|
|
|
|
// Only add container class and enqueue block support styles if unique styles were generated.
|
|
|
|
if ( ! empty( $style ) ) {
|
|
|
|
$class_names[] = $container_class;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This assumes the hook only applies to blocks with a single wrapper.
|
|
|
|
* A limitation of this hook is that nested inner blocks wrappers are not yet supported.
|
|
|
|
*/
|
2021-05-25 09:36:58 +02:00
|
|
|
$content = preg_replace(
|
|
|
|
'/' . preg_quote( 'class="', '/' ) . '/',
|
2022-06-24 01:09:09 +02:00
|
|
|
'class="' . esc_attr( implode( ' ', $class_names ) ) . ' ',
|
2021-05-25 09:36:58 +02:00
|
|
|
$block_content,
|
|
|
|
1
|
|
|
|
);
|
|
|
|
|
2021-11-09 03:17:17 +01:00
|
|
|
return $content;
|
2021-05-25 09:36:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Register the block support.
|
|
|
|
WP_Block_Supports::get_instance()->register(
|
|
|
|
'layout',
|
|
|
|
array(
|
|
|
|
'register_attribute' => 'wp_register_layout_support',
|
|
|
|
)
|
|
|
|
);
|
|
|
|
add_filter( 'render_block', 'wp_render_layout_support_flag', 10, 2 );
|
|
|
|
|
2021-04-15 17:19:43 +02:00
|
|
|
/**
|
|
|
|
* For themes without theme.json file, make sure
|
|
|
|
* to restore the inner div for the group block
|
|
|
|
* to avoid breaking styles relying on that div.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
* @access private
|
|
|
|
*
|
2021-05-19 17:09:27 +02:00
|
|
|
* @param string $block_content Rendered block content.
|
|
|
|
* @param array $block Block object.
|
|
|
|
* @return string Filtered block content.
|
2021-04-15 17:19:43 +02:00
|
|
|
*/
|
|
|
|
function wp_restore_group_inner_container( $block_content, $block ) {
|
2021-11-11 08:43:31 +01:00
|
|
|
$tag_name = isset( $block['attrs']['tagName'] ) ? $block['attrs']['tagName'] : 'div';
|
|
|
|
$group_with_inner_container_regex = sprintf(
|
2021-11-15 13:50:17 +01:00
|
|
|
'/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U',
|
2021-11-11 08:43:31 +01:00
|
|
|
preg_quote( $tag_name, '/' )
|
|
|
|
);
|
2021-04-15 17:19:43 +02:00
|
|
|
|
|
|
|
if (
|
Themes: Introduce wp_theme_has_theme_json() for public consumption.
Adds `wp_theme_has_theme_json()` for public consumption, to replace the private internal Core-only `WP_Theme_JSON_Resolver::theme_has_support()` method. This new global function checks if a theme or its parent has a `theme.json` file.
For performance, results are cached as an integer `1` or `0` in the `'theme_json'` group with `'wp_theme_has_theme_json'` key. This is a non-persistent cache. Why? To make the derived data from `theme.json` is always fresh from the potential modifications done via hooks that can use dynamic data (modify the stylesheet depending on some option, settings depending on user permissions, etc.).
Also adds a new public function `wp_clean_theme_json_cache()` to clear the cache on `'switch_theme'` and `start_previewing_theme'`.
References:
* [https://github.com/WordPress/gutenberg/pull/45168 Gutenberg PR 45168] Add `wp_theme_has_theme_json` as a public API to know whether a theme has a `theme.json`.
* [https://github.com/WordPress/gutenberg/pull/45380 Gutenberg PR 45380] Deprecate `WP_Theme_JSON_Resolver:theme_has_support()`.
* [https://github.com/WordPress/gutenberg/pull/46150 Gutenberg PR 46150] Make `theme.json` object caches non-persistent.
* [https://github.com/WordPress/gutenberg/pull/45979 Gutenberg PR 45979] Don't check if constants set by `wp_initial_constants()` are defined.
* [https://github.com/WordPress/gutenberg/pull/45950 Gutenberg PR 45950] Cleaner logic in `wp_theme_has_theme_json`.
Follow-up to [54493], [53282], [52744], [52049], [50959].
Props oandregal, afragen, alexstine, aristath, azaozz, costdev, flixos90, hellofromTonya, mamaduka, mcsf, ocean90, spacedmonkey.
Fixes #56975.
Built from https://develop.svn.wordpress.org/trunk@55086
git-svn-id: http://core.svn.wordpress.org/trunk@54619 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-01-18 12:40:10 +01:00
|
|
|
wp_theme_has_theme_json() ||
|
2021-11-09 03:17:17 +01:00
|
|
|
1 === preg_match( $group_with_inner_container_regex, $block_content ) ||
|
2022-10-18 16:47:15 +02:00
|
|
|
( isset( $block['attrs']['layout']['type'] ) && 'flex' === $block['attrs']['layout']['type'] )
|
2021-04-15 17:19:43 +02:00
|
|
|
) {
|
|
|
|
return $block_content;
|
|
|
|
}
|
|
|
|
|
2021-11-11 08:43:31 +01:00
|
|
|
$replace_regex = sprintf(
|
|
|
|
'/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms',
|
|
|
|
preg_quote( $tag_name, '/' )
|
|
|
|
);
|
2021-04-15 17:19:43 +02:00
|
|
|
$updated_content = preg_replace_callback(
|
|
|
|
$replace_regex,
|
2021-08-26 14:59:02 +02:00
|
|
|
static function( $matches ) {
|
2021-04-15 17:19:43 +02:00
|
|
|
return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
|
|
|
|
},
|
|
|
|
$block_content
|
|
|
|
);
|
|
|
|
return $updated_content;
|
|
|
|
}
|
|
|
|
|
2022-04-06 13:41:05 +02:00
|
|
|
add_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* For themes without theme.json file, make sure
|
|
|
|
* to restore the outer div for the aligned image block
|
|
|
|
* to avoid breaking styles relying on that div.
|
|
|
|
*
|
|
|
|
* @since 6.0.0
|
|
|
|
* @access private
|
|
|
|
*
|
|
|
|
* @param string $block_content Rendered block content.
|
|
|
|
* @param array $block Block object.
|
|
|
|
* @return string Filtered block content.
|
|
|
|
*/
|
|
|
|
function wp_restore_image_outer_container( $block_content, $block ) {
|
|
|
|
$image_with_align = "
|
|
|
|
/# 1) everything up to the class attribute contents
|
|
|
|
(
|
|
|
|
^\s*
|
|
|
|
<figure\b
|
|
|
|
[^>]*
|
|
|
|
\bclass=
|
|
|
|
[\"']
|
|
|
|
)
|
|
|
|
# 2) the class attribute contents
|
|
|
|
(
|
|
|
|
[^\"']*
|
|
|
|
\bwp-block-image\b
|
|
|
|
[^\"']*
|
|
|
|
\b(?:alignleft|alignright|aligncenter)\b
|
|
|
|
[^\"']*
|
|
|
|
)
|
|
|
|
# 3) everything after the class attribute contents
|
|
|
|
(
|
|
|
|
[\"']
|
|
|
|
[^>]*
|
|
|
|
>
|
|
|
|
.*
|
|
|
|
<\/figure>
|
|
|
|
)/iUx";
|
|
|
|
|
|
|
|
if (
|
Themes: Introduce wp_theme_has_theme_json() for public consumption.
Adds `wp_theme_has_theme_json()` for public consumption, to replace the private internal Core-only `WP_Theme_JSON_Resolver::theme_has_support()` method. This new global function checks if a theme or its parent has a `theme.json` file.
For performance, results are cached as an integer `1` or `0` in the `'theme_json'` group with `'wp_theme_has_theme_json'` key. This is a non-persistent cache. Why? To make the derived data from `theme.json` is always fresh from the potential modifications done via hooks that can use dynamic data (modify the stylesheet depending on some option, settings depending on user permissions, etc.).
Also adds a new public function `wp_clean_theme_json_cache()` to clear the cache on `'switch_theme'` and `start_previewing_theme'`.
References:
* [https://github.com/WordPress/gutenberg/pull/45168 Gutenberg PR 45168] Add `wp_theme_has_theme_json` as a public API to know whether a theme has a `theme.json`.
* [https://github.com/WordPress/gutenberg/pull/45380 Gutenberg PR 45380] Deprecate `WP_Theme_JSON_Resolver:theme_has_support()`.
* [https://github.com/WordPress/gutenberg/pull/46150 Gutenberg PR 46150] Make `theme.json` object caches non-persistent.
* [https://github.com/WordPress/gutenberg/pull/45979 Gutenberg PR 45979] Don't check if constants set by `wp_initial_constants()` are defined.
* [https://github.com/WordPress/gutenberg/pull/45950 Gutenberg PR 45950] Cleaner logic in `wp_theme_has_theme_json`.
Follow-up to [54493], [53282], [52744], [52049], [50959].
Props oandregal, afragen, alexstine, aristath, azaozz, costdev, flixos90, hellofromTonya, mamaduka, mcsf, ocean90, spacedmonkey.
Fixes #56975.
Built from https://develop.svn.wordpress.org/trunk@55086
git-svn-id: http://core.svn.wordpress.org/trunk@54619 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-01-18 12:40:10 +01:00
|
|
|
wp_theme_has_theme_json() ||
|
2022-04-06 13:41:05 +02:00
|
|
|
0 === preg_match( $image_with_align, $block_content, $matches )
|
|
|
|
) {
|
|
|
|
return $block_content;
|
|
|
|
}
|
|
|
|
|
|
|
|
$wrapper_classnames = array( 'wp-block-image' );
|
|
|
|
|
|
|
|
// If the block has a classNames attribute these classnames need to be removed from the content and added back
|
|
|
|
// to the new wrapper div also.
|
|
|
|
if ( ! empty( $block['attrs']['className'] ) ) {
|
|
|
|
$wrapper_classnames = array_merge( $wrapper_classnames, explode( ' ', $block['attrs']['className'] ) );
|
|
|
|
}
|
|
|
|
$content_classnames = explode( ' ', $matches[2] );
|
|
|
|
$filtered_content_classnames = array_diff( $content_classnames, $wrapper_classnames );
|
|
|
|
|
|
|
|
return '<div class="' . implode( ' ', $wrapper_classnames ) . '">' . $matches[1] . implode( ' ', $filtered_content_classnames ) . $matches[3] . '</div>';
|
|
|
|
}
|
|
|
|
|
|
|
|
add_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 );
|