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

Button block: hide link popover if not in visual edit mode #30166

Open
wants to merge 6 commits into
base: trunk
Choose a base branch
from

Conversation

stokesman
Copy link
Contributor

@stokesman stokesman commented Mar 24, 2021

There are two cases where the popover for the link of a Button block is visible when it shouldn't be:

  1. Editing the block as HTML
  2. In Select (Navigation) mode

I've not found issues reporting these but I'm betting we want to fix them.

How has this been tested?

In the post and site editor, by adding Button blocks with links and verifying that the link popover hides when the block is edited as HTML and also when the mode is changed to Select.

Screenshots

Before

button-block-link-popover-before.mp4

After

button-block-link-popover-after.mp4

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@github-actions
Copy link

github-actions bot commented Mar 24, 2021

Size Change: +45 B (0%)

Total Size: 1.82 MB

Filename Size Change
build/block-library/index.min.js 221 kB +45 B (+0.02%)
ℹ️ View Unchanged
Filename Size
build-module/a11y/index.min.js 482 B
build-module/block-library/file/view.min.js 447 B
build-module/block-library/image/view.min.js 1.78 kB
build-module/block-library/navigation/view.min.js 1.16 kB
build-module/block-library/query/view.min.js 742 B
build-module/block-library/search/view.min.js 616 B
build-module/interactivity-router/index.min.js 3.03 kB
build-module/interactivity/debug.min.js 17.2 kB
build-module/interactivity/index.min.js 13.6 kB
build/a11y/index.min.js 952 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1 kB
build/block-directory/style.css 1 kB
build/block-editor/content-rtl.css 4.42 kB
build/block-editor/content.css 4.41 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/index.min.js 255 kB
build/block-editor/style-rtl.css 15.4 kB
build/block-editor/style.css 15.4 kB
build/block-library/blocks/archives/editor-rtl.css 84 B
build/block-library/blocks/archives/editor.css 83 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 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 265 B
build/block-library/blocks/button/editor.css 265 B
build/block-library/blocks/button/style-rtl.css 555 B
build/block-library/blocks/button/style.css 555 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 345 B
build/block-library/blocks/buttons/style.css 345 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 B
build/block-library/blocks/categories/editor-rtl.css 132 B
build/block-library/blocks/categories/editor.css 131 B
build/block-library/blocks/categories/style-rtl.css 152 B
build/block-library/blocks/categories/style.css 152 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 139 B
build/block-library/blocks/code/style.css 139 B
build/block-library/blocks/code/theme-rtl.css 122 B
build/block-library/blocks/code/theme.css 122 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 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-author-name/style-rtl.css 72 B
build/block-library/blocks/comment-author-name/style.css 72 B
build/block-library/blocks/comment-content/style-rtl.css 120 B
build/block-library/blocks/comment-content/style.css 120 B
build/block-library/blocks/comment-date/style-rtl.css 65 B
build/block-library/blocks/comment-date/style.css 65 B
build/block-library/blocks/comment-edit-link/style-rtl.css 70 B
build/block-library/blocks/comment-edit-link/style.css 70 B
build/block-library/blocks/comment-reply-link/style-rtl.css 71 B
build/block-library/blocks/comment-reply-link/style.css 71 B
build/block-library/blocks/comment-template/style-rtl.css 200 B
build/block-library/blocks/comment-template/style.css 199 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 228 B
build/block-library/blocks/comments-pagination/editor.css 217 B
build/block-library/blocks/comments-pagination/style-rtl.css 234 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 837 B
build/block-library/blocks/comments/editor.css 836 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 637 B
build/block-library/blocks/cover/editor-rtl.css 631 B
build/block-library/blocks/cover/editor.css 631 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 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 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 331 B
build/block-library/blocks/embed/editor.css 331 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 279 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 357 B
build/block-library/blocks/form-input/style.css 357 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 470 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 946 B
build/block-library/blocks/gallery/editor.css 951 B
build/block-library/blocks/gallery/style-rtl.css 1.83 kB
build/block-library/blocks/gallery/style.css 1.82 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 334 B
build/block-library/blocks/group/editor.css 334 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 799 B
build/block-library/blocks/image/editor.css 799 B
build/block-library/blocks/image/style-rtl.css 1.59 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 139 B
build/block-library/blocks/latest-posts/editor.css 138 B
build/block-library/blocks/latest-posts/style-rtl.css 509 B
build/block-library/blocks/latest-posts/style.css 510 B
build/block-library/blocks/list/style-rtl.css 107 B
build/block-library/blocks/list/style.css 107 B
build/block-library/blocks/loginout/style-rtl.css 61 B
build/block-library/blocks/loginout/style.css 61 B
build/block-library/blocks/media-text/editor-rtl.css 321 B
build/block-library/blocks/media-text/editor.css 320 B
build/block-library/blocks/media-text/style-rtl.css 552 B
build/block-library/blocks/media-text/style.css 550 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 644 B
build/block-library/blocks/navigation-link/editor.css 645 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.2 kB
build/block-library/blocks/navigation/editor.css 2.2 kB
build/block-library/blocks/navigation/style-rtl.css 2.25 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 378 B
build/block-library/blocks/page-list/editor.css 378 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 236 B
build/block-library/blocks/paragraph/editor.css 236 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 B
build/block-library/blocks/post-author-biography/style-rtl.css 74 B
build/block-library/blocks/post-author-biography/style.css 74 B
build/block-library/blocks/post-author-name/style-rtl.css 69 B
build/block-library/blocks/post-author-name/style.css 69 B
build/block-library/blocks/post-author/editor-rtl.css 107 B
build/block-library/blocks/post-author/editor.css 107 B
build/block-library/blocks/post-author/style-rtl.css 188 B
build/block-library/blocks/post-author/style.css 189 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 527 B
build/block-library/blocks/post-comments-form/style.css 528 B
build/block-library/blocks/post-content/style-rtl.css 61 B
build/block-library/blocks/post-content/style.css 61 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 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 155 B
build/block-library/blocks/post-excerpt/style.css 155 B
build/block-library/blocks/post-featured-image/editor-rtl.css 729 B
build/block-library/blocks/post-featured-image/editor.css 726 B
build/block-library/blocks/post-featured-image/style-rtl.css 347 B
build/block-library/blocks/post-featured-image/style.css 347 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 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 399 B
build/block-library/blocks/post-template/style.css 398 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 70 B
build/block-library/blocks/post-time-to-read/style.css 70 B
build/block-library/blocks/post-title/style-rtl.css 162 B
build/block-library/blocks/post-title/style.css 162 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 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 342 B
build/block-library/blocks/pullquote/style.css 342 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 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 154 B
build/block-library/blocks/query-pagination/editor.css 154 B
build/block-library/blocks/query-pagination/style-rtl.css 237 B
build/block-library/blocks/query-pagination/style.css 237 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 452 B
build/block-library/blocks/query/editor.css 451 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 236 B
build/block-library/blocks/read-more/style-rtl.css 138 B
build/block-library/blocks/read-more/style.css 138 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 B
build/block-library/blocks/search/editor-rtl.css 199 B
build/block-library/blocks/search/editor.css 199 B
build/block-library/blocks/search/style-rtl.css 672 B
build/block-library/blocks/search/style.css 671 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 806 B
build/block-library/blocks/site-logo/editor.css 803 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-tagline/style-rtl.css 65 B
build/block-library/blocks/site-tagline/style.css 65 B
build/block-library/blocks/site-title/editor-rtl.css 85 B
build/block-library/blocks/site-title/editor.css 85 B
build/block-library/blocks/site-title/style-rtl.css 143 B
build/block-library/blocks/site-title/style.css 143 B
build/block-library/blocks/social-link/editor-rtl.css 338 B
build/block-library/blocks/social-link/editor.css 338 B
build/block-library/blocks/social-links/editor-rtl.css 729 B
build/block-library/blocks/social-links/editor.css 727 B
build/block-library/blocks/social-links/style-rtl.css 1.51 kB
build/block-library/blocks/social-links/style.css 1.5 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 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-of-contents/style-rtl.css 83 B
build/block-library/blocks/table-of-contents/style.css 83 B
build/block-library/blocks/table/editor-rtl.css 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/editor-rtl.css 144 B
build/block-library/blocks/tag-cloud/editor.css 144 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 368 B
build/block-library/blocks/template-part/editor.css 368 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 126 B
build/block-library/blocks/term-description/style.css 126 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 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 396 B
build/block-library/blocks/video/editor.css 397 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.08 kB
build/block-library/common.css 1.08 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.7 kB
build/block-library/editor.css 11.7 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 15 kB
build/block-library/style.css 15 kB
build/block-library/theme-rtl.css 708 B
build/block-library/theme.css 712 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 52.6 kB
build/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/index.min.js 228 kB
build/components/style-rtl.css 12.4 kB
build/components/style.css 12.4 kB
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 3.08 kB
build/core-data/index.min.js 73.9 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.35 kB
build/customize-widgets/style.css 1.35 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.69 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.66 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/index.min.js 13.7 kB
build/edit-post/style-rtl.css 2.76 kB
build/edit-post/style.css 2.75 kB
build/edit-site/index.min.js 219 kB
build/edit-site/posts-rtl.css 7.51 kB
build/edit-site/posts.css 7.51 kB
build/edit-site/style-rtl.css 13.3 kB
build/edit-site/style.css 13.4 kB
build/edit-widgets/index.min.js 17.7 kB
build/edit-widgets/style-rtl.css 4.09 kB
build/edit-widgets/style.css 4.09 kB
build/editor/index.min.js 112 kB
build/editor/style-rtl.css 9.65 kB
build/editor/style.css 9.67 kB
build/element/index.min.js 4.82 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.05 kB
build/format-library/style-rtl.css 476 B
build/format-library/style.css 476 B
build/hooks/index.min.js 1.65 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 852 B
build/list-reusable-blocks/style.css 852 B
build/media-utils/index.min.js 3.58 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.62 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.35 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.86 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 554 B
build/preferences/style.css 554 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 961 B
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.55 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.2 kB
build/router/index.min.js 2.11 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.04 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.9 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 556 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/vips/index.min.js 36.2 kB
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@talldan
Copy link
Contributor

talldan commented Mar 24, 2021

@stokesman How do you reproduce these bugs?

I could open the link popover using the shortcut (cmd+k/ctrl+k) when editing as HTML. I wondered if you had another way.

@stokesman
Copy link
Contributor Author

How do you reproduce these bugs?

Thanks for asking @talldan 👍
When the Button has a link assigned then the popover auto-opens anytime the block is selected. So in such a case, it can be reproduced just by switching modes or editing as HTML. I could make that more clear in the description.

I could open the link popover using the shortcut (cmd+k/ctrl+k)

Nice that you thought to try that! It is also fixed with this PR.

@talldan
Copy link
Contributor

talldan commented Mar 24, 2021

When the Button has a link assigned then the popover auto-opens anytime the block is selected. So in such a case, it can be reproduced just by switching modes or editing as HTML. I could make that more clear in the description.

Thanks, turns out I hadn't tried submitting the link. 👍

@stokesman stokesman added [Block] Buttons Affects the Buttons Block [Type] Bug An existing feature does not function as intended labels Mar 24, 2021
@stokesman stokesman force-pushed the fix/button-block-url-picker branch from a8f35de to 7edb060 Compare June 12, 2024 20:59
Copy link

github-actions bot commented Jun 12, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: stokesman <[email protected]>
Co-authored-by: t-hamano <[email protected]>
Co-authored-by: talldan <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@stokesman stokesman self-assigned this Jun 13, 2024
@stokesman
Copy link
Contributor Author

This PR has only been waiting around for three years so I guess another three wouldn’t hurt. Still, I am trying to reduce my open PRs and, as the issue this targets still exists, I'm not ready to just close it. Maybe @Mamaduka or @t-hamano can have a look though I'm sure you have more important things to do for the upcoming release. Just maybe consider it for your backlog 🙇.

@t-hamano
Copy link
Contributor

t-hamano commented Jun 13, 2024

Thanks for the ping!

I looked into this issue, and I think the root cause is that the link popover doesn't close even when another element is clicked/focused.

I think the reason why the link popover doesn't close is as follows:

  • Click a Button block with a link set.
  • Because both isSelected and isURLSet are true, the popover opens.
  • Click another element.
  • This onClose is called and isEditingURL is updated to false.
  • However, because both isSelected and isURLSet remain true, the link popover does not close.

Therefore, rather than controlling the display state of the link popover depending on the edit mode, I'm wondering if it is possible to make this onClose properly control the open/close state of the link popover.

Another approach is that the link editing UX in the Button block might be consistent with other link functions.

In other words, the UX I would personally like to see is as follows:

  • Do not open the link popover even when a Button block with a link set is selected.
  • In the block toolbar, always show the "Link" button instead of the "Unlink" button.
  • This button simply toggles the link popover open and closed. It has no unlink functionality.
ea01dc88583486c4e9030ca1b7518cf5.mp4

The diff below is a temporary change to achieve this UX.

Diff
diff --git a/packages/block-library/src/button/edit.js b/packages/block-library/src/button/edit.js
index b9806503a0..88010ba2a3 100644
--- a/packages/block-library/src/button/edit.js
+++ b/packages/block-library/src/button/edit.js
@@ -39,8 +39,8 @@ import {
        store as blockEditorStore,
        useBlockEditingMode,
 } from '@wordpress/block-editor';
-import { displayShortcut, isKeyboardEvent, ENTER } from '@wordpress/keycodes';
-import { link, linkOff } from '@wordpress/icons';
+import { ENTER } from '@wordpress/keycodes';
+import { link } from '@wordpress/icons';
 import {
        createBlock,
        cloneBlock,
@@ -173,15 +173,6 @@ function ButtonEdit( props ) {
 
        const TagName = tagName || 'a';
 
-       function onKeyDown( event ) {
-               if ( isKeyboardEvent.primary( event, 'k' ) ) {
-                       startEditing( event );
-               } else if ( isKeyboardEvent.primaryShift( event, 'k' ) ) {
-                       unlink();
-                       richTextRef.current?.focus();
-               }
-       }
-
        // Use internal state instead of a ref to make sure that the component
        // re-renders when the popover's anchor updates.
        const [ popoverAnchor, setPopoverAnchor ] = useState( null );
@@ -194,7 +185,6 @@ function ButtonEdit( props ) {
        const richTextRef = useRef();
        const blockProps = useBlockProps( {
                ref: useMergeRefs( [ setPopoverAnchor, ref ] ),
-               onKeyDown,
        } );
        const blockEditingMode = useBlockEditingMode();
 
@@ -204,11 +194,6 @@ function ButtonEdit( props ) {
        const nofollow = !! rel?.includes( NOFOLLOW_REL );
        const isLinkTag = 'a' === TagName;
 
-       function startEditing( event ) {
-               event.preventDefault();
-               setIsEditingURL( true );
-       }
-
        function unlink() {
                setAttributes( {
                        url: undefined,
@@ -234,7 +219,7 @@ function ButtonEdit( props ) {
        const useEnterRef = useEnter( { content: text, clientId } );
        const mergedRef = useMergeRefs( [ useEnterRef, richTextRef ] );
 
-       const { lockUrlControls = false, isVisualEditMode } = useSelect(
+       const { lockUrlControls = false } = useSelect(
                ( select ) => {
                        if ( ! isSelected ) {
                                return {};
@@ -243,8 +228,6 @@ function ButtonEdit( props ) {
                        const blockBindingsSource = unlock(
                                select( blocksStore )
                        ).getBlockBindingsSource( metadata?.bindings?.url?.source );
-                       const store = select( blockEditorStore );
-
                        return {
                                lockUrlControls:
                                        !! metadata?.bindings?.url &&
@@ -253,9 +236,6 @@ function ButtonEdit( props ) {
                                                context,
                                                args: metadata?.bindings?.url?.args,
                                        } ),
-                               isVisualEditMode:
-                                       'visual' === store.getBlockMode( clientId ) &&
-                                       ! store.isNavigationMode(),
                        };
                },
                [ clientId, isSelected, metadata?.bindings?.url ]
@@ -315,67 +295,53 @@ function ButtonEdit( props ) {
                                                } }
                                        />
                                ) }
-                               { ! isURLSet && isLinkTag && ! lockUrlControls && (
+                               { isLinkTag && ! lockUrlControls && (
                                        <ToolbarButton
                                                name="link"
                                                icon={ link }
                                                title={ __( 'Link' ) }
-                                               shortcut={ displayShortcut.primary( 'k' ) }
-                                               onClick={ startEditing }
-                                       />
-                               ) }
-                               { isURLSet && isLinkTag && ! lockUrlControls && (
-                                       <ToolbarButton
-                                               name="link"
-                                               icon={ linkOff }
-                                               title={ __( 'Unlink' ) }
-                                               shortcut={ displayShortcut.primaryShift( 'k' ) }
-                                               onClick={ unlink }
-                                               isActive
+                                               onClick={ () => setIsEditingURL( ! isEditingURL ) }
+                                               isActive={ isURLSet }
                                        />
                                ) }
                        </BlockControls>
-                       { isLinkTag &&
-                               isSelected &&
-                               isVisualEditMode &&
-                               ( isEditingURL || isURLSet ) &&
-                               ! lockUrlControls && (
-                                       <Popover
-                                               placement="bottom"
-                                               onClose={ () => {
-                                                       setIsEditingURL( false );
+                       { isLinkTag && isSelected && isEditingURL && ! lockUrlControls && (
+                               <Popover
+                                       placement="bottom"
+                                       onClose={ () => {
+                                               setIsEditingURL( false );
+                                               richTextRef.current?.focus();
+                                       } }
+                                       anchor={ popoverAnchor }
+                                       focusOnMount={ isEditingURL ? 'firstElement' : false }
+                                       __unstableSlotName="__unstable-block-tools-after"
+                                       shift
+                               >
+                                       <LinkControl
+                                               value={ linkValue }
+                                               onChange={ ( {
+                                                       url: newURL,
+                                                       opensInNewTab: newOpensInNewTab,
+                                                       nofollow: newNofollow,
+                                               } ) =>
+                                                       setAttributes(
+                                                               getUpdatedLinkAttributes( {
+                                                                       rel,
+                                                                       url: newURL,
+                                                                       opensInNewTab: newOpensInNewTab,
+                                                                       nofollow: newNofollow,
+                                                               } )
+                                                       )
+                                               }
+                                               onRemove={ () => {
+                                                       unlink();
                                                        richTextRef.current?.focus();
                                                } }
-                                               anchor={ popoverAnchor }
-                                               focusOnMount={ isEditingURL ? 'firstElement' : false }
-                                               __unstableSlotName="__unstable-block-tools-after"
-                                               shift
-                                       >
-                                               <LinkControl
-                                                       value={ linkValue }
-                                                       onChange={ ( {
-                                                               url: newURL,
-                                                               opensInNewTab: newOpensInNewTab,
-                                                               nofollow: newNofollow,
-                                                       } ) =>
-                                                               setAttributes(
-                                                                       getUpdatedLinkAttributes( {
-                                                                               rel,
-                                                                               url: newURL,
-                                                                               opensInNewTab: newOpensInNewTab,
-                                                                               nofollow: newNofollow,
-                                                                       } )
-                                                               )
-                                                       }
-                                                       onRemove={ () => {
-                                                               unlink();
-                                                               richTextRef.current?.focus();
-                                                       } }
-                                                       forceIsEditingLink={ isEditingURL }
-                                                       settings={ LINK_SETTINGS }
-                                               />
-                                       </Popover>
-                               ) }
+                                               forceIsEditingLink={ ! isURLSet }
+                                               settings={ LINK_SETTINGS }
+                                       />
+                               </Popover>
+                       ) }
                        <InspectorControls>
                                <WidthPanel
                                        selectedWidth={ width }

This is mostly consistent with the UX of the Image block.

image

I personally prefer this approach, but I'd love to hear your thoughts!

@stokesman
Copy link
Contributor Author

stokesman commented Jun 13, 2024

Aki, thank you for the in depth consideration on this.

Another approach is that the link editing UX in the Button block might be consistent with other link functions

I had thought about that and I would like that solution better too. Way back when I first made this PR I supposed that the always-open-while-selected behavior was intentional and changing it might not be favored. It’s a good point that other block’s link editing experiences differ.

If you’d like to spin up a PR I’d be happy to lend my review. Otherwise, I’m also willing to revise this one following your suggestion. Though I wish the diff you provided would apply 😄 (git tells me its corrupt at line 29).

@t-hamano
Copy link
Contributor

Though I wish the diff you provided would apply 😄 (git tells me its corrupt at line 29).

Sorry, it seems I didn't generate the diff correctly 😅 I updated the diff in the comment and also pushed the patch to this PR.

  • This patch removes the Link/Unlink shortcut. We may need to consider whether to keep the shortcut.
  • We may also need feedback from the accessibility team on whether this approach makes sense.

@stokesman
Copy link
Contributor Author

stokesman commented Jun 17, 2024

Thanks for pushing the update Aki. I've tested again and it’s working well.

  • This patch removes the Link/Unlink shortcut. We may need to consider whether to keep the shortcut.

I’d favor keeping the shortcut. The reasoning being that it more closely aligns with how custom links in the Navigation block work. Besides that, I wonder if the isActive status of the toolbar button is something worth keeping. Right now a Button is the only linkable block I know of that uses it. I sort of like it, so maybe other blocks should follow suit but it’s a bit of a separate issue.

@t-hamano
Copy link
Contributor

I pushed the following changes:

  • Restore link shortcut
  • Remove isActive state

These two changes should make it almost identical to the behavior of the Navigation Custom Links block.

Another question is whether to also keep the unlink shortcut, which does not exist in the Navigation Custom Links block. Maybe it would be better to not make too many changes in this PR and just focus on the change of not opening the link popover when the block is selected.

@stokesman
Copy link
Contributor Author

Another question is whether to also keep the unlink shortcut, which does not exist in the Navigation Custom Links block.

I don’t have a strong opinion on that. I tend to think consistency with the Custom Link block is fine for this PR. Generally, perhaps it’d be nicer if all linkable blocks had such a shortcut.

I pushed some e2e test updates. The tests that were failing were expected due to the link popover being no longer being open just because the block is selected. Perhaps premature to update those if this approach is ultimately not acceptable 🤷‍♂️ 🤞.

@stokesman stokesman force-pushed the fix/button-block-url-picker branch from 47d9360 to 414b8b9 Compare July 16, 2024 20:09
@t-hamano
Copy link
Contributor

I've rebased this PR to move it forward.

Here's the summary of this PR. I've kept the changes minimal, but would love to hear your thoughts.

  • The URL popover will not open when the button is selected. Users must use a keyboard shortcut or click the link button on the block toolbar.
  • The link button on the block toolbar will change to a pressed state if a link has been set.
  • The unlink shortcut will still work as before.
f00303f7f1c6820a8a4089e57292388c.mp4

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

Successfully merging this pull request may close these issues.

3 participants