Make WordPress Core


Ignore:
Timestamp:
09/14/2022 02:19:16 PM (22 months ago)
Author:
audrasjb
Message:

Editor: Backport foundation for Layout block support refactor (part 1).

This change backports the following changes from Gutenberg repository:

  • [WordPress/gutenberg#40875 gutenberg#40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
  • [WordPress/gutenberg#42544 gutenberg#42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg#42544
  • [WordPress/gutenberg#42087 gutenberg#42087] Theme.json: Add block support feature level selectors for blocks gutenberg#42087
  • [WordPress/gutenberg#43792 gutenberg#43792] Global Styles: Split root layout rules into a different function gutenberg#43792
  • [WordPress/gutenberg#42544 gutenberg#42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg#42544
  • [WordPress/gutenberg#42665 gutenberg#42665] Layout: Reduce specificity of fallback blockGap styles gutenberg#42665
  • [WordPress/gutenberg#42085 gutenberg#42085] Core CSS support for root padding and alignfull blocks gutenberg#42085

Note that it doesn't entirely port over PR40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting layout.php.

Props andrewserong, aaronrobertshaw, isabel_brison.
See #56467.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/theme/wpThemeJson.php

    r54118 r54159  
    424424        );
    425425
    426         $expected = 'body { margin: 0; }body{--wp--style--block-gap: 1em;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: var( --wp--style--block-gap ); }';
     426        $expected = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: 1em; }body { --wp--style--block-gap: 1em; }';
    427427        $this->assertSame( $expected, $theme_json->get_stylesheet() );
    428428        $this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ) ) );
     
    545545                        ),
    546546                    ),
     547                    'spacing'  => array(
     548                        'blockGap' => '24px',
     549                    ),
    547550                ),
    548551                'misc'     => 'value',
     
    551554
    552555        $variables = 'body{--wp--preset--color--grey: grey;--wp--preset--font-family--small: 14px;--wp--preset--font-family--big: 41px;}.wp-block-group{--wp--custom--base-font: 16;--wp--custom--line-height--small: 1.2;--wp--custom--line-height--medium: 1.4;--wp--custom--line-height--large: 1.8;}';
    553         $styles    = 'body { margin: 0; }body{color: var(--wp--preset--color--grey);}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }a:where(:not(.wp-element-button)){background-color: #333;color: #111;}.wp-block-group{border-radius: 10px;padding: 24px;}.wp-block-group a:where(:not(.wp-element-button)){color: #111;}h1,h2,h3,h4,h5,h6{color: #123456;}h1 a:where(:not(.wp-element-button)),h2 a:where(:not(.wp-element-button)),h3 a:where(:not(.wp-element-button)),h4 a:where(:not(.wp-element-button)),h5 a:where(:not(.wp-element-button)),h6 a:where(:not(.wp-element-button)){background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a:where(:not(.wp-element-button)){background-color: #777;color: #555;}.wp-block-image{border-top-left-radius: 10px;border-bottom-right-radius: 1em;margin-bottom: 30px;}';
     556        $styles    = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{color: var(--wp--preset--color--grey);}a:where(:not(.wp-element-button)){background-color: #333;color: #111;}.wp-block-group{border-radius: 10px;padding: 24px;}.wp-block-group a:where(:not(.wp-element-button)){color: #111;}h1,h2,h3,h4,h5,h6{color: #123456;}h1 a:where(:not(.wp-element-button)),h2 a:where(:not(.wp-element-button)),h3 a:where(:not(.wp-element-button)),h4 a:where(:not(.wp-element-button)),h5 a:where(:not(.wp-element-button)),h6 a:where(:not(.wp-element-button)){background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a:where(:not(.wp-element-button)){background-color: #777;color: #555;}.wp-block-image{border-top-left-radius: 10px;border-bottom-right-radius: 1em;margin-bottom: 30px;}';
    554557        $presets   = '.has-grey-color{color: var(--wp--preset--color--grey) !important;}.has-grey-background-color{background-color: var(--wp--preset--color--grey) !important;}.has-grey-border-color{border-color: var(--wp--preset--color--grey) !important;}.has-small-font-family{font-family: var(--wp--preset--font-family--small) !important;}.has-big-font-family{font-family: var(--wp--preset--font-family--big) !important;}';
    555558        $all       = $variables . $styles . $presets;
     
    26762679                        'core/group' => array(
    26772680                            'spacing' => array(
    2678                                 'margin'   => 'valid value',
    2679                                 'blockGap' => 'invalid value',
     2681                                'margin'  => 'valid value',
     2682                                'display' => 'none',
    26802683                            ),
    26812684                        ),
     
    29902993        );
    29912994
    2992         $expected = 'body { margin: 0; }body{background-color: #ffffff;color: #000000;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-element-button, .wp-block-button__link{background-color: #000000;color: #ffffff;}';
     2995        $expected = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{background-color: #ffffff;color: #000000;}.wp-element-button, .wp-block-button__link{background-color: #000000;color: #ffffff;}';
    29932996        $this->assertSame( $expected, $theme_json->get_stylesheet() );
    29942997    }
     
    30223025        );
    30233026
    3024         $expected = 'body { margin: 0; }body{background-color: #ffffff;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-element-button, .wp-block-button__link{color: #ffffff;}';
     3027        $expected = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{background-color: #ffffff;}.wp-element-button, .wp-block-button__link{color: #ffffff;}';
    30253028        $this->assertSame( $expected, $theme_json->get_stylesheet() );
    30263029    }
     
    30543057        );
    30553058
    3056         $expected = 'body { margin: 0; }body{background-color: #ffffff;color: #ffffff;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-element-button, .wp-block-button__link{color: #ffffff;}';
     3059        $expected = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{background-color: #ffffff;color: #ffffff;}.wp-element-button, .wp-block-button__link{color: #ffffff;}';
    30573060        $this->assertSame( $expected, $theme_json->get_stylesheet() );
    30583061    }
     
    30783081        );
    30793082
    3080         $expected = 'body { margin: 0; }body{background-color: #ffffff;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
     3083        $expected = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{background-color: #ffffff;}';
    30813084        $this->assertSame( $expected, $theme_json->get_stylesheet() );
    30823085    }
    30833086
     3087    /**
     3088     * @dataProvider data_get_layout_definitions
     3089     *
     3090     * @ticket 56467
     3091     *
     3092     * @param array $layout_definitions Layout definitions as stored in core theme.json.
     3093     */
     3094    public function test_get_stylesheet_generates_layout_styles( $layout_definitions ) {
     3095        $theme_json = new WP_Theme_JSON(
     3096            array(
     3097                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     3098                'settings' => array(
     3099                    'layout'  => array(
     3100                        'definitions' => $layout_definitions,
     3101                    ),
     3102                    'spacing' => array(
     3103                        'blockGap' => true,
     3104                    ),
     3105                ),
     3106                'styles'   => array(
     3107                    'spacing' => array(
     3108                        'blockGap' => '1em',
     3109                    ),
     3110                ),
     3111            ),
     3112            'default'
     3113        );
     3114
     3115        // Results also include root site blocks styles.
     3116        $this->assertSame(
     3117            'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: 1em; }body { --wp--style--block-gap: 1em; }body .is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}body .is-layout-flow > * + *{margin-block-start: 1em;margin-block-end: 0;}body .is-layout-flex{gap: 1em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}',
     3118            $theme_json->get_stylesheet( array( 'styles' ) )
     3119        );
     3120    }
     3121
     3122    /**
     3123     * @dataProvider data_get_layout_definitions
     3124     *
     3125     * @ticket 56467
     3126     *
     3127     * @param array $layout_definitions Layout definitions as stored in core theme.json.
     3128     */
     3129    public function test_get_stylesheet_generates_layout_styles_with_spacing_presets( $layout_definitions ) {
     3130        $theme_json = new WP_Theme_JSON(
     3131            array(
     3132                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     3133                'settings' => array(
     3134                    'layout'  => array(
     3135                        'definitions' => $layout_definitions,
     3136                    ),
     3137                    'spacing' => array(
     3138                        'blockGap' => true,
     3139                    ),
     3140                ),
     3141                'styles'   => array(
     3142                    'spacing' => array(
     3143                        'blockGap' => 'var:preset|spacing|60',
     3144                    ),
     3145                ),
     3146            ),
     3147            'default'
     3148        );
     3149
     3150        // Results also include root site blocks styles.
     3151        $this->assertSame(
     3152            'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: var(--wp--preset--spacing--60); }body { --wp--style--block-gap: var(--wp--preset--spacing--60); }body .is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}body .is-layout-flow > * + *{margin-block-start: var(--wp--preset--spacing--60);margin-block-end: 0;}body .is-layout-flex{gap: var(--wp--preset--spacing--60);}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}',
     3153            $theme_json->get_stylesheet( array( 'styles' ) )
     3154        );
     3155    }
     3156
     3157    /**
     3158     * @dataProvider data_get_layout_definitions
     3159     *
     3160     * @ticket 56467
     3161     *
     3162     * @param array $layout_definitions Layout definitions as stored in core theme.json.
     3163     */
     3164    public function test_get_stylesheet_generates_fallback_gap_layout_styles( $layout_definitions ) {
     3165        $theme_json = new WP_Theme_JSON(
     3166            array(
     3167                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     3168                'settings' => array(
     3169                    'layout'  => array(
     3170                        'definitions' => $layout_definitions,
     3171                    ),
     3172                    'spacing' => array(
     3173                        'blockGap' => null,
     3174                    ),
     3175                ),
     3176                'styles'   => array(
     3177                    'spacing' => array(
     3178                        'blockGap' => '1em',
     3179                    ),
     3180                ),
     3181            ),
     3182            'default'
     3183        );
     3184        $stylesheet = $theme_json->get_stylesheet( array( 'styles' ) );
     3185
     3186        // Results also include root site blocks styles.
     3187        $this->assertSame(
     3188            'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}',
     3189            $stylesheet
     3190        );
     3191    }
     3192
     3193    /**
     3194     * @dataProvider data_get_layout_definitions
     3195     *
     3196     * @ticket 56467
     3197     *
     3198     * @param array $layout_definitions Layout definitions as stored in core theme.json.
     3199     */
     3200    public function test_get_stylesheet_generates_base_fallback_gap_layout_styles( $layout_definitions ) {
     3201        $theme_json = new WP_Theme_JSON(
     3202            array(
     3203                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     3204                'settings' => array(
     3205                    'layout'  => array(
     3206                        'definitions' => $layout_definitions,
     3207                    ),
     3208                    'spacing' => array(
     3209                        'blockGap' => null,
     3210                    ),
     3211                ),
     3212            ),
     3213            'default'
     3214        );
     3215        $stylesheet = $theme_json->get_stylesheet( array( 'base-layout-styles' ) );
     3216
     3217        // Note the `base-layout-styles` includes a fallback gap for the Columns block for backwards compatibility.
     3218        $this->assertSame(
     3219            ':where(.is-layout-flex){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}',
     3220            $stylesheet
     3221        );
     3222    }
     3223
     3224    /**
     3225     * @dataProvider data_get_layout_definitions
     3226     *
     3227     * @ticket 56467
     3228     *
     3229     * @param array $layout_definitions Layout definitions as stored in core theme.json.
     3230     */
     3231    public function test_get_stylesheet_skips_layout_styles( $layout_definitions ) {
     3232        add_theme_support( 'disable-layout-styles' );
     3233        $theme_json = new WP_Theme_JSON(
     3234            array(
     3235                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     3236                'settings' => array(
     3237                    'layout'  => array(
     3238                        'definitions' => $layout_definitions,
     3239                    ),
     3240                    'spacing' => array(
     3241                        'blockGap' => null,
     3242                    ),
     3243                ),
     3244            ),
     3245            'default'
     3246        );
     3247        $stylesheet = $theme_json->get_stylesheet( array( 'base-layout-styles' ) );
     3248        remove_theme_support( 'disable-layout-styles' );
     3249
     3250        // All Layout styles should be skipped.
     3251        $this->assertSame(
     3252            '',
     3253            $stylesheet
     3254        );
     3255    }
     3256
     3257    /**
     3258     * @dataProvider data_get_layout_definitions
     3259     *
     3260     * @ticket 56467
     3261     *
     3262     * @param array $layout_definitions Layout definitions as stored in core theme.json.
     3263     */
     3264    public function test_get_stylesheet_generates_valid_block_gap_values_and_skips_null_or_false_values( $layout_definitions ) {
     3265        $theme_json = new WP_Theme_JSON(
     3266            array(
     3267                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     3268                'settings' => array(
     3269                    'layout'  => array(
     3270                        'definitions' => $layout_definitions,
     3271                    ),
     3272                    'spacing' => array(
     3273                        'blockGap' => true,
     3274                    ),
     3275                ),
     3276                'styles'   => array(
     3277                    'spacing' => array(
     3278                        'blockGap' => '1rem',
     3279                    ),
     3280                    'blocks'  => array(
     3281                        'core/post-content' => array(
     3282                            'color' => array(
     3283                                'text' => 'gray', // This value should not render block layout styles.
     3284                            ),
     3285                        ),
     3286                        'core/social-links' => array(
     3287                            'spacing' => array(
     3288                                'blockGap' => '0', // This value should render block layout gap as zero.
     3289                            ),
     3290                        ),
     3291                        'core/buttons'      => array(
     3292                            'spacing' => array(
     3293                                'blockGap' => 0, // This value should render block layout gap as zero.
     3294                            ),
     3295                        ),
     3296                        'core/columns'      => array(
     3297                            'spacing' => array(
     3298                                'blockGap' => false, // This value should be ignored. The block will use the global layout value.
     3299                            ),
     3300                        ),
     3301                    ),
     3302                ),
     3303            ),
     3304            'default'
     3305        );
     3306
     3307        $this->assertEquals(
     3308            'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }.wp-site-blocks > * + * { margin-block-start: 1rem; }body { --wp--style--block-gap: 1rem; }body .is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}body .is-layout-flow > * + *{margin-block-start: 1rem;margin-block-end: 0;}body .is-layout-flex{gap: 1rem;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}.wp-block-post-content{color: gray;}.wp-block-social-links.is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}.wp-block-social-links.is-layout-flow > * + *{margin-block-start: 0;margin-block-end: 0;}.wp-block-social-links.is-layout-flex{gap: 0;}.wp-block-buttons.is-layout-flow > *{margin-block-start: 0;margin-block-end: 0;}.wp-block-buttons.is-layout-flow > * + *{margin-block-start: 0;margin-block-end: 0;}.wp-block-buttons.is-layout-flex{gap: 0;}',
     3309            $theme_json->get_stylesheet()
     3310        );
     3311    }
     3312
     3313    /**
     3314     * Data provider for layout tests.
     3315     *
     3316     * @ticket 56467
     3317     *
     3318     * @return array
     3319     */
     3320    public function data_get_layout_definitions() {
     3321        return array(
     3322            'layout definitions' => array(
     3323                array(
     3324                    'default' => array(
     3325                        'name'          => 'default',
     3326                        'slug'          => 'flow',
     3327                        'className'     => 'is-layout-flow',
     3328                        'baseStyles'    => array(
     3329                            array(
     3330                                'selector' => ' > .alignleft',
     3331                                'rules'    => array(
     3332                                    'float'               => 'left',
     3333                                    'margin-inline-start' => '0',
     3334                                    'margin-inline-end'   => '2em',
     3335                                ),
     3336                            ),
     3337                            array(
     3338                                'selector' => ' > .alignright',
     3339                                'rules'    => array(
     3340                                    'float'               => 'right',
     3341                                    'margin-inline-start' => '2em',
     3342                                    'margin-inline-end'   => '0',
     3343                                ),
     3344                            ),
     3345                            array(
     3346                                'selector' => ' > .aligncenter',
     3347                                'rules'    => array(
     3348                                    'margin-left'  => 'auto !important',
     3349                                    'margin-right' => 'auto !important',
     3350                                ),
     3351                            ),
     3352                        ),
     3353                        'spacingStyles' => array(
     3354                            array(
     3355                                'selector' => ' > *',
     3356                                'rules'    => array(
     3357                                    'margin-block-start' => '0',
     3358                                    'margin-block-end'   => '0',
     3359                                ),
     3360                            ),
     3361                            array(
     3362                                'selector' => ' > * + *',
     3363                                'rules'    => array(
     3364                                    'margin-block-start' => null,
     3365                                    'margin-block-end'   => '0',
     3366                                ),
     3367                            ),
     3368                        ),
     3369                    ),
     3370                    'flex'    => array(
     3371                        'name'          => 'flex',
     3372                        'slug'          => 'flex',
     3373                        'className'     => 'is-layout-flex',
     3374                        'displayMode'   => 'flex',
     3375                        'baseStyles'    => array(
     3376                            array(
     3377                                'selector' => '',
     3378                                'rules'    => array(
     3379                                    'flex-wrap'   => 'wrap',
     3380                                    'align-items' => 'center',
     3381                                ),
     3382                            ),
     3383                        ),
     3384                        'spacingStyles' => array(
     3385                            array(
     3386                                'selector' => '',
     3387                                'rules'    => array(
     3388                                    'gap' => null,
     3389                                ),
     3390                            ),
     3391                        ),
     3392                    ),
     3393                ),
     3394            ),
     3395        );
     3396    }
     3397
     3398    /**
     3399     * @ticket 56467
     3400     */
     3401    function test_get_styles_for_block_with_padding_aware_alignments() {
     3402        $theme_json = new WP_Theme_JSON(
     3403            array(
     3404                'version'  => 2,
     3405                'styles'   => array(
     3406                    'spacing' => array(
     3407                        'padding' => array(
     3408                            'top'    => '10px',
     3409                            'right'  => '12px',
     3410                            'bottom' => '10px',
     3411                            'left'   => '12px',
     3412                        ),
     3413                    ),
     3414                ),
     3415                'settings' => array(
     3416                    'useRootPaddingAwareAlignments' => true,
     3417                ),
     3418            )
     3419        );
     3420
     3421        $metadata = array(
     3422            'path'     => array(
     3423                '0' => 'styles',
     3424            ),
     3425            'selector' => 'body',
     3426        );
     3427
     3428        $expected    = 'body { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding :where(.has-global-padding) { padding-right: 0; padding-left: 0; }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; }.has-global-padding > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{--wp--style--root--padding-top: 10px;--wp--style--root--padding-right: 12px;--wp--style--root--padding-bottom: 10px;--wp--style--root--padding-left: 12px;}';
     3429        $root_rules  = $theme_json->get_root_layout_rules( WP_Theme_JSON::ROOT_BLOCK_SELECTOR, $metadata );
     3430        $style_rules = $theme_json->get_styles_for_block( $metadata );
     3431        $this->assertSame( $expected, $root_rules . $style_rules );
     3432    }
     3433
     3434    /**
     3435     * @ticket 56467
     3436     */
     3437    function test_get_styles_for_block_without_padding_aware_alignments() {
     3438        $theme_json = new WP_Theme_JSON(
     3439            array(
     3440                'version' => 2,
     3441                'styles'  => array(
     3442                    'spacing' => array(
     3443                        'padding' => array(
     3444                            'top'    => '10px',
     3445                            'right'  => '12px',
     3446                            'bottom' => '10px',
     3447                            'left'   => '12px',
     3448                        ),
     3449                    ),
     3450                ),
     3451            )
     3452        );
     3453
     3454        $metadata = array(
     3455            'path'     => array(
     3456                '0' => 'styles',
     3457            ),
     3458            'selector' => 'body',
     3459        );
     3460
     3461        $expected    = 'body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }body{padding-top: 10px;padding-right: 12px;padding-bottom: 10px;padding-left: 12px;}';
     3462        $root_rules  = $theme_json->get_root_layout_rules( WP_Theme_JSON::ROOT_BLOCK_SELECTOR, $metadata );
     3463        $style_rules = $theme_json->get_styles_for_block( $metadata );
     3464        $this->assertSame( $expected, $root_rules . $style_rules );
     3465    }
     3466
     3467    /**
     3468     * @ticket 56467
     3469     */
     3470    function test_get_styles_for_block_with_content_width() {
     3471        $theme_json = new WP_Theme_JSON(
     3472            array(
     3473                'version'  => 2,
     3474                'settings' => array(
     3475                    'layout' => array(
     3476                        'contentSize' => '800px',
     3477                        'wideSize'    => '1000px',
     3478                    ),
     3479                ),
     3480            )
     3481        );
     3482
     3483        $metadata = array(
     3484            'path'     => array(
     3485                '0' => 'settings',
     3486            ),
     3487            'selector' => 'body',
     3488        );
     3489
     3490        $expected    = 'body { margin: 0;--wp--style--global--content-size: 800px;--wp--style--global--wide-size: 1000px; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
     3491        $root_rules  = $theme_json->get_root_layout_rules( WP_Theme_JSON::ROOT_BLOCK_SELECTOR, $metadata );
     3492        $style_rules = $theme_json->get_styles_for_block( $metadata );
     3493        $this->assertSame( $expected, $root_rules . $style_rules );
     3494    }
    30843495}
Note: See TracChangeset for help on using the changeset viewer.