Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cherry-pick bugfixes for 6.3.2 #53623

Merged
merged 22 commits into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
79e56b6
Update document title buttons radius (#53221)
jameskoster Aug 2, 2023
0524c65
Fix: Sync status overlaps for some languages in Patterns post type pa…
t-hamano Aug 3, 2023
3a9178a
Image block: Fix stretched images constrained by max-width (#53274)
ajlende Aug 3, 2023
d564a13
Image Block: Don't render `DimensionsTool` if it is not resizable (#5…
t-hamano Aug 4, 2023
baefb67
Fix missing Replace button in content-locked Image blocks (#53410)
noisysocks Aug 8, 2023
cc90b61
fix the go to for non pages by showing it only for pages (#53408)
draganescu Aug 8, 2023
340df75
Site Editor: Fix document actions label helper method (#52974)
Mamaduka Aug 9, 2023
3f0c87a
Image: Clear aspect ratio when wide aligned (#53439)
ajlende Aug 9, 2023
2c25cd2
RichText: Remove 'Footnotes' when interactive formatting is disabled …
Mamaduka Aug 10, 2023
6e1ddbf
Preserve block style variations when securing theme json (#53466)
dsas Aug 11, 2023
e46b446
Site editor: add missing i18n in `HomeTemplateDetails` (#53543)
swissspidy Aug 11, 2023
4c487cd
Fix: Snack bar not fixed on certain pages in the Site Editor (#53207)
tellthemachines Aug 14, 2023
1cb6459
Fix document title alignment in command palette button (#53224)
jameskoster Aug 2, 2023
96b6b1e
Fallback to default max viewport if layout wide size is fluid. (#53551)
tellthemachines Aug 11, 2023
d5275a5
Link Control: persist advanced settings toggle state to preferences i…
scruffian Aug 2, 2023
7605074
Add tests for fluid layout + typography (#53554)
tellthemachines Aug 11, 2023
c81f322
Fix support of sticky position in non-iframed post editor (#53540)
stokesman Aug 15, 2023
0139ded
Revert "Footnotes: Fix recursion into updating attributes when attrib…
tellthemachines Aug 16, 2023
093496a
Fix: indicator style when block moving mode (#53972)
t-hamano Aug 29, 2023
7f41dd3
Fix post editor top toolbar with custom fields in Safari (#53688)
draganescu Aug 15, 2023
6ae0c48
Set top toolbar size dynamically (#53526)
draganescu Aug 15, 2023
d67ed5e
Roll back camelCase change in 96b6b1e
ramonjd Aug 31, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/block-supports/typography.php
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ function gutenberg_get_typography_font_size_value( $preset, $should_use_fluid_ty
$fluid_settings = isset( $typography_settings['fluid'] ) && is_array( $typography_settings['fluid'] ) ? $typography_settings['fluid'] : array();

// Defaults.
$default_maximum_viewport_width = isset( $layout_settings['wideSize'] ) ? $layout_settings['wideSize'] : '1600px';
$default_maximum_viewport_width = isset( $layout_settings['wideSize'] ) && ! empty( gutenberg_get_typography_value_and_unit( $layout_settings['wideSize'] ) ) ? $layout_settings['wideSize'] : '1600px';
$default_minimum_viewport_width = '320px';
$default_minimum_font_size_factor_max = 0.75;
$default_minimum_font_size_factor_min = 0.25;
Expand Down
14 changes: 14 additions & 0 deletions lib/class-wp-theme-json-gutenberg.php
Original file line number Diff line number Diff line change
Expand Up @@ -2906,6 +2906,20 @@ public static function remove_insecure_properties( $theme_json ) {
if ( ! empty( $output ) ) {
_wp_array_set( $sanitized, $metadata['path'], $output );
}

if ( isset( $metadata['variations'] ) ) {
foreach ( $metadata['variations'] as $variation ) {
$variation_input = _wp_array_get( $theme_json, $variation['path'], array() );
if ( empty( $variation_input ) ) {
continue;
}

$variation_output = static::remove_insecure_styles( $variation_input );
if ( ! empty( $variation_output ) ) {
_wp_array_set( $sanitized, $variation['path'], $variation_output );
}
}
}
}

$setting_nodes = static::get_setting_nodes( $theme_json );
Expand Down
1 change: 1 addition & 0 deletions packages/base-styles/_z-index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ $z-layers: (
".edit-site-layout__hub": 3,
".edit-site-layout__header": 2,
".edit-site-page-header": 2,
".edit-site-page-content": 1,
".edit-site-layout__canvas-container": 2,
".edit-site-layout__sidebar": 1,
".edit-site-layout__canvas-container.is-resizing::after": 100,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* WordPress dependencies
*/
import { __experimentalUseSlotFills as useSlotFills } from '@wordpress/components';
import warning from '@wordpress/warning';

/**
* Internal dependencies
*/
import groups from './groups';

export function useHasAnyBlockControls() {
let hasAnyBlockControls = false;
for ( const group in groups ) {
// It is safe to violate the rules of hooks here as the `groups` object
// is static and will not change length between renders. Do not return
// early as that will cause the hook to be called a different number of
// times between renders.
// eslint-disable-next-line react-hooks/rules-of-hooks
if ( useHasBlockControls( group ) ) {
hasAnyBlockControls = true;
}
}
return hasAnyBlockControls;
}

export function useHasBlockControls( group = 'default' ) {
const Slot = groups[ group ]?.Slot;
const fills = useSlotFills( Slot?.__unstableName );
if ( ! Slot ) {
warning( `Unknown BlockControls group "${ group }" provided.` );
return null;
}
return !! fills?.length;
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@
.block-editor-block-list__block.is-highlighted,
.block-editor-block-list__block.is-highlighted ~ .is-multi-selected,
&.is-navigate-mode .block-editor-block-list__block.is-selected,
& .is-block-moving-mode.block-editor-block-list__block.has-child-selected,
.block-editor-block-list__block:not([contenteditable]):focus {
outline: none;

Expand Down Expand Up @@ -113,8 +112,6 @@

// Moving blocks using keyboard (Ellipsis > Move).
& .is-block-moving-mode.block-editor-block-list__block.is-selected {
box-shadow: none;
outline: none;

&::after {
content: "";
Expand All @@ -130,6 +127,8 @@
top: -$default-block-margin * 0.5;
border-radius: $radius-block-ui;
border-top: 4px solid $gray-400;
bottom: auto;
box-shadow: none;
}
}

Expand Down
10 changes: 10 additions & 0 deletions packages/block-editor/src/components/block-toolbar/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,16 @@
flex-shrink: 1;
}

@include break-medium() {
.block-editor-block-contextual-toolbar.is-fixed {
.components-toolbar,
.components-toolbar-group {
flex-shrink: 0;
}
}
}


.block-editor-rich-text__inline-format-toolbar-group {
.components-button + .components-button {
margin-left: 6px;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ import classnames from 'classnames';
* WordPress dependencies
*/
import { __ } from '@wordpress/i18n';
import { useEffect, useRef, useState } from '@wordpress/element';
import {
useLayoutEffect,
useEffect,
useRef,
useState,
} from '@wordpress/element';
import { hasBlockSupport, store as blocksStore } from '@wordpress/blocks';
import { useSelect } from '@wordpress/data';
import {
Expand All @@ -25,6 +30,7 @@ import NavigableToolbar from '../navigable-toolbar';
import BlockToolbar from '../block-toolbar';
import { store as blockEditorStore } from '../../store';
import { unlock } from '../../lock-unlock';
import { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';

function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
// When the toolbar is fixed it can be collapsed
Expand All @@ -34,10 +40,10 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
const isLargeViewport = useViewportMatch( 'medium' );
const {
blockType,
blockEditingMode,
hasParents,
showParentSelector,
selectedBlockClientId,
isContentOnly,
} = useSelect( ( select ) => {
const {
getBlockName,
Expand All @@ -58,9 +64,8 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
blockType:
_selectedBlockClientId &&
getBlockType( getBlockName( _selectedBlockClientId ) ),
blockEditingMode: getBlockEditingMode( _selectedBlockClientId ),
hasParents: parents.length,
isContentOnly:
getBlockEditingMode( _selectedBlockClientId ) === 'contentOnly',
showParentSelector:
parentBlockType &&
getBlockEditingMode( firstParentClientId ) === 'default' &&
Expand All @@ -78,10 +83,84 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
setIsCollapsed( false );
}, [ selectedBlockClientId ] );

const isLargerThanTabletViewport = useViewportMatch( 'large', '>=' );
const isFullscreen =
document.body.classList.contains( 'is-fullscreen-mode' );

useLayoutEffect( () => {
// don't do anything if not fixed toolbar
if ( ! isFixed || ! blockType ) {
return;
}

const blockToolbar = document.querySelector(
'.block-editor-block-contextual-toolbar'
);

if ( ! blockToolbar ) {
return;
}

if ( ! isLargerThanTabletViewport ) {
// set the width of the toolbar to auto
blockToolbar.style = {};
return;
}

if ( isCollapsed ) {
// set the width of the toolbar to auto
blockToolbar.style.width = 'auto';
return;
}

// get the width of the pinned items in the post editor
const pinnedItems = document.querySelector(
'.edit-post-header__settings'
);

// get the width of the left header in the site editor
const leftHeader = document.querySelector(
'.edit-site-header-edit-mode__end'
);

const computedToolbarStyle = window.getComputedStyle( blockToolbar );
const computedPinnedItemsStyle = pinnedItems
? window.getComputedStyle( pinnedItems )
: false;
const computedLeftHeaderStyle = leftHeader
? window.getComputedStyle( leftHeader )
: false;

const marginLeft = parseFloat( computedToolbarStyle.marginLeft );
const pinnedItemsWidth = computedPinnedItemsStyle
? parseFloat( computedPinnedItemsStyle.width ) + 10 // 10 is the pinned items padding
: 0;
const leftHeaderWidth = computedLeftHeaderStyle
? parseFloat( computedLeftHeaderStyle.width )
: 0;

// set the new witdth of the toolbar
blockToolbar.style.width = `calc(100% - ${
leftHeaderWidth +
pinnedItemsWidth +
marginLeft +
( isFullscreen ? 0 : 160 ) // the width of the admin sidebar expanded
}px)`;
}, [
isFixed,
isLargerThanTabletViewport,
isCollapsed,
isFullscreen,
blockType,
] );

const isToolbarEnabled =
! blockType ||
hasBlockSupport( blockType, '__experimentalToolbar', true );
const hasAnyBlockControls = useHasAnyBlockControls();
if (
isContentOnly ||
( blockType &&
! hasBlockSupport( blockType, '__experimentalToolbar', true ) )
! isToolbarEnabled ||
( blockEditingMode !== 'default' && ! hasAnyBlockControls )
) {
return null;
}
Expand Down
44 changes: 34 additions & 10 deletions packages/block-editor/src/components/block-tools/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@
z-index: z-index(".block-editor-block-popover");
display: block;
width: 100%;
overflow: hidden;

.block-editor-block-toolbar {
overflow: auto;
overflow-y: hidden;
}

border: none;
border-bottom: $border-width solid $gray-200;
Expand All @@ -121,10 +127,6 @@
}
}

&:has(.block-editor-block-toolbar:empty) {
display: none;
}

// Add a scrim to the right of the collapsed button.
&.is-collapsed::after {
content: "";
Expand All @@ -137,33 +139,47 @@

// on desktop and tablet viewports the toolbar is fixed
// on top of interface header
$toolbar-margin: $grid-unit-80 * 3 - 2 * $grid-unit + $grid-unit-05;
@include break-medium() {
&.is-fixed {

// leave room for block inserter, undo and redo, list view
margin-left: $grid-unit-80 * 3 - 2 * $grid-unit + $grid-unit-05;
margin-left: $toolbar-margin;
// position on top of interface header
position: fixed;
top: $admin-bar-height + $grid-unit - $border-width;
top: $admin-bar-height;
// Don't fill up when empty
min-height: initial;
// remove the border
border-bottom: none;
// has to be flex for collapse button to fit
display: flex;

// Mimic the height of the parent, vertically align center, and provide a max-height.
height: $header-height;
align-items: center;

&.is-collapsed {
width: initial;
}

&:empty {
width: initial;
}

.is-fullscreen-mode & {
// leave room for block inserter, undo and redo, list view
// and some margin left
margin-left: $grid-unit-80 * 4 - 2 * $grid-unit;
top: $grid-unit - $border-width;

top: 0;

&.is-collapsed {
width: initial;
}

&:empty {
width: initial;
}
}

& > .block-editor-block-toolbar.is-showing-movers {
Expand Down Expand Up @@ -249,7 +265,7 @@

.show-icon-labels & {

margin-left: $grid-unit-80 + 2 * $grid-unit; // inserter and margin ;
margin-left: $grid-unit-80 + 2 * $grid-unit; // inserter and margin

.is-fullscreen-mode & {
margin-left: $grid-unit * 18; // site hub, inserter and margin
Expand Down Expand Up @@ -322,7 +338,12 @@
// except for the inserter on the left
@include break-medium() {
&.is-fixed {
width: 100%;
width: calc(100% - #{$toolbar-margin});

.show-icon-labels & {
width: calc(100% + 40px - #{$toolbar-margin}); //there are no undo, redo and list view buttons
}

}
}

Expand All @@ -332,6 +353,9 @@
@include break-large() {
&.is-fixed {
width: auto;
.show-icon-labels & {
width: auto; //there are no undo, redo and list view buttons
}
}
.is-fullscreen-mode &.is-fixed {
// in full screen mode we need to account for
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,16 @@ describe( 'typography utils', () => {
},
expected: { fluid: { maxViewPortWidth: '10px' } },
},
{
message: 'should not merge `layout.wideSize` if it is fluid',
settings: {
typography: { fluid: { minFontSize: '16px' } },
layout: { wideSize: 'clamp(1000px, 85vw, 2000px)' },
},
expected: {
fluid: { minFontSize: '16px' },
},
},
].forEach( ( { message, settings, expected } ) => {
it( `${ message }`, () => {
expect(
Expand Down