diff --git a/lib/client-assets.php b/lib/client-assets.php index c1443eef31fa40..7e855e415bfdc2 100644 --- a/lib/client-assets.php +++ b/lib/client-assets.php @@ -740,6 +740,8 @@ function gutenberg_extend_block_editor_styles_html() { echo ""; } add_action( 'admin_footer-toplevel_page_gutenberg-edit-site', 'gutenberg_extend_block_editor_styles_html' ); +add_action( 'admin_footer-post.php', 'gutenberg_extend_block_editor_styles_html' ); +add_action( 'admin_footer-post-new.php', 'gutenberg_extend_block_editor_styles_html' ); /** * Adds a polyfill for object-fit in environments which do not support it. diff --git a/packages/edit-post/src/components/visual-editor/index.js b/packages/edit-post/src/components/visual-editor/index.js index 192a3edc2b0dfd..bed80afdcb5775 100644 --- a/packages/edit-post/src/components/visual-editor/index.js +++ b/packages/edit-post/src/components/visual-editor/index.js @@ -25,11 +25,13 @@ import { __unstableEditorStyles as EditorStyles, __experimentalUseEditorFeature as useEditorFeature, __experimentalLayoutStyle as LayoutStyle, + __unstableUseMouseMoveTypingReset as useMouseMoveTypingReset, + __unstableIframe as Iframe, } from '@wordpress/block-editor'; -import { Popover, Button } from '@wordpress/components'; import { useRef } from '@wordpress/element'; +import { Popover, Button } from '@wordpress/components'; import { useSelect, useDispatch } from '@wordpress/data'; -import { useMergeRefs } from '@wordpress/compose'; +import { useMergeRefs, useRefEffect } from '@wordpress/compose'; import { arrowLeft } from '@wordpress/icons'; import { __ } from '@wordpress/i18n'; @@ -39,9 +41,44 @@ import { __ } from '@wordpress/i18n'; import BlockInspectorButton from './block-inspector-button'; import { store as editPostStore } from '../../store'; -export default function VisualEditor( { styles } ) { - const ref = useRef(); +function MaybeIframe( { + children, + contentRef, + isTemplateMode, + styles, + style, +} ) { + const ref = useMouseMoveTypingReset(); + if ( ! isTemplateMode ) { + return ( + <> + +
+ { children } +
+ + ); + } + + return ( + + ); +} + +export default function VisualEditor( { styles } ) { const { deviceType, isTemplateMode } = useSelect( ( select ) => { const { isEditingTemplate, @@ -60,22 +97,20 @@ export default function VisualEditor( { styles } ) { const { getSettings } = select( blockEditorStore ); return getSettings().supportsLayout; }, [] ); + const { clearSelectedBlock } = useDispatch( blockEditorStore ); const { setIsEditingTemplate } = useDispatch( editPostStore ); const desktopCanvasStyles = { height: '100%', width: '100%', margin: 0, - // Add a constant padding for the typewritter effect. When typing at the - // bottom, there needs to be room to scroll up. - paddingBottom: hasMetaBoxes ? null : '40vh', }; const templateModeStyles = { ...desktopCanvasStyles, - borderRadius: '2px', + borderRadius: '2px 2px 0 0', border: '1px solid #ddd', - paddingBottom: null, + borderBottom: 0, }; - const resizedCanvasStyles = useResizeCanvas( deviceType ); + const resizedCanvasStyles = useResizeCanvas( deviceType, isTemplateMode ); const defaultLayout = useEditorFeature( 'layout' ); const { contentSize, wideSize } = defaultLayout || {}; const alignments = @@ -90,7 +125,16 @@ export default function VisualEditor( { styles } ) { animatedStyles = resizedCanvasStyles; } - const mergedRefs = useMergeRefs( [ + let paddingBottom; + + // Add a constant padding for the typewritter effect. When typing at the + // bottom, there needs to be room to scroll up. + if ( ! hasMetaBoxes && ! resizedCanvasStyles && ! isTemplateMode ) { + paddingBottom = '40vh'; + } + + const ref = useRef(); + const contentRef = useMergeRefs( [ ref, useClipboardHandler(), useCanvasClickRedirect(), @@ -101,12 +145,27 @@ export default function VisualEditor( { styles } ) { const blockSelectionClearerRef = useBlockSelectionClearer( true ); + // Allow scrolling "through" popovers over the canvas. This is only called + // for as long as the pointer is over a popover. Do not use React events + // because it will bubble through portals. + const toolWrapperRef = useRefEffect( ( node ) => { + function onWheel( { deltaX, deltaY } ) { + ref.current.scrollBy( deltaX, deltaY ); + } + node.addEventListener( 'wheel', onWheel ); + return () => { + node.removeEventListener( 'wheel', onWheel ); + }; + }, [] ); + return ( { themeSupportsLayout && ( @@ -115,52 +174,60 @@ export default function VisualEditor( { styles } ) { layout={ defaultLayout } /> ) } - - { isTemplateMode && ( ) } - - - - { ! isTemplateMode && ( -
- -
- ) } - -
-
-
+ + + + + + { ! isTemplateMode && ( +
+ +
+ ) } + +
+
+
+
<__unstableBlockSettingsMenuFirstItem> { ( { onClose } ) => ( diff --git a/packages/edit-post/src/store/selectors.js b/packages/edit-post/src/store/selectors.js index eece40da2f56c0..a1db999ea12667 100644 --- a/packages/edit-post/src/store/selectors.js +++ b/packages/edit-post/src/store/selectors.js @@ -313,7 +313,7 @@ export function isSavingMetaBoxes( state ) { * @return {string} Device type. */ export function __experimentalGetPreviewDeviceType( state ) { - return state.isEditingTemplate ? 'Desktop' : state.deviceType; + return state.deviceType; } /**