@wordpress/block-library 10.1.0 → 10.1.1-next.v.202607070741.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/edit.cjs +0 -1
- package/build/accordion/edit.cjs.map +2 -2
- package/build/accordion/view.cjs +23 -0
- package/build/accordion/view.cjs.map +2 -2
- package/build/accordion-heading/deprecated.cjs +121 -1
- package/build/accordion-heading/deprecated.cjs.map +2 -2
- package/build/accordion-heading/edit.cjs +18 -1
- package/build/accordion-heading/edit.cjs.map +3 -3
- package/build/accordion-heading/save.cjs +18 -1
- package/build/accordion-heading/save.cjs.map +3 -3
- package/build/accordion-panel/edit.cjs +1 -1
- package/build/accordion-panel/edit.cjs.map +2 -2
- package/build/archives/edit.cjs +0 -1
- package/build/archives/edit.cjs.map +2 -2
- package/build/audio/edit.cjs +0 -1
- package/build/audio/edit.cjs.map +2 -2
- package/build/avatar/edit.cjs +0 -1
- package/build/avatar/edit.cjs.map +2 -2
- package/build/avatar/user-control.cjs +0 -1
- package/build/avatar/user-control.cjs.map +2 -2
- package/build/categories/edit.cjs +0 -1
- package/build/categories/edit.cjs.map +2 -2
- package/build/code/transforms.cjs +5 -3
- package/build/code/transforms.cjs.map +2 -2
- package/build/column/edit.cjs +0 -1
- package/build/column/edit.cjs.map +2 -2
- package/build/columns/edit.cjs +0 -1
- package/build/columns/edit.cjs.map +2 -2
- package/build/columns/transforms.cjs +9 -2
- package/build/columns/transforms.cjs.map +2 -2
- package/build/comment-author-avatar/edit.cjs +0 -1
- package/build/comment-author-avatar/edit.cjs.map +2 -2
- package/build/comments-pagination/comments-pagination-arrow-controls.cjs +0 -1
- package/build/comments-pagination/comments-pagination-arrow-controls.cjs.map +2 -2
- package/build/cover/edit/inspector-controls.cjs +1 -3
- package/build/cover/edit/inspector-controls.cjs.map +2 -2
- package/build/details/transforms.cjs +3 -1
- package/build/details/transforms.cjs.map +2 -2
- package/build/embed/edit.cjs +2 -3
- package/build/embed/edit.cjs.map +2 -2
- package/build/embed/embed-placeholder.cjs +20 -20
- package/build/embed/embed-placeholder.cjs.map +3 -3
- package/build/file/inspector.cjs +0 -2
- package/build/file/inspector.cjs.map +2 -2
- package/build/form/edit.cjs +0 -2
- package/build/form/edit.cjs.map +2 -2
- package/build/freeform/convert-to-blocks-button.cjs +52 -0
- package/build/freeform/convert-to-blocks-button.cjs.map +7 -0
- package/build/freeform/edit.cjs +14 -33
- package/build/freeform/edit.cjs.map +3 -3
- package/build/freeform/index.cjs +1 -7
- package/build/freeform/index.cjs.map +3 -3
- package/build/gallery/block.json +4 -1
- package/build/gallery/dynamic-gallery.cjs +263 -0
- package/build/gallery/dynamic-gallery.cjs.map +7 -0
- package/build/gallery/dynamic-source.cjs +85 -0
- package/build/gallery/dynamic-source.cjs.map +7 -0
- package/build/gallery/edit.cjs +285 -205
- package/build/gallery/edit.cjs.map +3 -3
- package/build/gallery/gallery.cjs +0 -3
- package/build/gallery/gallery.cjs.map +2 -2
- package/build/gallery/index.cjs +2 -0
- package/build/gallery/index.cjs.map +3 -3
- package/build/gallery/save.cjs +16 -12
- package/build/gallery/save.cjs.map +2 -2
- package/build/gallery/use-dynamic-gallery.cjs +181 -0
- package/build/gallery/use-dynamic-gallery.cjs.map +7 -0
- package/build/gallery/variations.cjs +54 -0
- package/build/gallery/variations.cjs.map +7 -0
- package/build/group/edit.cjs +1 -2
- package/build/group/edit.cjs.map +2 -2
- package/build/group/transforms.cjs +3 -7
- package/build/group/transforms.cjs.map +2 -2
- package/build/heading/edit.cjs +10 -3
- package/build/heading/edit.cjs.map +2 -2
- package/build/html/block.json +2 -2
- package/build/html/edit.cjs +65 -23
- package/build/html/edit.cjs.map +3 -3
- package/build/html/index.cjs +3 -3
- package/build/html/index.cjs.map +2 -2
- package/build/html/modal.cjs +4 -8
- package/build/html/modal.cjs.map +2 -2
- package/build/html/save.cjs +2 -4
- package/build/html/save.cjs.map +2 -2
- package/build/html/transforms.cjs +7 -5
- package/build/html/transforms.cjs.map +2 -2
- package/build/image/animated-gif-convert-control.cjs +105 -0
- package/build/image/animated-gif-convert-control.cjs.map +7 -0
- package/build/image/edit.cjs +34 -0
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +38 -66
- package/build/image/image.cjs.map +3 -3
- package/build/index.cjs.map +2 -2
- package/build/latest-comments/edit.cjs +0 -2
- package/build/latest-comments/edit.cjs.map +2 -2
- package/build/latest-posts/block.json +8 -9
- package/build/latest-posts/constants.cjs +0 -3
- package/build/latest-posts/constants.cjs.map +2 -2
- package/build/latest-posts/deprecated.cjs +100 -8
- package/build/latest-posts/deprecated.cjs.map +2 -2
- package/build/latest-posts/edit.cjs +62 -76
- package/build/latest-posts/edit.cjs.map +2 -2
- package/build/list/ordered-list-settings.cjs +0 -1
- package/build/list/ordered-list-settings.cjs.map +2 -2
- package/build/media-text/edit.cjs +0 -1
- package/build/media-text/edit.cjs.map +2 -2
- package/build/missing/edit.cjs +1 -3
- package/build/missing/edit.cjs.map +2 -2
- package/build/navigation/edit/index.cjs +0 -1
- package/build/navigation/edit/index.cjs.map +2 -2
- package/build/navigation/edit/overlay-menu-preview-controls.cjs +0 -1
- package/build/navigation/edit/overlay-menu-preview-controls.cjs.map +2 -2
- package/build/navigation/edit/overlay-menu-preview.cjs +0 -1
- package/build/navigation/edit/overlay-menu-preview.cjs.map +2 -2
- package/build/navigation/edit/overlay-template-part-selector.cjs +0 -1
- package/build/navigation/edit/overlay-template-part-selector.cjs.map +2 -2
- package/build/navigation/edit/overlay-visibility-control.cjs +0 -1
- package/build/navigation/edit/overlay-visibility-control.cjs.map +2 -2
- package/build/navigation-link/shared/use-link-preview.cjs +11 -1
- package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
- package/build/navigation-overlay-close/edit.cjs +0 -1
- package/build/navigation-overlay-close/edit.cjs.map +2 -2
- package/build/page-list/edit.cjs +0 -1
- package/build/page-list/edit.cjs.map +2 -2
- package/build/playlist/block.json +1 -7
- package/build/playlist/context.cjs +36 -0
- package/build/playlist/context.cjs.map +7 -0
- package/build/playlist/edit.cjs +43 -69
- package/build/playlist/edit.cjs.map +3 -3
- package/build/playlist/utils.cjs +0 -3
- package/build/playlist/utils.cjs.map +3 -3
- package/build/playlist/view.cjs +4 -4
- package/build/playlist/view.cjs.map +2 -2
- package/build/playlist-track/block.json +1 -4
- package/build/playlist-track/edit.cjs +22 -8
- package/build/playlist-track/edit.cjs.map +3 -3
- package/build/post-author/edit.cjs +0 -2
- package/build/post-author/edit.cjs.map +2 -2
- package/build/post-excerpt/edit.cjs +0 -1
- package/build/post-excerpt/edit.cjs.map +2 -2
- package/build/post-featured-image/overlay-controls.cjs +1 -2
- package/build/post-featured-image/overlay-controls.cjs.map +2 -2
- package/build/post-navigation-link/edit.cjs +0 -2
- package/build/post-navigation-link/edit.cjs.map +2 -2
- package/build/query/edit/inspector-controls/author-control.cjs +1 -2
- package/build/query/edit/inspector-controls/author-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/format-controls.cjs +1 -2
- package/build/query/edit/inspector-controls/format-controls.cjs.map +2 -2
- package/build/query/edit/inspector-controls/index.cjs +0 -3
- package/build/query/edit/inspector-controls/index.cjs.map +2 -2
- package/build/query/edit/inspector-controls/order-control.cjs +0 -1
- package/build/query/edit/inspector-controls/order-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/parent-control.cjs +0 -1
- package/build/query/edit/inspector-controls/parent-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/per-page-control.cjs +0 -1
- package/build/query/edit/inspector-controls/per-page-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/sticky-control.cjs +0 -1
- package/build/query/edit/inspector-controls/sticky-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/taxonomy-controls.cjs +1 -2
- package/build/query/edit/inspector-controls/taxonomy-controls.cjs.map +2 -2
- package/build/query-pagination/query-pagination-arrow-controls.cjs +0 -1
- package/build/query-pagination/query-pagination-arrow-controls.cjs.map +2 -2
- package/build/query-pagination-numbers/edit.cjs +0 -1
- package/build/query-pagination-numbers/edit.cjs.map +2 -2
- package/build/quote/transforms.cjs +1 -5
- package/build/quote/transforms.cjs.map +2 -2
- package/build/rss/edit.cjs +0 -3
- package/build/rss/edit.cjs.map +2 -2
- package/build/search/edit.cjs +0 -4
- package/build/search/edit.cjs.map +2 -2
- package/build/separator/edit.cjs +1 -2
- package/build/separator/edit.cjs.map +2 -2
- package/build/site-logo/edit.cjs +34 -63
- package/build/site-logo/edit.cjs.map +3 -3
- package/build/social-links/edit.cjs +0 -1
- package/build/social-links/edit.cjs.map +2 -2
- package/build/spacer/controls.cjs +2 -4
- package/build/spacer/controls.cjs.map +2 -2
- package/build/spacer/edit.cjs +1 -2
- package/build/spacer/edit.cjs.map +2 -2
- package/build/tab-list/block.json +3 -2
- package/build/tab-list/edit.cjs +38 -51
- package/build/tab-list/edit.cjs.map +3 -3
- package/build/tab-list/save.cjs +4 -3
- package/build/tab-list/save.cjs.map +2 -2
- package/build/tab-panel/controls.cjs +2 -4
- package/build/tab-panel/controls.cjs.map +3 -3
- package/build/tab-panels/edit.cjs +2 -4
- package/build/tab-panels/edit.cjs.map +3 -3
- package/build/table-of-contents/edit.cjs +0 -1
- package/build/table-of-contents/edit.cjs.map +2 -2
- package/build/tabs/edit.cjs +2 -2
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/tab-toolbar-controls.cjs +74 -0
- package/build/tabs/tab-toolbar-controls.cjs.map +7 -0
- package/build/tabs/use-tab-actions.cjs +87 -0
- package/build/tabs/use-tab-actions.cjs.map +7 -0
- package/build/tabs/use-tab-list-items-sync.cjs +4 -4
- package/build/tabs/use-tab-list-items-sync.cjs.map +2 -2
- package/build/tag-cloud/edit.cjs +2 -6
- package/build/tag-cloud/edit.cjs.map +2 -2
- package/build/template-part/edit/advanced-controls.cjs +0 -1
- package/build/template-part/edit/advanced-controls.cjs.map +2 -2
- package/build/template-part/edit/import-controls.cjs +1 -2
- package/build/template-part/edit/import-controls.cjs.map +2 -2
- package/build/terms-query/edit/inspector-controls/include-control.cjs +0 -1
- package/build/terms-query/edit/inspector-controls/include-control.cjs.map +2 -2
- package/build/terms-query/edit/inspector-controls/inherit-control.cjs +0 -1
- package/build/terms-query/edit/inspector-controls/inherit-control.cjs.map +2 -2
- package/build/terms-query/edit/inspector-controls/max-terms-control.cjs +0 -1
- package/build/terms-query/edit/inspector-controls/max-terms-control.cjs.map +2 -2
- package/build/terms-query/edit/inspector-controls/order-control.cjs +0 -1
- package/build/terms-query/edit/inspector-controls/order-control.cjs.map +2 -2
- package/build/terms-query/edit/inspector-controls/taxonomy-control.cjs +0 -1
- package/build/terms-query/edit/inspector-controls/taxonomy-control.cjs.map +2 -2
- package/build/text-columns/edit.cjs +0 -1
- package/build/text-columns/edit.cjs.map +2 -2
- package/build/utils/gif-conversion-attributes.cjs +40 -0
- package/build/utils/gif-conversion-attributes.cjs.map +7 -0
- package/build/verse/block.json +3 -1
- package/build/video/block.json +6 -0
- package/build/video/edit-common-settings.cjs +0 -1
- package/build/video/edit-common-settings.cjs.map +2 -2
- package/build/video/edit.cjs +28 -3
- package/build/video/edit.cjs.map +3 -3
- package/build/video/gif-restore-control.cjs +73 -0
- package/build/video/gif-restore-control.cjs.map +7 -0
- package/build/video/index.cjs +2 -0
- package/build/video/index.cjs.map +3 -3
- package/build/video/save.cjs +7 -1
- package/build/video/save.cjs.map +2 -2
- package/build/video/tracks-editor.cjs +0 -1
- package/build/video/tracks-editor.cjs.map +2 -2
- package/build/video/variations.cjs +75 -0
- package/build/video/variations.cjs.map +7 -0
- package/build-module/accordion/edit.mjs +0 -1
- package/build-module/accordion/edit.mjs.map +2 -2
- package/build-module/accordion/view.mjs +23 -0
- package/build-module/accordion/view.mjs.map +2 -2
- package/build-module/accordion-heading/deprecated.mjs +121 -1
- package/build-module/accordion-heading/deprecated.mjs.map +2 -2
- package/build-module/accordion-heading/edit.mjs +8 -1
- package/build-module/accordion-heading/edit.mjs.map +2 -2
- package/build-module/accordion-heading/save.mjs +8 -1
- package/build-module/accordion-heading/save.mjs.map +2 -2
- package/build-module/accordion-panel/edit.mjs +1 -1
- package/build-module/accordion-panel/edit.mjs.map +2 -2
- package/build-module/archives/edit.mjs +0 -1
- package/build-module/archives/edit.mjs.map +2 -2
- package/build-module/audio/edit.mjs +0 -1
- package/build-module/audio/edit.mjs.map +2 -2
- package/build-module/avatar/edit.mjs +0 -1
- package/build-module/avatar/edit.mjs.map +2 -2
- package/build-module/avatar/user-control.mjs +0 -1
- package/build-module/avatar/user-control.mjs.map +2 -2
- package/build-module/categories/edit.mjs +0 -1
- package/build-module/categories/edit.mjs.map +2 -2
- package/build-module/code/transforms.mjs +6 -4
- package/build-module/code/transforms.mjs.map +2 -2
- package/build-module/column/edit.mjs +0 -1
- package/build-module/column/edit.mjs.map +2 -2
- package/build-module/columns/edit.mjs +0 -1
- package/build-module/columns/edit.mjs.map +2 -2
- package/build-module/columns/transforms.mjs +9 -2
- package/build-module/columns/transforms.mjs.map +2 -2
- package/build-module/comment-author-avatar/edit.mjs +0 -1
- package/build-module/comment-author-avatar/edit.mjs.map +2 -2
- package/build-module/comments-pagination/comments-pagination-arrow-controls.mjs +0 -1
- package/build-module/comments-pagination/comments-pagination-arrow-controls.mjs.map +2 -2
- package/build-module/cover/edit/inspector-controls.mjs +1 -3
- package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
- package/build-module/details/transforms.mjs +7 -2
- package/build-module/details/transforms.mjs.map +2 -2
- package/build-module/embed/edit.mjs +2 -3
- package/build-module/embed/edit.mjs.map +2 -2
- package/build-module/embed/embed-placeholder.mjs +20 -23
- package/build-module/embed/embed-placeholder.mjs.map +2 -2
- package/build-module/file/inspector.mjs +0 -2
- package/build-module/file/inspector.mjs.map +2 -2
- package/build-module/form/edit.mjs +0 -2
- package/build-module/form/edit.mjs.map +2 -2
- package/build-module/freeform/convert-to-blocks-button.mjs +31 -0
- package/build-module/freeform/convert-to-blocks-button.mjs.map +7 -0
- package/build-module/freeform/edit.mjs +15 -34
- package/build-module/freeform/edit.mjs.map +2 -2
- package/build-module/freeform/index.mjs +1 -7
- package/build-module/freeform/index.mjs.map +2 -2
- package/build-module/gallery/block.json +4 -1
- package/build-module/gallery/dynamic-gallery.mjs +253 -0
- package/build-module/gallery/dynamic-gallery.mjs.map +7 -0
- package/build-module/gallery/dynamic-source.mjs +55 -0
- package/build-module/gallery/dynamic-source.mjs.map +7 -0
- package/build-module/gallery/edit.mjs +288 -206
- package/build-module/gallery/edit.mjs.map +2 -2
- package/build-module/gallery/gallery.mjs +0 -3
- package/build-module/gallery/gallery.mjs.map +2 -2
- package/build-module/gallery/index.mjs +2 -0
- package/build-module/gallery/index.mjs.map +2 -2
- package/build-module/gallery/save.mjs +16 -12
- package/build-module/gallery/save.mjs.map +2 -2
- package/build-module/gallery/use-dynamic-gallery.mjs +167 -0
- package/build-module/gallery/use-dynamic-gallery.mjs.map +7 -0
- package/build-module/gallery/variations.mjs +33 -0
- package/build-module/gallery/variations.mjs.map +7 -0
- package/build-module/group/edit.mjs +1 -2
- package/build-module/group/edit.mjs.map +2 -2
- package/build-module/group/transforms.mjs +7 -8
- package/build-module/group/transforms.mjs.map +2 -2
- package/build-module/heading/edit.mjs +11 -4
- package/build-module/heading/edit.mjs.map +2 -2
- package/build-module/html/block.json +2 -2
- package/build-module/html/edit.mjs +69 -25
- package/build-module/html/edit.mjs.map +2 -2
- package/build-module/html/index.mjs +3 -3
- package/build-module/html/index.mjs.map +2 -2
- package/build-module/html/modal.mjs +4 -8
- package/build-module/html/modal.mjs.map +2 -2
- package/build-module/html/save.mjs +2 -4
- package/build-module/html/save.mjs.map +2 -2
- package/build-module/html/transforms.mjs +8 -6
- package/build-module/html/transforms.mjs.map +2 -2
- package/build-module/image/animated-gif-convert-control.mjs +87 -0
- package/build-module/image/animated-gif-convert-control.mjs.map +7 -0
- package/build-module/image/edit.mjs +34 -0
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +28 -67
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/index.mjs.map +2 -2
- package/build-module/latest-comments/edit.mjs +0 -2
- package/build-module/latest-comments/edit.mjs.map +2 -2
- package/build-module/latest-posts/block.json +8 -9
- package/build-module/latest-posts/constants.mjs +0 -2
- package/build-module/latest-posts/constants.mjs.map +2 -2
- package/build-module/latest-posts/deprecated.mjs +100 -8
- package/build-module/latest-posts/deprecated.mjs.map +2 -2
- package/build-module/latest-posts/edit.mjs +62 -77
- package/build-module/latest-posts/edit.mjs.map +2 -2
- package/build-module/list/ordered-list-settings.mjs +0 -1
- package/build-module/list/ordered-list-settings.mjs.map +2 -2
- package/build-module/media-text/edit.mjs +0 -1
- package/build-module/media-text/edit.mjs.map +2 -2
- package/build-module/missing/edit.mjs +1 -3
- package/build-module/missing/edit.mjs.map +2 -2
- package/build-module/navigation/edit/index.mjs +0 -1
- package/build-module/navigation/edit/index.mjs.map +2 -2
- package/build-module/navigation/edit/overlay-menu-preview-controls.mjs +0 -1
- package/build-module/navigation/edit/overlay-menu-preview-controls.mjs.map +2 -2
- package/build-module/navigation/edit/overlay-menu-preview.mjs +0 -1
- package/build-module/navigation/edit/overlay-menu-preview.mjs.map +2 -2
- package/build-module/navigation/edit/overlay-template-part-selector.mjs +0 -1
- package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
- package/build-module/navigation/edit/overlay-visibility-control.mjs +0 -1
- package/build-module/navigation/edit/overlay-visibility-control.mjs.map +2 -2
- package/build-module/navigation-link/shared/use-link-preview.mjs +11 -1
- package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
- package/build-module/navigation-overlay-close/edit.mjs +0 -1
- package/build-module/navigation-overlay-close/edit.mjs.map +2 -2
- package/build-module/page-list/edit.mjs +0 -1
- package/build-module/page-list/edit.mjs.map +2 -2
- package/build-module/playlist/block.json +1 -7
- package/build-module/playlist/context.mjs +11 -0
- package/build-module/playlist/context.mjs.map +7 -0
- package/build-module/playlist/edit.mjs +44 -70
- package/build-module/playlist/edit.mjs.map +2 -2
- package/build-module/playlist/utils.mjs +0 -3
- package/build-module/playlist/utils.mjs.map +2 -2
- package/build-module/playlist/view.mjs +4 -4
- package/build-module/playlist/view.mjs.map +2 -2
- package/build-module/playlist-track/block.json +1 -4
- package/build-module/playlist-track/edit.mjs +23 -9
- package/build-module/playlist-track/edit.mjs.map +2 -2
- package/build-module/post-author/edit.mjs +0 -2
- package/build-module/post-author/edit.mjs.map +2 -2
- package/build-module/post-excerpt/edit.mjs +0 -1
- package/build-module/post-excerpt/edit.mjs.map +2 -2
- package/build-module/post-featured-image/overlay-controls.mjs +1 -2
- package/build-module/post-featured-image/overlay-controls.mjs.map +2 -2
- package/build-module/post-navigation-link/edit.mjs +0 -2
- package/build-module/post-navigation-link/edit.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/author-control.mjs +1 -2
- package/build-module/query/edit/inspector-controls/author-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/format-controls.mjs +1 -2
- package/build-module/query/edit/inspector-controls/format-controls.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/index.mjs +0 -3
- package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/order-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/order-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/parent-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/parent-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/per-page-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/per-page-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/sticky-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/sticky-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs +1 -2
- package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs.map +2 -2
- package/build-module/query-pagination/query-pagination-arrow-controls.mjs +0 -1
- package/build-module/query-pagination/query-pagination-arrow-controls.mjs.map +2 -2
- package/build-module/query-pagination-numbers/edit.mjs +0 -1
- package/build-module/query-pagination-numbers/edit.mjs.map +2 -2
- package/build-module/quote/transforms.mjs +6 -6
- package/build-module/quote/transforms.mjs.map +2 -2
- package/build-module/rss/edit.mjs +0 -3
- package/build-module/rss/edit.mjs.map +2 -2
- package/build-module/search/edit.mjs +0 -4
- package/build-module/search/edit.mjs.map +2 -2
- package/build-module/separator/edit.mjs +1 -2
- package/build-module/separator/edit.mjs.map +2 -2
- package/build-module/site-logo/edit.mjs +34 -64
- package/build-module/site-logo/edit.mjs.map +2 -2
- package/build-module/social-links/edit.mjs +0 -1
- package/build-module/social-links/edit.mjs.map +2 -2
- package/build-module/spacer/controls.mjs +2 -4
- package/build-module/spacer/controls.mjs.map +2 -2
- package/build-module/spacer/edit.mjs +1 -2
- package/build-module/spacer/edit.mjs.map +2 -2
- package/build-module/tab-list/block.json +3 -2
- package/build-module/tab-list/edit.mjs +39 -52
- package/build-module/tab-list/edit.mjs.map +2 -2
- package/build-module/tab-list/save.mjs +5 -3
- package/build-module/tab-list/save.mjs.map +2 -2
- package/build-module/tab-panel/controls.mjs +2 -4
- package/build-module/tab-panel/controls.mjs.map +2 -2
- package/build-module/tab-panels/edit.mjs +2 -4
- package/build-module/tab-panels/edit.mjs.map +2 -2
- package/build-module/table-of-contents/edit.mjs +0 -1
- package/build-module/table-of-contents/edit.mjs.map +2 -2
- package/build-module/tabs/edit.mjs +2 -2
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/tab-toolbar-controls.mjs +46 -0
- package/build-module/tabs/tab-toolbar-controls.mjs.map +7 -0
- package/build-module/tabs/use-tab-actions.mjs +66 -0
- package/build-module/tabs/use-tab-actions.mjs.map +7 -0
- package/build-module/tabs/use-tab-list-items-sync.mjs +6 -6
- package/build-module/tabs/use-tab-list-items-sync.mjs.map +2 -2
- package/build-module/tag-cloud/edit.mjs +2 -6
- package/build-module/tag-cloud/edit.mjs.map +2 -2
- package/build-module/template-part/edit/advanced-controls.mjs +0 -1
- package/build-module/template-part/edit/advanced-controls.mjs.map +2 -2
- package/build-module/template-part/edit/import-controls.mjs +1 -2
- package/build-module/template-part/edit/import-controls.mjs.map +2 -2
- package/build-module/terms-query/edit/inspector-controls/include-control.mjs +0 -1
- package/build-module/terms-query/edit/inspector-controls/include-control.mjs.map +2 -2
- package/build-module/terms-query/edit/inspector-controls/inherit-control.mjs +0 -1
- package/build-module/terms-query/edit/inspector-controls/inherit-control.mjs.map +2 -2
- package/build-module/terms-query/edit/inspector-controls/max-terms-control.mjs +0 -1
- package/build-module/terms-query/edit/inspector-controls/max-terms-control.mjs.map +2 -2
- package/build-module/terms-query/edit/inspector-controls/order-control.mjs +0 -1
- package/build-module/terms-query/edit/inspector-controls/order-control.mjs.map +2 -2
- package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs +0 -1
- package/build-module/terms-query/edit/inspector-controls/taxonomy-control.mjs.map +2 -2
- package/build-module/text-columns/edit.mjs +0 -1
- package/build-module/text-columns/edit.mjs.map +2 -2
- package/build-module/utils/gif-conversion-attributes.mjs +15 -0
- package/build-module/utils/gif-conversion-attributes.mjs.map +7 -0
- package/build-module/verse/block.json +3 -1
- package/build-module/video/block.json +6 -0
- package/build-module/video/edit-common-settings.mjs +0 -1
- package/build-module/video/edit-common-settings.mjs.map +2 -2
- package/build-module/video/edit.mjs +28 -3
- package/build-module/video/edit.mjs.map +2 -2
- package/build-module/video/gif-restore-control.mjs +55 -0
- package/build-module/video/gif-restore-control.mjs.map +7 -0
- package/build-module/video/index.mjs +2 -0
- package/build-module/video/index.mjs.map +2 -2
- package/build-module/video/save.mjs +7 -1
- package/build-module/video/save.mjs.map +2 -2
- package/build-module/video/tracks-editor.mjs +0 -1
- package/build-module/video/tracks-editor.mjs.map +2 -2
- package/build-module/video/variations.mjs +50 -0
- package/build-module/video/variations.mjs.map +7 -0
- package/build-style/accordion-panel/style-rtl.css +1 -2
- package/build-style/accordion-panel/style.css +1 -2
- package/build-style/audio/style-rtl.css +6 -0
- package/build-style/audio/style.css +6 -0
- package/build-style/audio/theme-rtl.css +6 -0
- package/build-style/audio/theme.css +6 -0
- package/build-style/columns/style-rtl.css +6 -0
- package/build-style/columns/style.css +6 -0
- package/build-style/common-rtl.css +6 -4
- package/build-style/common.css +6 -4
- package/build-style/editor-rtl.css +38 -3
- package/build-style/editor.css +38 -3
- package/build-style/embed/style-rtl.css +6 -0
- package/build-style/embed/style.css +6 -0
- package/build-style/embed/theme-rtl.css +6 -0
- package/build-style/embed/theme.css +6 -0
- package/build-style/freeform/editor-rtl.css +6 -0
- package/build-style/freeform/editor.css +6 -0
- package/build-style/gallery/editor-rtl.css +27 -3
- package/build-style/gallery/editor.css +27 -3
- package/build-style/gallery/style-rtl.css +6 -0
- package/build-style/gallery/style.css +6 -0
- package/build-style/gallery/theme-rtl.css +6 -0
- package/build-style/gallery/theme.css +6 -0
- package/build-style/html/editor-rtl.css +13 -0
- package/build-style/html/editor.css +13 -0
- package/build-style/image/editor-rtl.css +10 -0
- package/build-style/image/editor.css +10 -0
- package/build-style/image/style-rtl.css +6 -1
- package/build-style/image/style.css +6 -1
- package/build-style/image/theme-rtl.css +6 -0
- package/build-style/image/theme.css +6 -0
- package/build-style/latest-posts/style-rtl.css +26 -15
- package/build-style/latest-posts/style.css +26 -15
- package/build-style/navigation/editor-rtl.css +6 -0
- package/build-style/navigation/editor.css +6 -0
- package/build-style/navigation/style-rtl.css +6 -0
- package/build-style/navigation/style.css +6 -0
- package/build-style/navigation-submenu/editor-rtl.css +6 -0
- package/build-style/navigation-submenu/editor.css +6 -0
- package/build-style/page-list/editor-rtl.css +6 -0
- package/build-style/page-list/editor.css +6 -0
- package/build-style/playlist/style-rtl.css +121 -19
- package/build-style/playlist/style.css +121 -19
- package/build-style/post-template/style-rtl.css +6 -0
- package/build-style/post-template/style.css +6 -0
- package/build-style/query/editor-rtl.css +6 -0
- package/build-style/query/editor.css +6 -0
- package/build-style/rss/style-rtl.css +6 -0
- package/build-style/rss/style.css +6 -0
- package/build-style/shortcode/editor-rtl.css +6 -0
- package/build-style/shortcode/editor.css +6 -0
- package/build-style/style-rtl.css +145 -38
- package/build-style/style.css +145 -38
- package/build-style/table/editor-rtl.css +6 -0
- package/build-style/table/editor.css +6 -0
- package/build-style/table/theme-rtl.css +6 -0
- package/build-style/table/theme.css +6 -0
- package/build-style/template-part/editor-rtl.css +6 -0
- package/build-style/template-part/editor.css +6 -0
- package/build-style/theme-rtl.css +6 -0
- package/build-style/theme.css +6 -0
- package/build-style/video/style-rtl.css +6 -0
- package/build-style/video/style.css +6 -0
- package/build-style/video/theme-rtl.css +6 -0
- package/build-style/video/theme.css +6 -0
- package/package.json +43 -41
- package/src/accordion/README.md +1 -1
- package/src/accordion/edit.js +0 -1
- package/src/accordion/view.js +24 -0
- package/src/accordion-heading/README.md +1 -1
- package/src/accordion-heading/deprecated.js +122 -1
- package/src/accordion-heading/edit.js +12 -1
- package/src/accordion-heading/save.js +12 -1
- package/src/accordion-item/README.md +1 -1
- package/src/accordion-item/index.php +2 -1
- package/src/accordion-panel/edit.js +1 -1
- package/src/accordion-panel/style.scss +1 -4
- package/src/archives/edit.js +0 -1
- package/src/audio/edit.js +0 -1
- package/src/avatar/edit.js +0 -1
- package/src/avatar/user-control.js +0 -1
- package/src/categories/edit.js +0 -1
- package/src/code/transforms.js +6 -4
- package/src/column/edit.js +0 -1
- package/src/columns/edit.js +0 -1
- package/src/columns/transforms.js +9 -2
- package/src/comment-author-avatar/edit.js +0 -1
- package/src/comments-pagination/comments-pagination-arrow-controls.js +0 -1
- package/src/common.scss +0 -4
- package/src/cover/edit/inspector-controls.js +0 -2
- package/src/cover/test/edit.js +4 -4
- package/src/details/transforms.js +7 -2
- package/src/embed/edit.js +4 -5
- package/src/embed/embed-placeholder.js +16 -19
- package/src/file/inspector.js +0 -2
- package/src/form/edit.js +0 -2
- package/src/freeform/convert-to-blocks-button.js +33 -0
- package/src/freeform/edit.js +11 -21
- package/src/freeform/index.js +1 -9
- package/src/gallery/README.md +3 -0
- package/src/gallery/block.json +4 -1
- package/src/gallery/dynamic-gallery.js +384 -0
- package/src/gallery/dynamic-source.js +117 -0
- package/src/gallery/edit.js +152 -46
- package/src/gallery/editor.scss +32 -4
- package/src/gallery/gallery.js +0 -7
- package/src/gallery/index.js +2 -0
- package/src/gallery/index.php +277 -0
- package/src/gallery/save.js +22 -11
- package/src/gallery/test/dynamic-source.js +90 -0
- package/src/gallery/use-dynamic-gallery.js +275 -0
- package/src/gallery/variations.js +37 -0
- package/src/group/edit.js +2 -3
- package/src/group/transforms.js +7 -8
- package/src/heading/edit.js +19 -14
- package/src/home-link/index.php +1 -1
- package/src/html/README.md +2 -1
- package/src/html/block.json +2 -2
- package/src/html/edit.js +86 -14
- package/src/html/editor.scss +10 -0
- package/src/html/index.js +3 -4
- package/src/html/modal.js +5 -9
- package/src/html/save.js +4 -7
- package/src/html/test/index.js +143 -0
- package/src/html/transforms.js +11 -6
- package/src/icon/index.php +38 -45
- package/src/image/animated-gif-convert-control.js +135 -0
- package/src/image/edit.js +52 -0
- package/src/image/editor.scss +9 -0
- package/src/image/image.js +121 -180
- package/src/image/style.scss +0 -1
- package/src/image/test/animated-gif-convert-control.js +276 -0
- package/src/image/test/use-open-image-media-editor-modal.js +19 -4
- package/src/index.js +0 -2
- package/src/latest-comments/edit.js +0 -2
- package/src/latest-posts/README.md +2 -2
- package/src/latest-posts/block.json +8 -9
- package/src/latest-posts/constants.js +0 -1
- package/src/latest-posts/deprecated.js +112 -9
- package/src/latest-posts/edit.js +33 -45
- package/src/latest-posts/index.php +14 -3
- package/src/latest-posts/style.scss +12 -2
- package/src/latest-posts/test/deprecated.js +153 -0
- package/src/list/ordered-list-settings.js +0 -1
- package/src/media-text/edit.js +0 -1
- package/src/missing/edit.js +1 -3
- package/src/navigation/edit/index.js +0 -1
- package/src/navigation/edit/overlay-menu-preview-controls.js +0 -1
- package/src/navigation/edit/overlay-menu-preview.js +0 -1
- package/src/navigation/edit/overlay-template-part-selector.js +0 -1
- package/src/navigation/edit/overlay-visibility-control.js +0 -1
- package/src/navigation-link/shared/test/controls.js +0 -4
- package/src/navigation-link/shared/test/use-entity-binding.js +8 -12
- package/src/navigation-link/shared/test/use-handle-link-change.test.js +0 -4
- package/src/navigation-link/shared/test/use-link-preview.test.js +17 -4
- package/src/navigation-link/shared/use-link-preview.js +24 -4
- package/src/navigation-overlay-close/edit.js +0 -1
- package/src/page-list/edit.js +0 -1
- package/src/page-list/index.php +1 -1
- package/src/playlist/README.md +0 -2
- package/src/playlist/block.json +1 -7
- package/src/playlist/context.js +9 -0
- package/src/playlist/edit.js +51 -82
- package/src/playlist/index.php +37 -26
- package/src/playlist/style.scss +0 -5
- package/src/playlist/test/edit.js +0 -10
- package/src/playlist/utils.js +0 -6
- package/src/playlist/view.js +4 -4
- package/src/playlist-track/README.md +0 -2
- package/src/playlist-track/block.json +1 -4
- package/src/playlist-track/edit.js +25 -16
- package/src/playlist-track/index.php +4 -11
- package/src/post-author/edit.js +0 -2
- package/src/post-excerpt/edit.js +0 -1
- package/src/post-featured-image/overlay-controls.js +0 -1
- package/src/post-navigation-link/edit.js +0 -2
- package/src/query/edit/inspector-controls/author-control.js +0 -1
- package/src/query/edit/inspector-controls/format-controls.js +0 -1
- package/src/query/edit/inspector-controls/index.js +0 -3
- package/src/query/edit/inspector-controls/order-control.js +0 -1
- package/src/query/edit/inspector-controls/parent-control.js +0 -1
- package/src/query/edit/inspector-controls/per-page-control.js +0 -1
- package/src/query/edit/inspector-controls/sticky-control.js +0 -1
- package/src/query/edit/inspector-controls/taxonomy-controls.js +0 -1
- package/src/query-pagination/query-pagination-arrow-controls.js +0 -1
- package/src/query-pagination-numbers/edit.js +0 -1
- package/src/quote/transforms.js +6 -6
- package/src/rss/edit.js +0 -3
- package/src/search/edit.js +0 -4
- package/src/separator/edit.js +0 -1
- package/src/site-logo/edit.js +38 -78
- package/src/social-links/edit.js +0 -1
- package/src/spacer/controls.js +2 -4
- package/src/spacer/edit.js +2 -3
- package/src/tab-list/block.json +3 -2
- package/src/tab-list/edit.js +53 -55
- package/src/tab-list/save.js +5 -4
- package/src/tab-panel/controls.js +2 -4
- package/src/tab-panels/edit.js +2 -4
- package/src/table-of-contents/edit.js +0 -1
- package/src/tabs/edit.js +2 -2
- package/src/tabs/tab-toolbar-controls.js +58 -0
- package/src/tabs/use-tab-actions.js +102 -0
- package/src/tabs/use-tab-list-items-sync.js +7 -8
- package/src/tag-cloud/edit.js +0 -4
- package/src/tag-cloud/index.php +1 -1
- package/src/template-part/edit/advanced-controls.js +0 -1
- package/src/template-part/edit/import-controls.js +0 -1
- package/src/terms-query/edit/inspector-controls/include-control.js +0 -1
- package/src/terms-query/edit/inspector-controls/inherit-control.js +0 -1
- package/src/terms-query/edit/inspector-controls/max-terms-control.js +0 -1
- package/src/terms-query/edit/inspector-controls/order-control.js +0 -1
- package/src/terms-query/edit/inspector-controls/taxonomy-control.js +0 -1
- package/src/text-columns/edit.js +0 -1
- package/src/utils/gif-conversion-attributes.js +30 -0
- package/src/utils/test/gif-conversion-attributes.js +60 -0
- package/src/utils/test/waveform-player.js +0 -4
- package/src/utils/test/waveform-utils.js +0 -4
- package/src/verse/README.md +1 -0
- package/src/verse/block.json +3 -1
- package/src/video/README.md +2 -0
- package/src/video/block.json +6 -0
- package/src/video/edit-common-settings.js +0 -1
- package/src/video/edit.js +38 -1
- package/src/video/gif-restore-control.js +92 -0
- package/src/video/index.js +2 -0
- package/src/video/save.js +12 -0
- package/src/video/test/variations.js +65 -0
- package/src/video/tracks-editor.js +0 -1
- package/src/video/variations.js +65 -0
- package/build/freeform/migration-notice.cjs +0 -58
- package/build/freeform/migration-notice.cjs.map +0 -7
- package/build/tab-panel/add-tab-toolbar-control.cjs +0 -90
- package/build/tab-panel/add-tab-toolbar-control.cjs.map +0 -7
- package/build/tab-panel/remove-tab-toolbar-control.cjs +0 -99
- package/build/tab-panel/remove-tab-toolbar-control.cjs.map +0 -7
- package/build/tabs/controls.cjs +0 -45
- package/build/tabs/controls.cjs.map +0 -7
- package/build-module/freeform/migration-notice.mjs +0 -37
- package/build-module/freeform/migration-notice.mjs.map +0 -7
- package/build-module/tab-panel/add-tab-toolbar-control.mjs +0 -72
- package/build-module/tab-panel/add-tab-toolbar-control.mjs.map +0 -7
- package/build-module/tab-panel/remove-tab-toolbar-control.mjs +0 -81
- package/build-module/tab-panel/remove-tab-toolbar-control.mjs.map +0 -7
- package/build-module/tabs/controls.mjs +0 -14
- package/build-module/tabs/controls.mjs.map +0 -7
- package/src/freeform/migration-notice.js +0 -49
- package/src/tab-panel/add-tab-toolbar-control.js +0 -90
- package/src/tab-panel/remove-tab-toolbar-control.js +0 -110
- package/src/tabs/controls.js +0 -14
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import { ToolbarButton } from '@wordpress/components';
|
|
6
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
7
|
+
import { rawHandler, serialize } from '@wordpress/blocks';
|
|
8
|
+
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
9
|
+
|
|
10
|
+
const ConvertToBlocksButton = ( { clientId } ) => {
|
|
11
|
+
const { replaceBlocks } = useDispatch( blockEditorStore );
|
|
12
|
+
const block = useSelect(
|
|
13
|
+
( select ) => {
|
|
14
|
+
return select( blockEditorStore ).getBlock( clientId );
|
|
15
|
+
},
|
|
16
|
+
[ clientId ]
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<ToolbarButton
|
|
21
|
+
onClick={ () =>
|
|
22
|
+
replaceBlocks(
|
|
23
|
+
block.clientId,
|
|
24
|
+
rawHandler( { HTML: serialize( block ) } )
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
>
|
|
28
|
+
{ __( 'Convert to blocks' ) }
|
|
29
|
+
</ToolbarButton>
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default ConvertToBlocksButton;
|
package/src/freeform/edit.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
useBlockProps,
|
|
8
8
|
store as blockEditorStore,
|
|
9
9
|
} from '@wordpress/block-editor';
|
|
10
|
-
import {
|
|
10
|
+
import { useSelect } from '@wordpress/data';
|
|
11
11
|
import {
|
|
12
12
|
Button,
|
|
13
13
|
Placeholder,
|
|
@@ -21,14 +21,13 @@ import { classic } from '@wordpress/icons';
|
|
|
21
21
|
/**
|
|
22
22
|
* Internal dependencies
|
|
23
23
|
*/
|
|
24
|
-
import
|
|
24
|
+
import ConvertToBlocksButton from './convert-to-blocks-button';
|
|
25
25
|
import ModalEdit from './modal';
|
|
26
26
|
|
|
27
27
|
export default function FreeformEdit( {
|
|
28
28
|
attributes,
|
|
29
29
|
setAttributes,
|
|
30
30
|
clientId,
|
|
31
|
-
onReplace,
|
|
32
31
|
} ) {
|
|
33
32
|
const { content } = attributes;
|
|
34
33
|
const [ isOpen, setOpen ] = useState( false );
|
|
@@ -38,10 +37,16 @@ export default function FreeformEdit( {
|
|
|
38
37
|
( select ) => select( blockEditorStore ).canRemoveBlock( clientId ),
|
|
39
38
|
[ clientId ]
|
|
40
39
|
);
|
|
41
|
-
const { removeBlock } = useDispatch( blockEditorStore );
|
|
42
40
|
|
|
43
41
|
return (
|
|
44
42
|
<>
|
|
43
|
+
{ canRemove && (
|
|
44
|
+
<BlockControls>
|
|
45
|
+
<ToolbarGroup>
|
|
46
|
+
<ConvertToBlocksButton clientId={ clientId } />
|
|
47
|
+
</ToolbarGroup>
|
|
48
|
+
</BlockControls>
|
|
49
|
+
) }
|
|
45
50
|
<BlockControls>
|
|
46
51
|
<ToolbarGroup>
|
|
47
52
|
<ToolbarButton
|
|
@@ -53,12 +58,6 @@ export default function FreeformEdit( {
|
|
|
53
58
|
</ToolbarGroup>
|
|
54
59
|
</BlockControls>
|
|
55
60
|
<div { ...useBlockProps() }>
|
|
56
|
-
{ canRemove && content && (
|
|
57
|
-
<MigrationNotice
|
|
58
|
-
content={ content }
|
|
59
|
-
onReplace={ onReplace }
|
|
60
|
-
/>
|
|
61
|
-
) }
|
|
62
61
|
{ content ? (
|
|
63
62
|
<RawHTML>{ content }</RawHTML>
|
|
64
63
|
) : (
|
|
@@ -66,21 +65,12 @@ export default function FreeformEdit( {
|
|
|
66
65
|
icon={ <BlockIcon icon={ classic } /> }
|
|
67
66
|
label={ __( 'Classic' ) }
|
|
68
67
|
instructions={ __(
|
|
69
|
-
'
|
|
68
|
+
'Use the classic editor to add content.'
|
|
70
69
|
) }
|
|
71
70
|
>
|
|
72
|
-
{ canRemove && (
|
|
73
|
-
<Button
|
|
74
|
-
__next40pxDefaultSize
|
|
75
|
-
variant="primary"
|
|
76
|
-
onClick={ () => removeBlock( clientId ) }
|
|
77
|
-
>
|
|
78
|
-
{ __( 'Remove block' ) }
|
|
79
|
-
</Button>
|
|
80
|
-
) }
|
|
81
71
|
<Button
|
|
82
72
|
__next40pxDefaultSize
|
|
83
|
-
variant=
|
|
73
|
+
variant="primary"
|
|
84
74
|
onClick={ () => setOpen( true ) }
|
|
85
75
|
>
|
|
86
76
|
{ __( 'Edit contents' ) }
|
package/src/freeform/index.js
CHANGED
|
@@ -21,12 +21,4 @@ export const settings = {
|
|
|
21
21
|
save,
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
export const init = () => {
|
|
25
|
-
// Only expose the block in the inserter if the current post actually needs
|
|
26
|
-
// a classic block.
|
|
27
|
-
const supports = {
|
|
28
|
-
...metadata.supports,
|
|
29
|
-
inserter: !! window?.__needsClassicBlock,
|
|
30
|
-
};
|
|
31
|
-
return initBlock( { name, metadata, settings: { ...settings, supports } } );
|
|
32
|
-
};
|
|
24
|
+
export const init = () => initBlock( { name, metadata, settings } );
|
package/src/gallery/README.md
CHANGED
|
@@ -22,6 +22,7 @@ _Defined via the [`attributes`](https://developer.wordpress.org/block-editor/ref
|
|
|
22
22
|
|-----------|------|---------|-------------|
|
|
23
23
|
| `images` | `array` | `[]` | [Source](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `query`. [Selector](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#value-source): `.blocks-gallery-item` |
|
|
24
24
|
| `ids` | `array` | `[]` | — |
|
|
25
|
+
| `dynamicContent` | `object` | — | — |
|
|
25
26
|
| `navigationButtonType` | `string` | `"icon"` | [Enum](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/#enum-validation): `icon`, `text`, `both` |
|
|
26
27
|
| `shortCodeTransforms` | `array` | `[]` | — |
|
|
27
28
|
| `columns` | `number` | — | — |
|
|
@@ -67,6 +68,8 @@ _Defined via the [`usesContext` and `providesContext`](https://developer.wordpre
|
|
|
67
68
|
**Uses context:**
|
|
68
69
|
|
|
69
70
|
- `galleryId`
|
|
71
|
+
- `postId`
|
|
72
|
+
- `postType`
|
|
70
73
|
|
|
71
74
|
**Provides context:**
|
|
72
75
|
|
package/src/gallery/block.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"name": "core/gallery",
|
|
5
5
|
"title": "Gallery",
|
|
6
6
|
"category": "media",
|
|
7
|
-
"usesContext": [ "galleryId" ],
|
|
7
|
+
"usesContext": [ "galleryId", "postId", "postType" ],
|
|
8
8
|
"allowedBlocks": [ "core/image" ],
|
|
9
9
|
"description": "Display multiple images in a rich gallery.",
|
|
10
10
|
"keywords": [ "images", "photos" ],
|
|
@@ -61,6 +61,9 @@
|
|
|
61
61
|
},
|
|
62
62
|
"default": []
|
|
63
63
|
},
|
|
64
|
+
"dynamicContent": {
|
|
65
|
+
"type": "object"
|
|
66
|
+
},
|
|
64
67
|
"navigationButtonType": {
|
|
65
68
|
"type": "string",
|
|
66
69
|
"default": "icon",
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
5
|
+
import { useState } from '@wordpress/element';
|
|
6
|
+
import {
|
|
7
|
+
Button,
|
|
8
|
+
Notice,
|
|
9
|
+
PanelBody,
|
|
10
|
+
Placeholder,
|
|
11
|
+
SelectControl,
|
|
12
|
+
Spinner,
|
|
13
|
+
ToolbarButton,
|
|
14
|
+
__experimentalToolsPanel as ToolsPanel,
|
|
15
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
16
|
+
__experimentalConfirmDialog as ConfirmDialog,
|
|
17
|
+
} from '@wordpress/components';
|
|
18
|
+
import {
|
|
19
|
+
BlockContextProvider,
|
|
20
|
+
BlockControls,
|
|
21
|
+
useBlockEditingMode,
|
|
22
|
+
__experimentalUseBlockPreview as useBlockPreview,
|
|
23
|
+
} from '@wordpress/block-editor';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Internal dependencies
|
|
27
|
+
*/
|
|
28
|
+
import { sharedIcon } from './shared-icon';
|
|
29
|
+
import { Caption } from '../utils/caption';
|
|
30
|
+
import { DEFAULT_ORDERBY, DEFAULT_ORDER, MAX_IMAGES } from './dynamic-source';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Ordering options for a dynamic gallery source. Each value is a composite
|
|
34
|
+
* `"orderby/order"` string mapping to the matching `/wp/v2/media` collection
|
|
35
|
+
* params. `menu_order` is deliberately omitted — it isn't a valid REST `orderby`
|
|
36
|
+
* value, so the editor preview couldn't reproduce it (see `dynamic-source.js`).
|
|
37
|
+
*/
|
|
38
|
+
const ORDER_OPTIONS = [
|
|
39
|
+
{ label: __( 'Newest to oldest' ), value: 'date/desc' },
|
|
40
|
+
{ label: __( 'Oldest to newest' ), value: 'date/asc' },
|
|
41
|
+
{
|
|
42
|
+
/* translators: Label for ordering images by title in ascending order. */
|
|
43
|
+
label: __( 'A → Z' ),
|
|
44
|
+
value: 'title/asc',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
/* translators: Label for ordering images by title in descending order. */
|
|
48
|
+
label: __( 'Z → A' ),
|
|
49
|
+
value: 'title/desc',
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* "Order by" control for a dynamic gallery, mirroring the Query Loop block's
|
|
55
|
+
* `OrderControl`: a single `SelectControl` whose value composites `orderby` and
|
|
56
|
+
* `order`, split apart again on change.
|
|
57
|
+
*
|
|
58
|
+
* @param {Object} props
|
|
59
|
+
* @param {string} props.orderby Current `orderby` value.
|
|
60
|
+
* @param {string} props.order Current `order` value (`asc`/`desc`).
|
|
61
|
+
* @param {Function} props.onChange Called with `{ orderby, order }` on change.
|
|
62
|
+
*/
|
|
63
|
+
function OrderControl( { orderby, order, onChange } ) {
|
|
64
|
+
return (
|
|
65
|
+
<SelectControl
|
|
66
|
+
label={ __( 'Order by' ) }
|
|
67
|
+
value={ `${ orderby }/${ order }` }
|
|
68
|
+
options={ ORDER_OPTIONS }
|
|
69
|
+
onChange={ ( value ) => {
|
|
70
|
+
const [ newOrderby, newOrder ] = value.split( '/' );
|
|
71
|
+
onChange( { orderby: newOrderby, order: newOrder } );
|
|
72
|
+
} }
|
|
73
|
+
/>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The Gallery block's "Source" inspector panel.
|
|
79
|
+
*
|
|
80
|
+
* In dynamic mode it shows the resolved source, a control to convert back to
|
|
81
|
+
* individual images, and the source ordering. In static mode it offers the
|
|
82
|
+
* entry point into dynamic mode — and, since switching discards any hand-added
|
|
83
|
+
* images, owns the confirmation dialog for that one-way change. Rendered inside
|
|
84
|
+
* the block's `InspectorControls`, alongside the Settings panel.
|
|
85
|
+
*
|
|
86
|
+
* @param {Object} props
|
|
87
|
+
* @param {Object} props.dynamic The `useDynamicGallery` result.
|
|
88
|
+
* @param {Object} props.dropdownMenuProps Shared ToolsPanel dropdown menu props.
|
|
89
|
+
* @param {boolean} props.hasImages Whether the gallery has manually-added images.
|
|
90
|
+
*/
|
|
91
|
+
export function GallerySourcePanel( {
|
|
92
|
+
dynamic,
|
|
93
|
+
dropdownMenuProps,
|
|
94
|
+
hasImages,
|
|
95
|
+
} ) {
|
|
96
|
+
const {
|
|
97
|
+
dynamicContent,
|
|
98
|
+
canUseDynamicSource,
|
|
99
|
+
sourceDescriptor,
|
|
100
|
+
sourceOrderby,
|
|
101
|
+
sourceOrder,
|
|
102
|
+
setSourceOrder,
|
|
103
|
+
convertToStatic,
|
|
104
|
+
enableDynamicMode,
|
|
105
|
+
resetSource,
|
|
106
|
+
isResolvingDynamic,
|
|
107
|
+
hasMoreImagesThanCap,
|
|
108
|
+
dynamicMediaTotal,
|
|
109
|
+
} = dynamic;
|
|
110
|
+
const isDynamic = !! dynamicContent;
|
|
111
|
+
|
|
112
|
+
const [ isConfirming, setIsConfirming ] = useState( false );
|
|
113
|
+
|
|
114
|
+
// Entering dynamic mode discards any hand-added images, so confirm first
|
|
115
|
+
// when there are images to lose; otherwise switch straight away.
|
|
116
|
+
function requestEnableDynamicMode() {
|
|
117
|
+
if ( hasImages ) {
|
|
118
|
+
setIsConfirming( true );
|
|
119
|
+
} else {
|
|
120
|
+
enableDynamicMode();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if ( isDynamic ) {
|
|
125
|
+
return (
|
|
126
|
+
<ToolsPanel
|
|
127
|
+
label={ __( 'Source' ) }
|
|
128
|
+
resetAll={ resetSource }
|
|
129
|
+
dropdownMenuProps={ dropdownMenuProps }
|
|
130
|
+
>
|
|
131
|
+
<div className="wp-block-gallery__source-settings">
|
|
132
|
+
<p className="wp-block-gallery__source-description">
|
|
133
|
+
{ sourceDescriptor?.description ??
|
|
134
|
+
__( 'Dynamic images.' ) }
|
|
135
|
+
</p>
|
|
136
|
+
<Button
|
|
137
|
+
__next40pxDefaultSize
|
|
138
|
+
variant="secondary"
|
|
139
|
+
onClick={ convertToStatic }
|
|
140
|
+
// Guard the race where the media is still resolving:
|
|
141
|
+
// converting now would map over an incomplete (or empty)
|
|
142
|
+
// list and produce a gallery missing images.
|
|
143
|
+
disabled={ isResolvingDynamic }
|
|
144
|
+
accessibleWhenDisabled
|
|
145
|
+
>
|
|
146
|
+
{ __( 'Convert to individual images' ) }
|
|
147
|
+
</Button>
|
|
148
|
+
</div>
|
|
149
|
+
{ hasMoreImagesThanCap && (
|
|
150
|
+
<Notice
|
|
151
|
+
className="wp-block-gallery__source-notice"
|
|
152
|
+
status="warning"
|
|
153
|
+
isDismissible={ false }
|
|
154
|
+
>
|
|
155
|
+
{ sprintf(
|
|
156
|
+
/* translators: 1: number of images shown. 2: total number of matching images. */
|
|
157
|
+
__(
|
|
158
|
+
'Only the first %1$d of %2$d images will be displayed.'
|
|
159
|
+
),
|
|
160
|
+
MAX_IMAGES,
|
|
161
|
+
dynamicMediaTotal
|
|
162
|
+
) }
|
|
163
|
+
</Notice>
|
|
164
|
+
) }
|
|
165
|
+
<ToolsPanelItem
|
|
166
|
+
isShownByDefault
|
|
167
|
+
label={ __( 'Order by' ) }
|
|
168
|
+
hasValue={ () =>
|
|
169
|
+
sourceOrderby !== DEFAULT_ORDERBY ||
|
|
170
|
+
sourceOrder !== DEFAULT_ORDER
|
|
171
|
+
}
|
|
172
|
+
onDeselect={ () => setSourceOrder( undefined, undefined ) }
|
|
173
|
+
>
|
|
174
|
+
<OrderControl
|
|
175
|
+
orderby={ sourceOrderby }
|
|
176
|
+
order={ sourceOrder }
|
|
177
|
+
onChange={ ( { orderby, order } ) =>
|
|
178
|
+
setSourceOrder( orderby, order )
|
|
179
|
+
}
|
|
180
|
+
/>
|
|
181
|
+
</ToolsPanelItem>
|
|
182
|
+
</ToolsPanel>
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// In static mode this panel is just an entry into dynamic mode, so hide it
|
|
187
|
+
// when there's no post type to preview against. This is intentionally
|
|
188
|
+
// stricter than the placeholder's entry button (see `edit.js`), which stays
|
|
189
|
+
// available anywhere because the source resolves at render time.
|
|
190
|
+
if ( ! canUseDynamicSource ) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return (
|
|
195
|
+
<>
|
|
196
|
+
<PanelBody title={ __( 'Source' ) }>
|
|
197
|
+
<div className="wp-block-gallery__source-settings">
|
|
198
|
+
{ /*
|
|
199
|
+
* Hardcoded on purpose: this single-source entry button (and
|
|
200
|
+
* its confirm dialog below) is temporary. Once more sources
|
|
201
|
+
* exist it becomes a "Choose source" select whose options read
|
|
202
|
+
* from each source descriptor's `title`, with help text
|
|
203
|
+
* carrying the per-source explanation this string does today.
|
|
204
|
+
*/ }
|
|
205
|
+
<Button
|
|
206
|
+
__next40pxDefaultSize
|
|
207
|
+
variant="secondary"
|
|
208
|
+
onClick={ requestEnableDynamicMode }
|
|
209
|
+
>
|
|
210
|
+
{ __( 'Use images attached to the post' ) }
|
|
211
|
+
</Button>
|
|
212
|
+
</div>
|
|
213
|
+
</PanelBody>
|
|
214
|
+
{ isConfirming && (
|
|
215
|
+
<ConfirmDialog
|
|
216
|
+
isOpen
|
|
217
|
+
title={ __( 'Use images attached to the post?' ) }
|
|
218
|
+
__experimentalHideHeader={ false }
|
|
219
|
+
confirmButtonText={ __( 'Use attached images' ) }
|
|
220
|
+
onConfirm={ () => {
|
|
221
|
+
enableDynamicMode();
|
|
222
|
+
setIsConfirming( false );
|
|
223
|
+
} }
|
|
224
|
+
onCancel={ () => setIsConfirming( false ) }
|
|
225
|
+
size="medium"
|
|
226
|
+
>
|
|
227
|
+
{ __(
|
|
228
|
+
'The images in this gallery will be replaced, but will remain in the media library.'
|
|
229
|
+
) }
|
|
230
|
+
</ConfirmDialog>
|
|
231
|
+
) }
|
|
232
|
+
</>
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Renders the resolved image blocks as a read-only preview.
|
|
238
|
+
*
|
|
239
|
+
* `useBlockPreview` returns a `useDisabled` ref that makes its subtree inert, so
|
|
240
|
+
* previewed images (including any links) aren't interactive in the editor. The
|
|
241
|
+
* ref needs a real element, yet the images must stay flex children of the gallery
|
|
242
|
+
* `<figure>` and sit beside an editable caption. `display: contents` resolves
|
|
243
|
+
* this: the wrapper carries the ref but generates no box, so the image figures
|
|
244
|
+
* remain the figure's flex items and only they are disabled — the caption sibling
|
|
245
|
+
* stays editable. This relies on the gallery's image styles using descendant
|
|
246
|
+
* (not direct-child) selectors, which the box-less wrapper leaves intact.
|
|
247
|
+
*
|
|
248
|
+
* @param {Object} props
|
|
249
|
+
* @param {Object[]} props.imageBlocks Non-persisted `core/image` blocks to preview.
|
|
250
|
+
*/
|
|
251
|
+
function GalleryImagesPreview( { imageBlocks } ) {
|
|
252
|
+
const { children, ref, className } = useBlockPreview( {
|
|
253
|
+
blocks: imageBlocks,
|
|
254
|
+
} );
|
|
255
|
+
return (
|
|
256
|
+
<div
|
|
257
|
+
ref={ ref }
|
|
258
|
+
className={ className }
|
|
259
|
+
style={ { display: 'contents' } }
|
|
260
|
+
>
|
|
261
|
+
{ children }
|
|
262
|
+
</div>
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Renders a dynamic-mode gallery on the canvas:
|
|
268
|
+
*
|
|
269
|
+
* - a block-toolbar control to convert back to individual images;
|
|
270
|
+
* - the gallery `<figure>` wrapper holding a non-editable preview of the
|
|
271
|
+
* resolved media (or a placeholder while resolving / when nothing is found),
|
|
272
|
+
* with the gallery's provided context so the previewed images inherit
|
|
273
|
+
* gallery-wide settings;
|
|
274
|
+
* - an editable gallery-level caption, alongside the read-only preview;
|
|
275
|
+
* - the (empty) inner blocks kept mounted so the container's `allowedBlocks: []`
|
|
276
|
+
* keeps syncing to block list settings (which blocks insertion and hides the
|
|
277
|
+
* List View).
|
|
278
|
+
*
|
|
279
|
+
* @param {Object} props
|
|
280
|
+
* @param {Object} props.dynamic The `useDynamicGallery` result.
|
|
281
|
+
* @param {Object} props.blockProps The gallery's `useBlockProps()` result.
|
|
282
|
+
* @param {Object} props.innerBlocksProps The gallery's `useInnerBlocksProps()` result.
|
|
283
|
+
* @param {Object} props.attributes The gallery block attributes.
|
|
284
|
+
* @param {Function} props.setAttributes The block's `setAttributes`.
|
|
285
|
+
* @param {boolean} props.isSelected Whether the gallery block is selected.
|
|
286
|
+
* @param {Function} props.insertBlocksAfter Inserts blocks after the gallery.
|
|
287
|
+
* @param {boolean} props.isContentLocked Whether the gallery is content-locked.
|
|
288
|
+
* @param {boolean} props.multiGallerySelection Whether multiple galleries are selected.
|
|
289
|
+
*/
|
|
290
|
+
export function GalleryDynamicView( {
|
|
291
|
+
dynamic,
|
|
292
|
+
blockProps,
|
|
293
|
+
innerBlocksProps,
|
|
294
|
+
attributes,
|
|
295
|
+
setAttributes,
|
|
296
|
+
isSelected,
|
|
297
|
+
insertBlocksAfter,
|
|
298
|
+
isContentLocked,
|
|
299
|
+
multiGallerySelection,
|
|
300
|
+
} ) {
|
|
301
|
+
const {
|
|
302
|
+
sourceDescriptor,
|
|
303
|
+
dynamicImageBlocks,
|
|
304
|
+
galleryContext,
|
|
305
|
+
isResolvingDynamic,
|
|
306
|
+
convertToStatic,
|
|
307
|
+
} = dynamic;
|
|
308
|
+
|
|
309
|
+
// Converting to a static gallery materializes editable inner blocks, which
|
|
310
|
+
// is a structural change. Only offer it when the block is fully editable:
|
|
311
|
+
// under a content lock (e.g. inside a `contentOnly` group) the editing mode
|
|
312
|
+
// is `'contentOnly'`/`'disabled'`, where structural toolbar controls are
|
|
313
|
+
// hidden and the conversion shouldn't be possible.
|
|
314
|
+
const blockEditingMode = useBlockEditingMode();
|
|
315
|
+
|
|
316
|
+
// Empty-state copy for the preview. Framed as forward-looking ("… will appear
|
|
317
|
+
// here") rather than as an error, since the same empty result covers both a
|
|
318
|
+
// post with no matching images and a template with no post in context yet —
|
|
319
|
+
// in either case the source simply resolves to nothing right now. The per-
|
|
320
|
+
// source wording comes from the source descriptor.
|
|
321
|
+
const emptyInstructions = isResolvingDynamic
|
|
322
|
+
? __( 'Loading images…' )
|
|
323
|
+
: sourceDescriptor?.emptyMessage ??
|
|
324
|
+
__( 'Dynamic images will appear here.' );
|
|
325
|
+
|
|
326
|
+
return (
|
|
327
|
+
<>
|
|
328
|
+
{ blockEditingMode === 'default' && (
|
|
329
|
+
<BlockControls group="other">
|
|
330
|
+
<ToolbarButton
|
|
331
|
+
onClick={ convertToStatic }
|
|
332
|
+
// Same guard as the inspector's "Convert to individual
|
|
333
|
+
// images": both call `convertToStatic`, which would map over
|
|
334
|
+
// a still-resolving (or empty) media list. (`ToolbarButton`
|
|
335
|
+
// stays focusable when disabled by default.)
|
|
336
|
+
disabled={ isResolvingDynamic }
|
|
337
|
+
>
|
|
338
|
+
{ __( 'Convert to images' ) }
|
|
339
|
+
</ToolbarButton>
|
|
340
|
+
</BlockControls>
|
|
341
|
+
) }
|
|
342
|
+
<figure { ...blockProps }>
|
|
343
|
+
{ dynamicImageBlocks.length ? (
|
|
344
|
+
<BlockContextProvider value={ galleryContext }>
|
|
345
|
+
<GalleryImagesPreview
|
|
346
|
+
imageBlocks={ dynamicImageBlocks }
|
|
347
|
+
/>
|
|
348
|
+
</BlockContextProvider>
|
|
349
|
+
) : (
|
|
350
|
+
<Placeholder
|
|
351
|
+
icon={ sharedIcon }
|
|
352
|
+
label={ __( 'Gallery' ) }
|
|
353
|
+
instructions={ emptyInstructions }
|
|
354
|
+
>
|
|
355
|
+
{ isResolvingDynamic && <Spinner /> }
|
|
356
|
+
</Placeholder>
|
|
357
|
+
) }
|
|
358
|
+
<Caption
|
|
359
|
+
attributes={ attributes }
|
|
360
|
+
setAttributes={ setAttributes }
|
|
361
|
+
isSelected={ isSelected }
|
|
362
|
+
insertBlocksAfter={ insertBlocksAfter }
|
|
363
|
+
showToolbarButton={
|
|
364
|
+
! multiGallerySelection && ! isContentLocked
|
|
365
|
+
}
|
|
366
|
+
className="blocks-gallery-caption"
|
|
367
|
+
label={ __( 'Gallery caption text' ) }
|
|
368
|
+
placeholder={ __( 'Add gallery caption' ) }
|
|
369
|
+
/>
|
|
370
|
+
</figure>
|
|
371
|
+
{ /*
|
|
372
|
+
* Dynamic mode shows a preview instead of real inner blocks, but the
|
|
373
|
+
* empty inner blocks are still rendered here for their side effect:
|
|
374
|
+
* the `allowedBlocks: []` passed to `useInnerBlocksProps` only syncs
|
|
375
|
+
* to block list settings while the inner blocks are mounted (via
|
|
376
|
+
* `useNestedSettingsUpdate`). That setting is what blocks insertion
|
|
377
|
+
* (`canInsertBlockType`) and hides the now-unusable List View
|
|
378
|
+
* (`shouldRenderBlockListView`). With no inner blocks and no appender,
|
|
379
|
+
* this renders no output of its own.
|
|
380
|
+
*/ }
|
|
381
|
+
{ innerBlocksProps.children }
|
|
382
|
+
</>
|
|
383
|
+
);
|
|
384
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Source discriminator for "images attached to the post" — the only dynamic
|
|
8
|
+
* source implemented so far. Kept as a named constant since it's referenced from
|
|
9
|
+
* several call sites (the query builder, the descriptor, and the entry points
|
|
10
|
+
* that switch a gallery into dynamic mode).
|
|
11
|
+
*/
|
|
12
|
+
export const ATTACHED_MEDIA = 'core/attached-media';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Default ordering for a dynamic source. `menu_order` (the manual media-library
|
|
16
|
+
* order) is intentionally not used: it isn't a valid `orderby` value on the
|
|
17
|
+
* media REST endpoint, so the editor preview couldn't reproduce it. Both the
|
|
18
|
+
* editor query and the server resolver default to the same REST-supported order
|
|
19
|
+
* so the preview matches the frontend.
|
|
20
|
+
*/
|
|
21
|
+
export const DEFAULT_ORDERBY = 'date';
|
|
22
|
+
export const DEFAULT_ORDER = 'desc';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Per-source copy, keyed by the `source` discriminator in a gallery's
|
|
26
|
+
* `dynamicContent`. Adding a dynamic source means adding an entry here; the
|
|
27
|
+
* editor components read these strings instead of hardcoding source-specific
|
|
28
|
+
* wording. The fields also map onto a future "Choose source" control: `title`
|
|
29
|
+
* becomes an option label, `description` its help text, and `emptyMessage` the
|
|
30
|
+
* canvas preview when the source resolves to nothing.
|
|
31
|
+
*/
|
|
32
|
+
const DYNAMIC_SOURCES = {
|
|
33
|
+
[ ATTACHED_MEDIA ]: {
|
|
34
|
+
// Short label for the entry affordance / future source chooser. Mirrors
|
|
35
|
+
// the "Attached images" media inserter category name.
|
|
36
|
+
title: __( 'Use attached images' ),
|
|
37
|
+
// Help text shown beneath the Source controls.
|
|
38
|
+
description: __( 'Images attached to the post.' ),
|
|
39
|
+
// Empty-state copy for the canvas preview.
|
|
40
|
+
emptyMessage: __( 'Images attached to the post will appear here.' ),
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Returns the descriptor for a dynamic source, or `undefined` for an unknown or
|
|
46
|
+
* not-yet-implemented source.
|
|
47
|
+
*
|
|
48
|
+
* @param {?string} source The `dynamicContent.source` discriminator.
|
|
49
|
+
* @return {?Object} The source descriptor (`title`, `description`, `emptyMessage`).
|
|
50
|
+
*/
|
|
51
|
+
export function getDynamicSource( source ) {
|
|
52
|
+
return DYNAMIC_SOURCES[ source ];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Upper bound on the number of images a dynamic source resolves, until the
|
|
57
|
+
* gallery supports pagination. Kept in sync with the `posts_per_page` cap in
|
|
58
|
+
* `block_core_gallery_resolve_dynamic_source()`.
|
|
59
|
+
*/
|
|
60
|
+
export const MAX_IMAGES = 100;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Maps a gallery's `dynamicContent` attribute to a query for the `attachment`
|
|
64
|
+
* entity (i.e. `/wp/v2/media` collection params), used to resolve the source to
|
|
65
|
+
* a list of media in the editor.
|
|
66
|
+
*
|
|
67
|
+
* The `source` key is the dispatch discriminator and `args` holds the
|
|
68
|
+
* source's parameters. This `{ source, args }` shape mirrors the Block
|
|
69
|
+
* Bindings metadata shape (`metadata.bindings.<key> = { source, args }`) so
|
|
70
|
+
* dynamic mode can migrate to an `innerBlocks` binding with minimal change.
|
|
71
|
+
* `args` keys are camelCase (the block-attribute convention, as used by the
|
|
72
|
+
* Query block's `query` attribute); each source's resolver maps them to the
|
|
73
|
+
* REST/transport names it needs. `core/attached-media` is a context-relative anchor
|
|
74
|
+
* resolved here to the REST `parent` param. The server-side counterpart is
|
|
75
|
+
* `block_core_gallery_resolve_dynamic_source()` in `index.php`.
|
|
76
|
+
*
|
|
77
|
+
* @param {Object} dynamicContent The gallery's `dynamicContent` attribute.
|
|
78
|
+
* @param {Object} context Resolution context.
|
|
79
|
+
* @param {number} context.postId The current post ID.
|
|
80
|
+
* @return {Object|null} A `getEntityRecords` query, or `null` when the source
|
|
81
|
+
* cannot be resolved (unknown source or missing context).
|
|
82
|
+
*/
|
|
83
|
+
export function getSourceQuery( dynamicContent, { postId } ) {
|
|
84
|
+
const { source, args = {} } = dynamicContent ?? {};
|
|
85
|
+
|
|
86
|
+
switch ( source ) {
|
|
87
|
+
case ATTACHED_MEDIA:
|
|
88
|
+
if ( ! postId ) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
parent: postId,
|
|
93
|
+
per_page: MAX_IMAGES,
|
|
94
|
+
// The gallery only accepts images, so constrain the source to
|
|
95
|
+
// image media (matching the server resolver). This keeps the
|
|
96
|
+
// editor preview in step with the rendered output for posts
|
|
97
|
+
// that also have non-image attachments.
|
|
98
|
+
media_type: 'image',
|
|
99
|
+
// Map the camelCase `args` to the REST-named media collection
|
|
100
|
+
// params. Unexpected values (only reachable via hand-edited
|
|
101
|
+
// markup) are coerced back to the defaults — mirroring the server
|
|
102
|
+
// resolver's allow list — so the editor preview stays in step with
|
|
103
|
+
// the frontend instead of issuing an invalid REST query.
|
|
104
|
+
orderby:
|
|
105
|
+
args.orderBy === 'date' || args.orderBy === 'title'
|
|
106
|
+
? args.orderBy
|
|
107
|
+
: DEFAULT_ORDERBY,
|
|
108
|
+
order:
|
|
109
|
+
args.order === 'asc' || args.order === 'desc'
|
|
110
|
+
? args.order
|
|
111
|
+
: DEFAULT_ORDER,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Unknown or not-yet-implemented source.
|
|
116
|
+
return null;
|
|
117
|
+
}
|