@wordpress/block-library 8.8.0 → 8.10.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/comment-author-name/edit.js +1 -1
- package/build/comment-author-name/edit.js.map +1 -1
- package/build/comment-edit-link/edit.js +1 -1
- package/build/comment-edit-link/edit.js.map +1 -1
- package/build/cover/edit/inspector-controls.js +1 -1
- package/build/cover/edit/inspector-controls.js.map +1 -1
- package/build/cover/index.js +1 -1
- package/build/cover/transforms.js +10 -7
- package/build/cover/transforms.js.map +1 -1
- package/build/cover/variations.js +1 -1
- package/build/cover/variations.js.map +1 -1
- package/build/details/edit.js +19 -5
- package/build/details/edit.js.map +1 -1
- package/build/details/index.js +14 -10
- package/build/details/index.js.map +1 -1
- package/build/details/save.js +4 -1
- package/build/details/save.js.map +1 -1
- package/build/embed/variations.js +2 -2
- package/build/embed/variations.js.map +1 -1
- package/build/file/view.js +1 -1
- package/build/file/view.js.map +1 -1
- package/build/gallery/edit.js +2 -8
- package/build/gallery/edit.js.map +1 -1
- package/build/group/edit.js +3 -1
- package/build/group/edit.js.map +1 -1
- package/build/group/index.js +3 -0
- package/build/group/index.js.map +1 -1
- package/build/image/edit.js +16 -13
- package/build/image/edit.js.map +1 -1
- package/build/image/index.js +1 -1
- package/build/index.js +0 -6
- package/build/index.js.map +1 -1
- package/build/index.native.js +10 -6
- package/build/index.native.js.map +1 -1
- package/build/list-item/utils.js +5 -1
- package/build/list-item/utils.js.map +1 -1
- package/build/loginout/index.js +11 -1
- package/build/loginout/index.js.map +1 -1
- package/build/media-text/edit.js +4 -2
- package/build/media-text/edit.js.map +1 -1
- package/build/media-text/index.js +3 -0
- package/build/media-text/index.js.map +1 -1
- package/build/navigation/constants.js +13 -0
- package/build/navigation/constants.js.map +1 -0
- package/build/navigation/edit/index.js +26 -68
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/inner-blocks.js +4 -7
- package/build/navigation/edit/inner-blocks.js.map +1 -1
- package/build/navigation/edit/unsaved-inner-blocks.js +4 -6
- package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
- package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
- package/build/navigation/interactivity.js +139 -0
- package/build/navigation/interactivity.js.map +1 -0
- package/build/navigation-link/edit.js +1 -1
- package/build/navigation-link/edit.js.map +1 -1
- package/build/navigation-submenu/edit.js +1 -1
- package/build/navigation-submenu/edit.js.map +1 -1
- package/build/paragraph/index.js +5 -1
- package/build/paragraph/index.js.map +1 -1
- package/build/paragraph/transforms.js +5 -1
- package/build/paragraph/transforms.js.map +1 -1
- package/build/post-author-name/edit.js +1 -1
- package/build/post-author-name/edit.js.map +1 -1
- package/build/post-date/edit.js +4 -2
- package/build/post-date/edit.js.map +1 -1
- package/build/post-excerpt/edit.js +2 -2
- package/build/post-excerpt/edit.js.map +1 -1
- package/build/post-featured-image/edit.js +6 -4
- package/build/post-featured-image/edit.js.map +1 -1
- package/build/post-featured-image/overlay.js +5 -0
- package/build/post-featured-image/overlay.js.map +1 -1
- package/build/post-title/edit.js +14 -4
- package/build/post-title/edit.js.map +1 -1
- package/build/preformatted/edit.native.js +3 -2
- package/build/preformatted/edit.native.js.map +1 -1
- package/build/query/deprecated.js +8 -6
- package/build/query/deprecated.js.map +1 -1
- package/build/query/edit/inspector-controls/create-new-post-link.js +41 -0
- package/build/query/edit/inspector-controls/create-new-post-link.js.map +1 -0
- package/build/query/edit/inspector-controls/index.js +14 -6
- package/build/query/edit/inspector-controls/index.js.map +1 -1
- package/build/query/edit/pattern-selection-modal.js +2 -1
- package/build/query/edit/pattern-selection-modal.js.map +1 -1
- package/build/query/index.js +5 -12
- package/build/query/index.js.map +1 -1
- package/build/quote/transforms.js +16 -27
- package/build/quote/transforms.js.map +1 -1
- package/build/read-more/edit.js +1 -1
- package/build/read-more/edit.js.map +1 -1
- package/build/search/edit.js +9 -1
- package/build/search/edit.js.map +1 -1
- package/build/site-logo/edit.js +114 -16
- package/build/site-logo/edit.js.map +1 -1
- package/build/site-logo/index.js +1 -1
- package/build/site-title/edit/index.js +1 -1
- package/build/site-title/edit/index.js.map +1 -1
- package/build/social-link/icons/chain.js +1 -1
- package/build/social-link/icons/chain.js.map +1 -1
- package/build/social-link/icons/mail.js +1 -1
- package/build/social-link/icons/mail.js.map +1 -1
- package/build/social-links/edit.js +2 -2
- package/build/social-links/edit.js.map +1 -1
- package/build/spacer/edit.js +117 -11
- package/build/spacer/edit.js.map +1 -1
- package/build/template-part/edit/index.js +2 -1
- package/build/template-part/edit/index.js.map +1 -1
- package/build/template-part/edit/utils/hooks.js +2 -2
- package/build/template-part/edit/utils/hooks.js.map +1 -1
- package/build/utils/interactivity/constants.js +9 -0
- package/build/utils/interactivity/constants.js.map +1 -0
- package/build/utils/interactivity/directives.js +208 -0
- package/build/utils/interactivity/directives.js.map +1 -0
- package/build/utils/interactivity/hooks.js +112 -0
- package/build/utils/interactivity/hooks.js.map +1 -0
- package/build/utils/interactivity/hydration.js +34 -0
- package/build/utils/interactivity/hydration.js.map +1 -0
- package/build/utils/interactivity/index.js +34 -0
- package/build/utils/interactivity/index.js.map +1 -0
- package/build/utils/interactivity/store.js +67 -0
- package/build/utils/interactivity/store.js.map +1 -0
- package/build/utils/interactivity/utils.js +87 -0
- package/build/utils/interactivity/utils.js.map +1 -0
- package/build/utils/interactivity/vdom.js +109 -0
- package/build/utils/interactivity/vdom.js.map +1 -0
- package/build/utils/migrate-font-family.js +12 -5
- package/build/utils/migrate-font-family.js.map +1 -1
- package/build/video/edit.native.js +4 -3
- package/build/video/edit.native.js.map +1 -1
- package/build-module/comment-author-name/edit.js +1 -1
- package/build-module/comment-author-name/edit.js.map +1 -1
- package/build-module/comment-edit-link/edit.js +1 -1
- package/build-module/comment-edit-link/edit.js.map +1 -1
- package/build-module/cover/edit/inspector-controls.js +1 -1
- package/build-module/cover/edit/inspector-controls.js.map +1 -1
- package/build-module/cover/index.js +1 -1
- package/build-module/cover/transforms.js +5 -1
- package/build-module/cover/transforms.js.map +1 -1
- package/build-module/cover/variations.js +1 -1
- package/build-module/cover/variations.js.map +1 -1
- package/build-module/details/edit.js +20 -6
- package/build-module/details/edit.js.map +1 -1
- package/build-module/details/index.js +14 -10
- package/build-module/details/index.js.map +1 -1
- package/build-module/details/save.js +5 -2
- package/build-module/details/save.js.map +1 -1
- package/build-module/embed/variations.js +2 -2
- package/build-module/embed/variations.js.map +1 -1
- package/build-module/file/view.js +1 -1
- package/build-module/file/view.js.map +1 -1
- package/build-module/gallery/edit.js +2 -8
- package/build-module/gallery/edit.js.map +1 -1
- package/build-module/group/edit.js +3 -1
- package/build-module/group/edit.js.map +1 -1
- package/build-module/group/index.js +3 -0
- package/build-module/group/index.js.map +1 -1
- package/build-module/image/edit.js +16 -13
- package/build-module/image/edit.js.map +1 -1
- package/build-module/image/index.js +1 -1
- package/build-module/index.js +0 -4
- package/build-module/index.js.map +1 -1
- package/build-module/index.native.js +10 -6
- package/build-module/index.native.js.map +1 -1
- package/build-module/list-item/utils.js +5 -1
- package/build-module/list-item/utils.js.map +1 -1
- package/build-module/loginout/index.js +11 -1
- package/build-module/loginout/index.js.map +1 -1
- package/build-module/media-text/edit.js +4 -2
- package/build-module/media-text/edit.js.map +1 -1
- package/build-module/media-text/index.js +3 -0
- package/build-module/media-text/index.js.map +1 -1
- package/build-module/navigation/constants.js +5 -0
- package/build-module/navigation/constants.js.map +1 -0
- package/build-module/navigation/edit/index.js +28 -69
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/inner-blocks.js +1 -4
- package/build-module/navigation/edit/inner-blocks.js.map +1 -1
- package/build-module/navigation/edit/unsaved-inner-blocks.js +1 -4
- 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 +1 -1
- package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
- package/build-module/navigation/interactivity.js +136 -0
- package/build-module/navigation/interactivity.js.map +1 -0
- package/build-module/navigation-link/edit.js +1 -1
- package/build-module/navigation-link/edit.js.map +1 -1
- package/build-module/navigation-submenu/edit.js +1 -1
- package/build-module/navigation-submenu/edit.js.map +1 -1
- package/build-module/paragraph/index.js +5 -1
- package/build-module/paragraph/index.js.map +1 -1
- package/build-module/paragraph/transforms.js +5 -1
- package/build-module/paragraph/transforms.js.map +1 -1
- package/build-module/post-author-name/edit.js +1 -1
- package/build-module/post-author-name/edit.js.map +1 -1
- package/build-module/post-date/edit.js +4 -2
- package/build-module/post-date/edit.js.map +1 -1
- package/build-module/post-excerpt/edit.js +2 -2
- package/build-module/post-excerpt/edit.js.map +1 -1
- package/build-module/post-featured-image/edit.js +6 -4
- package/build-module/post-featured-image/edit.js.map +1 -1
- package/build-module/post-featured-image/overlay.js +5 -0
- package/build-module/post-featured-image/overlay.js.map +1 -1
- package/build-module/post-title/edit.js +13 -4
- package/build-module/post-title/edit.js.map +1 -1
- package/build-module/preformatted/edit.native.js +3 -2
- package/build-module/preformatted/edit.native.js.map +1 -1
- package/build-module/query/deprecated.js +5 -2
- package/build-module/query/deprecated.js.map +1 -1
- package/build-module/query/edit/inspector-controls/create-new-post-link.js +33 -0
- package/build-module/query/edit/inspector-controls/create-new-post-link.js.map +1 -0
- package/build-module/query/edit/inspector-controls/index.js +12 -7
- package/build-module/query/edit/inspector-controls/index.js.map +1 -1
- package/build-module/query/edit/pattern-selection-modal.js +2 -1
- package/build-module/query/edit/pattern-selection-modal.js.map +1 -1
- package/build-module/query/index.js +5 -10
- package/build-module/query/index.js.map +1 -1
- package/build-module/quote/transforms.js +16 -27
- package/build-module/quote/transforms.js.map +1 -1
- package/build-module/read-more/edit.js +1 -1
- package/build-module/read-more/edit.js.map +1 -1
- package/build-module/search/edit.js +9 -1
- package/build-module/search/edit.js.map +1 -1
- package/build-module/site-logo/edit.js +115 -18
- package/build-module/site-logo/edit.js.map +1 -1
- package/build-module/site-logo/index.js +1 -1
- package/build-module/site-title/edit/index.js +1 -1
- package/build-module/site-title/edit/index.js.map +1 -1
- package/build-module/social-link/icons/chain.js +1 -1
- package/build-module/social-link/icons/chain.js.map +1 -1
- package/build-module/social-link/icons/mail.js +1 -1
- package/build-module/social-link/icons/mail.js.map +1 -1
- package/build-module/social-links/edit.js +2 -2
- package/build-module/social-links/edit.js.map +1 -1
- package/build-module/spacer/edit.js +118 -12
- package/build-module/spacer/edit.js.map +1 -1
- package/build-module/template-part/edit/index.js +2 -1
- package/build-module/template-part/edit/index.js.map +1 -1
- package/build-module/template-part/edit/utils/hooks.js +2 -2
- package/build-module/template-part/edit/utils/hooks.js.map +1 -1
- package/build-module/utils/interactivity/constants.js +2 -0
- package/build-module/utils/interactivity/constants.js.map +1 -0
- package/build-module/utils/interactivity/directives.js +193 -0
- package/build-module/utils/interactivity/directives.js.map +1 -0
- package/build-module/utils/interactivity/hooks.js +98 -0
- package/build-module/utils/interactivity/hooks.js.map +1 -0
- package/build-module/utils/interactivity/hydration.js +21 -0
- package/build-module/utils/interactivity/hydration.js.map +1 -0
- package/build-module/utils/interactivity/index.js +17 -0
- package/build-module/utils/interactivity/index.js.map +1 -0
- package/build-module/utils/interactivity/store.js +56 -0
- package/build-module/utils/interactivity/store.js.map +1 -0
- package/build-module/utils/interactivity/utils.js +75 -0
- package/build-module/utils/interactivity/utils.js.map +1 -0
- package/build-module/utils/interactivity/vdom.js +97 -0
- package/build-module/utils/interactivity/vdom.js.map +1 -0
- package/build-module/utils/migrate-font-family.js +9 -1
- package/build-module/utils/migrate-font-family.js.map +1 -1
- package/build-module/video/edit.native.js +4 -3
- package/build-module/video/edit.native.js.map +1 -1
- package/build-style/cover/editor-rtl.css +3 -3
- package/build-style/cover/editor.css +3 -3
- package/build-style/cover/style-rtl.css +2 -1
- package/build-style/cover/style.css +2 -1
- package/build-style/{details-summary → details}/editor-rtl.css +1 -1
- package/build-style/{details-summary → details}/editor.css +1 -1
- package/build-style/details/style-rtl.css +14 -0
- package/build-style/details/style.css +14 -0
- package/build-style/editor-rtl.css +74 -39
- package/build-style/editor.css +74 -39
- package/build-style/gallery/editor-rtl.css +0 -4
- package/build-style/gallery/editor.css +0 -4
- package/build-style/html/editor-rtl.css +2 -2
- package/build-style/html/editor.css +2 -2
- package/build-style/image/editor-rtl.css +1 -1
- package/build-style/image/editor.css +1 -1
- package/build-style/query/editor-rtl.css +8 -12
- package/build-style/query/editor.css +8 -12
- package/build-style/search/editor-rtl.css +1 -0
- package/build-style/search/editor.css +1 -0
- package/build-style/search/style-rtl.css +2 -0
- package/build-style/search/style.css +2 -0
- package/build-style/shortcode/editor-rtl.css +3 -4
- package/build-style/shortcode/editor.css +3 -4
- package/build-style/site-logo/editor-rtl.css +47 -0
- package/build-style/site-logo/editor.css +47 -0
- package/build-style/style-rtl.css +15 -2
- package/build-style/style.css +15 -2
- package/build-style/template-part/editor-rtl.css +8 -12
- package/build-style/template-part/editor.css +8 -12
- package/package.json +36 -32
- package/src/buttons/test/__snapshots__/edit.native.js.snap +18 -0
- package/src/buttons/test/edit.native.js +123 -2
- package/src/comment-author-name/edit.js +1 -1
- package/src/comment-edit-link/edit.js +1 -1
- package/src/comment-template/index.php +8 -7
- package/src/cover/block.json +1 -1
- package/src/cover/edit/inspector-controls.js +56 -54
- package/src/cover/editor.scss +1 -1
- package/src/cover/style.scss +4 -0
- package/src/cover/test/edit.js +56 -2
- package/src/cover/transforms.js +4 -1
- package/src/cover/variations.js +1 -3
- package/src/details/block.json +8 -6
- package/src/details/edit.js +27 -5
- package/src/details/editor.scss +3 -0
- package/src/details/index.js +10 -5
- package/src/details/save.js +5 -1
- package/src/details/style.scss +16 -0
- package/src/editor.scss +1 -1
- package/src/embed/variations.js +2 -2
- package/src/file/view.js +4 -1
- package/src/gallery/edit.js +5 -8
- package/src/gallery/editor.scss +0 -6
- package/src/gallery/test/index.native.js +52 -7
- package/src/group/block.json +3 -0
- package/src/group/edit.js +8 -2
- package/src/heading/test/__snapshots__/index.native.js.snap +12 -0
- package/src/heading/test/index.native.js +71 -0
- package/src/html/editor.scss +2 -21
- package/src/image/block.json +1 -1
- package/src/image/edit.js +21 -17
- package/src/image/editor.scss +1 -1
- package/src/image/test/edit.native.js +38 -16
- package/src/index.js +0 -4
- package/src/index.native.js +10 -5
- package/src/list/test/edit.native.js +7 -7
- package/src/loginout/block.json +11 -1
- package/src/media-text/block.json +3 -0
- package/src/media-text/edit.js +2 -1
- package/src/navigation/constants.js +16 -0
- package/src/navigation/edit/index.js +77 -163
- package/src/navigation/edit/inner-blocks.js +1 -16
- package/src/navigation/edit/unsaved-inner-blocks.js +1 -16
- package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
- package/src/navigation/index.php +210 -197
- package/src/navigation/interactivity.js +144 -0
- package/src/navigation-link/edit.js +1 -1
- package/src/navigation-submenu/edit.js +1 -1
- package/src/paragraph/block.json +5 -1
- package/src/paragraph/test/edit.native.js +288 -28
- package/src/post-author-name/edit.js +1 -1
- package/src/post-date/edit.js +4 -0
- package/src/post-date/index.php +17 -8
- package/src/post-excerpt/edit.js +1 -1
- package/src/post-featured-image/edit.js +5 -4
- package/src/post-featured-image/overlay.js +4 -0
- package/src/post-terms/index.php +2 -2
- package/src/post-title/edit.js +8 -1
- package/src/preformatted/edit.native.js +1 -3
- package/src/preformatted/test/edit.native.js +6 -9
- package/src/pullquote/test/edit.native.js +7 -12
- package/src/query/deprecated.js +4 -1
- package/src/query/edit/inspector-controls/create-new-post-link.js +26 -0
- package/src/query/edit/inspector-controls/index.js +13 -6
- package/src/query/edit/pattern-selection-modal.js +1 -0
- package/src/query/editor.scss +8 -11
- package/src/query/index.js +1 -7
- package/src/quote/test/edit.native.js +6 -10
- package/src/quote/transforms.js +0 -6
- package/src/read-more/edit.js +1 -1
- package/src/search/edit.js +9 -4
- package/src/search/editor.scss +1 -0
- package/src/search/style.scss +3 -0
- package/src/shortcode/editor.scss +1 -21
- package/src/site-logo/block.json +1 -1
- package/src/site-logo/edit.js +123 -9
- package/src/site-logo/editor.scss +58 -0
- package/src/site-title/edit/index.js +1 -1
- package/src/social-link/icons/chain.js +1 -1
- package/src/social-link/icons/mail.js +1 -1
- package/src/social-link/index.php +2 -2
- package/src/social-links/edit.js +33 -31
- package/src/spacer/edit.js +157 -18
- package/src/style.scss +0 -1
- package/src/template-part/edit/index.js +1 -0
- package/src/template-part/edit/utils/hooks.js +2 -2
- package/src/template-part/editor.scss +9 -11
- package/src/template-part/index.php +20 -5
- package/src/utils/interactivity/constants.js +1 -0
- package/src/utils/interactivity/directives.js +179 -0
- package/src/utils/interactivity/hooks.js +76 -0
- package/src/utils/interactivity/hydration.js +22 -0
- package/src/utils/interactivity/index.js +17 -0
- package/src/utils/interactivity/store.js +45 -0
- package/src/utils/interactivity/utils.js +66 -0
- package/src/utils/interactivity/vdom.js +94 -0
- package/src/utils/migrate-font-family.js +8 -1
- package/src/verse/test/edit.native.js +4 -9
- package/src/video/edit.native.js +2 -2
- package/tsconfig.json +2 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/details-content/edit.js +0 -34
- package/build/details-content/edit.js.map +0 -1
- package/build/details-content/index.js +0 -94
- package/build/details-content/index.js.map +0 -1
- package/build/details-content/save.js +0 -20
- package/build/details-content/save.js.map +0 -1
- package/build/details-summary/edit.js +0 -42
- package/build/details-summary/edit.js.map +0 -1
- package/build/details-summary/index.js +0 -97
- package/build/details-summary/index.js.map +0 -1
- package/build/details-summary/save.js +0 -24
- package/build/details-summary/save.js.map +0 -1
- package/build/query/hooks.js +0 -72
- package/build/query/hooks.js.map +0 -1
- package/build/utils/clean-empty-object.js +0 -37
- package/build/utils/clean-empty-object.js.map +0 -1
- package/build-module/details-content/edit.js +0 -23
- package/build-module/details-content/edit.js.map +0 -1
- package/build-module/details-content/index.js +0 -76
- package/build-module/details-content/index.js.map +0 -1
- package/build-module/details-content/save.js +0 -11
- package/build-module/details-content/save.js.map +0 -1
- package/build-module/details-summary/edit.js +0 -30
- package/build-module/details-summary/edit.js.map +0 -1
- package/build-module/details-summary/index.js +0 -79
- package/build-module/details-summary/index.js.map +0 -1
- package/build-module/details-summary/save.js +0 -16
- package/build-module/details-summary/save.js.map +0 -1
- package/build-module/query/hooks.js +0 -59
- package/build-module/query/hooks.js.map +0 -1
- package/build-module/utils/clean-empty-object.js +0 -28
- package/build-module/utils/clean-empty-object.js.map +0 -1
- package/build-style/details-summary/style-rtl.css +0 -91
- package/build-style/details-summary/style.css +0 -91
- package/src/details-content/block.json +0 -50
- package/src/details-content/edit.js +0 -29
- package/src/details-content/index.js +0 -23
- package/src/details-content/save.js +0 -12
- package/src/details-summary/block.json +0 -53
- package/src/details-summary/edit.js +0 -27
- package/src/details-summary/editor.scss +0 -3
- package/src/details-summary/index.js +0 -23
- package/src/details-summary/save.js +0 -13
- package/src/details-summary/style.scss +0 -3
- package/src/query/hooks.js +0 -53
- package/src/utils/clean-empty-object.js +0 -28
package/src/navigation/index.php
CHANGED
|
@@ -67,57 +67,7 @@ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/**
|
|
71
|
-
* Turns menu item data into a nested array of parsed blocks
|
|
72
|
-
*
|
|
73
|
-
* @param array $menu_items An array of menu items that represent
|
|
74
|
-
* an individual level of a menu.
|
|
75
|
-
* @param array $menu_items_by_parent_id An array keyed by the id of the
|
|
76
|
-
* parent menu where each element is an
|
|
77
|
-
* array of menu items that belong to
|
|
78
|
-
* that parent.
|
|
79
|
-
* @return array An array of parsed block data.
|
|
80
|
-
*/
|
|
81
|
-
function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
|
|
82
|
-
if ( empty( $menu_items ) ) {
|
|
83
|
-
return array();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
$blocks = array();
|
|
87
|
-
|
|
88
|
-
foreach ( $menu_items as $menu_item ) {
|
|
89
|
-
$class_name = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
|
|
90
|
-
$id = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
|
|
91
|
-
$opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
|
|
92
|
-
$rel = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
|
|
93
|
-
$kind = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';
|
|
94
|
-
|
|
95
|
-
$block = array(
|
|
96
|
-
'blockName' => isset( $menu_items_by_parent_id[ $menu_item->ID ] ) ? 'core/navigation-submenu' : 'core/navigation-link',
|
|
97
|
-
'attrs' => array(
|
|
98
|
-
'className' => $class_name,
|
|
99
|
-
'description' => $menu_item->description,
|
|
100
|
-
'id' => $id,
|
|
101
|
-
'kind' => $kind,
|
|
102
|
-
'label' => $menu_item->title,
|
|
103
|
-
'opensInNewTab' => $opens_in_new_tab,
|
|
104
|
-
'rel' => $rel,
|
|
105
|
-
'title' => $menu_item->attr_title,
|
|
106
|
-
'type' => $menu_item->object,
|
|
107
|
-
'url' => $menu_item->url,
|
|
108
|
-
),
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
$block['innerBlocks'] = isset( $menu_items_by_parent_id[ $menu_item->ID ] )
|
|
112
|
-
? block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[ $menu_item->ID ], $menu_items_by_parent_id )
|
|
113
|
-
: array();
|
|
114
|
-
$block['innerContent'] = array_map( 'serialize_block', $block['innerBlocks'] );
|
|
115
|
-
|
|
116
|
-
$blocks[] = $block;
|
|
117
|
-
}
|
|
118
70
|
|
|
119
|
-
return $blocks;
|
|
120
|
-
}
|
|
121
71
|
|
|
122
72
|
/**
|
|
123
73
|
* Build an array with CSS classes and inline styles defining the colors
|
|
@@ -248,148 +198,9 @@ function block_core_navigation_render_submenu_icon() {
|
|
|
248
198
|
return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
|
|
249
199
|
}
|
|
250
200
|
|
|
251
|
-
/**
|
|
252
|
-
* Get the classic navigation menu to use as a fallback.
|
|
253
|
-
*
|
|
254
|
-
* @return object WP_Term The classic navigation.
|
|
255
|
-
*/
|
|
256
|
-
function block_core_navigation_get_classic_menu_fallback() {
|
|
257
|
-
$classic_nav_menus = wp_get_nav_menus();
|
|
258
|
-
|
|
259
|
-
// If menus exist.
|
|
260
|
-
if ( $classic_nav_menus && ! is_wp_error( $classic_nav_menus ) ) {
|
|
261
|
-
// Handles simple use case where user has a classic menu and switches to a block theme.
|
|
262
|
-
|
|
263
|
-
// Returns the menu assigned to location `primary`.
|
|
264
|
-
$locations = get_nav_menu_locations();
|
|
265
|
-
if ( isset( $locations['primary'] ) ) {
|
|
266
|
-
$primary_menu = wp_get_nav_menu_object( $locations['primary'] );
|
|
267
|
-
if ( $primary_menu ) {
|
|
268
|
-
return $primary_menu;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// Returns a menu if `primary` is its slug.
|
|
273
|
-
foreach ( $classic_nav_menus as $classic_nav_menu ) {
|
|
274
|
-
if ( 'primary' === $classic_nav_menu->slug ) {
|
|
275
|
-
return $classic_nav_menu;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// Otherwise return the most recently created classic menu.
|
|
280
|
-
usort(
|
|
281
|
-
$classic_nav_menus,
|
|
282
|
-
function( $a, $b ) {
|
|
283
|
-
return $b->term_id - $a->term_id;
|
|
284
|
-
}
|
|
285
|
-
);
|
|
286
|
-
return $classic_nav_menus[0];
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Converts a classic navigation to blocks.
|
|
292
|
-
*
|
|
293
|
-
* @param object $classic_nav_menu WP_Term The classic navigation object to convert.
|
|
294
|
-
* @return array the normalized parsed blocks.
|
|
295
|
-
*/
|
|
296
|
-
function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu ) {
|
|
297
|
-
// BEGIN: Code that already exists in wp_nav_menu().
|
|
298
|
-
$menu_items = wp_get_nav_menu_items( $classic_nav_menu->term_id, array( 'update_post_term_cache' => false ) );
|
|
299
|
-
|
|
300
|
-
// Set up the $menu_item variables.
|
|
301
|
-
_wp_menu_item_classes_by_context( $menu_items );
|
|
302
|
-
|
|
303
|
-
$sorted_menu_items = array();
|
|
304
|
-
foreach ( (array) $menu_items as $menu_item ) {
|
|
305
|
-
$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
unset( $menu_items, $menu_item );
|
|
309
|
-
|
|
310
|
-
// END: Code that already exists in wp_nav_menu().
|
|
311
|
-
|
|
312
|
-
$menu_items_by_parent_id = array();
|
|
313
|
-
foreach ( $sorted_menu_items as $menu_item ) {
|
|
314
|
-
$menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
$inner_blocks = block_core_navigation_parse_blocks_from_menu_items(
|
|
318
|
-
isset( $menu_items_by_parent_id[0] )
|
|
319
|
-
? $menu_items_by_parent_id[0]
|
|
320
|
-
: array(),
|
|
321
|
-
$menu_items_by_parent_id
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
return serialize_blocks( $inner_blocks );
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* If there's a the classic menu then use it as a fallback.
|
|
329
|
-
*
|
|
330
|
-
* @return array the normalized parsed blocks.
|
|
331
|
-
*/
|
|
332
|
-
function block_core_navigation_maybe_use_classic_menu_fallback() {
|
|
333
|
-
// See if we have a classic menu.
|
|
334
|
-
$classic_nav_menu = block_core_navigation_get_classic_menu_fallback();
|
|
335
201
|
|
|
336
|
-
if ( ! $classic_nav_menu ) {
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
202
|
|
|
340
|
-
// If we have a classic menu then convert it to blocks.
|
|
341
|
-
$classic_nav_menu_blocks = block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu );
|
|
342
203
|
|
|
343
|
-
if ( empty( $classic_nav_menu_blocks ) ) {
|
|
344
|
-
return;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Create a new navigation menu from the classic menu.
|
|
348
|
-
$wp_insert_post_result = wp_insert_post(
|
|
349
|
-
array(
|
|
350
|
-
'post_content' => $classic_nav_menu_blocks,
|
|
351
|
-
'post_title' => $classic_nav_menu->name,
|
|
352
|
-
'post_name' => $classic_nav_menu->slug,
|
|
353
|
-
'post_status' => 'publish',
|
|
354
|
-
'post_type' => 'wp_navigation',
|
|
355
|
-
),
|
|
356
|
-
true // So that we can check whether the result is an error.
|
|
357
|
-
);
|
|
358
|
-
|
|
359
|
-
if ( is_wp_error( $wp_insert_post_result ) ) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// Fetch the most recently published navigation which will be the classic one created above.
|
|
364
|
-
return block_core_navigation_get_most_recently_published_navigation();
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Finds the most recently published `wp_navigation` Post.
|
|
369
|
-
*
|
|
370
|
-
* @return WP_Post|null the first non-empty Navigation or null.
|
|
371
|
-
*/
|
|
372
|
-
function block_core_navigation_get_most_recently_published_navigation() {
|
|
373
|
-
|
|
374
|
-
// Default to the most recently created menu.
|
|
375
|
-
$parsed_args = array(
|
|
376
|
-
'post_type' => 'wp_navigation',
|
|
377
|
-
'no_found_rows' => true,
|
|
378
|
-
'update_post_meta_cache' => false,
|
|
379
|
-
'update_post_term_cache' => false,
|
|
380
|
-
'order' => 'DESC',
|
|
381
|
-
'orderby' => 'date',
|
|
382
|
-
'post_status' => 'publish',
|
|
383
|
-
'posts_per_page' => 1, // get only the most recent.
|
|
384
|
-
);
|
|
385
|
-
|
|
386
|
-
$navigation_post = new WP_Query( $parsed_args );
|
|
387
|
-
if ( count( $navigation_post->posts ) > 0 ) {
|
|
388
|
-
return $navigation_post->posts[0];
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
return null;
|
|
392
|
-
}
|
|
393
204
|
|
|
394
205
|
/**
|
|
395
206
|
* Filter out empty "null" blocks from the block list.
|
|
@@ -452,14 +263,7 @@ function block_core_navigation_get_fallback_blocks() {
|
|
|
452
263
|
// If `core/page-list` is not registered then return empty blocks.
|
|
453
264
|
$fallback_blocks = $registry->is_registered( 'core/page-list' ) ? $page_list_fallback : array();
|
|
454
265
|
|
|
455
|
-
|
|
456
|
-
$navigation_post = block_core_navigation_get_most_recently_published_navigation();
|
|
457
|
-
|
|
458
|
-
// If there are no navigation posts then try to find a classic menu
|
|
459
|
-
// and convert it into a block based navigation menu.
|
|
460
|
-
if ( ! $navigation_post ) {
|
|
461
|
-
$navigation_post = block_core_navigation_maybe_use_classic_menu_fallback();
|
|
462
|
-
}
|
|
266
|
+
$navigation_post = WP_Navigation_Fallback_Gutenberg::get_fallback();
|
|
463
267
|
|
|
464
268
|
// Use the first non-empty Navigation as fallback if available.
|
|
465
269
|
if ( $navigation_post ) {
|
|
@@ -874,3 +678,212 @@ function block_core_navigation_typographic_presets_backcompatibility( $parsed_bl
|
|
|
874
678
|
}
|
|
875
679
|
|
|
876
680
|
add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' );
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Turns menu item data into a nested array of parsed blocks
|
|
684
|
+
*
|
|
685
|
+
* @param array $menu_items An array of menu items that represent
|
|
686
|
+
* an individual level of a menu.
|
|
687
|
+
* @param array $menu_items_by_parent_id An array keyed by the id of the
|
|
688
|
+
* parent menu where each element is an
|
|
689
|
+
* array of menu items that belong to
|
|
690
|
+
* that parent.
|
|
691
|
+
* @return array An array of parsed block data.
|
|
692
|
+
*/
|
|
693
|
+
function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
|
|
694
|
+
|
|
695
|
+
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::parse_blocks_from_menu_items' );
|
|
696
|
+
|
|
697
|
+
if ( empty( $menu_items ) ) {
|
|
698
|
+
return array();
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
$blocks = array();
|
|
702
|
+
|
|
703
|
+
foreach ( $menu_items as $menu_item ) {
|
|
704
|
+
$class_name = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
|
|
705
|
+
$id = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
|
|
706
|
+
$opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
|
|
707
|
+
$rel = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
|
|
708
|
+
$kind = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';
|
|
709
|
+
|
|
710
|
+
$block = array(
|
|
711
|
+
'blockName' => isset( $menu_items_by_parent_id[ $menu_item->ID ] ) ? 'core/navigation-submenu' : 'core/navigation-link',
|
|
712
|
+
'attrs' => array(
|
|
713
|
+
'className' => $class_name,
|
|
714
|
+
'description' => $menu_item->description,
|
|
715
|
+
'id' => $id,
|
|
716
|
+
'kind' => $kind,
|
|
717
|
+
'label' => $menu_item->title,
|
|
718
|
+
'opensInNewTab' => $opens_in_new_tab,
|
|
719
|
+
'rel' => $rel,
|
|
720
|
+
'title' => $menu_item->attr_title,
|
|
721
|
+
'type' => $menu_item->object,
|
|
722
|
+
'url' => $menu_item->url,
|
|
723
|
+
),
|
|
724
|
+
);
|
|
725
|
+
|
|
726
|
+
$block['innerBlocks'] = isset( $menu_items_by_parent_id[ $menu_item->ID ] )
|
|
727
|
+
? block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[ $menu_item->ID ], $menu_items_by_parent_id )
|
|
728
|
+
: array();
|
|
729
|
+
$block['innerContent'] = array_map( 'serialize_block', $block['innerBlocks'] );
|
|
730
|
+
|
|
731
|
+
$blocks[] = $block;
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
return $blocks;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* Get the classic navigation menu to use as a fallback.
|
|
739
|
+
*
|
|
740
|
+
* @return object WP_Term The classic navigation.
|
|
741
|
+
*/
|
|
742
|
+
function block_core_navigation_get_classic_menu_fallback() {
|
|
743
|
+
|
|
744
|
+
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::get_classic_menu_fallback' );
|
|
745
|
+
|
|
746
|
+
$classic_nav_menus = wp_get_nav_menus();
|
|
747
|
+
|
|
748
|
+
// If menus exist.
|
|
749
|
+
if ( $classic_nav_menus && ! is_wp_error( $classic_nav_menus ) ) {
|
|
750
|
+
// Handles simple use case where user has a classic menu and switches to a block theme.
|
|
751
|
+
|
|
752
|
+
// Returns the menu assigned to location `primary`.
|
|
753
|
+
$locations = get_nav_menu_locations();
|
|
754
|
+
if ( isset( $locations['primary'] ) ) {
|
|
755
|
+
$primary_menu = wp_get_nav_menu_object( $locations['primary'] );
|
|
756
|
+
if ( $primary_menu ) {
|
|
757
|
+
return $primary_menu;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
// Returns a menu if `primary` is its slug.
|
|
762
|
+
foreach ( $classic_nav_menus as $classic_nav_menu ) {
|
|
763
|
+
if ( 'primary' === $classic_nav_menu->slug ) {
|
|
764
|
+
return $classic_nav_menu;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
// Otherwise return the most recently created classic menu.
|
|
769
|
+
usort(
|
|
770
|
+
$classic_nav_menus,
|
|
771
|
+
function( $a, $b ) {
|
|
772
|
+
return $b->term_id - $a->term_id;
|
|
773
|
+
}
|
|
774
|
+
);
|
|
775
|
+
return $classic_nav_menus[0];
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/**
|
|
780
|
+
* Converts a classic navigation to blocks.
|
|
781
|
+
*
|
|
782
|
+
* @param object $classic_nav_menu WP_Term The classic navigation object to convert.
|
|
783
|
+
* @return array the normalized parsed blocks.
|
|
784
|
+
*/
|
|
785
|
+
function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu ) {
|
|
786
|
+
|
|
787
|
+
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::get_classic_menu_fallback_blocks' );
|
|
788
|
+
|
|
789
|
+
// BEGIN: Code that already exists in wp_nav_menu().
|
|
790
|
+
$menu_items = wp_get_nav_menu_items( $classic_nav_menu->term_id, array( 'update_post_term_cache' => false ) );
|
|
791
|
+
|
|
792
|
+
// Set up the $menu_item variables.
|
|
793
|
+
_wp_menu_item_classes_by_context( $menu_items );
|
|
794
|
+
|
|
795
|
+
$sorted_menu_items = array();
|
|
796
|
+
foreach ( (array) $menu_items as $menu_item ) {
|
|
797
|
+
$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
unset( $menu_items, $menu_item );
|
|
801
|
+
|
|
802
|
+
// END: Code that already exists in wp_nav_menu().
|
|
803
|
+
|
|
804
|
+
$menu_items_by_parent_id = array();
|
|
805
|
+
foreach ( $sorted_menu_items as $menu_item ) {
|
|
806
|
+
$menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
$inner_blocks = block_core_navigation_parse_blocks_from_menu_items(
|
|
810
|
+
isset( $menu_items_by_parent_id[0] )
|
|
811
|
+
? $menu_items_by_parent_id[0]
|
|
812
|
+
: array(),
|
|
813
|
+
$menu_items_by_parent_id
|
|
814
|
+
);
|
|
815
|
+
|
|
816
|
+
return serialize_blocks( $inner_blocks );
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/**
|
|
820
|
+
* If there's a the classic menu then use it as a fallback.
|
|
821
|
+
*
|
|
822
|
+
* @return array the normalized parsed blocks.
|
|
823
|
+
*/
|
|
824
|
+
function block_core_navigation_maybe_use_classic_menu_fallback() {
|
|
825
|
+
|
|
826
|
+
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::create_classic_menu_fallback' );
|
|
827
|
+
|
|
828
|
+
// See if we have a classic menu.
|
|
829
|
+
$classic_nav_menu = block_core_navigation_get_classic_menu_fallback();
|
|
830
|
+
|
|
831
|
+
if ( ! $classic_nav_menu ) {
|
|
832
|
+
return;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
// If we have a classic menu then convert it to blocks.
|
|
836
|
+
$classic_nav_menu_blocks = block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu );
|
|
837
|
+
|
|
838
|
+
if ( empty( $classic_nav_menu_blocks ) ) {
|
|
839
|
+
return;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
// Create a new navigation menu from the classic menu.
|
|
843
|
+
$wp_insert_post_result = wp_insert_post(
|
|
844
|
+
array(
|
|
845
|
+
'post_content' => $classic_nav_menu_blocks,
|
|
846
|
+
'post_title' => $classic_nav_menu->name,
|
|
847
|
+
'post_name' => $classic_nav_menu->slug,
|
|
848
|
+
'post_status' => 'publish',
|
|
849
|
+
'post_type' => 'wp_navigation',
|
|
850
|
+
),
|
|
851
|
+
true // So that we can check whether the result is an error.
|
|
852
|
+
);
|
|
853
|
+
|
|
854
|
+
if ( is_wp_error( $wp_insert_post_result ) ) {
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
// Fetch the most recently published navigation which will be the classic one created above.
|
|
859
|
+
return block_core_navigation_get_most_recently_published_navigation();
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
/**
|
|
863
|
+
* Finds the most recently published `wp_navigation` Post.
|
|
864
|
+
*
|
|
865
|
+
* @return WP_Post|null the first non-empty Navigation or null.
|
|
866
|
+
*/
|
|
867
|
+
function block_core_navigation_get_most_recently_published_navigation() {
|
|
868
|
+
|
|
869
|
+
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback_Gutenberg::get_most_recently_published_navigation' );
|
|
870
|
+
|
|
871
|
+
// Default to the most recently created menu.
|
|
872
|
+
$parsed_args = array(
|
|
873
|
+
'post_type' => 'wp_navigation',
|
|
874
|
+
'no_found_rows' => true,
|
|
875
|
+
'update_post_meta_cache' => false,
|
|
876
|
+
'update_post_term_cache' => false,
|
|
877
|
+
'order' => 'DESC',
|
|
878
|
+
'orderby' => 'date',
|
|
879
|
+
'post_status' => 'publish',
|
|
880
|
+
'posts_per_page' => 1, // get only the most recent.
|
|
881
|
+
);
|
|
882
|
+
|
|
883
|
+
$navigation_post = new WP_Query( $parsed_args );
|
|
884
|
+
if ( count( $navigation_post->posts ) > 0 ) {
|
|
885
|
+
return $navigation_post->posts[0];
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
return null;
|
|
889
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { store } from '../utils/interactivity';
|
|
5
|
+
|
|
6
|
+
const focusableSelectors = [
|
|
7
|
+
'a[href]',
|
|
8
|
+
'area[href]',
|
|
9
|
+
'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',
|
|
10
|
+
'select:not([disabled]):not([aria-hidden])',
|
|
11
|
+
'textarea:not([disabled]):not([aria-hidden])',
|
|
12
|
+
'button:not([disabled]):not([aria-hidden])',
|
|
13
|
+
'iframe',
|
|
14
|
+
'object',
|
|
15
|
+
'embed',
|
|
16
|
+
'[contenteditable]',
|
|
17
|
+
'[tabindex]:not([tabindex^="-"])',
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
store( {
|
|
21
|
+
effects: {
|
|
22
|
+
core: {
|
|
23
|
+
navigation: {
|
|
24
|
+
initModal: async ( { context, ref } ) => {
|
|
25
|
+
if ( context.core.navigation.isMenuOpen ) {
|
|
26
|
+
const focusableElements =
|
|
27
|
+
ref.querySelectorAll( focusableSelectors );
|
|
28
|
+
context.core.navigation.modal = ref;
|
|
29
|
+
context.core.navigation.firstFocusableElement =
|
|
30
|
+
focusableElements[ 0 ];
|
|
31
|
+
context.core.navigation.lastFocusableElement =
|
|
32
|
+
focusableElements[ focusableElements.length - 1 ];
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
focusFirstElement: async ( { context, ref } ) => {
|
|
36
|
+
if ( context.core.navigation.isMenuOpen ) {
|
|
37
|
+
ref.querySelector(
|
|
38
|
+
'.wp-block-navigation-item > *:first-child'
|
|
39
|
+
).focus();
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
selectors: {
|
|
46
|
+
core: {
|
|
47
|
+
navigation: {
|
|
48
|
+
roleAttribute: ( { context } ) => {
|
|
49
|
+
return context.core.navigation.overlay &&
|
|
50
|
+
context.core.navigation.isMenuOpen
|
|
51
|
+
? 'dialog'
|
|
52
|
+
: '';
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
actions: {
|
|
58
|
+
core: {
|
|
59
|
+
navigation: {
|
|
60
|
+
openMenu: ( { context, ref } ) => {
|
|
61
|
+
context.core.navigation.isMenuOpen = true;
|
|
62
|
+
context.core.navigation.previousFocus = ref;
|
|
63
|
+
if ( context.core.navigation.overlay ) {
|
|
64
|
+
// It adds a `has-modal-open` class to the <html> root
|
|
65
|
+
document.documentElement.classList.add(
|
|
66
|
+
'has-modal-open'
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
closeMenu: ( { context } ) => {
|
|
71
|
+
if ( context.core.navigation.isMenuOpen ) {
|
|
72
|
+
context.core.navigation.isMenuOpen = false;
|
|
73
|
+
if (
|
|
74
|
+
context.core.navigation.modal.contains(
|
|
75
|
+
window.document.activeElement
|
|
76
|
+
)
|
|
77
|
+
) {
|
|
78
|
+
context.core.navigation.previousFocus.focus();
|
|
79
|
+
}
|
|
80
|
+
context.core.navigation.modal = null;
|
|
81
|
+
context.core.navigation.previousFocus = null;
|
|
82
|
+
if ( context.core.navigation.overlay ) {
|
|
83
|
+
document.documentElement.classList.remove(
|
|
84
|
+
'has-modal-open'
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
handleMenuKeydown: ( { actions, context, event } ) => {
|
|
90
|
+
if ( context.core.navigation.isMenuOpen ) {
|
|
91
|
+
// If Escape close the menu
|
|
92
|
+
if (
|
|
93
|
+
event?.key === 'Escape' ||
|
|
94
|
+
event?.keyCode === 27
|
|
95
|
+
) {
|
|
96
|
+
actions.core.navigation.closeMenu( { context } );
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Trap focus if it is an overlay (main menu)
|
|
101
|
+
if (
|
|
102
|
+
context.core.navigation.overlay &&
|
|
103
|
+
( event.key === 'Tab' || event.keyCode === 9 )
|
|
104
|
+
) {
|
|
105
|
+
// If shift + tab it change the direction
|
|
106
|
+
if (
|
|
107
|
+
event.shiftKey &&
|
|
108
|
+
window.document.activeElement ===
|
|
109
|
+
context.core.navigation
|
|
110
|
+
.firstFocusableElement
|
|
111
|
+
) {
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
context.core.navigation.lastFocusableElement.focus();
|
|
114
|
+
} else if (
|
|
115
|
+
! event.shiftKey &&
|
|
116
|
+
window.document.activeElement ===
|
|
117
|
+
context.core.navigation.lastFocusableElement
|
|
118
|
+
) {
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
context.core.navigation.firstFocusableElement.focus();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
handleMenuFocusout: ( { actions, context, event } ) => {
|
|
126
|
+
if ( context.core.navigation.isMenuOpen ) {
|
|
127
|
+
// If focus is outside modal, and in the document, close menu
|
|
128
|
+
// event.target === The element losing focus
|
|
129
|
+
// event.relatedTarget === The element receiving focus (if any)
|
|
130
|
+
// When focusout is outsite the document, `window.document.activeElement` doesn't change
|
|
131
|
+
if (
|
|
132
|
+
! context.core.navigation.modal.contains(
|
|
133
|
+
event.relatedTarget
|
|
134
|
+
) &&
|
|
135
|
+
event.target !== window.document.activeElement
|
|
136
|
+
) {
|
|
137
|
+
actions.core.navigation.closeMenu( { context } );
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
} );
|
|
@@ -429,7 +429,7 @@ export default function NavigationLinkEdit( {
|
|
|
429
429
|
</BlockControls>
|
|
430
430
|
{ /* Warning, this duplicated in packages/block-library/src/navigation-submenu/edit.js */ }
|
|
431
431
|
<InspectorControls>
|
|
432
|
-
<PanelBody title={ __( '
|
|
432
|
+
<PanelBody title={ __( 'Settings' ) }>
|
|
433
433
|
<TextControl
|
|
434
434
|
__nextHasNoMarginBottom
|
|
435
435
|
value={ label ? stripHTML( label ) : '' }
|
|
@@ -384,7 +384,7 @@ export default function NavigationSubmenuEdit( {
|
|
|
384
384
|
</BlockControls>
|
|
385
385
|
{ /* Warning, this duplicated in packages/block-library/src/navigation-link/edit.js */ }
|
|
386
386
|
<InspectorControls>
|
|
387
|
-
<PanelBody title={ __( '
|
|
387
|
+
<PanelBody title={ __( 'Settings' ) }>
|
|
388
388
|
<TextControl
|
|
389
389
|
__nextHasNoMarginBottom
|
|
390
390
|
value={ label || '' }
|