From 9232704014fec40b2e3c537a720aa1b52be9813a Mon Sep 17 00:00:00 2001 From: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com> Date: Tue, 9 Nov 2021 18:19:27 +1000 Subject: [PATCH] Apply text decoration as CSS class --- .../block-library/src/navigation/block.json | 1 + .../src/navigation/edit/index.js | 3 ++ .../block-library/src/navigation/index.php | 8 ++++- .../block-library/src/navigation/style.scss | 30 ++++++++++--------- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/packages/block-library/src/navigation/block.json b/packages/block-library/src/navigation/block.json index 931010815030e..5fdd8eb2a9f4b 100644 --- a/packages/block-library/src/navigation/block.json +++ b/packages/block-library/src/navigation/block.json @@ -93,6 +93,7 @@ "__experimentalTextTransform": true, "__experimentalFontFamily": true, "__experimentalTextDecoration": true, + "__experimentalSkipSerialization": [ "textDecoration" ], "__experimentalDefaultControls": { "fontSize": true } diff --git a/packages/block-library/src/navigation/edit/index.js b/packages/block-library/src/navigation/edit/index.js index cea0281d33e91..af4af2465ab27 100644 --- a/packages/block-library/src/navigation/edit/index.js +++ b/packages/block-library/src/navigation/edit/index.js @@ -186,6 +186,8 @@ function Navigation( { const isEntityAvailable = ! isNavigationMenuMissing && isNavigationMenuResolved; + const textDecoration = attributes.style?.typography?.textDecoration; + const blockProps = useBlockProps( { ref: navRef, className: classnames( className, { @@ -202,6 +204,7 @@ function Navigation( { 'background-color', backgroundColor?.slug ) ]: !! backgroundColor?.slug, + [ `has-text-decoration-${ textDecoration }` ]: textDecoration, } ), style: { color: ! textColor?.slug && textColor?.color, diff --git a/packages/block-library/src/navigation/index.php b/packages/block-library/src/navigation/index.php index 6f52c41c71d7d..f1d22f87c39dc 100644 --- a/packages/block-library/src/navigation/index.php +++ b/packages/block-library/src/navigation/index.php @@ -290,12 +290,18 @@ function( $block ) { if ( empty( $inner_blocks ) ) { return ''; } + + // Manually add block support text decoration as CSS class. + $text_decoration = _wp_array_get( $attributes, array( 'style', 'typography', 'textDecoration' ), null ); + $text_decoration_class = sprintf( 'has-text-decoration-%s', $text_decoration ); + $colors = block_core_navigation_build_css_colors( $attributes ); $font_sizes = block_core_navigation_build_css_font_sizes( $attributes ); $classes = array_merge( $colors['css_classes'], $font_sizes['css_classes'], - $is_responsive_menu ? array( 'is-responsive' ) : array() + $is_responsive_menu ? array( 'is-responsive' ) : array(), + $text_decoration ? array( $text_decoration_class ) : array() ); $inner_blocks_html = ''; diff --git a/packages/block-library/src/navigation/style.scss b/packages/block-library/src/navigation/style.scss index 8547d420c91b7..0d13852016d6a 100644 --- a/packages/block-library/src/navigation/style.scss +++ b/packages/block-library/src/navigation/style.scss @@ -47,25 +47,27 @@ padding: 0; } - // Force links to inherit text decoration applied to navigation block. - // The extra selector adds specificity to ensure it works when user-set. - &[style*="text-decoration"] { - .wp-block-navigation-item, - .wp-block-navigation__submenu-container { - text-decoration: inherit; + // The following rules provide class based application of user selected text + // decoration via block supports. + &.has-text-decoration-underline .wp-block-navigation-item__content { + text-decoration: underline; + + &:focus, + &:active { + text-decoration: underline; } + } - a { - text-decoration: inherit; + &.has-text-decoration-line-through .wp-block-navigation-item__content { + text-decoration: line-through; - &:focus, - &:active { - text-decoration: inherit; - } + &:focus, + &:active { + text-decoration: line-through; } } - &:not([style*="text-decoration"]) { + &:not([class*="has-text-decoration"]) { a { text-decoration: none; @@ -127,7 +129,7 @@ flex-grow: 1; // Without this, the changing to zero on hover-out can cause wrapping and - // result in an invinite hover/hover-out loop. + // result in an infinite hover/hover-out loop. white-space: nowrap; // Right-align the chevron in submenus.