Make WordPress Core

Changeset 51386


Ignore:
Timestamp:
07/09/2021 01:05:05 AM (3 years ago)
Author:
desrosj
Message:

Block Editor: Fix for theme.json: color.duotone and spacing.units should allow empty sets.

This commit fixes an issue with the color.duotone & spacing.units in which empty values didn't override previous origins, resulting in that a theme couldn't provide an empty set for this via its theme.json.

Props nosolosw, youknowriad, aristath, jorgefilipecosta.
Merges [51383] to the 5.8 branch.
Fixes #53175.

Location:
branches/5.8
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/5.8

  • branches/5.8/src/wp-includes/class-wp-theme-json.php

    r51364 r51386  
    11071107            foreach ( $to_replace as $property_path ) {
    11081108                $path = array_merge( $metadata['path'], $property_path );
    1109                 $node = _wp_array_get( $incoming_data, $path, array() );
    1110                 if ( ! empty( $node ) ) {
     1109                $node = _wp_array_get( $incoming_data, $path, null );
     1110                if ( isset( $node ) ) {
    11111111                    _wp_array_set( $this->theme_json, $path, $node );
    11121112                }
  • branches/5.8/tests/phpunit/tests/theme/wpThemeJson.php

    r51312 r51386  
    669669
    670670    /**
     671     * @ticket 53175
     672     */
     673    public function test_merge_incoming_data_empty_presets() {
     674        $theme_json = new WP_Theme_JSON(
     675            array(
     676                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     677                'settings' => array(
     678                    'color'      => array(
     679                        'duotone'   => array(
     680                            array(
     681                                'slug'   => 'value',
     682                                'colors' => array( 'red', 'green' ),
     683                            ),
     684                        ),
     685                        'gradients' => array(
     686                            array(
     687                                'slug'     => 'gradient',
     688                                'gradient' => 'gradient',
     689                            ),
     690                        ),
     691                        'palette'   => array(
     692                            array(
     693                                'slug'  => 'red',
     694                                'color' => 'red',
     695                            ),
     696                        ),
     697                    ),
     698                    'spacing'    => array(
     699                        'units' => array( 'px', 'em' ),
     700                    ),
     701                    'typography' => array(
     702                        'fontSizes' => array(
     703                            array(
     704                                'slug'  => 'size',
     705                                'value' => 'size',
     706                            ),
     707                        ),
     708                    ),
     709                ),
     710            )
     711        );
     712
     713        $theme_json->merge(
     714            new WP_Theme_JSON(
     715                array(
     716                    'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     717                    'settings' => array(
     718                        'color'      => array(
     719                            'duotone'   => array(),
     720                            'gradients' => array(),
     721                            'palette'   => array(),
     722                        ),
     723                        'spacing'    => array(
     724                            'units' => array(),
     725                        ),
     726                        'typography' => array(
     727                            'fontSizes' => array(),
     728                        ),
     729                    ),
     730                )
     731            )
     732        );
     733
     734        $actual   = $theme_json->get_raw_data();
     735        $expected = array(
     736            'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     737            'settings' => array(
     738                'color'      => array(
     739                    'duotone'   => array(),
     740                    'gradients' => array(
     741                        'theme' => array(),
     742                    ),
     743                    'palette'   => array(
     744                        'theme' => array(),
     745                    ),
     746                ),
     747                'spacing'    => array(
     748                    'units' => array(),
     749                ),
     750                'typography' => array(
     751                    'fontSizes' => array(
     752                        'theme' => array(),
     753                    ),
     754                ),
     755            ),
     756        );
     757
     758        $this->assertEqualSetsWithIndex( $expected, $actual );
     759    }
     760
     761    /**
     762     * @ticket 53175
     763     */
     764    public function test_merge_incoming_data_null_presets() {
     765        $theme_json = new WP_Theme_JSON(
     766            array(
     767                'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     768                'settings' => array(
     769                    'color'      => array(
     770                        'duotone'   => array(
     771                            array(
     772                                'slug'   => 'value',
     773                                'colors' => array( 'red', 'green' ),
     774                            ),
     775                        ),
     776                        'gradients' => array(
     777                            array(
     778                                'slug'     => 'gradient',
     779                                'gradient' => 'gradient',
     780                            ),
     781                        ),
     782                        'palette'   => array(
     783                            array(
     784                                'slug'  => 'red',
     785                                'color' => 'red',
     786                            ),
     787                        ),
     788                    ),
     789                    'spacing'    => array(
     790                        'units' => array( 'px', 'em' ),
     791                    ),
     792                    'typography' => array(
     793                        'fontSizes' => array(
     794                            array(
     795                                'slug'  => 'size',
     796                                'value' => 'size',
     797                            ),
     798                        ),
     799                    ),
     800                ),
     801            )
     802        );
     803
     804        $theme_json->merge(
     805            new WP_Theme_JSON(
     806                array(
     807                    'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     808                    'settings' => array(
     809                        'color'      => array(
     810                            'custom' => false,
     811                        ),
     812                        'spacing'    => array(
     813                            'customMargin' => false,
     814                        ),
     815                        'typography' => array(
     816                            'customLineHeight' => false,
     817                        ),
     818                    ),
     819                )
     820            )
     821        );
     822
     823        $actual   = $theme_json->get_raw_data();
     824        $expected = array(
     825            'version'  => WP_Theme_JSON::LATEST_SCHEMA,
     826            'settings' => array(
     827                'color'      => array(
     828                    'custom'    => false,
     829                    'duotone'   => array(
     830                        array(
     831                            'slug'   => 'value',
     832                            'colors' => array( 'red', 'green' ),
     833                        ),
     834                    ),
     835                    'gradients' => array(
     836                        'theme' => array(
     837                            array(
     838                                'slug'     => 'gradient',
     839                                'gradient' => 'gradient',
     840                            ),
     841                        ),
     842                    ),
     843                    'palette'   => array(
     844                        'theme' => array(
     845                            array(
     846                                'slug'  => 'red',
     847                                'color' => 'red',
     848                            ),
     849                        ),
     850                    ),
     851                ),
     852                'spacing'    => array(
     853                    'customMargin' => false,
     854                    'units'        => array( 'px', 'em' ),
     855                ),
     856                'typography' => array(
     857                    'customLineHeight' => false,
     858                    'fontSizes'        => array(
     859                        'theme' => array(
     860                            array(
     861                                'slug'  => 'size',
     862                                'value' => 'size',
     863                            ),
     864                        ),
     865                    ),
     866                ),
     867            ),
     868        );
     869
     870        $this->assertEqualSetsWithIndex( $expected, $actual );
     871    }
     872
     873    /**
    671874     * @ticket 52991
    672875     */
Note: See TracChangeset for help on using the changeset viewer.