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: -256 B (-0.01%)

Total Size: 1.75 MB

Filename Size Change
build/block-library/index.min.js 216 kB -256 B (-0.12%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 951 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.31 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.29 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/content-rtl.css 4.58 kB
build/block-editor/content.css 4.58 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 254 kB
build/block-editor/style-rtl.css 16.2 kB
build/block-editor/style.css 16.2 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 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 310 B
build/block-library/blocks/button/editor.css 310 B
build/block-library/blocks/button/style-rtl.css 538 B
build/block-library/blocks/button/style.css 538 B
build/block-library/blocks/buttons/editor-rtl.css 336 B
build/block-library/blocks/buttons/editor.css 336 B
build/block-library/blocks/buttons/style-rtl.css 328 B
build/block-library/blocks/buttons/style.css 328 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 121 B
build/block-library/blocks/code/style.css 121 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-content/style-rtl.css 90 B
build/block-library/blocks/comment-content/style.css 90 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 221 B
build/block-library/blocks/comments-pagination/editor.css 211 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 832 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 631 B
build/block-library/blocks/cover/editor-rtl.css 668 B
build/block-library/blocks/cover/editor.css 669 B
build/block-library/blocks/cover/style-rtl.css 1.62 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 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 314 B
build/block-library/blocks/embed/editor.css 314 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/file/view.min.js 324 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 342 B
build/block-library/blocks/form-input/style.css 342 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 958 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.71 kB
build/block-library/blocks/gallery/style.css 1.71 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 402 B
build/block-library/blocks/group/editor.css 402 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 845 B
build/block-library/blocks/image/editor.css 843 B
build/block-library/blocks/image/style-rtl.css 1.54 kB
build/block-library/blocks/image/style.css 1.54 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 1.58 kB
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 204 B
build/block-library/blocks/latest-posts/editor.css 204 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/media-text/editor-rtl.css 304 B
build/block-library/blocks/media-text/editor.css 303 B
build/block-library/blocks/media-text/style-rtl.css 516 B
build/block-library/blocks/media-text/style.css 515 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 663 B
build/block-library/blocks/navigation-link/editor.css 664 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.21 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.03 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/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 522 B
build/block-library/blocks/post-comments-form/style.css 522 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 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 141 B
build/block-library/blocks/post-excerpt/style.css 141 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 341 B
build/block-library/blocks/post-featured-image/style.css 341 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 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 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 220 B
build/block-library/blocks/query-pagination/editor.css 208 B
build/block-library/blocks/query-pagination/style-rtl.css 287 B
build/block-library/blocks/query-pagination/style.css 283 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/query/view.min.js 958 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 221 B
build/block-library/blocks/quote/theme.css 225 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 183 B
build/block-library/blocks/search/editor.css 183 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/search/view.min.js 475 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-title/editor-rtl.css 123 B
build/block-library/blocks/site-title/editor.css 123 B
build/block-library/blocks/site-title/style-rtl.css 71 B
build/block-library/blocks/site-title/style.css 71 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 676 B
build/block-library/blocks/social-links/editor.css 675 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/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/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 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 108 B
build/block-library/blocks/term-description/style.css 108 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 553 B
build/block-library/blocks/video/editor.css 554 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.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 11.9 kB
build/block-library/editor.css 11.8 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 14.6 kB
build/block-library/style.css 14.6 kB
build/block-library/theme-rtl.css 702 B
build/block-library/theme.css 707 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.2 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 221 kB
build/components/style-rtl.css 12 kB
build/components/style.css 12 kB
build/compose/index.min.js 12.9 kB
build/core-commands/index.min.js 2.78 kB
build/core-data/index.min.js 72.7 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.98 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.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/index.min.js 12.6 kB
build/edit-post/style-rtl.css 2.34 kB
build/edit-post/style.css 2.33 kB
build/edit-site/index.min.js 211 kB
build/edit-site/posts-rtl.css 6.64 kB
build/edit-site/posts.css 6.64 kB
build/edit-site/style-rtl.css 11.7 kB
build/edit-site/style.css 11.7 kB
build/edit-widgets/index.min.js 17.6 kB
build/edit-widgets/style-rtl.css 4.2 kB
build/edit-widgets/style.css 4.2 kB
build/editor/index.min.js 98.3 kB
build/editor/style-rtl.css 9.1 kB
build/editor/style.css 9.1 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.07 kB
build/format-library/style-rtl.css 506 B
build/format-library/style.css 505 B
build/hooks/index.min.js 1.54 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.5 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.72 kB
build/interactivity/index.min.js 13.4 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 742 B
build/interactivity/router.min.js 2.8 kB
build/interactivity/search.min.js 615 B
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.16 kB
build/list-reusable-blocks/style-rtl.css 846 B
build/list-reusable-blocks/style.css 846 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.3 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.59 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.36 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 578 B
build/preferences/style.css 578 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 1.01 kB
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.69 kB
build/reusable-blocks/index.min.js 2.74 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 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.03 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.85 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 560 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.19 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 <presstoke@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: talldan <talldanwp@git.wordpress.org>

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
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