@wordpress/block-library 8.5.0 → 8.7.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 +4 -0
- package/build/buttons/edit.native.js +1 -1
- package/build/buttons/edit.native.js.map +1 -1
- package/build/buttons/index.js +1 -0
- package/build/buttons/index.js.map +1 -1
- package/build/buttons/transforms.js +1 -0
- package/build/buttons/transforms.js.map +1 -1
- package/build/columns/edit.js +14 -10
- package/build/columns/edit.js.map +1 -1
- package/build/columns/edit.native.js +1 -1
- package/build/columns/edit.native.js.map +1 -1
- package/build/columns/index.js +4 -0
- package/build/columns/index.js.map +1 -1
- package/build/comments/edit/placeholder.js +8 -5
- package/build/comments/edit/placeholder.js.map +1 -1
- package/build/cover/edit/inspector-controls.js +2 -2
- package/build/cover/edit/inspector-controls.js.map +1 -1
- package/build/cover/index.js +13 -4
- package/build/cover/index.js.map +1 -1
- package/build/cover/variations.js +29 -0
- package/build/cover/variations.js.map +1 -0
- package/build/embed/edit.js +13 -14
- package/build/embed/edit.js.map +1 -1
- package/build/embed/edit.native.js +18 -14
- package/build/embed/edit.native.js.map +1 -1
- package/build/embed/util.js +39 -12
- package/build/embed/util.js.map +1 -1
- package/build/gallery/edit.js +9 -5
- package/build/gallery/edit.js.map +1 -1
- package/build/gallery/use-image-sizes.js +1 -1
- package/build/gallery/use-image-sizes.js.map +1 -1
- package/build/group/deprecated.js +4 -2
- package/build/group/deprecated.js.map +1 -1
- package/build/group/edit.js +22 -5
- package/build/group/edit.js.map +1 -1
- package/build/group/placeholder.js +11 -1
- package/build/group/placeholder.js.map +1 -1
- package/build/group/variations.js +23 -3
- package/build/group/variations.js.map +1 -1
- package/build/image/edit.js +1 -1
- package/build/image/edit.js.map +1 -1
- package/build/image/edit.native.js +1 -1
- package/build/image/edit.native.js.map +1 -1
- package/build/image/image.js +8 -6
- package/build/image/image.js.map +1 -1
- package/build/image/index.js +7 -2
- package/build/image/index.js.map +1 -1
- package/build/latest-posts/edit.js +11 -10
- package/build/latest-posts/edit.js.map +1 -1
- package/build/latest-posts/edit.native.js +3 -3
- package/build/latest-posts/edit.native.js.map +1 -1
- package/build/media-text/constants.js +17 -1
- package/build/media-text/constants.js.map +1 -1
- package/build/media-text/deprecated.js +228 -18
- package/build/media-text/deprecated.js.map +1 -1
- package/build/media-text/edit.js +10 -22
- package/build/media-text/edit.js.map +1 -1
- package/build/media-text/edit.native.js +6 -5
- package/build/media-text/edit.native.js.map +1 -1
- package/build/media-text/index.js +1 -1
- package/build/media-text/transforms.js +32 -44
- package/build/media-text/transforms.js.map +1 -1
- package/build/navigation/edit/index.js +55 -96
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/menu-inspector-controls.js +2 -5
- package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build/navigation/edit/navigation-menu-selector.js +26 -22
- package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build/navigation/edit/unsaved-inner-blocks.js +14 -1
- package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
- package/build/navigation/edit/use-create-navigation-menu.js +1 -1
- package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
- package/build/navigation/edit/use-navigation-notice.js +1 -1
- package/build/navigation/edit/use-navigation-notice.js.map +1 -1
- package/build/navigation/index.js +0 -1
- package/build/navigation/index.js.map +1 -1
- package/build/navigation-link/edit.js +0 -11
- package/build/navigation-link/edit.js.map +1 -1
- package/build/navigation-link/link-ui.js +0 -1
- package/build/navigation-link/link-ui.js.map +1 -1
- package/build/navigation-submenu/edit.js +1 -13
- package/build/navigation-submenu/edit.js.map +1 -1
- package/build/page-list/edit.js +59 -45
- package/build/page-list/edit.js.map +1 -1
- package/build/page-list-item/edit.js +3 -2
- package/build/page-list-item/edit.js.map +1 -1
- package/build/post-content/edit.js +6 -1
- package/build/post-content/edit.js.map +1 -1
- package/build/post-date/edit.js +2 -1
- package/build/post-date/edit.js.map +1 -1
- package/build/post-date/index.js +4 -1
- package/build/post-date/index.js.map +1 -1
- package/build/post-date/variations.js +28 -0
- package/build/post-date/variations.js.map +1 -0
- package/build/post-excerpt/edit.js +39 -10
- package/build/post-excerpt/edit.js.map +1 -1
- package/build/post-featured-image/dimension-controls.js +2 -8
- package/build/post-featured-image/dimension-controls.js.map +1 -1
- package/build/post-featured-image/edit.js +1 -1
- package/build/post-featured-image/edit.js.map +1 -1
- package/build/post-template/index.js +1 -1
- package/build/post-time-to-read/index.js +17 -1
- package/build/post-time-to-read/index.js.map +1 -1
- package/build/pullquote/deprecated.js +3 -3
- package/build/pullquote/deprecated.js.map +1 -1
- package/build/query/edit/query-placeholder.js +3 -2
- package/build/query/edit/query-placeholder.js.map +1 -1
- package/build/query/utils.js +26 -9
- package/build/query/utils.js.map +1 -1
- package/build/quote/index.js +1 -0
- package/build/quote/index.js.map +1 -1
- package/build/spacer/edit.js +16 -6
- package/build/spacer/edit.js.map +1 -1
- package/build/table/state.js +12 -4
- package/build/table/state.js.map +1 -1
- package/build/template-part/edit/import-controls.js +4 -24
- package/build/template-part/edit/import-controls.js.map +1 -1
- package/build/template-part/edit/utils/transformers.js +69 -19
- package/build/template-part/edit/utils/transformers.js.map +1 -1
- package/build/text-columns/edit.js +3 -7
- package/build/text-columns/edit.js.map +1 -1
- package/build/text-columns/save.js +11 -13
- package/build/text-columns/save.js.map +1 -1
- package/build-module/buttons/edit.native.js +1 -1
- package/build-module/buttons/edit.native.js.map +1 -1
- package/build-module/buttons/index.js +1 -0
- package/build-module/buttons/index.js.map +1 -1
- package/build-module/buttons/transforms.js +1 -0
- package/build-module/buttons/transforms.js.map +1 -1
- package/build-module/columns/edit.js +14 -9
- package/build-module/columns/edit.js.map +1 -1
- package/build-module/columns/edit.native.js +1 -1
- package/build-module/columns/edit.native.js.map +1 -1
- package/build-module/columns/index.js +4 -0
- package/build-module/columns/index.js.map +1 -1
- package/build-module/comments/edit/placeholder.js +9 -5
- package/build-module/comments/edit/placeholder.js.map +1 -1
- package/build-module/cover/edit/inspector-controls.js +2 -2
- package/build-module/cover/edit/inspector-controls.js.map +1 -1
- package/build-module/cover/index.js +12 -4
- package/build-module/cover/index.js.map +1 -1
- package/build-module/cover/variations.js +19 -0
- package/build-module/cover/variations.js.map +1 -0
- package/build-module/embed/edit.js +14 -15
- package/build-module/embed/edit.js.map +1 -1
- package/build-module/embed/edit.native.js +19 -15
- package/build-module/embed/edit.native.js.map +1 -1
- package/build-module/embed/util.js +34 -10
- package/build-module/embed/util.js.map +1 -1
- package/build-module/gallery/edit.js +9 -5
- package/build-module/gallery/edit.js.map +1 -1
- package/build-module/gallery/use-image-sizes.js +1 -1
- package/build-module/gallery/use-image-sizes.js.map +1 -1
- package/build-module/group/deprecated.js +4 -2
- package/build-module/group/deprecated.js.map +1 -1
- package/build-module/group/edit.js +21 -5
- package/build-module/group/edit.js.map +1 -1
- package/build-module/group/placeholder.js +11 -1
- package/build-module/group/placeholder.js.map +1 -1
- package/build-module/group/variations.js +24 -1
- package/build-module/group/variations.js.map +1 -1
- package/build-module/image/edit.js +1 -1
- package/build-module/image/edit.js.map +1 -1
- package/build-module/image/edit.native.js +1 -1
- package/build-module/image/edit.native.js.map +1 -1
- package/build-module/image/image.js +8 -6
- package/build-module/image/image.js.map +1 -1
- package/build-module/image/index.js +7 -2
- package/build-module/image/index.js.map +1 -1
- package/build-module/latest-posts/edit.js +11 -9
- package/build-module/latest-posts/edit.js.map +1 -1
- package/build-module/latest-posts/edit.native.js +3 -3
- package/build-module/latest-posts/edit.native.js.map +1 -1
- package/build-module/media-text/constants.js +10 -0
- package/build-module/media-text/constants.js.map +1 -1
- package/build-module/media-text/deprecated.js +227 -18
- package/build-module/media-text/deprecated.js.map +1 -1
- package/build-module/media-text/edit.js +5 -17
- package/build-module/media-text/edit.js.map +1 -1
- package/build-module/media-text/edit.native.js +4 -3
- package/build-module/media-text/edit.native.js.map +1 -1
- package/build-module/media-text/index.js +1 -1
- package/build-module/media-text/transforms.js +32 -44
- package/build-module/media-text/transforms.js.map +1 -1
- package/build-module/navigation/edit/index.js +57 -98
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/menu-inspector-controls.js +2 -5
- package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build-module/navigation/edit/navigation-menu-selector.js +25 -22
- package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
- package/build-module/navigation/edit/unsaved-inner-blocks.js +14 -1
- package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
- package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
- package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
- package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
- package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
- package/build-module/navigation/edit/use-navigation-notice.js +1 -1
- package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
- package/build-module/navigation/index.js +0 -1
- package/build-module/navigation/index.js.map +1 -1
- package/build-module/navigation-link/edit.js +0 -11
- package/build-module/navigation-link/edit.js.map +1 -1
- package/build-module/navigation-link/link-ui.js +0 -1
- package/build-module/navigation-link/link-ui.js.map +1 -1
- package/build-module/navigation-submenu/edit.js +1 -13
- package/build-module/navigation-submenu/edit.js.map +1 -1
- package/build-module/page-list/edit.js +61 -47
- package/build-module/page-list/edit.js.map +1 -1
- package/build-module/page-list-item/edit.js +3 -2
- package/build-module/page-list-item/edit.js.map +1 -1
- package/build-module/post-content/edit.js +6 -1
- package/build-module/post-content/edit.js.map +1 -1
- package/build-module/post-date/edit.js +2 -1
- package/build-module/post-date/edit.js.map +1 -1
- package/build-module/post-date/index.js +3 -1
- package/build-module/post-date/index.js.map +1 -1
- package/build-module/post-date/variations.js +18 -0
- package/build-module/post-date/variations.js.map +1 -0
- package/build-module/post-excerpt/edit.js +38 -11
- package/build-module/post-excerpt/edit.js.map +1 -1
- package/build-module/post-featured-image/dimension-controls.js +2 -8
- package/build-module/post-featured-image/dimension-controls.js.map +1 -1
- package/build-module/post-featured-image/edit.js +1 -1
- package/build-module/post-featured-image/edit.js.map +1 -1
- package/build-module/post-template/index.js +1 -1
- package/build-module/post-time-to-read/index.js +17 -1
- package/build-module/post-time-to-read/index.js.map +1 -1
- package/build-module/pullquote/deprecated.js +3 -2
- package/build-module/pullquote/deprecated.js.map +1 -1
- package/build-module/query/edit/query-placeholder.js +4 -3
- package/build-module/query/edit/query-placeholder.js.map +1 -1
- package/build-module/query/utils.js +21 -6
- package/build-module/query/utils.js.map +1 -1
- package/build-module/quote/index.js +1 -0
- package/build-module/quote/index.js.map +1 -1
- package/build-module/spacer/edit.js +16 -6
- package/build-module/spacer/edit.js.map +1 -1
- package/build-module/table/state.js +13 -5
- package/build-module/table/state.js.map +1 -1
- package/build-module/template-part/edit/import-controls.js +4 -23
- package/build-module/template-part/edit/import-controls.js.map +1 -1
- package/build-module/template-part/edit/utils/transformers.js +69 -20
- package/build-module/template-part/edit/utils/transformers.js.map +1 -1
- package/build-module/text-columns/edit.js +3 -6
- package/build-module/text-columns/edit.js.map +1 -1
- package/build-module/text-columns/save.js +11 -12
- package/build-module/text-columns/save.js.map +1 -1
- package/build-style/categories/editor-rtl.css +5 -0
- package/build-style/categories/editor.css +5 -0
- package/build-style/categories/style-rtl.css +4 -0
- package/build-style/categories/style.css +4 -0
- package/build-style/cover/style-rtl.css +11 -5
- package/build-style/cover/style.css +11 -5
- package/build-style/editor-rtl.css +11 -1
- package/build-style/editor.css +11 -1
- package/build-style/navigation/editor-rtl.css +1 -1
- package/build-style/navigation/editor.css +1 -1
- package/build-style/navigation/style-rtl.css +2 -0
- package/build-style/navigation/style.css +2 -0
- package/build-style/page-list/editor-rtl.css +4 -0
- package/build-style/page-list/editor.css +4 -0
- package/build-style/post-featured-image/editor-rtl.css +1 -0
- package/build-style/post-featured-image/editor.css +1 -0
- package/build-style/post-featured-image/style-rtl.css +1 -0
- package/build-style/post-featured-image/style.css +1 -0
- package/build-style/post-template/style-rtl.css +1 -1
- package/build-style/post-template/style.css +1 -1
- package/build-style/post-time-to-read/style-rtl.css +91 -0
- package/build-style/post-time-to-read/style.css +91 -0
- package/build-style/search/style-rtl.css +8 -7
- package/build-style/search/style.css +8 -7
- package/build-style/style-rtl.css +31 -13
- package/build-style/style.css +31 -13
- package/package.json +31 -31
- package/src/audio/test/__snapshots__/edit.native.js.snap +44 -4
- package/src/audio/test/__snapshots__/transforms.native.js.snap +25 -0
- package/src/audio/test/transforms.native.js +42 -0
- package/src/block/test/__snapshots__/transforms.native.js.snap +15 -0
- package/src/block/test/transforms.native.js +40 -0
- package/src/buttons/block.json +1 -0
- package/src/buttons/edit.native.js +1 -1
- package/src/buttons/test/__snapshots__/transforms.native.js.snap +31 -0
- package/src/buttons/test/transforms.native.js +48 -0
- package/src/categories/editor.scss +5 -0
- package/src/categories/style.scss +4 -0
- package/src/columns/block.json +4 -0
- package/src/columns/edit.js +30 -18
- package/src/columns/edit.native.js +1 -1
- package/src/columns/test/__snapshots__/transforms.native.js.snap +61 -0
- package/src/columns/test/transforms.native.js +91 -0
- package/src/comment-template/index.php +1 -2
- package/src/comments/edit/placeholder.js +16 -4
- package/src/comments/index.php +1 -0
- package/src/cover/block.json +9 -3
- package/src/cover/edit/inspector-controls.js +4 -5
- package/src/cover/index.js +2 -0
- package/src/cover/style.scss +16 -7
- package/src/cover/test/__snapshots__/transforms.native.js.snap +73 -0
- package/src/cover/test/edit.js +324 -0
- package/src/cover/test/transforms.native.js +112 -0
- package/src/cover/variations.js +20 -0
- package/src/embed/edit.js +16 -12
- package/src/embed/edit.native.js +28 -18
- package/src/embed/test/__snapshots__/transforms.native.js.snap +23 -0
- package/src/embed/test/index.js +12 -0
- package/src/embed/test/transforms.native.js +44 -0
- package/src/embed/util.js +29 -8
- package/src/file/test/__snapshots__/edit.native.js.snap +18 -2
- package/src/file/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/file/test/transforms.native.js +42 -0
- package/src/freeform/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/freeform/test/transforms.native.js +39 -0
- package/src/gallery/edit.js +8 -2
- package/src/gallery/test/__snapshots__/transforms.native.js.snap +53 -0
- package/src/gallery/test/transforms.native.js +52 -0
- package/src/gallery/use-image-sizes.js +1 -1
- package/src/group/deprecated.js +4 -2
- package/src/group/edit.js +27 -9
- package/src/group/placeholder.js +13 -1
- package/src/group/test/__snapshots__/transforms.native.js.snap +35 -0
- package/src/group/test/transforms.native.js +75 -0
- package/src/group/variations.js +14 -1
- package/src/heading/test/__snapshots__/transforms.native.js.snap +47 -0
- package/src/heading/test/transforms.native.js +46 -0
- package/src/home-link/index.php +2 -2
- package/src/image/block.json +7 -2
- package/src/image/edit.js +1 -1
- package/src/image/edit.native.js +1 -1
- package/src/image/image.js +15 -7
- package/src/image/index.php +7 -2
- package/src/image/test/__snapshots__/transforms.native.js.snap +49 -0
- package/src/image/test/transforms.native.js +48 -0
- package/src/latest-comments/style.scss +1 -1
- package/src/latest-posts/edit.js +14 -16
- package/src/latest-posts/edit.native.js +3 -3
- package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +15 -0
- package/src/latest-posts/test/transforms.native.js +61 -0
- package/src/list/test/__snapshots__/transforms.native.js.snap +85 -0
- package/src/list/test/transforms.native.js +56 -0
- package/src/media-text/block.json +1 -1
- package/src/media-text/constants.js +16 -0
- package/src/media-text/deprecated.js +235 -3
- package/src/media-text/edit.js +15 -24
- package/src/media-text/edit.native.js +3 -9
- package/src/media-text/test/__snapshots__/transforms.native.js.snap +73 -0
- package/src/media-text/test/transforms.native.js +112 -0
- package/src/media-text/transforms.js +24 -51
- package/src/missing/test/__snapshots__/edit.native.js.snap +20 -2
- package/src/more/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/more/test/transforms.native.js +42 -0
- package/src/navigation/block.json +0 -1
- package/src/navigation/edit/index.js +99 -115
- package/src/navigation/edit/menu-inspector-controls.js +2 -7
- package/src/navigation/edit/navigation-menu-selector.js +41 -25
- package/src/navigation/edit/unsaved-inner-blocks.js +46 -33
- package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +82 -83
- package/src/navigation/edit/use-create-navigation-menu.js +1 -1
- package/src/navigation/edit/use-navigation-notice.js +1 -1
- package/src/navigation/editor.scss +23 -20
- package/src/navigation/index.php +18 -39
- package/src/navigation/style.scss +6 -4
- package/src/navigation-link/edit.js +0 -9
- package/src/navigation-link/index.php +7 -9
- package/src/navigation-link/link-ui.js +0 -1
- package/src/navigation-submenu/edit.js +0 -10
- package/src/navigation-submenu/index.php +45 -74
- package/src/nextpage/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/nextpage/test/transforms.native.js +42 -0
- package/src/page-list/edit.js +78 -44
- package/src/page-list/editor.scss +6 -0
- package/src/page-list-item/edit.js +2 -3
- package/src/paragraph/test/__snapshots__/transforms.native.js.snap +59 -0
- package/src/paragraph/test/transforms.native.js +50 -0
- package/src/post-author/index.php +1 -1
- package/src/post-content/edit.js +5 -1
- package/src/post-date/edit.js +4 -1
- package/src/post-date/index.js +2 -0
- package/src/post-date/variations.js +20 -0
- package/src/post-excerpt/edit.js +48 -16
- package/src/post-excerpt/index.php +1 -2
- package/src/post-featured-image/dimension-controls.js +2 -10
- package/src/post-featured-image/edit.js +1 -1
- package/src/post-featured-image/editor.scss +1 -0
- package/src/post-featured-image/style.scss +1 -0
- package/src/post-template/block.json +1 -1
- package/src/post-template/style.scss +1 -1
- package/src/post-time-to-read/block.json +17 -1
- package/src/post-time-to-read/style.scss +4 -0
- package/src/preformatted/test/__snapshots__/transforms.native.js.snap +31 -0
- package/src/preformatted/test/transforms.native.js +42 -0
- package/src/pullquote/deprecated.js +2 -6
- package/src/pullquote/test/__snapshots__/transforms.native.js.snap +47 -0
- package/src/pullquote/test/transforms.native.js +46 -0
- package/src/query/edit/query-placeholder.js +10 -5
- package/src/query/test/utils.js +33 -1
- package/src/query/utils.js +19 -6
- package/src/query-title/index.php +2 -5
- package/src/quote/block.json +1 -0
- package/src/quote/test/__snapshots__/transforms.native.js.snap +39 -0
- package/src/quote/test/transforms.native.js +67 -0
- package/src/search/style.scss +16 -12
- package/src/search/test/__snapshots__/edit.native.js.snap +11 -1
- package/src/search/test/__snapshots__/transforms.native.js.snap +15 -0
- package/src/search/test/transforms.native.js +40 -0
- package/src/separator/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/separator/test/transforms.native.js +42 -0
- package/src/shortcode/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/shortcode/test/transforms.native.js +42 -0
- package/src/social-links/test/__snapshots__/transforms.native.js.snap +31 -0
- package/src/social-links/test/transforms.native.js +53 -0
- package/src/spacer/edit.js +18 -5
- package/src/spacer/test/__snapshots__/transforms.native.js.snap +19 -0
- package/src/spacer/test/transforms.native.js +42 -0
- package/src/style.scss +1 -0
- package/src/table/state.js +8 -17
- package/src/template-part/edit/import-controls.js +2 -29
- package/src/template-part/edit/utils/transformers.js +96 -19
- package/src/text-columns/edit.js +1 -6
- package/src/text-columns/save.js +1 -6
- package/src/verse/test/__snapshots__/transforms.native.js.snap +25 -0
- package/src/verse/test/transforms.native.js +42 -0
- package/src/video/test/__snapshots__/transforms.native.js.snap +41 -0
- package/src/video/test/transforms.native.js +48 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/src/cover/test/block-controls.js +0 -62
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { screen, fireEvent, act, within } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import {
|
|
11
|
+
initializeEditor,
|
|
12
|
+
selectBlock,
|
|
13
|
+
} from 'test/integration/helpers/integration-test-editor';
|
|
14
|
+
|
|
15
|
+
async function setup( attributes ) {
|
|
16
|
+
const testBlock = { name: 'core/cover', attributes };
|
|
17
|
+
return initializeEditor( testBlock );
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function createAndSelectBlock() {
|
|
21
|
+
await userEvent.click(
|
|
22
|
+
screen.getByRole( 'button', {
|
|
23
|
+
name: 'Color: Black',
|
|
24
|
+
} )
|
|
25
|
+
);
|
|
26
|
+
await userEvent.click(
|
|
27
|
+
screen.getByRole( 'button', {
|
|
28
|
+
name: 'Select Cover',
|
|
29
|
+
} )
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
describe( 'Cover block', () => {
|
|
34
|
+
describe( 'Editor canvas', () => {
|
|
35
|
+
test( 'shows placeholder if background image and color not set', async () => {
|
|
36
|
+
await setup();
|
|
37
|
+
|
|
38
|
+
expect(
|
|
39
|
+
screen.getByRole( 'group', {
|
|
40
|
+
name: 'To edit this block, you need permission to upload media.',
|
|
41
|
+
} )
|
|
42
|
+
).toBeInTheDocument();
|
|
43
|
+
} );
|
|
44
|
+
|
|
45
|
+
test( 'can set overlay color using color picker on block placeholder', async () => {
|
|
46
|
+
const { container } = await setup();
|
|
47
|
+
const colorPicker = screen.getByRole( 'button', {
|
|
48
|
+
name: 'Color: Black',
|
|
49
|
+
} );
|
|
50
|
+
await userEvent.click( colorPicker );
|
|
51
|
+
const color = colorPicker.style.backgroundColor;
|
|
52
|
+
expect(
|
|
53
|
+
screen.queryByRole( 'group', {
|
|
54
|
+
name: 'To edit this block, you need permission to upload media.',
|
|
55
|
+
} )
|
|
56
|
+
).not.toBeInTheDocument();
|
|
57
|
+
|
|
58
|
+
// eslint-disable-next-line testing-library/no-node-access
|
|
59
|
+
const overlay = container.getElementsByClassName(
|
|
60
|
+
'wp-block-cover__background'
|
|
61
|
+
);
|
|
62
|
+
expect( overlay[ 0 ] ).toHaveStyle(
|
|
63
|
+
`background-color: ${ color }`
|
|
64
|
+
);
|
|
65
|
+
} );
|
|
66
|
+
|
|
67
|
+
test( 'can have the title edited', async () => {
|
|
68
|
+
await setup();
|
|
69
|
+
|
|
70
|
+
await userEvent.click(
|
|
71
|
+
screen.getByRole( 'button', {
|
|
72
|
+
name: 'Color: Black',
|
|
73
|
+
} )
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const title = screen.getByLabelText( 'Empty block;', {
|
|
77
|
+
exact: false,
|
|
78
|
+
} );
|
|
79
|
+
await userEvent.click( title );
|
|
80
|
+
await userEvent.keyboard( 'abc' );
|
|
81
|
+
expect( title ).toHaveTextContent( 'abc' );
|
|
82
|
+
} );
|
|
83
|
+
} );
|
|
84
|
+
|
|
85
|
+
describe( 'Block toolbar', () => {
|
|
86
|
+
test( 'full height toggle sets minHeight style attribute to 100vh when clicked', async () => {
|
|
87
|
+
await setup();
|
|
88
|
+
await createAndSelectBlock();
|
|
89
|
+
|
|
90
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).not.toHaveStyle(
|
|
91
|
+
'min-height: 100vh;'
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
await userEvent.click(
|
|
95
|
+
screen.getByLabelText( 'Toggle full height' )
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).toHaveStyle(
|
|
99
|
+
'min-height: 100vh;'
|
|
100
|
+
);
|
|
101
|
+
} );
|
|
102
|
+
|
|
103
|
+
test( 'content position button sets content position', async () => {
|
|
104
|
+
await setup();
|
|
105
|
+
await createAndSelectBlock();
|
|
106
|
+
|
|
107
|
+
await userEvent.click(
|
|
108
|
+
screen.getByLabelText( 'Change content position' )
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).not.toHaveClass(
|
|
112
|
+
'has-custom-content-position'
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
await act( async () =>
|
|
116
|
+
within( screen.getByRole( 'grid' ) )
|
|
117
|
+
.getByRole( 'gridcell', {
|
|
118
|
+
name: 'top left',
|
|
119
|
+
} )
|
|
120
|
+
.focus()
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).toHaveClass(
|
|
124
|
+
'has-custom-content-position'
|
|
125
|
+
);
|
|
126
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).toHaveClass(
|
|
127
|
+
'is-position-top-left'
|
|
128
|
+
);
|
|
129
|
+
} );
|
|
130
|
+
} );
|
|
131
|
+
|
|
132
|
+
describe( 'Inspector controls', () => {
|
|
133
|
+
describe( 'Media settings', () => {
|
|
134
|
+
test( 'does not display media settings panel if url is not set', async () => {
|
|
135
|
+
await setup();
|
|
136
|
+
expect(
|
|
137
|
+
screen.queryByRole( 'button', {
|
|
138
|
+
name: 'Media settings',
|
|
139
|
+
} )
|
|
140
|
+
).not.toBeInTheDocument();
|
|
141
|
+
} );
|
|
142
|
+
test( 'displays media settings panel if url is set', async () => {
|
|
143
|
+
await setup( {
|
|
144
|
+
url: 'http://localhost/my-image.jpg',
|
|
145
|
+
} );
|
|
146
|
+
|
|
147
|
+
await selectBlock( 'Block: Cover' );
|
|
148
|
+
expect(
|
|
149
|
+
screen.getByRole( 'button', {
|
|
150
|
+
name: 'Media settings',
|
|
151
|
+
} )
|
|
152
|
+
).toBeInTheDocument();
|
|
153
|
+
} );
|
|
154
|
+
} );
|
|
155
|
+
|
|
156
|
+
test( 'sets hasParallax attribute to true if fixed background toggled', async () => {
|
|
157
|
+
await setup( {
|
|
158
|
+
url: 'http://localhost/my-image.jpg',
|
|
159
|
+
} );
|
|
160
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).not.toHaveClass(
|
|
161
|
+
'has-parallax'
|
|
162
|
+
);
|
|
163
|
+
await selectBlock( 'Block: Cover' );
|
|
164
|
+
await userEvent.click(
|
|
165
|
+
screen.getByLabelText( 'Fixed background' )
|
|
166
|
+
);
|
|
167
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).toHaveClass(
|
|
168
|
+
'has-parallax'
|
|
169
|
+
);
|
|
170
|
+
} );
|
|
171
|
+
|
|
172
|
+
test( 'sets isRepeated attribute to true if repeated background toggled', async () => {
|
|
173
|
+
await setup( {
|
|
174
|
+
url: 'http://localhost/my-image.jpg',
|
|
175
|
+
} );
|
|
176
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).not.toHaveClass(
|
|
177
|
+
'is-repeated'
|
|
178
|
+
);
|
|
179
|
+
await selectBlock( 'Block: Cover' );
|
|
180
|
+
await userEvent.click(
|
|
181
|
+
screen.getByLabelText( 'Repeated background' )
|
|
182
|
+
);
|
|
183
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).toHaveClass(
|
|
184
|
+
'is-repeated'
|
|
185
|
+
);
|
|
186
|
+
} );
|
|
187
|
+
|
|
188
|
+
test( 'sets left focalPoint attribute when focal point values changed', async () => {
|
|
189
|
+
await setup( {
|
|
190
|
+
url: 'http://localhost/my-image.jpg',
|
|
191
|
+
} );
|
|
192
|
+
|
|
193
|
+
await selectBlock( 'Block: Cover' );
|
|
194
|
+
await userEvent.clear( screen.getByLabelText( 'Left' ) );
|
|
195
|
+
await userEvent.type( screen.getByLabelText( 'Left' ), '100' );
|
|
196
|
+
|
|
197
|
+
expect(
|
|
198
|
+
within( screen.getByLabelText( 'Block: Cover' ) ).getByRole(
|
|
199
|
+
'img'
|
|
200
|
+
)
|
|
201
|
+
).toHaveStyle( 'object-position: 100% 50%;' );
|
|
202
|
+
} );
|
|
203
|
+
|
|
204
|
+
test( 'sets alt attribute if text entered in alt text box', async () => {
|
|
205
|
+
await setup( {
|
|
206
|
+
url: 'http://localhost/my-image.jpg',
|
|
207
|
+
} );
|
|
208
|
+
|
|
209
|
+
await selectBlock( 'Block: Cover' );
|
|
210
|
+
await userEvent.type(
|
|
211
|
+
screen.getByLabelText( 'Alt text (alternative text)' ),
|
|
212
|
+
'Me'
|
|
213
|
+
);
|
|
214
|
+
expect( screen.getByAltText( 'Me' ) ).toBeInTheDocument();
|
|
215
|
+
} );
|
|
216
|
+
|
|
217
|
+
test( 'clears media when clear media button clicked', async () => {
|
|
218
|
+
await setup( {
|
|
219
|
+
url: 'http://localhost/my-image.jpg',
|
|
220
|
+
} );
|
|
221
|
+
|
|
222
|
+
await selectBlock( 'Block: Cover' );
|
|
223
|
+
expect(
|
|
224
|
+
within( screen.getByLabelText( 'Block: Cover' ) ).getByRole(
|
|
225
|
+
'img'
|
|
226
|
+
)
|
|
227
|
+
).toBeInTheDocument();
|
|
228
|
+
|
|
229
|
+
await userEvent.click(
|
|
230
|
+
screen.getByRole( 'button', {
|
|
231
|
+
name: 'Clear Media',
|
|
232
|
+
} )
|
|
233
|
+
);
|
|
234
|
+
expect(
|
|
235
|
+
within( screen.queryByLabelText( 'Block: Cover' ) ).queryByRole(
|
|
236
|
+
'img'
|
|
237
|
+
)
|
|
238
|
+
).not.toBeInTheDocument();
|
|
239
|
+
} );
|
|
240
|
+
|
|
241
|
+
describe( 'Color panel', () => {
|
|
242
|
+
test( 'applies selected opacity to block when number control value changed', async () => {
|
|
243
|
+
const { container } = await setup();
|
|
244
|
+
|
|
245
|
+
await createAndSelectBlock();
|
|
246
|
+
|
|
247
|
+
// eslint-disable-next-line testing-library/no-node-access
|
|
248
|
+
const overlay = container.getElementsByClassName(
|
|
249
|
+
'wp-block-cover__background'
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
expect( overlay[ 0 ] ).toHaveClass( 'has-background-dim-100' );
|
|
253
|
+
|
|
254
|
+
await userEvent.click(
|
|
255
|
+
screen.getByRole( 'tab', {
|
|
256
|
+
name: 'Styles',
|
|
257
|
+
} )
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
fireEvent.change(
|
|
261
|
+
screen.getByRole( 'spinbutton', {
|
|
262
|
+
name: 'Overlay opacity',
|
|
263
|
+
} ),
|
|
264
|
+
{
|
|
265
|
+
target: { value: '40' },
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
expect( overlay[ 0 ] ).toHaveClass( 'has-background-dim-40' );
|
|
270
|
+
} );
|
|
271
|
+
|
|
272
|
+
test( 'applies selected opacity to block when slider moved', async () => {
|
|
273
|
+
const { container } = await setup();
|
|
274
|
+
|
|
275
|
+
await createAndSelectBlock();
|
|
276
|
+
|
|
277
|
+
// eslint-disable-next-line testing-library/no-node-access
|
|
278
|
+
const overlay = container.getElementsByClassName(
|
|
279
|
+
'wp-block-cover__background'
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
expect( overlay[ 0 ] ).toHaveClass( 'has-background-dim-100' );
|
|
283
|
+
|
|
284
|
+
await userEvent.click(
|
|
285
|
+
screen.getByRole( 'tab', {
|
|
286
|
+
name: 'Styles',
|
|
287
|
+
} )
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
fireEvent.change(
|
|
291
|
+
screen.getByRole( 'slider', {
|
|
292
|
+
name: 'Overlay opacity',
|
|
293
|
+
} ),
|
|
294
|
+
{ target: { value: 30 } }
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
expect( overlay[ 0 ] ).toHaveClass( 'has-background-dim-30' );
|
|
298
|
+
} );
|
|
299
|
+
} );
|
|
300
|
+
|
|
301
|
+
describe( 'Dimensions panel', () => {
|
|
302
|
+
test( 'sets minHeight attribute when number control value changed', async () => {
|
|
303
|
+
await setup();
|
|
304
|
+
await createAndSelectBlock();
|
|
305
|
+
await userEvent.click(
|
|
306
|
+
screen.getByRole( 'tab', {
|
|
307
|
+
name: 'Styles',
|
|
308
|
+
} )
|
|
309
|
+
);
|
|
310
|
+
await userEvent.clear(
|
|
311
|
+
screen.getByLabelText( 'Minimum height of cover' )
|
|
312
|
+
);
|
|
313
|
+
await userEvent.type(
|
|
314
|
+
screen.getByLabelText( 'Minimum height of cover' ),
|
|
315
|
+
'300'
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
expect( screen.getByLabelText( 'Block: Cover' ) ).toHaveStyle(
|
|
319
|
+
'min-height: 300px;'
|
|
320
|
+
);
|
|
321
|
+
} );
|
|
322
|
+
} );
|
|
323
|
+
} );
|
|
324
|
+
} );
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
getEditorHtml,
|
|
6
|
+
initializeEditor,
|
|
7
|
+
setupCoreBlocks,
|
|
8
|
+
transformBlock,
|
|
9
|
+
getBlockTransformOptions,
|
|
10
|
+
} from 'test/helpers';
|
|
11
|
+
|
|
12
|
+
const block = 'Cover';
|
|
13
|
+
const initialHtmlWithImage = `
|
|
14
|
+
<!-- wp:cover {"url":"https://cldup.com/cXyG__fTLN.jpg","id":890,"dimRatio":20,"overlayColor":"luminous-vivid-orange","focalPoint":{"x":"0.63","y":"0.83"},"minHeight":219} -->
|
|
15
|
+
<div class="wp-block-cover" style="min-height:219px"><span aria-hidden="true" class="wp-block-cover__background has-luminous-vivid-orange-background-color has-background-dim-20 has-background-dim"></span><img class="wp-block-cover__image-background wp-image-890" alt="" src="https://cldup.com/cXyG__fTLN.jpg" style="object-position:63% 83%" data-object-fit="cover" data-object-position="63% 83%"/><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"center","placeholder":"Write title…","className":"has-text-color has-very-light-gray-color","fontSize":"large"} -->
|
|
16
|
+
<p class="has-text-align-center has-text-color has-very-light-gray-color has-large-font-size">Cool cover</p>
|
|
17
|
+
<!-- /wp:paragraph --></div></div>
|
|
18
|
+
<!-- /wp:cover -->`;
|
|
19
|
+
const initialHtmlWithVideo = `
|
|
20
|
+
<!-- wp:cover {"url":"https://i.cloudup.com/YtZFJbuQCE.mov","id":891,"dimRatio":20,"overlayColor":"luminous-vivid-orange","backgroundType":"video","focalPoint":{"x":"0.63","y":"0.83"},"minHeight":219,"isDark":false} -->
|
|
21
|
+
<div class="wp-block-cover is-light" style="min-height:219px"><span aria-hidden="true" class="wp-block-cover__background has-luminous-vivid-orange-background-color has-background-dim-20 has-background-dim"></span><video class="wp-block-cover__video-background intrinsic-ignore" autoplay muted loop playsinline src="https://i.cloudup.com/YtZFJbuQCE.mov" style="object-position:63% 83%" data-object-fit="cover" data-object-position="63% 83%"></video><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"center","placeholder":"Write title…","className":"has-text-color has-very-light-gray-color","fontSize":"large"} -->
|
|
22
|
+
<p class="has-text-align-center has-text-color has-very-light-gray-color has-large-font-size">Cool cover</p>
|
|
23
|
+
<!-- /wp:paragraph --></div></div>
|
|
24
|
+
<!-- /wp:cover -->`;
|
|
25
|
+
|
|
26
|
+
const tranformsWithInnerBlocks = [ 'Columns', 'Group' ];
|
|
27
|
+
const blockTransformsWithImage = [
|
|
28
|
+
'Image',
|
|
29
|
+
'Media & Text',
|
|
30
|
+
...tranformsWithInnerBlocks,
|
|
31
|
+
];
|
|
32
|
+
const blockTransformsWithVideo = [
|
|
33
|
+
'Video',
|
|
34
|
+
'Media & Text',
|
|
35
|
+
...tranformsWithInnerBlocks,
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
setupCoreBlocks();
|
|
39
|
+
|
|
40
|
+
describe( `${ block } block transformations`, () => {
|
|
41
|
+
describe( 'with Image', () => {
|
|
42
|
+
test.each( blockTransformsWithImage )(
|
|
43
|
+
'to %s block',
|
|
44
|
+
async ( blockTransform ) => {
|
|
45
|
+
const screen = await initializeEditor( {
|
|
46
|
+
initialHtml: initialHtmlWithImage,
|
|
47
|
+
} );
|
|
48
|
+
const newBlock = await transformBlock(
|
|
49
|
+
screen,
|
|
50
|
+
block,
|
|
51
|
+
blockTransform,
|
|
52
|
+
{
|
|
53
|
+
isMediaBlock: true,
|
|
54
|
+
hasInnerBlocks:
|
|
55
|
+
tranformsWithInnerBlocks.includes( blockTransform ),
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
expect( newBlock ).toBeVisible();
|
|
59
|
+
expect( getEditorHtml() ).toMatchSnapshot();
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
it( 'matches expected transformation options', async () => {
|
|
64
|
+
const screen = await initializeEditor( {
|
|
65
|
+
initialHtml: initialHtmlWithImage,
|
|
66
|
+
} );
|
|
67
|
+
const transformOptions = await getBlockTransformOptions(
|
|
68
|
+
screen,
|
|
69
|
+
block
|
|
70
|
+
);
|
|
71
|
+
expect( transformOptions ).toHaveLength(
|
|
72
|
+
blockTransformsWithImage.length
|
|
73
|
+
);
|
|
74
|
+
} );
|
|
75
|
+
} );
|
|
76
|
+
|
|
77
|
+
describe( 'with Video', () => {
|
|
78
|
+
test.each( blockTransformsWithVideo )(
|
|
79
|
+
'to %s block',
|
|
80
|
+
async ( blockTransform ) => {
|
|
81
|
+
const screen = await initializeEditor( {
|
|
82
|
+
initialHtml: initialHtmlWithVideo,
|
|
83
|
+
} );
|
|
84
|
+
const newBlock = await transformBlock(
|
|
85
|
+
screen,
|
|
86
|
+
block,
|
|
87
|
+
blockTransform,
|
|
88
|
+
{
|
|
89
|
+
isMediaBlock: true,
|
|
90
|
+
hasInnerBlocks:
|
|
91
|
+
tranformsWithInnerBlocks.includes( blockTransform ),
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
expect( newBlock ).toBeVisible();
|
|
95
|
+
expect( getEditorHtml() ).toMatchSnapshot();
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
it( 'matches expected transformation options', async () => {
|
|
100
|
+
const screen = await initializeEditor( {
|
|
101
|
+
initialHtml: initialHtmlWithVideo,
|
|
102
|
+
} );
|
|
103
|
+
const transformOptions = await getBlockTransformOptions(
|
|
104
|
+
screen,
|
|
105
|
+
block
|
|
106
|
+
);
|
|
107
|
+
expect( transformOptions ).toHaveLength(
|
|
108
|
+
blockTransformsWithVideo.length
|
|
109
|
+
);
|
|
110
|
+
} );
|
|
111
|
+
} );
|
|
112
|
+
} );
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import { cover } from '@wordpress/icons';
|
|
6
|
+
|
|
7
|
+
const variations = [
|
|
8
|
+
{
|
|
9
|
+
name: 'cover',
|
|
10
|
+
title: __( 'Cover' ),
|
|
11
|
+
description: __(
|
|
12
|
+
'Add an image or video with a text overlay — great for headers.'
|
|
13
|
+
),
|
|
14
|
+
attributes: { layout: { type: 'constrained' } },
|
|
15
|
+
isDefault: true,
|
|
16
|
+
icon: cover,
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export default variations;
|
package/src/embed/edit.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import {
|
|
5
5
|
createUpgradedEmbedBlock,
|
|
6
6
|
getClassNames,
|
|
7
|
+
removeAspectRatioClasses,
|
|
7
8
|
fallback,
|
|
8
9
|
getEmbedInfoByProvider,
|
|
9
10
|
getMergedAttributesWithPreview,
|
|
@@ -99,16 +100,14 @@ const EmbedEdit = ( props ) => {
|
|
|
99
100
|
/**
|
|
100
101
|
* Returns the attributes derived from the preview, merged with the current attributes.
|
|
101
102
|
*
|
|
102
|
-
* @param {boolean} ignorePreviousClassName Determines if the previous className attribute should be ignored when merging.
|
|
103
103
|
* @return {Object} Merged attributes.
|
|
104
104
|
*/
|
|
105
|
-
const getMergedAttributes = (
|
|
105
|
+
const getMergedAttributes = () =>
|
|
106
106
|
getMergedAttributesWithPreview(
|
|
107
107
|
attributes,
|
|
108
108
|
preview,
|
|
109
109
|
title,
|
|
110
|
-
responsive
|
|
111
|
-
ignorePreviousClassName
|
|
110
|
+
responsive
|
|
112
111
|
);
|
|
113
112
|
|
|
114
113
|
const toggleResponsive = () => {
|
|
@@ -136,21 +135,20 @@ const EmbedEdit = ( props ) => {
|
|
|
136
135
|
setURL( newURL );
|
|
137
136
|
setIsEditingURL( false );
|
|
138
137
|
setAttributes( { url: newURL } );
|
|
139
|
-
}, [ preview?.html, attributesUrl ] );
|
|
138
|
+
}, [ preview?.html, attributesUrl, cannotEmbed, fetching ] );
|
|
140
139
|
|
|
141
140
|
// Handle incoming preview.
|
|
142
141
|
useEffect( () => {
|
|
143
142
|
if ( preview && ! isEditingURL ) {
|
|
144
|
-
// When obtaining an incoming preview,
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
setAttributes( getMergedAttributes( true ) );
|
|
143
|
+
// When obtaining an incoming preview,
|
|
144
|
+
// we set the attributes derived from the preview data.
|
|
145
|
+
const mergedAttributes = getMergedAttributes();
|
|
146
|
+
setAttributes( mergedAttributes );
|
|
149
147
|
|
|
150
148
|
if ( onReplace ) {
|
|
151
149
|
const upgradedBlock = createUpgradedEmbedBlock(
|
|
152
150
|
props,
|
|
153
|
-
|
|
151
|
+
mergedAttributes
|
|
154
152
|
);
|
|
155
153
|
|
|
156
154
|
if ( upgradedBlock ) {
|
|
@@ -188,8 +186,14 @@ const EmbedEdit = ( props ) => {
|
|
|
188
186
|
event.preventDefault();
|
|
189
187
|
}
|
|
190
188
|
|
|
189
|
+
// If the embed URL was changed, we need to reset the aspect ratio class.
|
|
190
|
+
// To do this we have to remove the existing ratio class so it can be recalculated.
|
|
191
|
+
const blockClass = removeAspectRatioClasses(
|
|
192
|
+
attributes.className
|
|
193
|
+
);
|
|
194
|
+
|
|
191
195
|
setIsEditingURL( false );
|
|
192
|
-
setAttributes( { url } );
|
|
196
|
+
setAttributes( { url, className: blockClass } );
|
|
193
197
|
} }
|
|
194
198
|
value={ url }
|
|
195
199
|
cannotEmbed={ cannotEmbed }
|
package/src/embed/edit.native.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import {
|
|
5
5
|
createUpgradedEmbedBlock,
|
|
6
6
|
getClassNames,
|
|
7
|
+
removeAspectRatioClasses,
|
|
7
8
|
fallback,
|
|
8
9
|
getEmbedInfoByProvider,
|
|
9
10
|
getMergedAttributesWithPreview,
|
|
@@ -123,16 +124,14 @@ const EmbedEdit = ( props ) => {
|
|
|
123
124
|
/**
|
|
124
125
|
* Returns the attributes derived from the preview, merged with the current attributes.
|
|
125
126
|
*
|
|
126
|
-
* @param {boolean} ignorePreviousClassName Determines if the previous className attribute should be ignored when merging.
|
|
127
127
|
* @return {Object} Merged attributes.
|
|
128
128
|
*/
|
|
129
|
-
const getMergedAttributes = (
|
|
129
|
+
const getMergedAttributes = () =>
|
|
130
130
|
getMergedAttributesWithPreview(
|
|
131
131
|
attributes,
|
|
132
132
|
preview,
|
|
133
133
|
title,
|
|
134
|
-
responsive
|
|
135
|
-
ignorePreviousClassName
|
|
134
|
+
responsive
|
|
136
135
|
);
|
|
137
136
|
|
|
138
137
|
const toggleResponsive = () => {
|
|
@@ -159,21 +158,20 @@ const EmbedEdit = ( props ) => {
|
|
|
159
158
|
const newURL = url.replace( /\/$/, '' );
|
|
160
159
|
setIsEditingURL( false );
|
|
161
160
|
setAttributes( { url: newURL } );
|
|
162
|
-
}, [ preview?.html, url ] );
|
|
161
|
+
}, [ preview?.html, url, cannotEmbed, fetching ] );
|
|
163
162
|
|
|
164
163
|
// Handle incoming preview.
|
|
165
164
|
useEffect( () => {
|
|
166
165
|
if ( preview && ! isEditingURL ) {
|
|
167
|
-
// When obtaining an incoming preview,
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
setAttributes( getMergedAttributes( true ) );
|
|
166
|
+
// When obtaining an incoming preview,
|
|
167
|
+
// we set the attributes derived from the preview data.
|
|
168
|
+
const mergedAttributes = getMergedAttributes();
|
|
169
|
+
setAttributes( mergedAttributes );
|
|
172
170
|
|
|
173
171
|
if ( onReplace ) {
|
|
174
172
|
const upgradedBlock = createUpgradedEmbedBlock(
|
|
175
173
|
props,
|
|
176
|
-
|
|
174
|
+
mergedAttributes
|
|
177
175
|
);
|
|
178
176
|
|
|
179
177
|
if ( upgradedBlock ) {
|
|
@@ -188,13 +186,25 @@ const EmbedEdit = ( props ) => {
|
|
|
188
186
|
[ isEditingURL ]
|
|
189
187
|
);
|
|
190
188
|
|
|
191
|
-
const onEditURL = useCallback(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
189
|
+
const onEditURL = useCallback(
|
|
190
|
+
( value ) => {
|
|
191
|
+
// If the embed URL was changed, we need to reset the aspect ratio class.
|
|
192
|
+
// To do this we have to remove the existing ratio class so it can be recalculated.
|
|
193
|
+
if ( attributes.url !== value ) {
|
|
194
|
+
const blockClass = removeAspectRatioClasses(
|
|
195
|
+
attributes.className
|
|
196
|
+
);
|
|
197
|
+
setAttributes( { className: blockClass } );
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// The order of the following calls is important, we need to update the URL attribute before changing `isEditingURL`,
|
|
201
|
+
// otherwise the side-effect that potentially replaces the block when updating the local state won't use the new URL
|
|
202
|
+
// for creating the new block.
|
|
203
|
+
setAttributes( { url: value } );
|
|
204
|
+
setIsEditingURL( false );
|
|
205
|
+
},
|
|
206
|
+
[ attributes, setAttributes ]
|
|
207
|
+
);
|
|
198
208
|
|
|
199
209
|
const blockProps = useBlockProps();
|
|
200
210
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`Embed block transforms to Columns block 1`] = `
|
|
4
|
+
"<!-- wp:columns -->
|
|
5
|
+
<div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
|
|
6
|
+
<div class="wp-block-column" style="flex-basis:100%"><!-- wp:embed {"url":"https://twitter.com/notnownikki","type":"rich","providerNameSlug":"twitter","responsive":true} -->
|
|
7
|
+
<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
|
|
8
|
+
https://twitter.com/notnownikki
|
|
9
|
+
</div></figure>
|
|
10
|
+
<!-- /wp:embed --></div>
|
|
11
|
+
<!-- /wp:column --></div>
|
|
12
|
+
<!-- /wp:columns -->"
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
exports[`Embed block transforms to Group block 1`] = `
|
|
16
|
+
"<!-- wp:group {"layout":{"type":"constrained"}} -->
|
|
17
|
+
<div class="wp-block-group"><!-- wp:embed {"url":"https://twitter.com/notnownikki","type":"rich","providerNameSlug":"twitter","responsive":true} -->
|
|
18
|
+
<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
|
|
19
|
+
https://twitter.com/notnownikki
|
|
20
|
+
</div></figure>
|
|
21
|
+
<!-- /wp:embed --></div>
|
|
22
|
+
<!-- /wp:group -->"
|
|
23
|
+
`;
|
package/src/embed/test/index.js
CHANGED
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
createUpgradedEmbedBlock,
|
|
18
18
|
getEmbedInfoByProvider,
|
|
19
19
|
removeAspectRatioClasses,
|
|
20
|
+
hasAspectRatioClass,
|
|
20
21
|
} from '../util';
|
|
21
22
|
import { embedInstagramIcon } from '../icons';
|
|
22
23
|
import variations from '../variations';
|
|
@@ -101,6 +102,17 @@ describe( 'utils', () => {
|
|
|
101
102
|
).toEqual( expected );
|
|
102
103
|
} );
|
|
103
104
|
} );
|
|
105
|
+
describe( 'hasAspectRatioClass', () => {
|
|
106
|
+
it( 'should return false if an aspect ratio class does not exist', () => {
|
|
107
|
+
const existingClassNames = 'wp-block-embed is-type-video';
|
|
108
|
+
expect( hasAspectRatioClass( existingClassNames ) ).toBe( false );
|
|
109
|
+
} );
|
|
110
|
+
it( 'should return true if an aspect ratio class exists', () => {
|
|
111
|
+
const existingClassNames =
|
|
112
|
+
'wp-block-embed is-type-video wp-embed-aspect-16-9 wp-has-aspect-ratio';
|
|
113
|
+
expect( hasAspectRatioClass( existingClassNames ) ).toBe( true );
|
|
114
|
+
} );
|
|
115
|
+
} );
|
|
104
116
|
describe( 'removeAspectRatioClasses', () => {
|
|
105
117
|
it( 'should return the same falsy value as received', () => {
|
|
106
118
|
const existingClassNames = undefined;
|