Make WordPress Core

Changeset 55957


Ignore:
Timestamp:
06/21/2023 05:54:27 AM (3 years ago)
Author:
isabel_brison
Message:

Editor: add grid layout type

Add a new grid type to the layout block support.

Props andrewserong, costdev, ramonopoly.
Fixes #58554.

Location:
trunk/src/wp-includes
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-supports/layout.php

    r55956 r55957  
    3535 * @since 5.9.0
    3636 * @since 6.1.0 Added `$block_spacing` param, use style engine to enqueue styles.
     37 * @since 6.3.0 Added grid layout type.
    3738 * @access private
    3839 *
     
    285286                                        'selector'     => $selector,
    286287                                        'declarations' => array( 'justify-content' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
     288                                );
     289                        }
     290                }
     291        } elseif ( 'grid' === $layout_type ) {
     292                if ( ! empty( $layout['columnCount'] ) ) {
     293                        $layout_styles[] = array(
     294                                'selector'     => $selector,
     295                                'declarations' => array( 'grid-template-columns' => 'repeat(' . $layout['columnCount'] . ', minmax(0, 1fr))' ),
     296                        );
     297                } else {
     298                        $minimum_column_width = ! empty( $layout['minimumColumnWidth'] ) ? $layout['minimumColumnWidth'] : '12rem';
     299
     300                        $layout_styles[] = array(
     301                                'selector'     => $selector,
     302                                'declarations' => array( 'grid-template-columns' => 'repeat(auto-fill, minmax(min(' . $minimum_column_width . ', 100%), 1fr))' ),
     303                        );
     304                }
     305
     306                if ( $has_block_gap_support && isset( $gap_value ) ) {
     307                        $combined_gap_value = '';
     308                        $gap_sides          = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );
     309
     310                        foreach ( $gap_sides as $gap_side ) {
     311                                $process_value = is_string( $gap_value ) ? $gap_value : _wp_array_get( $gap_value, array( $gap_side ), $fallback_gap_value );
     312                                // Get spacing CSS variable from preset value if provided.
     313                                if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
     314                                        $index_to_splice = strrpos( $process_value, '|' ) + 1;
     315                                        $slug            = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
     316                                        $process_value   = "var(--wp--preset--spacing--$slug)";
     317                                }
     318                                $combined_gap_value .= "$process_value ";
     319                        }
     320                        $gap_value = trim( $combined_gap_value );
     321
     322                        if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
     323                                $layout_styles[] = array(
     324                                        'selector'     => $selector,
     325                                        'declarations' => array( 'gap' => $gap_value ),
    287326                                );
    288327                        }
  • trunk/src/wp-includes/class-wp-theme-json.php

    r55956 r55957  
    13711371                                if (
    13721372                                        ! empty( $class_name ) &&
    1373                                         ! empty( $base_style_rules )
     1373                                        is_array( $base_style_rules )
    13741374                                ) {
    13751375                                        // Output display mode. This requires special handling as `display` is not exposed in `safe_style_css_filter`.
  • trunk/src/wp-includes/theme.json

    r55956 r55957  
    318318                                                        }
    319319                                                },
     320                                                {
     321                                                        "selector": " > *",
     322                                                        "rules": {
     323                                                                "margin": "0"
     324                                                        }
     325                                                }
     326                                        ],
     327                                        "spacingStyles": [
     328                                                {
     329                                                        "selector": "",
     330                                                        "rules": {
     331                                                                "gap": null
     332                                                        }
     333                                                }
     334                                        ]
     335                                },
     336                                "grid": {
     337                                        "name": "grid",
     338                                        "slug": "grid",
     339                                        "className": "is-layout-grid",
     340                                        "displayMode": "grid",
     341                                        "baseStyles": [
    320342                                                {
    321343                                                        "selector": " > *",
Note: See TracChangeset for help on using the changeset viewer.