mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-03-02 20:52:50 +00:00
Editor: add text columns to typography support.
Adds a text columns feature to the typography block support that uses CSS `column-count` for multi-column text. Props ramonopoly, aaronrobertshaw. Fixes #58549. git-svn-id: https://develop.svn.wordpress.org/trunk@55985 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
3c365e55dc
commit
9a9a672a83
@ -10,6 +10,7 @@
|
||||
* Registers the style and typography block attributes for block types that support it.
|
||||
*
|
||||
* @since 5.6.0
|
||||
* @since 6.3.0 Added support for text-columns.
|
||||
* @access private
|
||||
*
|
||||
* @param WP_Block_Type $block_type Block Type.
|
||||
@ -30,6 +31,7 @@ function wp_register_typography_support( $block_type ) {
|
||||
$has_font_weight_support = _wp_array_get( $typography_supports, array( '__experimentalFontWeight' ), false );
|
||||
$has_letter_spacing_support = _wp_array_get( $typography_supports, array( '__experimentalLetterSpacing' ), false );
|
||||
$has_line_height_support = _wp_array_get( $typography_supports, array( 'lineHeight' ), false );
|
||||
$has_text_columns_support = _wp_array_get( $typography_supports, array( 'textColumns' ), false );
|
||||
$has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false );
|
||||
$has_text_transform_support = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false );
|
||||
|
||||
@ -39,6 +41,7 @@ function wp_register_typography_support( $block_type ) {
|
||||
|| $has_font_weight_support
|
||||
|| $has_letter_spacing_support
|
||||
|| $has_line_height_support
|
||||
|| $has_text_columns_support
|
||||
|| $has_text_decoration_support
|
||||
|| $has_text_transform_support;
|
||||
|
||||
@ -72,6 +75,7 @@ function wp_register_typography_support( $block_type ) {
|
||||
*
|
||||
* @since 5.6.0
|
||||
* @since 6.1.0 Used the style engine to generate CSS and classnames.
|
||||
* @since 6.3.0 Added support for text-columns.
|
||||
* @access private
|
||||
*
|
||||
* @param WP_Block_Type $block_type Block type.
|
||||
@ -98,6 +102,7 @@ function wp_apply_typography_support( $block_type, $block_attributes ) {
|
||||
$has_font_weight_support = _wp_array_get( $typography_supports, array( '__experimentalFontWeight' ), false );
|
||||
$has_letter_spacing_support = _wp_array_get( $typography_supports, array( '__experimentalLetterSpacing' ), false );
|
||||
$has_line_height_support = _wp_array_get( $typography_supports, array( 'lineHeight' ), false );
|
||||
$has_text_columns_support = _wp_array_get( $typography_supports, array( 'textColumns' ), false );
|
||||
$has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false );
|
||||
$has_text_transform_support = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false );
|
||||
|
||||
@ -107,6 +112,7 @@ function wp_apply_typography_support( $block_type, $block_attributes ) {
|
||||
$should_skip_font_style = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontStyle' );
|
||||
$should_skip_font_weight = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontWeight' );
|
||||
$should_skip_line_height = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'lineHeight' );
|
||||
$should_skip_text_columns = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textColumns' );
|
||||
$should_skip_text_decoration = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textDecoration' );
|
||||
$should_skip_text_transform = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textTransform' );
|
||||
$should_skip_letter_spacing = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'letterSpacing' );
|
||||
@ -162,6 +168,10 @@ function wp_apply_typography_support( $block_type, $block_attributes ) {
|
||||
$typography_block_styles['lineHeight'] = _wp_array_get( $block_attributes, array( 'style', 'typography', 'lineHeight' ) );
|
||||
}
|
||||
|
||||
if ( $has_text_columns_support && ! $should_skip_text_columns && isset( $block_attributes['style']['typography']['textColumns'] ) ) {
|
||||
$typography_block_styles['textColumns'] = _wp_array_get( $block_attributes, array( 'style', 'typography', 'textColumns' ), null );
|
||||
}
|
||||
|
||||
if (
|
||||
$has_text_decoration_support &&
|
||||
! $should_skip_text_decoration &&
|
||||
|
||||
@ -201,6 +201,7 @@ class WP_Theme_JSON {
|
||||
* `--wp--style--root--padding-*`, and `box-shadow` properties,
|
||||
* removed the `--wp--style--block-gap` property.
|
||||
* @since 6.2.0 Added `outline-*`, and `min-height` properties.
|
||||
* @since 6.3.0 Added `column-count` property.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
@ -228,6 +229,7 @@ class WP_Theme_JSON {
|
||||
'border-left-width' => array( 'border', 'left', 'width' ),
|
||||
'border-left-style' => array( 'border', 'left', 'style' ),
|
||||
'color' => array( 'color', 'text' ),
|
||||
'column-count' => array( 'typography', 'textColumns' ),
|
||||
'font-family' => array( 'typography', 'fontFamily' ),
|
||||
'font-size' => array( 'typography', 'fontSize' ),
|
||||
'font-style' => array( 'typography', 'fontStyle' ),
|
||||
@ -334,6 +336,8 @@ class WP_Theme_JSON {
|
||||
* @since 6.1.0 Added `layout.definitions` and `useRootPaddingAwareAlignments`.
|
||||
* @since 6.2.0 Added `dimensions.minHeight`, 'shadow.presets', 'shadow.defaultPresets',
|
||||
* `position.fixed` and `position.sticky`.
|
||||
* @since 6.3.0 Added support for `typography.textColumns`.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
const VALID_SETTINGS = array(
|
||||
@ -395,6 +399,7 @@ class WP_Theme_JSON {
|
||||
'fontWeight' => null,
|
||||
'letterSpacing' => null,
|
||||
'lineHeight' => null,
|
||||
'textColumns' => null,
|
||||
'textDecoration' => null,
|
||||
'textTransform' => null,
|
||||
),
|
||||
@ -411,6 +416,7 @@ class WP_Theme_JSON {
|
||||
* added new property `shadow`,
|
||||
* updated `blockGap` to be allowed at any level.
|
||||
* @since 6.2.0 Added `outline`, and `minHeight` properties.
|
||||
* @since 6.3.0 Added support for `typography.textColumns`.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
@ -455,6 +461,7 @@ class WP_Theme_JSON {
|
||||
'fontWeight' => null,
|
||||
'letterSpacing' => null,
|
||||
'lineHeight' => null,
|
||||
'textColumns' => null,
|
||||
'textDecoration' => null,
|
||||
'textTransform' => null,
|
||||
),
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
*
|
||||
* @access private
|
||||
* @since 6.1.0
|
||||
* @since 6.3.0 Added support for text-columns.
|
||||
*/
|
||||
#[AllowDynamicProperties]
|
||||
final class WP_Style_Engine {
|
||||
@ -217,6 +218,12 @@ final class WP_Style_Engine {
|
||||
),
|
||||
'path' => array( 'typography', 'lineHeight' ),
|
||||
),
|
||||
'textColumns' => array(
|
||||
'property_keys' => array(
|
||||
'default' => 'column-count',
|
||||
),
|
||||
'path' => array( 'typography', 'textColumns' ),
|
||||
),
|
||||
'textDecoration' => array(
|
||||
'property_keys' => array(
|
||||
'default' => 'text-decoration',
|
||||
|
||||
@ -25,6 +25,7 @@ class Tests_wpStyleEngine extends WP_UnitTestCase {
|
||||
* Tests generating block styles and classnames based on various manifestations of the $block_styles argument.
|
||||
*
|
||||
* @ticket 56467
|
||||
* @ticket 58549
|
||||
*
|
||||
* @covers ::wp_style_engine_get_styles
|
||||
*
|
||||
@ -189,6 +190,7 @@ class Tests_wpStyleEngine extends WP_UnitTestCase {
|
||||
'fontStyle' => 'italic',
|
||||
'fontWeight' => '800',
|
||||
'lineHeight' => '1.3',
|
||||
'textColumns' => '2',
|
||||
'textDecoration' => 'underline',
|
||||
'textTransform' => 'uppercase',
|
||||
'letterSpacing' => '2',
|
||||
@ -196,13 +198,14 @@ class Tests_wpStyleEngine extends WP_UnitTestCase {
|
||||
),
|
||||
'options' => null,
|
||||
'expected_output' => array(
|
||||
'css' => 'font-size:clamp(2em, 2vw, 4em);font-family:Roboto,Oxygen-Sans,Ubuntu,sans-serif;font-style:italic;font-weight:800;line-height:1.3;text-decoration:underline;text-transform:uppercase;letter-spacing:2;',
|
||||
'css' => 'font-size:clamp(2em, 2vw, 4em);font-family:Roboto,Oxygen-Sans,Ubuntu,sans-serif;font-style:italic;font-weight:800;line-height:1.3;column-count:2;text-decoration:underline;text-transform:uppercase;letter-spacing:2;',
|
||||
'declarations' => array(
|
||||
'font-size' => 'clamp(2em, 2vw, 4em)',
|
||||
'font-family' => 'Roboto,Oxygen-Sans,Ubuntu,sans-serif',
|
||||
'font-style' => 'italic',
|
||||
'font-weight' => '800',
|
||||
'line-height' => '1.3',
|
||||
'column-count' => '2',
|
||||
'text-decoration' => 'underline',
|
||||
'text-transform' => 'uppercase',
|
||||
'letter-spacing' => '2',
|
||||
|
||||
@ -476,6 +476,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
* @ticket 53175
|
||||
* @ticket 54336
|
||||
* @ticket 56611
|
||||
* @ticket 58549
|
||||
*/
|
||||
public function test_get_stylesheet() {
|
||||
$theme_json = new WP_Theme_JSON(
|
||||
@ -548,7 +549,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
),
|
||||
),
|
||||
'blocks' => array(
|
||||
'core/group' => array(
|
||||
'core/group' => array(
|
||||
'color' => array(
|
||||
'gradient' => 'var:preset|gradient|custom-gradient',
|
||||
),
|
||||
@ -566,7 +567,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
'padding' => '24px',
|
||||
),
|
||||
),
|
||||
'core/heading' => array(
|
||||
'core/heading' => array(
|
||||
'color' => array(
|
||||
'text' => '#123456',
|
||||
),
|
||||
@ -582,7 +583,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
),
|
||||
),
|
||||
),
|
||||
'core/post-date' => array(
|
||||
'core/post-date' => array(
|
||||
'color' => array(
|
||||
'text' => '#123456',
|
||||
),
|
||||
@ -595,7 +596,12 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
),
|
||||
),
|
||||
),
|
||||
'core/image' => array(
|
||||
'core/post-excerpt' => array(
|
||||
'typography' => array(
|
||||
'textColumns' => 2,
|
||||
),
|
||||
),
|
||||
'core/image' => array(
|
||||
'border' => array(
|
||||
'radius' => array(
|
||||
'topLeft' => '10px',
|
||||
@ -621,7 +627,7 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
);
|
||||
|
||||
$variables = "body{--wp--preset--color--grey: grey;--wp--preset--gradient--custom-gradient: linear-gradient(135deg,rgba(0,0,0) 0%,rgb(0,0,0) 100%);--wp--preset--duotone--custom-duotone: url('#wp-duotone-custom-duotone');--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;}";
|
||||
$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-element-button, .wp-block-button__link{box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.66);}.wp-block-group{background: var(--wp--preset--gradient--custom-gradient);border-radius: 10px;padding: 24px;}.wp-block-group a:where(:not(.wp-element-button)){color: #111;}.wp-block-heading{color: #123456;}.wp-block-heading 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{margin-bottom: 30px;}.wp-block-image img, .wp-block-image .components-placeholder{filter: var(--wp--preset--duotone--custom-duotone);}.wp-block-image img, .wp-block-image .wp-block-image__crop-area{border-top-left-radius: 10px;border-bottom-right-radius: 1em;}';
|
||||
$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-element-button, .wp-block-button__link{box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.66);}.wp-block-group{background: var(--wp--preset--gradient--custom-gradient);border-radius: 10px;padding: 24px;}.wp-block-group a:where(:not(.wp-element-button)){color: #111;}.wp-block-heading{color: #123456;}.wp-block-heading 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-post-excerpt{column-count: 2;}.wp-block-image{margin-bottom: 30px;}.wp-block-image img, .wp-block-image .components-placeholder{filter: var(--wp--preset--duotone--custom-duotone);}.wp-block-image img, .wp-block-image .wp-block-image__crop-area{border-top-left-radius: 10px;border-bottom-right-radius: 1em;}';
|
||||
$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-custom-gradient-gradient-background{background: var(--wp--preset--gradient--custom-gradient) !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;}';
|
||||
$all = $variables . $styles . $presets;
|
||||
$this->assertSame( $all, $theme_json->get_stylesheet() );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user