@wordpress/block-library 10.1.1-next.v.202607070741.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/build/accordion/block.json +1 -0
- package/build/button/edit.cjs +18 -8
- package/build/button/edit.cjs.map +2 -2
- package/build/cover/block.json +11 -0
- package/build/cover/edit/block-controls.cjs +11 -4
- package/build/cover/edit/block-controls.cjs.map +2 -2
- package/build/cover/edit/embed-video-url-input.cjs +5 -3
- package/build/cover/edit/embed-video-url-input.cjs.map +3 -3
- package/build/cover/edit/index.cjs +1 -1
- package/build/cover/edit/index.cjs.map +2 -2
- package/build/cover/embed-video-utils.cjs +17 -7
- package/build/cover/embed-video-utils.cjs.map +2 -2
- package/build/details/transforms.cjs +1 -3
- package/build/details/transforms.cjs.map +2 -2
- package/build/embed/embed-placeholder.cjs +0 -1
- package/build/embed/embed-placeholder.cjs.map +2 -2
- package/build/file/edit.cjs +4 -3
- package/build/file/edit.cjs.map +2 -2
- package/build/file/transforms.cjs +25 -60
- package/build/file/transforms.cjs.map +2 -2
- package/build/gallery/block.json +4 -2
- package/build/gallery/edit.cjs +1 -1
- package/build/gallery/edit.cjs.map +3 -3
- package/build/gallery/gap-styles.cjs +49 -13
- package/build/gallery/gap-styles.cjs.map +3 -3
- package/build/group/transforms.cjs +1 -1
- package/build/group/transforms.cjs.map +2 -2
- package/build/icon/components/custom-inserter/icon-grid.cjs +25 -12
- package/build/icon/components/custom-inserter/icon-grid.cjs.map +2 -2
- package/build/icon/components/custom-inserter/index.cjs +100 -31
- package/build/icon/components/custom-inserter/index.cjs.map +3 -3
- package/build/icon/edit.cjs +11 -12
- package/build/icon/edit.cjs.map +2 -2
- package/build/image/block.json +1 -1
- package/build/image/edit.cjs +0 -34
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +4 -23
- package/build/image/image.cjs.map +3 -3
- package/build/image/transforms.cjs +78 -0
- package/build/image/transforms.cjs.map +3 -3
- package/build/index.cjs +18 -8
- package/build/index.cjs.map +2 -2
- package/build/latest-posts/edit.cjs +5 -8
- package/build/latest-posts/edit.cjs.map +2 -2
- package/build/list-item/edit.cjs +1 -1
- package/build/list-item/edit.cjs.map +2 -2
- package/build/list-item/hooks/use-enter.cjs +14 -17
- package/build/list-item/hooks/use-enter.cjs.map +3 -3
- package/build/list-item/hooks/use-space.cjs +3 -2
- package/build/list-item/hooks/use-space.cjs.map +3 -3
- package/build/paragraph/block.json +1 -0
- package/build/paragraph/use-enter.cjs +3 -7
- package/build/paragraph/use-enter.cjs.map +3 -3
- package/build/playlist/block.json +29 -10
- package/build/playlist/edit.cjs +216 -14
- package/build/playlist/edit.cjs.map +3 -3
- package/build/playlist/index.cjs +1 -1
- package/build/playlist/index.cjs.map +2 -2
- package/build/playlist/utils.cjs +19 -5
- package/build/playlist/utils.cjs.map +2 -2
- package/build/playlist/view.cjs +83 -13
- package/build/playlist/view.cjs.map +2 -2
- package/build/playlist-track/block.json +4 -2
- package/build/playlist-track/edit.cjs +94 -64
- package/build/playlist-track/edit.cjs.map +2 -2
- package/build/post-content/block.json +1 -0
- package/build/post-template/block.json +2 -1
- package/build/post-template/edit.cjs +10 -1
- package/build/post-template/edit.cjs.map +2 -2
- package/build/pullquote/block.json +3 -1
- package/build/query/block.json +3 -2
- package/build/query/edit/inspector-controls/index.cjs +38 -4
- package/build/query/edit/inspector-controls/index.cjs.map +2 -2
- package/build/query/edit/inspector-controls/offset-controls.cjs +0 -1
- package/build/query/edit/inspector-controls/offset-controls.cjs.map +2 -2
- package/build/query/edit/inspector-controls/pages-control.cjs +0 -1
- package/build/query/edit/inspector-controls/pages-control.cjs.map +2 -2
- package/build/query/edit/query-content.cjs +10 -3
- package/build/query/edit/query-content.cjs.map +2 -2
- package/build/query/index.cjs +2 -1
- package/build/query/index.cjs.map +2 -2
- package/build/quote/block.json +3 -1
- package/build/quote/transforms.cjs +1 -3
- package/build/quote/transforms.cjs.map +2 -2
- package/build/rss/edit.cjs +0 -1
- package/build/rss/edit.cjs.map +2 -2
- package/build/tab-list/block.json +2 -2
- package/build/tab-list/edit.cjs +65 -11
- package/build/tab-list/edit.cjs.map +3 -3
- package/build/tab-panel/block.json +1 -6
- package/build/tab-panel/edit.cjs +15 -15
- package/build/tab-panel/edit.cjs.map +2 -2
- package/build/tab-panels/block.json +0 -1
- package/build/tabs/block.json +0 -5
- package/build/tabs/edit.cjs +4 -39
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/use-tab-list-items-sync.cjs +19 -1
- package/build/tabs/use-tab-list-items-sync.cjs.map +2 -2
- package/build/term-name/block.json +1 -3
- package/build/term-name/deprecated.cjs +105 -0
- package/build/term-name/deprecated.cjs.map +7 -0
- package/build/term-name/edit.cjs +11 -37
- package/build/term-name/edit.cjs.map +3 -3
- package/build/term-name/index.cjs +3 -1
- package/build/term-name/index.cjs.map +3 -3
- package/build/utils/waveform-player.cjs +138 -22
- package/build/utils/waveform-player.cjs.map +2 -2
- package/build/utils/waveform-utils.cjs +315 -17
- package/build/utils/waveform-utils.cjs.map +2 -2
- package/build/video/edit.cjs +2 -11
- package/build/video/edit.cjs.map +3 -3
- package/build-module/accordion/block.json +1 -0
- package/build-module/button/edit.mjs +19 -14
- package/build-module/button/edit.mjs.map +2 -2
- package/build-module/cover/block.json +11 -0
- package/build-module/cover/edit/block-controls.mjs +11 -4
- package/build-module/cover/edit/block-controls.mjs.map +2 -2
- package/build-module/cover/edit/embed-video-url-input.mjs +5 -4
- package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
- package/build-module/cover/edit/index.mjs +1 -1
- package/build-module/cover/edit/index.mjs.map +2 -2
- package/build-module/cover/embed-video-utils.mjs +16 -7
- package/build-module/cover/embed-video-utils.mjs.map +2 -2
- package/build-module/details/transforms.mjs +2 -7
- package/build-module/details/transforms.mjs.map +2 -2
- package/build-module/embed/embed-placeholder.mjs +0 -1
- package/build-module/embed/embed-placeholder.mjs.map +2 -2
- package/build-module/file/edit.mjs +4 -3
- package/build-module/file/edit.mjs.map +2 -2
- package/build-module/file/transforms.mjs +25 -60
- package/build-module/file/transforms.mjs.map +2 -2
- package/build-module/gallery/block.json +4 -2
- package/build-module/gallery/edit.mjs +3 -3
- package/build-module/gallery/edit.mjs.map +2 -2
- package/build-module/gallery/gap-styles.mjs +53 -14
- package/build-module/gallery/gap-styles.mjs.map +2 -2
- package/build-module/group/transforms.mjs +2 -5
- package/build-module/group/transforms.mjs.map +2 -2
- package/build-module/icon/components/custom-inserter/icon-grid.mjs +25 -12
- package/build-module/icon/components/custom-inserter/icon-grid.mjs.map +2 -2
- package/build-module/icon/components/custom-inserter/index.mjs +102 -33
- package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
- package/build-module/icon/edit.mjs +11 -12
- package/build-module/icon/edit.mjs.map +2 -2
- package/build-module/image/block.json +1 -1
- package/build-module/image/edit.mjs +0 -34
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +4 -13
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/image/transforms.mjs +78 -0
- package/build-module/image/transforms.mjs.map +2 -2
- package/build-module/index.mjs +18 -8
- package/build-module/index.mjs.map +2 -2
- package/build-module/latest-posts/edit.mjs +5 -8
- package/build-module/latest-posts/edit.mjs.map +2 -2
- package/build-module/list-item/edit.mjs +1 -1
- package/build-module/list-item/edit.mjs.map +2 -2
- package/build-module/list-item/hooks/use-enter.mjs +15 -21
- package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
- package/build-module/list-item/hooks/use-space.mjs +4 -6
- package/build-module/list-item/hooks/use-space.mjs.map +2 -2
- package/build-module/paragraph/block.json +1 -0
- package/build-module/paragraph/use-enter.mjs +4 -11
- package/build-module/paragraph/use-enter.mjs.map +2 -2
- package/build-module/playlist/block.json +29 -10
- package/build-module/playlist/edit.mjs +220 -16
- package/build-module/playlist/edit.mjs.map +2 -2
- package/build-module/playlist/index.mjs +1 -1
- package/build-module/playlist/index.mjs.map +2 -2
- package/build-module/playlist/utils.mjs +17 -4
- package/build-module/playlist/utils.mjs.map +2 -2
- package/build-module/playlist/view.mjs +89 -14
- package/build-module/playlist/view.mjs.map +2 -2
- package/build-module/playlist-track/block.json +4 -2
- package/build-module/playlist-track/edit.mjs +96 -65
- package/build-module/playlist-track/edit.mjs.map +2 -2
- package/build-module/post-content/block.json +1 -0
- package/build-module/post-template/block.json +2 -1
- package/build-module/post-template/edit.mjs +10 -1
- package/build-module/post-template/edit.mjs.map +2 -2
- package/build-module/pullquote/block.json +3 -1
- package/build-module/query/block.json +3 -2
- package/build-module/query/edit/inspector-controls/index.mjs +40 -5
- package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/offset-controls.mjs +0 -1
- package/build-module/query/edit/inspector-controls/offset-controls.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/pages-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/pages-control.mjs.map +2 -2
- package/build-module/query/edit/query-content.mjs +10 -3
- package/build-module/query/edit/query-content.mjs.map +2 -2
- package/build-module/query/index.mjs +2 -1
- package/build-module/query/index.mjs.map +2 -2
- package/build-module/quote/block.json +3 -1
- package/build-module/quote/transforms.mjs +2 -4
- package/build-module/quote/transforms.mjs.map +2 -2
- package/build-module/rss/edit.mjs +0 -1
- package/build-module/rss/edit.mjs.map +2 -2
- package/build-module/tab-list/block.json +2 -2
- package/build-module/tab-list/edit.mjs +72 -13
- package/build-module/tab-list/edit.mjs.map +2 -2
- package/build-module/tab-panel/block.json +1 -6
- package/build-module/tab-panel/edit.mjs +16 -16
- package/build-module/tab-panel/edit.mjs.map +2 -2
- package/build-module/tab-panels/block.json +0 -1
- package/build-module/tabs/block.json +0 -5
- package/build-module/tabs/edit.mjs +5 -45
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/use-tab-list-items-sync.mjs +19 -1
- package/build-module/tabs/use-tab-list-items-sync.mjs.map +2 -2
- package/build-module/term-name/block.json +1 -3
- package/build-module/term-name/deprecated.mjs +74 -0
- package/build-module/term-name/deprecated.mjs.map +7 -0
- package/build-module/term-name/edit.mjs +11 -28
- package/build-module/term-name/edit.mjs.map +2 -2
- package/build-module/term-name/index.mjs +3 -1
- package/build-module/term-name/index.mjs.map +2 -2
- package/build-module/utils/waveform-player.mjs +144 -23
- package/build-module/utils/waveform-player.mjs.map +2 -2
- package/build-module/utils/waveform-utils.mjs +310 -16
- package/build-module/utils/waveform-utils.mjs.map +2 -2
- package/build-module/video/edit.mjs +2 -11
- package/build-module/video/edit.mjs.map +2 -2
- package/build-style/editor-rtl.css +46 -21
- package/build-style/editor.css +46 -21
- package/build-style/icon/editor-rtl.css +80 -7
- package/build-style/icon/editor.css +80 -7
- package/build-style/more/editor-rtl.css +2 -2
- package/build-style/more/editor.css +2 -2
- package/build-style/navigation/editor-rtl.css +3 -4
- package/build-style/navigation/editor.css +3 -4
- package/build-style/navigation-link/editor-rtl.css +1 -1
- package/build-style/navigation-link/editor.css +1 -1
- package/build-style/nextpage/editor-rtl.css +2 -2
- package/build-style/nextpage/editor.css +2 -2
- package/build-style/playlist/editor-rtl.css +6 -0
- package/build-style/playlist/editor.css +6 -0
- package/build-style/playlist/style-rtl.css +37 -1
- package/build-style/playlist/style.css +37 -1
- package/build-style/playlist-track/style-rtl.css +10 -0
- package/build-style/playlist-track/style.css +10 -0
- package/build-style/style-rtl.css +47 -1
- package/build-style/style.css +47 -1
- package/build-style/video/editor-rtl.css +1 -1
- package/build-style/video/editor.css +1 -1
- package/build-types/table-of-contents/list.d.ts +1 -1
- package/build-types/table-of-contents/list.d.ts.map +1 -1
- package/package.json +46 -44
- package/src/accordion/README.md +1 -0
- package/src/accordion/block.json +1 -0
- package/src/button/edit.js +21 -15
- package/src/cover/README.md +60 -0
- package/src/cover/block.json +11 -0
- package/src/cover/edit/block-controls.js +21 -11
- package/src/cover/edit/embed-video-url-input.js +5 -4
- package/src/cover/edit/index.js +9 -11
- package/src/cover/embed-video-utils.js +38 -13
- package/src/details/transforms.js +2 -7
- package/src/embed/embed-placeholder.js +0 -1
- package/src/file/edit.js +8 -8
- package/src/file/transforms.js +28 -60
- package/src/gallery/README.md +1 -1
- package/src/gallery/block.json +4 -2
- package/src/gallery/edit.js +3 -3
- package/src/gallery/gap-styles.js +79 -20
- package/src/gallery/index.php +103 -43
- package/src/group/transforms.js +2 -5
- package/src/icon/components/custom-inserter/icon-grid.js +40 -11
- package/src/icon/components/custom-inserter/index.js +98 -25
- package/src/icon/edit.js +11 -17
- package/src/icon/editor.scss +33 -8
- package/src/image/README.md +1 -1
- package/src/image/block.json +1 -1
- package/src/image/edit.js +0 -52
- package/src/image/editor.scss +2 -0
- package/src/image/image.js +19 -24
- package/src/image/transforms.js +128 -0
- package/src/index.js +19 -7
- package/src/latest-posts/edit.js +5 -8
- package/src/latest-posts/index.php +46 -16
- package/src/list-item/edit.js +1 -1
- package/src/list-item/hooks/use-enter.js +15 -22
- package/src/list-item/hooks/use-space.js +4 -6
- package/src/media-text/editor.scss +1 -0
- package/src/more/editor.scss +1 -1
- package/src/navigation/editor.scss +1 -2
- package/src/navigation-link/editor.scss +1 -1
- package/src/navigation-link/index.php +6 -3
- package/src/navigation-submenu/index.php +6 -3
- package/src/nextpage/editor.scss +1 -1
- package/src/paragraph/README.md +1 -0
- package/src/paragraph/block.json +1 -0
- package/src/paragraph/use-enter.js +4 -11
- package/src/playlist/README.md +17 -18
- package/src/playlist/block.json +29 -10
- package/src/playlist/edit.js +247 -15
- package/src/playlist/editor.scss +6 -0
- package/src/playlist/index.js +1 -1
- package/src/playlist/index.php +58 -14
- package/src/playlist/style.scss +51 -1
- package/src/playlist/test/edit.js +13 -2
- package/src/playlist/utils.js +25 -7
- package/src/playlist/view.js +97 -16
- package/src/playlist-track/README.md +3 -3
- package/src/playlist-track/block.json +4 -2
- package/src/playlist-track/edit.js +94 -70
- package/src/playlist-track/index.php +20 -6
- package/src/playlist-track/style.scss +10 -0
- package/src/playlist-track/test/edit.js +169 -0
- package/src/post-content/README.md +1 -0
- package/src/post-content/block.json +1 -0
- package/src/post-template/README.md +1 -0
- package/src/post-template/block.json +2 -1
- package/src/post-template/edit.js +9 -0
- package/src/pullquote/README.md +1 -0
- package/src/pullquote/block.json +3 -1
- package/src/query/README.md +2 -1
- package/src/query/block.json +3 -2
- package/src/query/edit/inspector-controls/index.js +43 -3
- package/src/query/edit/inspector-controls/offset-controls.js +0 -1
- package/src/query/edit/inspector-controls/pages-control.js +0 -1
- package/src/query/edit/query-content.js +19 -3
- package/src/query/index.js +1 -0
- package/src/quote/README.md +1 -0
- package/src/quote/block.json +3 -1
- package/src/quote/transforms.js +2 -4
- package/src/rss/edit.js +0 -1
- package/src/rss/index.php +1 -1
- package/src/tab-list/README.md +4 -5
- package/src/tab-list/block.json +2 -2
- package/src/tab-list/edit.js +90 -28
- package/src/tab-list/index.php +9 -4
- package/src/tab-panel/README.md +4 -6
- package/src/tab-panel/block.json +1 -6
- package/src/tab-panel/edit.js +19 -24
- package/src/tab-panels/README.md +5 -3
- package/src/tab-panels/block.json +0 -1
- package/src/tabs/README.md +18 -9
- package/src/tabs/block.json +0 -5
- package/src/tabs/edit.js +7 -64
- package/src/tabs/use-tab-list-items-sync.js +24 -4
- package/src/template-part/index.php +1 -16
- package/src/term-name/README.md +1 -1
- package/src/term-name/block.json +1 -3
- package/src/term-name/deprecated.js +74 -0
- package/src/term-name/edit.js +2 -18
- package/src/term-name/index.js +2 -0
- package/src/utils/media-control.scss +1 -5
- package/src/utils/test/waveform-player.js +297 -34
- package/src/utils/test/waveform-utils.js +410 -5
- package/src/utils/waveform-player.js +189 -59
- package/src/utils/waveform-utils.js +443 -40
- package/src/video/edit.js +0 -8
- package/src/video/editor.scss +1 -1
- package/build/image/animated-gif-convert-control.cjs +0 -105
- package/build/image/animated-gif-convert-control.cjs.map +0 -7
- package/build/utils/gif-conversion-attributes.cjs +0 -40
- package/build/utils/gif-conversion-attributes.cjs.map +0 -7
- package/build/video/gif-restore-control.cjs +0 -73
- package/build/video/gif-restore-control.cjs.map +0 -7
- package/build-module/image/animated-gif-convert-control.mjs +0 -87
- package/build-module/image/animated-gif-convert-control.mjs.map +0 -7
- package/build-module/utils/gif-conversion-attributes.mjs +0 -15
- package/build-module/utils/gif-conversion-attributes.mjs.map +0 -7
- package/build-module/video/gif-restore-control.mjs +0 -55
- package/build-module/video/gif-restore-control.mjs.map +0 -7
- package/src/image/animated-gif-convert-control.js +0 -135
- package/src/image/test/animated-gif-convert-control.js +0 -276
- package/src/utils/gif-conversion-attributes.js +0 -30
- package/src/utils/test/gif-conversion-attributes.js +0 -60
- package/src/video/gif-restore-control.js +0 -92
package/src/image/image.js
CHANGED
|
@@ -69,7 +69,6 @@ import {
|
|
|
69
69
|
getStyleStateKey,
|
|
70
70
|
} from '../utils/style-state';
|
|
71
71
|
import { useOpenImageMediaEditorModal } from './use-open-image-media-editor-modal';
|
|
72
|
-
import AnimatedGifConvertControl from './animated-gif-convert-control';
|
|
73
72
|
import {
|
|
74
73
|
MIN_SIZE,
|
|
75
74
|
ALLOWED_MEDIA_TYPES,
|
|
@@ -854,21 +853,23 @@ export default function Image( {
|
|
|
854
853
|
|
|
855
854
|
const showBlockControls = showUrlInput || allowCrop || showCoverControls;
|
|
856
855
|
|
|
857
|
-
const
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
<
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
856
|
+
const mediaControls = isSingleSelected && ! lockUrlControls && (
|
|
857
|
+
<>
|
|
858
|
+
{ /* For contentOnly mode, put this button in its own area so it has borders around it. */ }
|
|
859
|
+
<BlockControls group={ isContentOnlyMode ? 'inline' : 'other' }>
|
|
860
|
+
<MediaReplaceFlow
|
|
861
|
+
mediaId={ id }
|
|
862
|
+
mediaURL={ url }
|
|
863
|
+
allowedTypes={ ALLOWED_MEDIA_TYPES }
|
|
864
|
+
onSelect={ onSelectImage }
|
|
865
|
+
onSelectURL={ onSelectURL }
|
|
866
|
+
onError={ onUploadError }
|
|
867
|
+
name={ ! url ? __( 'Add image' ) : __( 'Replace' ) }
|
|
868
|
+
onReset={ () => onSelectImage( undefined ) }
|
|
869
|
+
variant="toolbar"
|
|
870
|
+
/>
|
|
871
|
+
</BlockControls>
|
|
872
|
+
</>
|
|
872
873
|
);
|
|
873
874
|
|
|
874
875
|
const hasDataFormBlockFields =
|
|
@@ -1355,7 +1356,7 @@ export default function Image( {
|
|
|
1355
1356
|
if ( ! url && ! temporaryURL ) {
|
|
1356
1357
|
return (
|
|
1357
1358
|
<>
|
|
1358
|
-
{
|
|
1359
|
+
{ mediaControls }
|
|
1359
1360
|
{ controls }
|
|
1360
1361
|
</>
|
|
1361
1362
|
);
|
|
@@ -1390,13 +1391,7 @@ export default function Image( {
|
|
|
1390
1391
|
|
|
1391
1392
|
return (
|
|
1392
1393
|
<>
|
|
1393
|
-
{
|
|
1394
|
-
<AnimatedGifConvertControl
|
|
1395
|
-
attributes={ attributes }
|
|
1396
|
-
clientId={ clientId }
|
|
1397
|
-
/>
|
|
1398
|
-
) }
|
|
1399
|
-
{ mediaReplaceFlow }
|
|
1394
|
+
{ mediaControls }
|
|
1400
1395
|
{ controls }
|
|
1401
1396
|
{ featuredImageControl }
|
|
1402
1397
|
{ img }
|
package/src/image/transforms.js
CHANGED
|
@@ -3,6 +3,95 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { createBlobURL, isBlobURL } from '@wordpress/blob';
|
|
5
5
|
import { createBlock, getBlockAttributes } from '@wordpress/blocks';
|
|
6
|
+
import { select } from '@wordpress/data';
|
|
7
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns the subset of block attributes that should be carried over when
|
|
11
|
+
* converting an animated-GIF Image block into its converted Video block.
|
|
12
|
+
*
|
|
13
|
+
* The conversion swaps one block for another via `createBlock`, which would
|
|
14
|
+
* otherwise drop everything the author set on the original block. This carries
|
|
15
|
+
* the attributes both blocks support: block alignment, the HTML anchor, custom
|
|
16
|
+
* class names, and margin spacing.
|
|
17
|
+
*
|
|
18
|
+
* Image-only attributes such as links (`href`/`linkDestination`), sizing
|
|
19
|
+
* (`sizeSlug`/`scale`), and `border`/`shadow` styles are intentionally not
|
|
20
|
+
* carried: the Video block has no equivalent, so copying them would leave
|
|
21
|
+
* attributes the target block cannot represent.
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} attributes Source block attributes.
|
|
24
|
+
* @return {Object} Attributes to spread into the converted block.
|
|
25
|
+
*/
|
|
26
|
+
function getCarriedGifConversionAttributes( attributes ) {
|
|
27
|
+
const { align, anchor, className, style } = attributes;
|
|
28
|
+
const margin = style?.spacing?.margin;
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
...( align && { align } ),
|
|
32
|
+
...( anchor && { anchor } ),
|
|
33
|
+
...( className && { className } ),
|
|
34
|
+
...( margin && { style: { spacing: { margin } } } ),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns the sideloaded video companion of an animated GIF image attachment,
|
|
40
|
+
* or `null` when the media is not a converted animated GIF.
|
|
41
|
+
*
|
|
42
|
+
* An animated GIF uploaded through the editor gets a muted, looping video
|
|
43
|
+
* transcode sideloaded next to it and recorded (as basenames) in the
|
|
44
|
+
* attachment's `media_details.animated_video` / `animated_video_poster`.
|
|
45
|
+
*
|
|
46
|
+
* Block transforms match and run synchronously, so this reads the attachment
|
|
47
|
+
* record straight from the core-data store: it only returns the companion once
|
|
48
|
+
* the record is resolved. The Image block resolves the record while the block
|
|
49
|
+
* is selected, which is also when the block switcher can offer the transform.
|
|
50
|
+
*
|
|
51
|
+
* @param {number} id Image attachment ID.
|
|
52
|
+
* @param {string} url Image block URL, used to cheaply skip non-GIF media.
|
|
53
|
+
* @return {Object|null} Companion details (absolute `src`/`poster` URLs and
|
|
54
|
+
* the GIF's intrinsic `width`/`height`), or `null`.
|
|
55
|
+
*/
|
|
56
|
+
function getAnimatedGifVideoCompanion( id, url ) {
|
|
57
|
+
if ( ! id ) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
/*
|
|
61
|
+
* Only animated GIFs have a video companion. Gate on the `.gif` extension
|
|
62
|
+
* so an ordinary image never reaches into the attachment record just to
|
|
63
|
+
* discover it has no companion. Strip any query string or fragment first
|
|
64
|
+
* so a URL like `cat.gif?ver=2` still matches.
|
|
65
|
+
*/
|
|
66
|
+
const urlPath = url?.split( /[?#]/ )[ 0 ];
|
|
67
|
+
if ( ! urlPath?.toLowerCase().endsWith( '.gif' ) ) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const record = select( coreStore ).getEntityRecord(
|
|
71
|
+
'postType',
|
|
72
|
+
'attachment',
|
|
73
|
+
id,
|
|
74
|
+
{ context: 'view' }
|
|
75
|
+
);
|
|
76
|
+
const details = record?.media_details;
|
|
77
|
+
if ( ! details?.animated_video || ! record?.source_url ) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// Companion files are sideloaded next to the GIF, so they share its
|
|
81
|
+
// directory; build their URLs from the GIF's own source URL.
|
|
82
|
+
const dir = record.source_url.slice(
|
|
83
|
+
0,
|
|
84
|
+
record.source_url.lastIndexOf( '/' ) + 1
|
|
85
|
+
);
|
|
86
|
+
return {
|
|
87
|
+
src: dir + details.animated_video,
|
|
88
|
+
poster: details.animated_video_poster
|
|
89
|
+
? dir + details.animated_video_poster
|
|
90
|
+
: undefined,
|
|
91
|
+
width: details.width,
|
|
92
|
+
height: details.height,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
6
95
|
|
|
7
96
|
export function stripFirstImage( attributes, { shortcode } ) {
|
|
8
97
|
const { body } = document.implementation.createHTMLDocument( '' );
|
|
@@ -253,6 +342,45 @@ const transforms = {
|
|
|
253
342
|
},
|
|
254
343
|
},
|
|
255
344
|
],
|
|
345
|
+
to: [
|
|
346
|
+
{
|
|
347
|
+
// Offer converting an animated GIF into the Video block's "GIF"
|
|
348
|
+
// variation: a muted, looping, autoplaying video transcoded from
|
|
349
|
+
// the GIF and sideloaded next to it when it was uploaded. Only
|
|
350
|
+
// matches when that companion video exists, so ordinary images
|
|
351
|
+
// never see this transform.
|
|
352
|
+
type: 'block',
|
|
353
|
+
blocks: [ 'core/video' ],
|
|
354
|
+
isMatch: ( { id, url } ) =>
|
|
355
|
+
!! getAnimatedGifVideoCompanion( id, url ),
|
|
356
|
+
transform( attributes ) {
|
|
357
|
+
const { id, url, caption } = attributes;
|
|
358
|
+
const companion = getAnimatedGifVideoCompanion( id, url );
|
|
359
|
+
|
|
360
|
+
return createBlock( 'core/video', {
|
|
361
|
+
...getCarriedGifConversionAttributes( attributes ),
|
|
362
|
+
id,
|
|
363
|
+
src: companion.src,
|
|
364
|
+
poster: companion.poster,
|
|
365
|
+
caption,
|
|
366
|
+
controls: false,
|
|
367
|
+
loop: true,
|
|
368
|
+
autoplay: true,
|
|
369
|
+
muted: true,
|
|
370
|
+
playsInline: true,
|
|
371
|
+
/*
|
|
372
|
+
* Carry the GIF's intrinsic dimensions so the <video>
|
|
373
|
+
* keeps its aspect ratio from the first paint. Without
|
|
374
|
+
* them the element collapses to the browser-default size
|
|
375
|
+
* and then jumps once the poster/metadata load, which
|
|
376
|
+
* shows up as a brief duplicated image during the swap.
|
|
377
|
+
*/
|
|
378
|
+
width: companion.width,
|
|
379
|
+
height: companion.height,
|
|
380
|
+
} );
|
|
381
|
+
},
|
|
382
|
+
},
|
|
383
|
+
],
|
|
256
384
|
};
|
|
257
385
|
|
|
258
386
|
export default transforms;
|
package/src/index.js
CHANGED
|
@@ -197,6 +197,8 @@ const getAllBlocks = () => {
|
|
|
197
197
|
pageList,
|
|
198
198
|
pageListItem,
|
|
199
199
|
pattern,
|
|
200
|
+
playlist,
|
|
201
|
+
playlistTrack,
|
|
200
202
|
preformatted,
|
|
201
203
|
pullquote,
|
|
202
204
|
reusableBlock,
|
|
@@ -208,6 +210,10 @@ const getAllBlocks = () => {
|
|
|
208
210
|
socialLinks,
|
|
209
211
|
spacer,
|
|
210
212
|
table,
|
|
213
|
+
tabs,
|
|
214
|
+
tabList,
|
|
215
|
+
tabPanels,
|
|
216
|
+
tabPanel,
|
|
211
217
|
tagCloud,
|
|
212
218
|
textColumns,
|
|
213
219
|
verse,
|
|
@@ -281,12 +287,8 @@ const getAllBlocks = () => {
|
|
|
281
287
|
}
|
|
282
288
|
|
|
283
289
|
if ( window?.__experimentalEnableBlockExperiments ) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
blocks.push( tabPanel );
|
|
287
|
-
blocks.push( tabPanels );
|
|
288
|
-
blocks.push( playlist );
|
|
289
|
-
blocks.push( playlistTrack );
|
|
290
|
+
// Blocks added here are only registered when the "Block experiments"
|
|
291
|
+
// option is enabled in the Gutenberg > Experiments settings page.
|
|
290
292
|
}
|
|
291
293
|
|
|
292
294
|
blocks.push( classic );
|
|
@@ -343,13 +345,23 @@ export const registerCoreBlocks = (
|
|
|
343
345
|
...( ( bootstrappedBlockType?.apiVersion ?? 0 ) < 3 && {
|
|
344
346
|
apiVersion: 3,
|
|
345
347
|
} ),
|
|
348
|
+
// Always pass the postId context so the server-side render can
|
|
349
|
+
// reproduce the same output as the front end, while preserving
|
|
350
|
+
// any context declared in the block's PHP registration.
|
|
351
|
+
usesContext: Array.from(
|
|
352
|
+
new Set( [
|
|
353
|
+
...( bootstrappedBlockType?.usesContext ?? [] ),
|
|
354
|
+
'postId',
|
|
355
|
+
] )
|
|
356
|
+
),
|
|
346
357
|
// Inspector controls are rendered by the auto-register hook in block-editor
|
|
347
|
-
edit: function Edit( { attributes } ) {
|
|
358
|
+
edit: function Edit( { attributes, context } ) {
|
|
348
359
|
const disabledRef = useDisabled();
|
|
349
360
|
const blockProps = useBlockProps( { ref: disabledRef } );
|
|
350
361
|
const { content, status, error } = useServerSideRender( {
|
|
351
362
|
block: blockName,
|
|
352
363
|
attributes,
|
|
364
|
+
urlQueryArgs: { post_id: context?.postId },
|
|
353
365
|
} );
|
|
354
366
|
|
|
355
367
|
if ( status === 'loading' ) {
|
package/src/latest-posts/edit.js
CHANGED
|
@@ -162,13 +162,10 @@ function Controls( { attributes, setAttributes } ) {
|
|
|
162
162
|
label: name,
|
|
163
163
|
} ) );
|
|
164
164
|
const categorySuggestions =
|
|
165
|
-
categoriesList?.reduce(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
} ),
|
|
170
|
-
{}
|
|
171
|
-
) ?? {};
|
|
165
|
+
categoriesList?.reduce( ( accumulator, category ) => {
|
|
166
|
+
accumulator[ category.name ] = category;
|
|
167
|
+
return accumulator;
|
|
168
|
+
}, {} ) ?? {};
|
|
172
169
|
const selectCategories = ( tokens ) => {
|
|
173
170
|
const hasNoSuggestion = tokens.some(
|
|
174
171
|
( token ) =>
|
|
@@ -807,7 +804,7 @@ export default function LatestPostsEdit( {
|
|
|
807
804
|
<div
|
|
808
805
|
className="wp-block-latest-posts__post-full-content"
|
|
809
806
|
dangerouslySetInnerHTML={ {
|
|
810
|
-
__html: post.content.
|
|
807
|
+
__html: post.content.rendered.trim(),
|
|
811
808
|
} }
|
|
812
809
|
/>
|
|
813
810
|
) }
|
|
@@ -44,6 +44,7 @@ function block_core_latest_posts_get_excerpt_length() {
|
|
|
44
44
|
*/
|
|
45
45
|
function render_block_core_latest_posts( $attributes ) {
|
|
46
46
|
global $post, $block_core_latest_posts_excerpt_length;
|
|
47
|
+
static $rendering_stack = array();
|
|
47
48
|
|
|
48
49
|
$args = array(
|
|
49
50
|
'posts_per_page' => $attributes['postsToShow'],
|
|
@@ -64,18 +65,23 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
64
65
|
$args['author'] = $attributes['selectedAuthor'];
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
$query
|
|
68
|
-
$recent_posts = $query->query( $args );
|
|
68
|
+
$query = new WP_Query( $args );
|
|
69
69
|
|
|
70
70
|
if ( isset( $attributes['displayFeaturedImage'] ) && $attributes['displayFeaturedImage'] ) {
|
|
71
71
|
update_post_thumbnail_cache( $query );
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
$list_items_markup = '';
|
|
75
|
+
// Snapshot the current global post so it can be restored after the loop.
|
|
76
|
+
// We use have_posts()/the_post() rather than foreach so that setup_postdata()
|
|
77
|
+
// is called for each post, establishing the correct global context for
|
|
78
|
+
// do_blocks() and other filters that run during full-content rendering.
|
|
79
|
+
$previous_post = $post ?? null;
|
|
75
80
|
|
|
76
|
-
|
|
77
|
-
$
|
|
78
|
-
$
|
|
81
|
+
while ( $query->have_posts() ) {
|
|
82
|
+
$query->the_post();
|
|
83
|
+
$post_link = esc_url( get_permalink() );
|
|
84
|
+
$title = get_the_title();
|
|
79
85
|
|
|
80
86
|
if ( ! $title ) {
|
|
81
87
|
$title = __( '(no title)' );
|
|
@@ -83,7 +89,7 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
83
89
|
|
|
84
90
|
$list_items_markup .= '<li>';
|
|
85
91
|
|
|
86
|
-
if ( $attributes['displayFeaturedImage'] && has_post_thumbnail(
|
|
92
|
+
if ( $attributes['displayFeaturedImage'] && has_post_thumbnail() ) {
|
|
87
93
|
$image_style = '';
|
|
88
94
|
if ( isset( $attributes['featuredImageSizeWidth'] ) ) {
|
|
89
95
|
$image_style .= sprintf( 'max-width:%spx;', $attributes['featuredImageSizeWidth'] );
|
|
@@ -98,7 +104,7 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
98
104
|
}
|
|
99
105
|
|
|
100
106
|
$featured_image = get_the_post_thumbnail(
|
|
101
|
-
|
|
107
|
+
null,
|
|
102
108
|
$attributes['featuredImageSizeSlug'],
|
|
103
109
|
array(
|
|
104
110
|
'style' => esc_attr( $image_style ),
|
|
@@ -126,7 +132,7 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
126
132
|
);
|
|
127
133
|
|
|
128
134
|
if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) {
|
|
129
|
-
$author_display_name = get_the_author_meta( 'display_name'
|
|
135
|
+
$author_display_name = get_the_author_meta( 'display_name' );
|
|
130
136
|
|
|
131
137
|
/* translators: byline. %s: author. */
|
|
132
138
|
$byline = sprintf( __( 'by %s' ), $author_display_name );
|
|
@@ -142,15 +148,15 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
142
148
|
if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) {
|
|
143
149
|
$list_items_markup .= sprintf(
|
|
144
150
|
'<time datetime="%1$s" class="wp-block-latest-posts__post-date">%2$s</time>',
|
|
145
|
-
esc_attr( get_the_date( 'c'
|
|
146
|
-
get_the_date( ''
|
|
151
|
+
esc_attr( get_the_date( 'c' ) ),
|
|
152
|
+
get_the_date( '' )
|
|
147
153
|
);
|
|
148
154
|
}
|
|
149
155
|
|
|
150
156
|
if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent']
|
|
151
157
|
&& isset( $attributes['displayPostContentRadio'] ) && 'excerpt' === $attributes['displayPostContentRadio'] ) {
|
|
152
158
|
|
|
153
|
-
$trimmed_excerpt = get_the_excerpt(
|
|
159
|
+
$trimmed_excerpt = get_the_excerpt();
|
|
154
160
|
|
|
155
161
|
/*
|
|
156
162
|
* Adds a "Read more" link with screen reader text.
|
|
@@ -170,7 +176,7 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
170
176
|
}
|
|
171
177
|
}
|
|
172
178
|
|
|
173
|
-
if ( post_password_required(
|
|
179
|
+
if ( post_password_required() ) {
|
|
174
180
|
$trimmed_excerpt = __( 'This content is password protected.' );
|
|
175
181
|
}
|
|
176
182
|
|
|
@@ -183,21 +189,45 @@ function render_block_core_latest_posts( $attributes ) {
|
|
|
183
189
|
if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent']
|
|
184
190
|
&& isset( $attributes['displayPostContentRadio'] ) && 'full_post' === $attributes['displayPostContentRadio'] ) {
|
|
185
191
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if ( post_password_required( $post ) ) {
|
|
192
|
+
if ( post_password_required() ) {
|
|
189
193
|
$post_content = __( 'This content is password protected.' );
|
|
194
|
+
} else {
|
|
195
|
+
$post_id = get_the_ID();
|
|
196
|
+
$post_content = get_post_field( 'post_content', $post_id, 'raw' );
|
|
197
|
+
// Check if we're already rendering this post to prevent infinite recursion.
|
|
198
|
+
if ( in_array( $post_id, $rendering_stack, true ) ) {
|
|
199
|
+
$post_content = '';
|
|
200
|
+
} else {
|
|
201
|
+
$rendering_stack[] = $post_id;
|
|
202
|
+
|
|
203
|
+
try {
|
|
204
|
+
// Run through the actions that are typically taken on the_content.
|
|
205
|
+
$post_content = _wp_apply_block_content_filters( $post_content, 'latest-posts' );
|
|
206
|
+
} finally {
|
|
207
|
+
array_pop( $rendering_stack );
|
|
208
|
+
}
|
|
209
|
+
}
|
|
190
210
|
}
|
|
191
211
|
|
|
212
|
+
$post_content = str_replace( ']]>', ']]>', $post_content );
|
|
192
213
|
$list_items_markup .= sprintf(
|
|
193
214
|
'<div class="wp-block-latest-posts__post-full-content">%1$s</div>',
|
|
194
|
-
|
|
215
|
+
$post_content
|
|
195
216
|
);
|
|
196
217
|
}
|
|
197
218
|
|
|
198
219
|
$list_items_markup .= "</li>\n";
|
|
199
220
|
}
|
|
200
221
|
|
|
222
|
+
// Restore the post context that was active before this secondary query.
|
|
223
|
+
// wp_reset_postdata() is intentionally not used here: when this block is
|
|
224
|
+
// rendered inside another post's content (e.g. via do_blocks()), it would
|
|
225
|
+
// restore to the main query post rather than the outer rendering post.
|
|
226
|
+
$post = $previous_post;
|
|
227
|
+
if ( $previous_post instanceof WP_Post ) {
|
|
228
|
+
setup_postdata( $previous_post );
|
|
229
|
+
}
|
|
230
|
+
|
|
201
231
|
remove_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 );
|
|
202
232
|
|
|
203
233
|
$layout = $attributes['layout'] ?? array();
|
package/src/list-item/edit.js
CHANGED
|
@@ -83,7 +83,7 @@ export default function ListItemEdit( {
|
|
|
83
83
|
renderAppender: false,
|
|
84
84
|
__unstableDisableDropZone: true,
|
|
85
85
|
} );
|
|
86
|
-
const useEnterRef = useEnter(
|
|
86
|
+
const useEnterRef = useEnter( clientId );
|
|
87
87
|
const useSpaceRef = useSpace( clientId );
|
|
88
88
|
const onMerge = useMerge( clientId, mergeBlocks );
|
|
89
89
|
return (
|
|
@@ -6,11 +6,8 @@ import {
|
|
|
6
6
|
getDefaultBlockName,
|
|
7
7
|
cloneBlock,
|
|
8
8
|
} from '@wordpress/blocks';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
useRefEffect,
|
|
12
|
-
privateApis as composePrivateApis,
|
|
13
|
-
} from '@wordpress/compose';
|
|
9
|
+
import { useRefEffect } from '@wordpress/compose';
|
|
10
|
+
import { privateApis as richTextPrivateApis } from '@wordpress/rich-text';
|
|
14
11
|
import { ENTER } from '@wordpress/keycodes';
|
|
15
12
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
16
13
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
@@ -21,30 +18,31 @@ import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
|
21
18
|
import useOutdentListItem from './use-outdent-list-item';
|
|
22
19
|
import { unlock } from '../../lock-unlock';
|
|
23
20
|
|
|
24
|
-
const {
|
|
21
|
+
const { subscribeOwnedListener } = unlock( richTextPrivateApis );
|
|
25
22
|
|
|
26
|
-
export default function useEnter(
|
|
23
|
+
export default function useEnter( clientId ) {
|
|
27
24
|
const { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );
|
|
28
|
-
const {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
const {
|
|
26
|
+
getBlock,
|
|
27
|
+
getBlockAttributes,
|
|
28
|
+
getBlockRootClientId,
|
|
29
|
+
getBlockIndex,
|
|
30
|
+
getBlockName,
|
|
31
|
+
} = useSelect( blockEditorStore );
|
|
32
32
|
const outdentListItem = useOutdentListItem();
|
|
33
33
|
return useRefEffect( ( element ) => {
|
|
34
34
|
function onKeyDown( event ) {
|
|
35
35
|
if ( event.defaultPrevented || event.keyCode !== ENTER ) {
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
|
-
const { content
|
|
39
|
-
if ( content
|
|
38
|
+
const { content } = getBlockAttributes( clientId ) ?? {};
|
|
39
|
+
if ( content?.length ) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
event.preventDefault();
|
|
43
43
|
const canOutdent =
|
|
44
44
|
getBlockName(
|
|
45
|
-
getBlockRootClientId(
|
|
46
|
-
getBlockRootClientId( propsRef.current.clientId )
|
|
47
|
-
)
|
|
45
|
+
getBlockRootClientId( getBlockRootClientId( clientId ) )
|
|
48
46
|
) === 'core/list-item';
|
|
49
47
|
if ( canOutdent ) {
|
|
50
48
|
outdentListItem();
|
|
@@ -90,11 +88,6 @@ export default function useEnter( props ) {
|
|
|
90
88
|
|
|
91
89
|
// Capture phase so we run before writing-flow's ancestor-bubble
|
|
92
90
|
// keydown handlers that gate on `event.defaultPrevented`.
|
|
93
|
-
return
|
|
94
|
-
element,
|
|
95
|
-
'keydown',
|
|
96
|
-
onKeyDown,
|
|
97
|
-
true
|
|
98
|
-
);
|
|
91
|
+
return subscribeOwnedListener( element, 'keydown', onKeyDown, true );
|
|
99
92
|
}, [] );
|
|
100
93
|
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
privateApis as composePrivateApis,
|
|
7
|
-
} from '@wordpress/compose';
|
|
4
|
+
import { useRefEffect } from '@wordpress/compose';
|
|
5
|
+
import { privateApis as richTextPrivateApis } from '@wordpress/rich-text';
|
|
8
6
|
import { SPACE, TAB } from '@wordpress/keycodes';
|
|
9
7
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
10
8
|
import { useSelect } from '@wordpress/data';
|
|
@@ -16,7 +14,7 @@ import useIndentListItem from './use-indent-list-item';
|
|
|
16
14
|
import useOutdentListItem from './use-outdent-list-item';
|
|
17
15
|
import { unlock } from '../../lock-unlock';
|
|
18
16
|
|
|
19
|
-
const {
|
|
17
|
+
const { subscribeOwnedListener } = unlock( richTextPrivateApis );
|
|
20
18
|
|
|
21
19
|
export default function useSpace( clientId ) {
|
|
22
20
|
const { getSelectionStart, getSelectionEnd, getBlockIndex } =
|
|
@@ -63,7 +61,7 @@ export default function useSpace( clientId ) {
|
|
|
63
61
|
|
|
64
62
|
// Capture phase so we run before writing-flow's ancestor-bubble
|
|
65
63
|
// keydown handlers that gate on `event.defaultPrevented`.
|
|
66
|
-
return
|
|
64
|
+
return subscribeOwnedListener(
|
|
67
65
|
element,
|
|
68
66
|
'keydown',
|
|
69
67
|
onKeyDown,
|
package/src/more/editor.scss
CHANGED
|
@@ -576,8 +576,7 @@ body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-op
|
|
|
576
576
|
grid-column: span 2;
|
|
577
577
|
|
|
578
578
|
&.open {
|
|
579
|
-
|
|
580
|
-
outline: 1px solid transparent; // Box shadow is removed in high contrast mode, a transparent outline is made opaque.
|
|
579
|
+
border-color: $gray-200;
|
|
581
580
|
background-color: $white;
|
|
582
581
|
}
|
|
583
582
|
}
|
|
@@ -127,9 +127,12 @@ function block_core_navigation_link_maybe_urldecode( $url ) {
|
|
|
127
127
|
function render_block_core_navigation_link( $attributes, $content, $block ) {
|
|
128
128
|
// Check if this navigation item should render based on post status.
|
|
129
129
|
if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
$should_render = gutenberg_block_core_shared_navigation_item_should_render( $attributes, $block );
|
|
131
|
+
} else {
|
|
132
|
+
$should_render = block_core_shared_navigation_item_should_render( $attributes, $block );
|
|
133
|
+
}
|
|
134
|
+
if ( ! $should_render ) {
|
|
135
|
+
return '';
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
// Don't render the block's subtree if it has no label.
|
|
@@ -76,9 +76,12 @@ function block_core_navigation_submenu_get_submenu_visibility( $context ) {
|
|
|
76
76
|
function render_block_core_navigation_submenu( $attributes, $content, $block ) {
|
|
77
77
|
// Check if this navigation item should render based on post status.
|
|
78
78
|
if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
$should_render = gutenberg_block_core_shared_navigation_item_should_render( $attributes, $block );
|
|
80
|
+
} else {
|
|
81
|
+
$should_render = block_core_shared_navigation_item_should_render( $attributes, $block );
|
|
82
|
+
}
|
|
83
|
+
if ( ! $should_render ) {
|
|
84
|
+
return '';
|
|
82
85
|
}
|
|
83
86
|
|
|
84
87
|
// Don't render the block's subtree if it has no label.
|
package/src/nextpage/editor.scss
CHANGED
package/src/paragraph/README.md
CHANGED
|
@@ -26,6 +26,7 @@ _Defined via the [`supports`](https://developer.wordpress.org/block-editor/refer
|
|
|
26
26
|
|
|
27
27
|
- [`align`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#align): `"wide"`, `"full"`
|
|
28
28
|
- [`splitting`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#splitting): `true`
|
|
29
|
+
- [`editableRoot`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#editableroot): `true`
|
|
29
30
|
- [`anchor`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#anchor): `true`
|
|
30
31
|
- [`className`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#classname): `false`
|
|
31
32
|
- [`color`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/#color):
|