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

Search Block: add button only with expandable input #50487

Merged
merged 22 commits into from
Jun 2, 2023
Merged

Conversation

jffng
Copy link
Contributor

@jffng jffng commented May 9, 2023

What?

Adds the Button (Icon) Only option to the search block. With this option selected, the behavior of the button changes so that when it's clicked, the search input field expands to the defined width.

Why?

Solves #31128

How?

If the revelant block attributes are present, a small client side script is enqueued to handle showing / hiding the search field. h/t @apeatling @aristath in #31719 for the starting point.

Testing Instructions

  1. Insert a search block to a post/page or in the site editor
  2. Select the Button Only option from the toolbar
  3. Select the button in the editor, verify the search field expands
  4. View the front end, click on it and verify focus is moved to the input. Type in a search term, click on the search button again and verify it performs the search.

Testing Instructions for Keyboard

  • Add a search block to a post or in the site editor, select the button only option
  • Navigate to it using the keyboard / via tab. When the search block is focused, press enter / return. Verify the input field expands.
  • Visit the front-end. Navigate to the search button. When it is focused, press enter / return. Verify the input expands and focus is moved to the input. Type in a search, press return, and verify.

Screenshots or screencast

Editor

button-only-editor.mov

Front-end

button-only-view.mov

@github-actions
Copy link

github-actions bot commented May 9, 2023

Size Change: +5.48 kB (0%)

Total Size: 1.4 MB

Filename Size Change
build/a11y/index.min.js 955 B -38 B (-4%)
build/annotations/index.min.js 2.69 kB -90 B (-3%)
build/api-fetch/index.min.js 2.28 kB -57 B (-2%)
build/autop/index.min.js 2.1 kB -46 B (-2%)
build/blob/index.min.js 451 B -32 B (-7%)
build/block-directory/index.min.js 7.05 kB -153 B (-2%)
build/block-directory/style-rtl.css 1.02 kB -34 B (-3%)
build/block-directory/style.css 1.02 kB -35 B (-3%)
build/block-editor/content-rtl.css 4.22 kB +55 B (+1%)
build/block-editor/content.css 4.22 kB +57 B (+1%)
build/block-editor/default-editor-styles-rtl.css 381 B -22 B (-5%)
build/block-editor/default-editor-styles.css 381 B -22 B (-5%)
build/block-editor/index.min.js 195 kB -7.53 kB (-4%)
build/block-editor/style-rtl.css 14.9 kB -423 B (-3%)
build/block-editor/style.css 14.9 kB -421 B (-3%)
build/block-library/blocks/audio/theme-rtl.css 126 B -12 B (-9%)
build/block-library/blocks/audio/theme.css 126 B -12 B (-9%)
build/block-library/blocks/button/editor-rtl.css 584 B -3 B (-1%)
build/block-library/blocks/button/editor.css 582 B -5 B (-1%)
build/block-library/blocks/button/style-rtl.css 624 B -4 B (-1%)
build/block-library/blocks/button/style.css 623 B -4 B (-1%)
build/block-library/blocks/cover/style-rtl.css 1.61 kB -7 B (0%)
build/block-library/blocks/cover/style.css 1.6 kB -8 B (0%)
build/block-library/blocks/embed/theme-rtl.css 126 B -12 B (-9%)
build/block-library/blocks/embed/theme.css 126 B -12 B (-9%)
build/block-library/blocks/file/editor-rtl.css 316 B +16 B (+5%) 🔍
build/block-library/blocks/file/editor.css 316 B +16 B (+5%) 🔍
build/block-library/blocks/file/view.min.js 375 B -4 B (-1%)
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB +140 B (+6%) 🔍
build/block-library/blocks/freeform/editor.css 2.58 kB +141 B (+6%) 🔍
build/block-library/blocks/gallery/editor-rtl.css 947 B -10 B (-1%)
build/block-library/blocks/gallery/editor.css 952 B -10 B (-1%)
build/block-library/blocks/gallery/style-rtl.css 1.53 kB -19 B (-1%)
build/block-library/blocks/gallery/style.css 1.53 kB -19 B (-1%)
build/block-library/blocks/gallery/theme-rtl.css 108 B -14 B (-11%) 👏
build/block-library/blocks/gallery/theme.css 108 B -14 B (-11%) 👏
build/block-library/blocks/html/editor-rtl.css 336 B -4 B (-1%)
build/block-library/blocks/html/editor.css 337 B -4 B (-1%)
build/block-library/blocks/image/style-rtl.css 1.07 kB +422 B (+65%) 🆘
build/block-library/blocks/image/style.css 1.07 kB +419 B (+64%) 🆘
build/block-library/blocks/image/theme-rtl.css 126 B -11 B (-8%)
build/block-library/blocks/image/theme.css 126 B -11 B (-8%)
build/block-library/blocks/navigation-link/editor-rtl.css 712 B -4 B (-1%)
build/block-library/blocks/navigation-link/editor.css 711 B -4 B (-1%)
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B -3 B (-1%)
build/block-library/blocks/navigation-submenu/editor.css 295 B -4 B (-1%)
build/block-library/blocks/navigation/editor-rtl.css 2.35 kB +222 B (+10%) ⚠️
build/block-library/blocks/navigation/editor.css 2.36 kB +221 B (+10%) ⚠️
build/block-library/blocks/navigation/style-rtl.css 2.21 kB -13 B (-1%)
build/block-library/blocks/navigation/style.css 2.2 kB -10 B (0%)
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB -28 B (-1%)
build/block-library/blocks/navigation/view.min.js 438 B -9 B (-2%)
build/block-library/blocks/post-comments-form/style-rtl.css 508 B +7 B (+1%)
build/block-library/blocks/post-comments-form/style.css 508 B +7 B (+1%)
build/block-library/blocks/post-featured-image/style-rtl.css 319 B -3 B (-1%)
build/block-library/blocks/post-featured-image/style.css 319 B -3 B (-1%)
build/block-library/blocks/post-template/style-rtl.css 314 B +33 B (+12%) ⚠️
build/block-library/blocks/post-template/style.css 314 B +33 B (+12%) ⚠️
build/block-library/blocks/search/style-rtl.css 587 B +153 B (+35%) 🚨
build/block-library/blocks/search/style.css 584 B +152 B (+35%) 🚨
build/block-library/blocks/shortcode/editor-rtl.css 323 B -6 B (-2%)
build/block-library/blocks/shortcode/editor.css 323 B -6 B (-2%)
build/block-library/blocks/site-logo/editor-rtl.css 754 B -6 B (-1%)
build/block-library/blocks/site-logo/editor.css 754 B -6 B (-1%)
build/block-library/blocks/spacer/editor-rtl.css 348 B -11 B (-3%)
build/block-library/blocks/spacer/editor.css 348 B -11 B (-3%)
build/block-library/blocks/table/style-rtl.css 645 B -6 B (-1%)
build/block-library/blocks/table/style.css 644 B -6 B (-1%)
build/block-library/blocks/table/theme-rtl.css 146 B -11 B (-7%)
build/block-library/blocks/table/theme.css 146 B -11 B (-7%)
build/block-library/blocks/video/style-rtl.css 174 B -5 B (-3%)
build/block-library/blocks/video/style.css 174 B -5 B (-3%)
build/block-library/blocks/video/theme-rtl.css 126 B -13 B (-9%)
build/block-library/blocks/video/theme.css 126 B -13 B (-9%)
build/block-library/common-rtl.css 1.1 kB -20 B (-2%)
build/block-library/common.css 1.1 kB -20 B (-2%)
build/block-library/editor-rtl.css 12.2 kB +313 B (+3%)
build/block-library/editor.css 12.1 kB +307 B (+3%)
build/block-library/index.min.js 201 kB -3.08 kB (-2%)
build/block-library/style-rtl.css 13.2 kB +405 B (+3%)
build/block-library/style.css 13.2 kB +416 B (+3%)
build/block-library/theme-rtl.css 686 B -12 B (-2%)
build/block-library/theme.css 691 B -12 B (-2%)
build/block-serialization-default-parser/index.min.js 1.12 kB -8 B (-1%)
build/block-serialization-spec-parser/index.min.js 2.87 kB +39 B (+1%)
build/blocks/index.min.js 50.3 kB -816 B (-2%)
build/commands/index.min.js 14.9 kB -17 B (0%)
build/commands/style-rtl.css 827 B +20 B (+2%)
build/commands/style.css 827 B +23 B (+3%)
build/components/index.min.js 231 kB +20.3 kB (+10%) ⚠️
build/components/style-rtl.css 11.8 kB +7 B (0%)
build/components/style.css 11.8 kB +8 B (0%)
build/compose/index.min.js 12.1 kB -359 B (-3%)
build/core-commands/index.min.js 1.74 kB -102 B (-6%)
build/core-data/index.min.js 15.7 kB -1.01 kB (-6%)
build/customize-widgets/index.min.js 12 kB -204 B (-2%)
build/customize-widgets/style-rtl.css 1.38 kB -26 B (-2%)
build/customize-widgets/style.css 1.38 kB -25 B (-2%)
build/data-controls/index.min.js 640 B -78 B (-11%) 👏
build/data/index.min.js 8.23 kB -447 B (-5%)
build/date/index.min.js 40.4 kB -41 B (0%)
build/deprecated/index.min.js 451 B -67 B (-13%) 👏
build/dom-ready/index.min.js 324 B -12 B (-4%)
build/dom/index.min.js 4.63 kB -138 B (-3%)
build/edit-post/classic-rtl.css 544 B -27 B (-5%)
build/edit-post/classic.css 545 B -26 B (-5%)
build/edit-post/index.min.js 33.9 kB -1.49 kB (-4%)
build/edit-post/style-rtl.css 7.57 kB -270 B (-3%)
build/edit-post/style.css 7.56 kB -267 B (-3%)
build/edit-site/index.min.js 67.3 kB +3.27 kB (+5%) 🔍
build/edit-site/style-rtl.css 11 kB +369 B (+3%)
build/edit-site/style.css 11 kB +370 B (+3%)
build/edit-widgets/index.min.js 16.8 kB -505 B (-3%)
build/edit-widgets/style-rtl.css 4.53 kB -30 B (-1%)
build/edit-widgets/style.css 4.53 kB -32 B (-1%)
build/editor/index.min.js 44.7 kB -1.39 kB (-3%)
build/editor/style-rtl.css 3.54 kB -54 B (-2%)
build/editor/style.css 3.53 kB -54 B (-2%)
build/element/index.min.js 4.8 kB -140 B (-3%)
build/escape-html/index.min.js 537 B -11 B (-2%)
build/format-library/index.min.js 7.57 kB +315 B (+4%)
build/format-library/style-rtl.css 554 B -3 B (-1%)
build/format-library/style.css 553 B -3 B (-1%)
build/hooks/index.min.js 1.55 kB -118 B (-7%)
build/html-entities/index.min.js 448 B -6 B (-1%)
build/i18n/index.min.js 3.58 kB -204 B (-5%)
build/is-shallow-equal/index.min.js 527 B -8 B (-1%)
build/keyboard-shortcuts/index.min.js 1.71 kB -88 B (-5%)
build/keycodes/index.min.js 1.84 kB -99 B (-5%)
build/list-reusable-blocks/index.min.js 2.13 kB -9 B (0%)
build/list-reusable-blocks/style-rtl.css 836 B -29 B (-3%)
build/list-reusable-blocks/style.css 836 B -29 B (-3%)
build/media-utils/index.min.js 2.9 kB -86 B (-3%)
build/notices/index.min.js 948 B -29 B (-3%)
build/plugins/index.min.js 1.84 kB -105 B (-5%)
build/preferences-persistence/index.min.js 1.84 kB -390 B (-17%) 👏
build/preferences/index.min.js 1.24 kB -105 B (-8%)
build/primitives/index.min.js 941 B -19 B (-2%)
build/priority-queue/index.min.js 1.52 kB -2 B (0%)
build/private-apis/index.min.js 939 B -13 B (-1%)
build/react-i18n/index.min.js 696 B -6 B (-1%)
build/react-refresh-entry/index.min.js 8.44 kB -5 B (0%)
build/react-refresh-runtime/index.min.js 7.31 kB +2 B (0%)
build/redux-routine/index.min.js 2.7 kB -49 B (-2%)
build/reusable-blocks/index.min.js 2.21 kB -54 B (-2%)
build/reusable-blocks/style-rtl.css 243 B -22 B (-8%)
build/reusable-blocks/style.css 243 B -22 B (-8%)
build/rich-text/index.min.js 10.7 kB -379 B (-3%)
build/router/index.min.js 1.77 kB -2 B (0%)
build/server-side-render/index.min.js 2.02 kB -62 B (-3%)
build/shortcode/index.min.js 1.39 kB -136 B (-9%)
build/style-engine/index.min.js 1.42 kB -135 B (-9%)
build/token-list/index.min.js 582 B -68 B (-10%) 👏
build/url/index.min.js 3.57 kB -168 B (-4%)
build/vendors/react-dom.min.js 41.8 kB -13 B (0%)
build/viewport/index.min.js 1.04 kB -51 B (-5%)
build/warning/index.min.js 268 B -12 B (-4%)
build/widgets/index.min.js 7.16 kB -138 B (-2%)
build/widgets/style-rtl.css 1.15 kB -27 B (-2%)
build/widgets/style.css 1.16 kB -26 B (-2%)
build/wordcount/index.min.js 1.02 kB -38 B (-4%)
ℹ️ View Unchanged
Filename Size
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/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 91 B
build/block-library/blocks/avatar/style.css 91 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 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/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 159 B
build/block-library/blocks/details/style.css 159 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/file/interactivity.min.js 395 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 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/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/interactivity.min.js 783 B
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/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation/interactivity.min.js 976 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-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-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-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 103 B
build/block-library/blocks/preformatted/style.css 103 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 288 B
build/block-library/blocks/query-pagination/style.css 284 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/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 528 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/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.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
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/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/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/interactivity/runtime.min.js 2.71 kB
build/block-library/interactivity/vendors.min.js 8.2 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react.min.js 4.02 kB

compressed-size-action

@github-actions
Copy link

github-actions bot commented May 9, 2023

Flaky tests detected in 7665720.
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/5082066034
📝 Reported issues:

@jffng jffng marked this pull request as ready for review May 10, 2023 14:35
@jffng jffng added [Block] Search Affects the Search Block - used to display a search field [Type] Enhancement A suggestion for improvement. labels May 10, 2023
@jffng
Copy link
Contributor Author

jffng commented May 10, 2023

Hi @jasmussen — I was reading your most recent feedback on the previous PR:

This didn't quite work how I expected it — I expected that simply focusing the search button would make the search field appear, because the search "button" actually was the search field. Kind of like this. I don't mind particularly the current behavior, and I can understand it might be necessary — so I would appreciate education on whether there might be some accessibility reason for why it should be this way. Is there a need for the ability to focus first the button, then invoke that with space, then transfer the focus to the input field?

It seems like having the focus jump to the input field by simply focusing on the button, would feel unexpected. Requiring the explicit user action to expand + focus the input, could feel less jarring. But I'm not sure, so wanted to ask again on this refreshed PR.

Let me know what you think 🙏

@jffng jffng requested a review from jasmussen May 10, 2023 14:43
@jffng jffng linked an issue May 10, 2023 that may be closed by this pull request
@jasmussen
Copy link
Contributor

First off, this is great. This has been a much needed feature for a long time. Trunk:

trunk

This branch:

Screenshot 2023-05-11 at 10 04 50

I think longer term we should revisit those dropdowns of options, the iconography isn't entirely solid, and there's arguably a better place in the inspector for some of these. I also think we can be better with the defaults, even keep the defaults smartly contextual so it's always collapsed into a labelles icon only version when inserted inside a container block.

But those are followups, and I think there's such value in this one that we should land it quickly. That said, in testing I'm seeing this work only in the editor, not on the frontend:

Screenshot 2023-05-11 at 10 05 37

It seems like having the focus jump to the input field by simply focusing on the button, would feel unexpected. Requiring the explicit user action to expand + focus the input, could feel less jarring. But I'm not sure, so wanted to ask again on this refreshed PR.

I'm not sure the focus should jump anywhere. The way I've been thinking about this is that the button-only search button is a camouflaged input field. It's one and the same, and focusing it simply expands it so you can type. Kind of like one of these:

None of those look particularly great, but hopefully the principle is clear, that it's just a styled input field that looks like a search button when not focused. What do you think?

@jffng
Copy link
Contributor Author

jffng commented May 11, 2023

in testing I'm seeing this work only in the editor, not on the frontend:

Are you using the npm run dev? I think you may have to restart that process with this PR checked out, to trigger the block.json to be re-registered, since a new front-end script was introduced.

If that doesn't fix it, do you see any console errors?

@jasmussen
Copy link
Contributor

npm run dev did it, apologies! Works decently well!

Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

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

This is working well for me!

I've left a couple of comments, mainly around the view.js file which seems to be included twice on the front end. I think once this is finalised, this is good to bring in.

packages/block-library/src/search/block.json Outdated Show resolved Hide resolved
packages/block-library/src/search/index.php Outdated Show resolved Hide resolved
Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

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

Oh good call! I removed it from block.json 73176c1.

Nice, that's worked on my side!

One more thing, it looks like we might need to run npm run fixtures:regenerate to regenerate the test fixtures for the search block, so they include the new block attributes.

}
$input_markup = sprintf(
Copy link
Contributor

Choose a reason for hiding this comment

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

It would be nice to do this using the WP_HTML_Tag_Processor. There's an example of this in https://github.com/WordPress/gutenberg/pull/49212/files. Not necessary to get his merged, but a nice improvement.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Nice, happy to try that in a follow up.

@@ -0,0 +1,61 @@
window.addEventListener( 'DOMContentLoaded', () => {
Copy link
Contributor

Choose a reason for hiding this comment

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

I wonder if this could use the new interactivity API cc @gziolo

Copy link
Member

Choose a reason for hiding this comment

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

Yes, it definitely could. We will run the experiment for Interactivity API until everything is properly tested so it's fine to have two concurrent solutions for 2-3 Gutenberg plugin releases 👍🏻

@jffng
Copy link
Contributor Author

jffng commented May 12, 2023

Hi @jasmussen I pushed a change so that the input expands when the button is focused. How is it feeling to you?

@ciampo
Copy link
Contributor

ciampo commented May 22, 2023

Adding to @jeryj 's comment, the current focus behavior feels unusual and a bit disorienting to me.

Here's an alternative that came to mind:

  • by default, the input is visually hidden (but accessible to assistive technology) and the button is visible. Both input and button represent tab stops as they would normally (no need for tabindex or aria-hidden attributes)
  • when the input is focused, it becomes visible. The input would also stay visible while the button has focus, and (if we wanted) also while the input is not empty.

This way, both the input and the button would be always accessible to assistive technology, without altering the tab order, and while keeping the button to always be a form submit button.

@jffng
Copy link
Contributor Author

jffng commented May 23, 2023

Hi @ciampo thanks for weighing in. The alternative you suggest is how it worked it in b028cbb.

Tabbing to a hidden element also felt unexpected, and there's some uncertainty around whether an element that's visually hidden should be available in the tab order. So the current state of the PR requires a click or keypress to expand the search field.

I don't like that this one is a bit convoluted (the button purpose changes depending on the state of the search field, requires some additional client side js to handle aria attributes / tabindex), but I do think it provides a better UX for keyboard navigation.

searchField.setAttribute( 'tabindex', '-1' );
searchButton.setAttribute( 'aria-expanded', 'false' );
searchButton.setAttribute( 'aria-controls', id );
searchButton.setAttribute( 'aria-label', ariaLabel );
Copy link
Contributor

Choose a reason for hiding this comment

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

This causes problems if searchButton never had an aria-label. It will set the aria-label attribute to the string value "null", overriding any visible label the button might have. We should either check that ariaLabel has a value before doing this, or give ariaLabel a fallback value of "" above on line 13.

Copy link
Contributor Author

@jffng jffng May 24, 2023

Choose a reason for hiding this comment

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

searchButton should always have an aria-label, which is defined here.

searchField.removeAttribute( 'tabindex' );
searchButton.removeAttribute( 'aria-expanded' );
searchButton.removeAttribute( 'aria-controls' );
searchButton.removeAttribute( 'aria-label' );
Copy link
Contributor

Choose a reason for hiding this comment

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

It's not clear why we're removing aria-label here. If the button has a label, it's probably because it's an icon button. In which case, removing the attribute will leave the button nameless. Am I missing something?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We remove aria-label here since the behavior of the button changes to its default behavior (type="submit"). Previously the label would read Expand search button. We could set the label to something else, but I thought this would add some unnecessary complexity since the button is performing its expected behavior in this state.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I updated this so that aria-label is set to "Submit Search", instead of removing it: fe7ff74

@andrewhayward
Copy link
Contributor

I have some comments, but first a newbie question – what is the thought process behind including this behaviour? Aside from it being a nice addition (#31128), have we validated that it's a useful and wanted bit of functionality, for both creators and consumers? I'm always a little wary of including things just because we think something will be popular. Happy to be shown previous conversations around this.

Anyway, thoughts (in a bit of a brain dump – sorry!)...

When you click on a <label>, the browser is supposed to focus its related field. Unfortunately the click event listener on document.body obscures this behaviour here, by immediately removing focus from the field. Ideally this would be corrected.

The field remains hidden when it receives focus, potentially leaving the user in a confusing state. For most users this won't be an issue, because they can neither click on the label (see 1), nor tab to the input. But assistive technologies allow users to navigate in different ways, meaning it is possible to focus on the field, and then not be able to see it. The field should have a focus listener to make it visible, even if for most people it'll never be used.

It looks like the expectation is that if the search form loses focus, the field should collapse. But it doesn't expand when it gains focus. This feels quite unbalanced to me, as an interactive process. Not that I necessarily think it should expand and collapse based purely on focus – that could get quite jarring. I suppose what I'm thinking is that I'm not sure about the multi-use single-button approach, but that's more my gut than any evidence-based appraisal!

Finally, is it expected that if the field has a value (for example, on the results page, or if I just don't submit the search) it still collapses? This feels weird to me.

@jffng
Copy link
Contributor Author

jffng commented May 24, 2023

@andrewhayward thank you for the thoughts and feedback!

have we validated that it's a useful and wanted bit of functionality, for both creators and consumers?

I've seen this pattern come up a lot from theme designers, and it was prioritized here as part of a larger effort to improve the Search Block.

When you click on a , the browser is supposed to focus its related field. Unfortunately the click event listener on document.body obscures this behaviour here, by immediately removing focus from the field. Ideally this would be corrected.

Nice, will address this 👍 EDIT: addressed in 7665720.

(A) But assistive technologies allow users to navigate in different ways, meaning it is possible to focus on the field, and then not be able to see it. The field should have a focus listener to make it visible, even if for most people it'll never be used.

(B) Not that I necessarily think it should expand and collapse based purely on focus – that could get quite jarring

I'm not sure I follow these pieces of feedback together — if the field has a focus listener to make it visible (A), how would it not expand on focus (B)?

is it expected that if the field has a value (for example, on the results page, or if I just don't submit the search) it still collapses?

Yes, that was the intention. It seemed related to these guidelines, so I thought there should be a way to collapse / dismiss the field, even if the field has a value.

@jffng
Copy link
Contributor Author

jffng commented Jun 1, 2023

I made a few more enhancements for keyboard and assistive technology users:

  • aria-label and type attributes are updated to reflect the button's purpose (either to submit or expand the search)
  • escape closes the form when the input OR button has focus.
  • Clicking the label focuses the search field

Is there anything else that should be addressed in this PR? There's varying opinions on what UX feels good, so it would be good to get something in and iterate, assuming this is still a feature we want to land.

Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

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

Thanks for addressing all the feedback! This is testing well for me:

  • Tested using a mouse ✅
    • Clicking the label focuses the search field
  • Tested using a keyboard ✅
    • Escape closes the form when the input OR button has focus
  • Tested with VoiceOver on a Mac using the keyboard to navigate ✅
    • aria-label and type attributes reflect the button's purpose
    • Element descriptions work well
  • Tested using a touch device ✅
    • Also works well on several different resolutions

I've noticed that the aria- and related attributes aren't updated in the editor when you interact with this block. I think it would be good to update these to reflect the different states, but I'm not sure it should block this PR. What do you think?

@jffng
Copy link
Contributor Author

jffng commented Jun 2, 2023

Thanks @mikachan !

I've noticed that the aria- and related attributes aren't updated in the editor when you interact with this block. I think it would be good to update these to reflect the different states

Yes, though I'm not exactly sure what those attributes / labels need to be since their purpose differs in the editor context, e.g. the button doesn't submit the form in the expanded state. So yes, a follow up could be good there!

Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

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

since their purpose differs in the editor context

Yeah, I was thinking this too, as I was trying to think of suggestions earlier but it's not an easy one.

With that in mind, I think this is ready to bring in. This is a great addition to the search block! 🎉

@jffng jffng mentioned this pull request Jun 2, 2023
4 tasks
@jffng
Copy link
Contributor Author

jffng commented Jun 2, 2023

Thank you @mikachan! I opened up a follow up issue above to track these suggestions and will merge when the tests pass 💯

@jffng jffng merged commit fb34a98 into trunk Jun 2, 2023
@jffng jffng deleted the try/search-button-only branch June 2, 2023 18:45
@github-actions github-actions bot added this to the Gutenberg 16.0 milestone Jun 2, 2023
@femkreations femkreations added the Needs User Documentation Needs new user documentation label Jun 14, 2023
sethrubenstein pushed a commit to pewresearch/gutenberg that referenced this pull request Jul 13, 2023
* Build docs.

* Fix lint errors.

* Fix php lint.

* Remove duplicate call to view script.

* List all dependencies in useEffect calls.

* Add isSearchFieldHidden and buttonBehavior attributes to fixtures.

* Allow input to expand on button focus and clean up CSS.

* Add hidden class on initial block rendering.

* Remove unneeded CSS.

* Allow focus and blur to toggle search field, and simplify logic.

* Handle keyboard navigation, event handling, and refactor.

* Escape to close input, and do not allow focus to expand invisible element.

* Add aria attributes to describe hidden / expanded states.

* Fix lint warnings.

* Fix php warnings.

* Add and remove relevant ARIA attributes when input state changes.

* Make strict comparison.

* Clean up aria and take input out of taborder by default.

* Fix label clicking behavior, remove unneeded event listeners.

* Fix comparison bug.

* Add and remove type and aria-label attributes to reflect form state.

* Fix conditional on useEffect to show input on width change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Search Affects the Search Block - used to display a search field Needs User Documentation Needs new user documentation [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Search Block: Add icon-only option