Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Footnotes: disable based on post type #52934

Merged
merged 6 commits into from
Jul 26, 2023
Merged

Conversation

ellatrix
Copy link
Member

What?

For now, let's restrict the footnotes block and format to posts and pages.

  • Always register the block type and format
  • Disable the format and block based on the post type context.

Why?

We don't want people to be adding footnote anchors outside of the post content. For now we also don't want custom post types to add footnotes, but we can enable that in a future release.

How?

We need a usesContext setting for format types as well. Not sure if we should immediately ship this as a stable API though. What do you think?

In the future it would be good to disable block insertion as well, but this is not possible with the current block.json APIs. Maybe we should expand parent?

Testing Instructions

In the site editor, try adding an anchor in a template. The button should not be there. The block is insertable, but it will have a message that is doesn't work.

Testing Instructions for Keyboard

Screenshots or screencast

@ellatrix ellatrix added [Block] Footnotes Affects the Footnotes Block Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta labels Jul 25, 2023
@ellatrix ellatrix requested review from mcsf and Mamaduka July 25, 2023 12:13
@github-actions
Copy link

github-actions bot commented Jul 25, 2023

Size Change: +280 B (0%)

Total Size: 1.44 MB

Filename Size Change
build/block-editor/index.min.js 210 kB +114 B (0%)
build/block-library/index.min.js 202 kB +85 B (0%)
build/commands/style-rtl.css 835 B +8 B (+1%)
build/commands/style.css 834 B +7 B (+1%)
build/components/index.min.js 241 kB -49 B (0%)
build/edit-site/index.min.js 89.5 kB +91 B (0%)
build/edit-site/style-rtl.css 13.2 kB +12 B (0%)
build/edit-site/style.css 13.2 kB +12 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.28 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 451 B
build/block-directory/index.min.js 6.99 kB
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/content-rtl.css 4.26 kB
build/block-editor/content.css 4.25 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
build/block-editor/style-rtl.css 14.8 kB
build/block-editor/style.css 14.8 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 584 B
build/block-library/blocks/button/editor.css 582 B
build/block-library/blocks/button/style-rtl.css 624 B
build/block-library/blocks/button/style.css 623 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 409 B
build/block-library/blocks/columns/style.css 409 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.61 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 178 B
build/block-library/blocks/details/style.css 178 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view-interactivity.min.js 317 B
build/block-library/blocks/file/view.min.js 375 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB
build/block-library/blocks/freeform/editor.css 2.58 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.42 kB
build/block-library/blocks/image/style.css 1.42 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/image/view-interactivity.min.js 1.46 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.23 kB
build/block-library/blocks/navigation/style.css 2.22 kB
build/block-library/blocks/navigation/view-interactivity.min.js 988 B
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 438 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 319 B
build/block-library/blocks/post-featured-image/style.css 319 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 314 B
build/block-library/blocks/post-template/style.css 314 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 302 B
build/block-library/blocks/query-pagination/style.css 299 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 178 B
build/block-library/blocks/search/editor.css 178 B
build/block-library/blocks/search/style-rtl.css 587 B
build/block-library/blocks/search/style.css 584 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 531 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.43 kB
build/block-library/blocks/social-links/style.css 1.42 kB
build/block-library/blocks/spacer/editor-rtl.css 348 B
build/block-library/blocks/spacer/editor.css 348 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 645 B
build/block-library/blocks/table/style.css 644 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.1 kB
build/block-library/editor.css 12.1 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 13.7 kB
build/block-library/style.css 13.7 kB
build/block-library/theme-rtl.css 686 B
build/block-library/theme.css 691 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51 kB
build/commands/index.min.js 15 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12.1 kB
build/core-commands/index.min.js 2.31 kB
build/core-data/index.min.js 16.4 kB
build/customize-widgets/index.min.js 12 kB
build/customize-widgets/style-rtl.css 1.46 kB
build/customize-widgets/style.css 1.45 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.28 kB
build/date/index.min.js 17.8 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.63 kB
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/index.min.js 35.3 kB
build/edit-post/style-rtl.css 7.58 kB
build/edit-post/style.css 7.57 kB
build/edit-widgets/index.min.js 16.9 kB
build/edit-widgets/style-rtl.css 4.52 kB
build/edit-widgets/style.css 4.52 kB
build/editor/index.min.js 45.4 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/element/index.min.js 4.8 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.62 kB
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/index.min.js 10.5 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.64 kB
build/keycodes/index.min.js 1.84 kB
build/list-reusable-blocks/index.min.js 2.18 kB
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/media-utils/index.min.js 2.9 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 1.99 kB
build/nux/style-rtl.css 735 B
build/nux/style.css 732 B
build/plugins/index.min.js 1.77 kB
build/preferences-persistence/index.min.js 1.84 kB
build/preferences/index.min.js 1.24 kB
build/primitives/index.min.js 943 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 951 B
build/react-i18n/index.min.js 615 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.71 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/rich-text/index.min.js 11 kB
build/router/index.min.js 1.77 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 1.83 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.57 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 958 B
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@Mamaduka
Copy link
Member

@ellatrix, you'll need to apply changes like 3587760 to fix the failing unit tests.

@ellatrix
Copy link
Member Author

@ellatrix, you'll need to apply changes like 3587760 to fix the failing unit tests.

Well in that case we can just leave it as is (which is how we're registering all default formats).

Copy link
Member

@Mamaduka Mamaduka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Besides a few minor notes, the fix tests well for me. Thank you, @ellatrix!

I like that block context awareness allows the feature to work in Site Editor when editing pages.

I'm leaning towards keeping the format context experimental/private for the moment and finalizing it for WP 6.4.

packages/block-library/src/footnotes/edit.js Outdated Show resolved Hide resolved
Comment on lines +50 to +52
if ( postType !== 'post' && postType !== 'page' ) {
return null;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note for follow-up: We should check canInsertBlockType here as well. Disabling the block from Preferences results in broken behavior.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if we can do that. What If some block disables footnotes to be inserted as inner blocks? That doesn't mean footnote anchors can't be inserted.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So maybe what we should check here is well is just if footnotes is registered at all? But I guess the preference doesn't unregister it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll need to check if the footnotes block is disabled; it doesn't have to be canInsertBlockType.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like that is in the editPostStore, which would create a dependency on the edit-post packages for block-library. 🤔

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a registration check in 185c7b3, but that doesn't fix the preferences problem. Not sure if we should depend on the edit post package. Maybe the footnotes block doesn't belong in the block library package. Or is it fine to add the dependency?

@ellatrix
Copy link
Member Author

Just mentioning here as well that there's a filter in canInsertBlockType (blockEditor.__unstableCanInsertBlockType), which could be used to prevent inserting the block at all outside of the post content. However, you don't have access to the block context, so you'd have to loop through the parent blocks and check for the postType attribute while also handling it somehow for the post editor. Not sure if we should add this.

@bph bph added the [Type] Bug An existing feature does not function as intended label Jul 25, 2023
@@ -11,8 +11,7 @@ import BlockContext from '../block-context';

const DEFAULT_BLOCK_CONTEXT = {};

// eslint-disable-next-line no-restricted-syntax
export const usesContextKey = 'usesContext' + Math.random();
export const usesContextKey = Symbol( 'usesContext' );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Props @mcsf

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😄

@github-actions
Copy link

Flaky tests detected in 75330ff.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/5658846772
📝 Reported issues:

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great stuff!

✅ Footnotes and footnote revisions work as expected on page and post types
✅ Tested in templates and custom post types

I found a couple of issues:

  1. Open up a page that has footnotes and try to add some more. The footnote block will be duplicated. (only in editor, not in frontend)
2023-07-26.10.18.09.mp4
  1. Create a new pattern. You shouldn't be able to add footnotes when editing the pattern itself because it's a template. However if you add it to the page and try to insert a footnote, it borks
2023-07-26.10.20.31.mp4

@tellthemachines
Copy link
Contributor

  1. Open up a page that has footnotes and try to add some more. The footnote block will be duplicated. (only in editor, not in frontend)

I can reproduce this on trunk so it's probably better to fix separately.

@ramonjd
Copy link
Member

ramonjd commented Jul 26, 2023

Open up a page that has footnotes and try to add some more. The footnote block will be duplicated. (only in editor, not in frontend)

I think it's because getBlocks doesn't find any footnotes blocks inside a post-content, so we're inserting the block multiple times.

Would using useEntityBlockEditor to fetch the blocks of the current post/page work? It seems to in my tests. And I assume it's safe since we're restricting to pages/posts anyway 🤷🏻

Create a new pattern. You shouldn't be able to add footnotes when editing the pattern itself because it's a template. However if you add it to the page and try to insert a footnote, it borks

I should have specified "synced" patterns, which are inside core/block blocks. Checking if a selected block is a child of core/block seems to fix it.

E.g., something like this works for me so far for both issues
diff --git a/packages/block-library/src/footnotes/format.js b/packages/block-library/src/footnotes/format.js
index 2086005a50..4f457d570d 100644
--- a/packages/block-library/src/footnotes/format.js
+++ b/packages/block-library/src/footnotes/format.js
@@ -16,6 +16,7 @@ import {
 } from '@wordpress/block-editor';
 import { useSelect, useDispatch, useRegistry } from '@wordpress/data';
 import { createBlock, store as blocksStore } from '@wordpress/blocks';
+import { useEntityBlockEditor } from '@wordpress/core-data';
 
 /**
  * Internal dependencies
@@ -34,23 +35,26 @@ export const format = {
 		'data-fn': 'data-fn',
 	},
 	contentEditable: false,
-	[ usesContextKey ]: [ 'postType' ],
+	[ usesContextKey ]: [ 'postType', 'postId' ],
 	edit: function Edit( {
 		value,
 		onChange,
 		isObjectActive,
-		context: { postType },
+		context: { postType, postId },
 	} ) {
 		const registry = useRegistry();
 		const {
 			getSelectedBlockClientId,
 			getBlockRootClientId,
 			getBlockName,
-			getBlocks,
+			getBlockParentsByBlockName,
 		} = useSelect( blockEditorStore );
 		const footnotesBlockType = useSelect( ( select ) =>
 			select( blocksStore ).getBlockType( name )
 		);
+		const [ blocks ] = useEntityBlockEditor( 'postType', postType, {
+			id: postId,
+		} );
 		const { selectionChange, insertBlock } =
 			useDispatch( blockEditorStore );
 
@@ -58,6 +62,16 @@ export const format = {
 			return null;
 		}
 
+		// Check if the selected block lives within a pattern.
+		if (
+			getBlockParentsByBlockName(
+				getSelectedBlockClientId(),
+				'core/block'
+			).length > 0
+		) {
+			return null;
+		}
+
 		if ( postType !== 'post' && postType !== 'page' ) {
 			return null;
 		}
@@ -86,19 +100,7 @@ export const format = {
 					onChange( newValue );
 				}
 
-				// BFS search to find the first footnote block.
-				let fnBlock = null;
-				{
-					const queue = [ ...getBlocks() ];
-					while ( queue.length ) {
-						const block = queue.shift();
-						if ( block.name === name ) {
-							fnBlock = block;
-							break;
-						}
-						queue.push( ...block.innerBlocks );
-					}
-				}
+				let fnBlock = blocks?.find( ( block ) => block.name === name );
 
 				// Maybe this should all also be moved to the entity provider.
 				// When there is no footnotes block in the post, create one and

@ramonjd
Copy link
Member

ramonjd commented Jul 26, 2023

I can reproduce this on trunk so it's probably better to fix separately.

I was only thinking that, depending on what @ellatrix thinks would be the best fix, we might need the added context introduced in this PR to address it.

@ellatrix
Copy link
Member Author

@ramonjd That's an interesting fix! Do you mind to open a PR as a follow-up so it's properly attributed and and check the performance implications? useEntityBlockEditor would mean it's re-rendering for any other block changes, it would be best to call a selector in the event handler.

@Mamaduka
Copy link
Member

I agree. Let's address two issues @ramonjd mentioned separately; those two edge cases also exist on the trunk.

@ramonjd
Copy link
Member

ramonjd commented Jul 26, 2023

Do you mind to open a PR as a follow-up so it's properly attributed and and check the performance implications? useEntityBlockEditor would mean it's re-rendering for any other block changes, it would be best to call a selector in the event handler.

Thanks for checking my logic! Definitely happy to do a follow up to this one. I might need both your 👀 to double check 🙇🏻

@ramonjd ramonjd merged commit 168bce1 into trunk Jul 26, 2023
50 checks passed
@ramonjd ramonjd deleted the fix/footnotes-disable-post-type branch July 26, 2023 21:45
@github-actions github-actions bot added this to the Gutenberg 16.4 milestone Jul 26, 2023
ramonjd pushed a commit that referenced this pull request Jul 28, 2023
* Footnotes: disable based on post type

* Address feedback

* Fix typo

* Format: disable if block is not registered

* Lock usesContext api

* Use Symbol instead of Math.random
@ramonjd
Copy link
Member

ramonjd commented Jul 28, 2023

I just cherry-picked this PR to the update/packages-wp-6-3-RC3 branch to get it included in the next release: adc34b3

@ramonjd ramonjd removed the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Jul 28, 2023
ramonjd added a commit that referenced this pull request Jul 28, 2023
* Patterns: Enable focus mode editing (#52427)

* PreventDefault when isComposing is true. apply patch from t-hamano. (#52844)

see: #52821 (comment)

* List View: Ensure onDrop does not fire if there is no target (#52959)

* I18N: Add missing Gettext wrapper on strings in Edit Post overview sidebar (#52971)

* I18N: Add missing gettext wrapper

* Add context to disambiguate 'Outline' that is commonly used on borders.

* Footnotes: disable based on post type (#52934)

* Footnotes: disable based on post type

* Address feedback

* Fix typo

* Format: disable if block is not registered

* Lock usesContext api

* Use Symbol instead of Math.random

* Patterns Browse Screen: Fix back button when switching between categories (#52964)

* Patterns: Allow orphaned template parts to appear in general category (#52961)

* Spacing presets: fix bug with select control adding undefined preset values (#53005)

* Site Editor: Fix canvas mode sync with URL (#52996)

* Check if spacing tool is defined before displaying controls. (#53008)

* Check if spacing tool is defined before displaying controls.

* Don't show sides if spacing type false

* Improve consistency of the Post editor and Site editor Document actions (#52246)

* Remove redundant shortcut button.

* Fix focus and hover style and improve consistency.

* Rename post document-title and improve CSS consistency.

* Site Editor: Fix the typo in the title label map (#53071)

* Fix patterns search crash: check for existence of defaultView before attempting to get styles (#52956)

* backport paging bug fixes (#53091)

---------

Co-authored-by: George Mamadashvili <georgemamadashvili@gmail.com>
Co-authored-by: Hiroshi Urabe <mail@torounit.com>
Co-authored-by: Andrew Serong <14988353+andrewserong@users.noreply.github.com>
Co-authored-by: Pedro Mendonça <ped.gaspar@gmail.com>
Co-authored-by: Ella <4710635+ellatrix@users.noreply.github.com>
Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com>
Co-authored-by: Glen Davies <glendaviesnz@users.noreply.github.com>
Co-authored-by: tellthemachines <tellthemachines@users.noreply.github.com>
Co-authored-by: Andrea Fercia <a.fercia@gmail.com>
@ghost
Copy link

ghost commented Jul 31, 2023

Yeah I enjoy this PR because I am going to use footnotes block in my "Researches" CPT. Where each Research template is going to have references in for each of my researches that are written in the Post Content.
I don't need to repeat footnotes block since I can use the footnotes block inside the Research template.
Thanks for this addition!!!

@dougwollison
Copy link
Contributor

Sorry, I don't quite understand the need for restricting footnote use here. It's a text format and metadata block, I don't see how allowing this on custom post types that support the editor would cause issues. I'm was going to utilize this on a site that will be publishing lengthy case studies with footnotes.

I'm also very confused by the urgency of this; hard coding the post type check into the block and format, rather than implementing a setting/support/filter that allows custom post types to opt into them.

@mcsf
Copy link
Contributor

mcsf commented Aug 8, 2023

Sorry, I don't quite understand the need for restricting footnote use here. It's a text format and metadata block, I don't see how allowing this on custom post types that support the editor would cause issues. I'm was going to utilize this on a site that will be publishing lengthy case studies with footnotes.

I'm also very confused by the urgency of this; hard coding the post type check into the block and format, rather than implementing a setting/support/filter that allows custom post types to opt into them.

Both the urgency and excessive caution were due to the fact that we were well into RC (Release Candidate) stage for WordPress 6.3. It's totally fair of you to disagree, but I'm stressing this so that it's clear that everyone in the conversation was aware of the tradeoffs (including thoughts like "well, it's just a text format, what harm could it do to extend its reach?" or "what's wrong with adding an API to enable it at this point?"). It's also important to note that the option to altogether punt footnotes until 6.4 was absolutely on the table for a long time, and we only kept the feature after we reached enough stability — but keeping it restricted to posts and pages was part of the conditions for that to happen. I can say I'm much more comfortable with "soft launching" footnotes in this way rather than doing something that felt too rushed or rather than not launching at all. :)

@shirokoweb
Copy link

Why?

We don't want people to be adding footnote anchors outside of the post content. For now we also don't want custom post types to add footnotes, but we can enable that in a future release.

What if users want that feature wherever Gutenberg blocs are available?
Custom Posts are also posts.
Why don't forbid the use of Gutenberg Blocs everywhere but posts (articles).
Sorry but this is a complete nonsense.
We have the same needs as @dougwollison for scientific websites on high level topics, aka formal methods for AI explainability and robustness validation where we have tons of secondary sources to cite.
For now we use a custom made plugin which we would like to drop.

What is the workaround for this if we, endusers want it, please?
How to register CPTs?

@mcsf
Copy link
Contributor

mcsf commented Oct 16, 2023

For other readers, this question has been addressed in the issue for supporting CPTs:

#52812 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Footnotes Affects the Footnotes Block [Type] Bug An existing feature does not function as intended
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

8 participants