Make WordPress Core

Ticket #48798: 48799-2.diff

File 48799-2.diff, 10.3 KB (added by koke, 6 years ago)

Exposes editor-color-palette, editor-font-sizes, disable-custom-colors, disable-custom-font-sizes

  • src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php
    index 47491e7774..f22cc8b14a 100644
    a b class WP_REST_Themes_Controller extends WP_REST_Controller { 
    109109                        $formats                           = get_theme_support( 'post-formats' );
    110110                        $formats                           = is_array( $formats ) ? array_values( $formats[0] ) : array();
    111111                        $formats                           = array_merge( array( 'standard' ), $formats );
    112                         $data['theme_supports']['formats'] = $formats;
     112                        $data['theme_supports']['disable-custom-colors']     = (bool) get_theme_support( 'disable-custom-colors' );
     113                        $data['theme_supports']['disable-custom-font-sizes'] = (bool) get_theme_support( 'disable-custom-font-sizes' );
     114                        $data['theme_supports']['editor-color-palette']      = false;
     115                        $data['theme_supports']['editor-font-sizes']         = false;
     116                        $data['theme_supports']['formats']                   = $formats;
     117                        $data['theme_supports']['post-thumbnails']           = false;
     118                        $data['theme_supports']['responsive-embeds']         = (bool) get_theme_support( 'responsive-embeds' );
    113119
    114                         $data['theme_supports']['post-thumbnails']   = false;
    115                         $data['theme_supports']['responsive-embeds'] = (bool) get_theme_support( 'responsive-embeds' );
    116                         $post_thumbnails                             = get_theme_support( 'post-thumbnails' );
     120                        $post_thumbnails      = get_theme_support( 'post-thumbnails' );
     121                        $editor_color_palette = get_theme_support( 'editor-color-palette' );
     122                        $editor_font_sizes    = get_theme_support( 'editor-font-sizes' );
    117123
    118124                        if ( $post_thumbnails ) {
    119125                                // $post_thumbnails can contain a nested array of post types.
    120126                                // e.g. array( array( 'post', 'page' ) ).
    121127                                $data['theme_supports']['post-thumbnails'] = is_array( $post_thumbnails ) ? $post_thumbnails[0] : true;
    122128                        }
     129
     130                        if ( is_array( $editor_color_palette ) ) {
     131                                $data['theme_supports']['editor-color-palette'] = $editor_color_palette[0];
     132                        }
     133
     134                        if ( is_array( $editor_font_sizes ) ) {
     135                                $data['theme_supports']['editor-font-sizes'] = $editor_font_sizes[0];
     136                        }
    123137                }
    124138
    125139                $data = $this->add_additional_fields_to_object( $data, $request );
    class WP_REST_Themes_Controller extends WP_REST_Controller { 
    161175                                        'type'        => 'array',
    162176                                        'readonly'    => true,
    163177                                        'properties'  => array(
    164                                                 'formats'           => array(
     178                                                'disable-custom-colors'     => array(
     179                                                        'description' => __( 'Whether the theme disables custom colors.' ),
     180                                                        'type'        => 'bool',
     181                                                        'readonly'    => true,
     182                                                ),
     183                                                'disable-custom-font-sizes' => array(
     184                                                        'description' => __( 'Whether the theme disables custom font sizes.' ),
     185                                                        'type'        => 'bool',
     186                                                        'readonly'    => true,
     187                                                ),
     188                                                'editor-color-palette'      => array(
     189                                                        'description' => __( 'Custom color palette if defined by the theme.' ),
     190                                                        'type'        => array( 'array', 'bool' ),
     191                                                        'items'       => [
     192                                                                'type'       => 'object',
     193                                                                'properties' => array(
     194                                                                        'name'  => 'string',
     195                                                                        'slug'  => 'string',
     196                                                                        'color' => 'string,'
     197                                                                ),
     198                                                                'required'   => array( 'name', 'slug', 'color' ),
     199                                                        ],
     200                                                        'readonly'    => true,
     201                                                ),
     202                                                'editor-font-sizes'         => array(
     203                                                        'description' => __( 'Custom font sizes if defined by the theme.' ),
     204                                                        'type'        => array( 'array', 'bool' ),
     205                                                        'items'       => array(
     206                                                                'type'       => 'object',
     207                                                                'properties' => array(
     208                                                                        'name' => 'string',
     209                                                                        'size' => 'number',
     210                                                                        'slug' => 'string',
     211                                                                ),
     212                                                                'required'   => array( 'name', 'size', 'slug' ),
     213                                                        ),
     214                                                        'readonly'    => true,
     215                                                ),
     216                                                'formats'                   => array(
    165217                                                        'description' => __( 'Post formats supported.' ),
    166218                                                        'type'        => 'array',
    167219                                                        'readonly'    => true,
    168220                                                ),
    169                                                 'post-thumbnails'   => array(
     221                                                'post-thumbnails'           => array(
    170222                                                        'description' => __( 'Whether the theme supports post thumbnails.' ),
    171223                                                        'type'        => array( 'array', 'bool' ),
    172224                                                        'readonly'    => true,
    173225                                                ),
    174                                                 'responsive-embeds' => array(
     226                                                'responsive-embeds'         => array(
    175227                                                        'description' => __( 'Whether the theme supports responsive embedded content.' ),
    176228                                                        'type'        => 'bool',
    177229                                                        'readonly'    => true,
  • tests/phpunit/tests/rest-api/rest-themes-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-themes-controller.php b/tests/phpunit/tests/rest-api/rest-themes-controller.php
    index 520dbed9d0..39ac0bc89e 100644
    a b class WP_Test_REST_Themes_Controller extends WP_Test_REST_Controller_Testcase { 
    189189                $this->assertEquals( 1, count( $properties ) );
    190190                $this->assertArrayHasKey( 'theme_supports', $properties );
    191191
    192                 $this->assertEquals( 3, count( $properties['theme_supports']['properties'] ) );
     192                $this->assertEquals( 7, count( $properties['theme_supports']['properties'] ) );
     193                $this->assertArrayHasKey( 'disable-custom-colors', $properties['theme_supports']['properties'] );
     194                $this->assertArrayHasKey( 'disable-custom-font-sizes', $properties['theme_supports']['properties'] );
     195                $this->assertArrayHasKey( 'editor-color-palette', $properties['theme_supports']['properties'] );
     196                $this->assertArrayHasKey( 'editor-font-sizes', $properties['theme_supports']['properties'] );
    193197                $this->assertArrayHasKey( 'formats', $properties['theme_supports']['properties'] );
    194198                $this->assertArrayHasKey( 'post-thumbnails', $properties['theme_supports']['properties'] );
    195199                $this->assertArrayHasKey( 'responsive-embeds', $properties['theme_supports']['properties'] );
    196200        }
    197201
     202        /**
     203         * Test when a theme does not disable custom colors.
     204         *
     205         * @ticket 48798
     206         */
     207        public function test_theme_supports_disable_custom_colors_false() {
     208                remove_theme_support( 'disable-custom-colors' );
     209                $response = self::perform_active_theme_request();
     210
     211                $result = $response->get_data();
     212                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     213                $this->assertTrue( isset( $result[0]['theme_supports']['disable-custom-colors'] ) );
     214                $this->assertFalse( $result[0]['theme_supports']['disable-custom-colors'] );
     215        }
     216
     217        /**
     218         * Test when a theme disables custom colors.
     219         *
     220         * @ticket 48798
     221         */
     222        public function test_theme_supports_disable_custom_colors_true() {
     223                remove_theme_support( 'disable-custom-colors' );
     224                add_theme_support( 'disable-custom-colors' );
     225                $response = self::perform_active_theme_request();
     226                $result   = $response->get_data();
     227                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     228                $this->assertTrue( $result[0]['theme_supports']['disable-custom-colors'] );
     229        }
     230
     231        /**
     232         * Test when a theme does not disable custom font sizes.
     233         *
     234         * @ticket 48798
     235         */
     236        public function test_theme_supports_disable_custom_font_sizes_false() {
     237                remove_theme_support( 'disable-custom-font-sizes' );
     238                $response = self::perform_active_theme_request();
     239
     240                $result = $response->get_data();
     241                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     242                $this->assertTrue( isset( $result[0]['theme_supports']['disable-custom-font-sizes'] ) );
     243                $this->assertFalse( $result[0]['theme_supports']['disable-custom-font-sizes'] );
     244        }
     245
     246        /**
     247         * Test when a theme disables custom font sizes.
     248         *
     249         * @ticket 48798
     250         */
     251        public function test_theme_supports_disable_custom_font_sizes_true() {
     252                remove_theme_support( 'disable-custom-font-sizes' );
     253                add_theme_support( 'disable-custom-font-sizes' );
     254                $response = self::perform_active_theme_request();
     255                $result   = $response->get_data();
     256                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     257                $this->assertTrue( $result[0]['theme_supports']['disable-custom-font-sizes'] );
     258        }
     259
     260        /**
     261         * Test when a theme doesn't support custom font sizes.
     262         *
     263         * @ticket 48798
     264         */
     265        public function test_theme_supports_editor_font_sizes_false() {
     266                remove_theme_support( 'editor-font-sizes' );
     267                $response = self::perform_active_theme_request();
     268
     269                $result = $response->get_data();
     270                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     271                $this->assertTrue( isset( $result[0]['theme_supports']['editor-font-sizes'] ) );
     272                $this->assertFalse( $result[0]['theme_supports']['editor-font-sizes'] );
     273        }
     274
     275        /**
     276         * Test when a theme supports custom font sizes.
     277         *
     278         * @ticket 48798
     279         */
     280        public function test_theme_supports_editor_font_sizes_array() {
     281                remove_theme_support( 'editor-font-sizes' );
     282                $tiny = array(
     283                        'name' => 'Tiny',
     284                        'size' => 8,
     285                        'slug' => 'tiny',
     286                );
     287                add_theme_support( 'editor-font-sizes', array( $tiny ) );
     288                $response = self::perform_active_theme_request();
     289
     290                $result = $response->get_data();
     291                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     292                $this->assertEquals( array( $tiny), $result[0]['theme_supports']['editor-font-sizes'] );
     293        }
     294
     295        /**
     296         * Test when a theme doesn't support a custom color palette.
     297         *
     298         * @ticket 48798
     299         */
     300        public function test_theme_supports_editor_color_palette_false() {
     301                remove_theme_support( 'editor-color-palette' );
     302                $response = self::perform_active_theme_request();
     303
     304                $result = $response->get_data();
     305                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     306                $this->assertTrue( isset( $result[0]['theme_supports']['editor-color-palette'] ) );
     307                $this->assertFalse( $result[0]['theme_supports']['editor-color-palette'] );
     308        }
     309
     310        /**
     311         * Test when a theme supports a custom color palette.
     312         *
     313         * @ticket 48798
     314         */
     315        public function test_theme_supports_editor_color_palette_array() {
     316                remove_theme_support( 'editor-color-palette' );
     317                $wordpress_blue = array(
     318                        'name'  => 'WordPress Blue',
     319                        'slug'  => 'wordpress-blue',
     320                        'color' => '#0073AA',
     321                );
     322                add_theme_support( 'editor-color-palette', array( $wordpress_blue ) );
     323                $response = self::perform_active_theme_request();
     324
     325                $result = $response->get_data();
     326                $this->assertTrue( isset( $result[0]['theme_supports'] ) );
     327                $this->assertEquals( array( $wordpress_blue), $result[0]['theme_supports']['editor-color-palette'] );
     328        }
     329
    198330        /**
    199331         * Should include relevant data in the 'theme_supports' key.
    200332         *