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

Gallery: Add lightbox support #62906

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

Gallery: Add lightbox support #62906

wants to merge 7 commits into from

Conversation

madhusudhand
Copy link
Contributor

@madhusudhand madhusudhand commented Jun 27, 2024

What?

This introduces lightbox functionality to Gallery block.

How?

  • Image lightbox has been extended to support gallery
  • Next and Prev icons were added to image lightbox if the image is in the context of a gallery.
  • In this iteration (first) next/prev navigation for the lightbox in gallery are based on the "Expand on click" property of the image.

Following is the behaviour in various scenarios.

Case 1: "Expand on click" is enabled for the image block globally.

All images inside (unless overridden at block level), will invoke the lightbox on click and next and previous navigation is possible.

Case 2: One of the image (lets say 2nd image) is set to "Link to image file"

Lightbox will be invoked on click of 1st image and on click of next will move to 3rd image.

Case 3: "Expand on click" is not enabled globally, but few images are set with this option in gallery.

This is similar to case 2, lightbox opens with only those images.

What's in future PRs?

  • This change updates the image source on next and prev navigation. The smooth transition between the images will be addressed in a future PR.
  • This has no effect on touch devices. It will be addressed in followup.

Screenshots (Draft)

gallery-lightbox-1

image

Testing instructions

  • In global styles, enable "Click to expand" feature on image block.
  • Add a gallery block to a post or page. Add images to it.
  • In the frontend, click on an image to invoke lightbox and navigate between images by clicking on icons in the UI, or using next and prev arrow keys in the keyboard.

Related issues

First iteration of #56310

Copy link

github-actions bot commented Jun 27, 2024

Size Change: +2.02 kB (+0.11%)

Total Size: 1.76 MB

Filename Size Change
build/block-editor/index.min.js 254 kB +33 B (+0.01%)
build/block-library/blocks/image/style-rtl.css 1.72 kB +129 B (+8.09%) 🔍
build/block-library/blocks/image/style.css 1.71 kB +126 B (+7.94%) 🔍
build/block-library/blocks/image/view.min.js 2.01 kB +357 B (+21.65%) 🚨
build/block-library/editor-rtl.css 11.9 kB +19 B (+0.16%)
build/block-library/editor.css 11.9 kB +19 B (+0.16%)
build/block-library/index.min.js 216 kB +13 B (+0.01%)
build/block-library/style-rtl.css 14.8 kB +132 B (+0.9%)
build/block-library/style.css 14.8 kB +131 B (+0.89%)
build/components/index.min.js 221 kB +13 B (+0.01%)
build/components/style-rtl.css 12 kB +7 B (+0.06%)
build/components/style.css 12 kB +6 B (+0.05%)
build/core-data/index.min.js 73 kB +209 B (+0.29%)
build/edit-site/index.min.js 213 kB +252 B (+0.12%)
build/edit-site/posts-rtl.css 6.8 kB +18 B (+0.27%)
build/edit-site/posts.css 6.81 kB +14 B (+0.21%)
build/edit-site/style-rtl.css 12 kB +5 B (+0.04%)
build/edit-site/style.css 12 kB +2 B (+0.02%)
build/editor/index.min.js 99.5 kB +54 B (+0.05%)
build/interactivity/image.min.js 2.14 kB +353 B (+19.8%) 🚨
build/block-library/blocks/tag-cloud/editor-rtl.css 63 B +63 B (new file) 🆕
build/block-library/blocks/tag-cloud/editor.css 63 B +63 B (new file) 🆕
ℹ️ 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.59 kB
build/block-editor/content.css 4.59 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
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 862 B
build/block-library/blocks/image/editor.css 861 B
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 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.25 kB
build/block-library/blocks/navigation/style.css 2.23 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 527 B
build/block-library/blocks/post-comments-form/style.css 528 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 193 B
build/block-library/blocks/search/editor.css 193 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 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 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/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/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.3 kB
build/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/compose/index.min.js 12.9 kB
build/core-commands/index.min.js 2.81 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.31 kB
build/edit-post/style.css 2.31 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/style-rtl.css 9.32 kB
build/editor/style.css 9.32 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/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 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 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.54 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

@madhusudhand
Copy link
Contributor Author

madhusudhand commented Jul 23, 2024

@jasmussen @WordPress/gutenberg-design This is a first iteration of #56310.
It adds two icons (Chevron left and right) to the lightbox UI, and adds keyboard navigation to switch between images.
While the icons looks fine for smaller images, they overlap with larger images. (this can be adjusted by setting proper padding)

Small Image Large Image
image image

The same design doesn't work for smaller devices as the image fits to 100% width.

image

While icons can be avoided in touch based devices, that may not be accessible.
Could you suggest designs?

@t-hamano t-hamano added [Type] Enhancement A suggestion for improvement. Needs Design Feedback Needs general design feedback. [Block] Gallery Affects the Gallery Block - used to display groups of images labels Jul 23, 2024
@t-hamano
Copy link
Contributor

This PR should close #37652.

@jameskoster
Copy link
Contributor

The chevrons look a bit awkward when they get this close to the image:

Screenshot 2024-07-23 at 12 03 04

Ideally there should be no overlap.


When viewing the first or last image in the lightbox, the next / previous button is disabled accordingly, but there's no visual indication which makes the button feel broken. Two options to explore:

  1. Add the disabled state to the button
  2. Don't disable the button, and have it cycle to the beginning or the end accordingly

I'm not sure the chevrons need to appear on mobile, swiping left/right is probably more intuitive?

@paaljoachim
Copy link
Contributor

paaljoachim commented Jul 23, 2024

Great! Thank you for working on this @madhusudhand

Taking a step back. Doing some brain storming.
Should likely be addressed in another PR.

The Gallery needs a Link To option - Expand on click so that all the images inside a gallery will use Expand on click.
One part of this comment: #37652 (comment)

Implement a way to apply the lightbox on setting to all the child images of the gallery. The gallery already does this with the linkto and resolution settings, so shouldn't be too much work


Add a toggle to add left/right pagination for the Expand option.

So it would be something like this.
Gallery is selected.
(Another PR) In the sidebar settings: Link to drop down. User selects "Expand on click"
(This PR) Toggle becomes visible when "Expand on click" is selected to show left/right pagination for lightbox. Users can then select to add the left/right chevrons to their gallery. This toggle could be right below the Link to drop box.

Thanks!

@t-hamano
Copy link
Contributor

In #62762 we are moving the Link to option from the block sidebar to the block toolbar.

If we make this change, will it conflict with this PR?

@t-hamano
Copy link
Contributor

I think we need to consider various scenarios. Here are some examples:

  • If "Expand on click" is disabled for the Image block in the global style, but "Expand on click" is enabled for all image blocks in a Gallery block instance, do we want to enable the lightbox gallery?
  • If "Expand on click" is disabled for some blocks in a Gallery block, do we want to include those images in the lightbox gallery?
  • Is there a way to enable or disable the lightbox gallery for only some gallery blocks?
@madhusudhand
Copy link
Contributor Author

madhusudhand commented Jul 25, 2024

@jasmussen @luisherranz

It does open a question we have to answer eventually: what happens in a 5 image gallery if all but the third image is set to "expand on click"? My instinct: lightbox arrowkeys would navigate images 1 and 2, then you'd exit, and then you could again swap between 4 and 5, then exit. Of course not ideal, but nevertheless reflecting what you can do.

As per the current changes, lightbox invoked by clicking on any image except 3, and next/prev navigation moves the lightbox images between 1,2,4,5 without exiting after image 2 (on next). I would imagine this would be better experience have lightbox as single set [1,2,4,5], instead of breaking into two sets [1,2] and [3,4]. Please suggest.

In #62762 we are moving the Link to option from the block sidebar to the block toolbar.
If we make this change, will it conflict with this PR?

@t-hamano This PR now only based on the image having "Expand to click" enabled. I don't think it will conflict. The behaviour should be same as long as the image gets the value for lightbox.

If "Expand on click" is disabled for the Image block in the global style, but "Expand on click" is enabled for all image blocks in a Gallery block instance, do we want to enable the lightbox gallery?

This will be case 3 from the description. Yes, lightbox is enabled for those enabled images, and navigation is possible between them.

If "Expand on click" is disabled for some blocks in a Gallery block, do we want to include those images in the lightbox gallery?

They will be skipped and it is the right thing to do, because clicking on those images directly doesn't invoke lightbox.

Is there a way to enable or disable the lightbox gallery for only some gallery blocks?

This is not relevant for this iteration. But #62762 makes it possible, when the setting is enabled at a gallery block level.

@madhusudhand madhusudhand marked this pull request as ready for review July 25, 2024 10:56
Copy link

github-actions bot commented Jul 25, 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: madhusudhand <madhudollu@git.wordpress.org>
Co-authored-by: luisherranz <luisherranz@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: paaljoachim <paaljoachim@git.wordpress.org>
Co-authored-by: artemiomorales <artemiosans@git.wordpress.org>
Co-authored-by: richtabor <richtabor@git.wordpress.org>

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

@madhusudhand
Copy link
Contributor Author

@jameskoster

Images are given a better padding to avoid overlaps with the icon.
image

Add the disabled state to the button

Yes. The current change disables the buttons. Suggest on opacity.

I'm not sure the chevrons need to appear on mobile, swiping left/right is probably more intuitive?

They are removed on mobile devices, meaning the current PR has no effect on mobile devices and swipe actions will be added in a followup PR.

@madhusudhand madhusudhand self-assigned this Jul 25, 2024
@t-hamano
Copy link
Contributor

@madhusudhand

Thanks for the detailed explanation. Since it's based only on whether the Gallery block has images with lightbox enabled, does that mean there's no way to disable navigation between images?

Do we need to provide some way to disable (or enable) navigation between images?

@t-hamano
Copy link
Contributor

The Link to option in the Gallery block is just a global change to the linkDestination attribute of all the image blocks inside. And even if we enable lightboxes for individual images, some users might want to keep navigation between images, i.e. lightboxes at the gallery block level, disabled.

With that in mind, I think there might need to be an option to explicitly enable the Gallery lightbox.

For example, the UI would look like this:

image

However, if we move the block sidebar's "Link to" control to the block toolbar in #62762, the question is whether to leave the "Enable lightbox Gallery" toggle.

@t-hamano
Copy link
Contributor

Do you see a case where we would specifically want gallery to behave like individual images? (lightbox invoked but not navigation between them)

To be honest, I don't see many cases where people would want to disable image navigation. It just bothers me that there's no way to opt out of it 😅

@jameskoster
Copy link
Contributor

Suggest on opacity.

I think ideally these are Button instances and use the associated styles when disabled.

Copy link
Member

@luisherranz luisherranz left a comment

Choose a reason for hiding this comment

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

Code-wise, it looks good to me.

Switching from currentImageId to an images array and currentImageIndex makes sense.

I'm not entirely sure if the implementation should mention the gallery (state.isGallery) or if simply the previous and next image buttons should appear when the state.images array contains more than one image. But that's something that can be changed in the future when other use-cases appear, like navigating across all the exapandable images of a post.

packages/block-library/src/image/view.js Show resolved Hide resolved
packages/block-library/src/image/view.js Outdated Show resolved Hide resolved
packages/block-library/src/image/view.js Outdated Show resolved Hide resolved
@paaljoachim
Copy link
Contributor

paaljoachim commented Jul 25, 2024

A couple of things.

A new PR should be added to add Expand on click option to the LINK To drop down. @akasunil @madhusudhand
#62762 (comment)
---> Please add the PR and lets get that done first as it impacts the next step.

Then this PR: Add lightbox support.
Should have a toggle similar to what @t-hamano mentioned in the above comment.
#62906 (comment)

This means the process is so:
User decides to add lightbox to the Gallery. Goes to the LINK To and selects "Expand on click".
Because "Expand on click" has been selected a toggle to navigate a gallery with left/right arrows shows up below the LINK TO drop down.
User can then toggle to turn on Navigate between images in lightbox mode or not.
If there are multiple Gallery blocks then one will only navigate one gallery at a time.
The first image will only have an arrow to the right. This signals the beginning of the lightbox gallery.
The last image will only have an arrow to the left. This signals the end of the lightbox gallery.

@artemiomorales
Copy link
Contributor

Thanks for working on this @madhusudhand! I've taken an initial look and it works 🙌

A new PR should be added to add Expand on click option to the LINK To drop down.
#62762 (comment)
---> Please add the PR and lets get that done first as it impacts the next step.

Regarding this point and other discussion I've been reading, I posted a comment that can hopefully offer some points to consider and help with alignment.

@madhusudhand
Copy link
Contributor Author

The Link to option in the Gallery block is just a global change to the linkDestination attribute of all the image blocks inside. And even if we enable lightboxes for individual images, some users might want to keep navigation between images, i.e. lightboxes at the gallery block level, disabled.

Lets say link to is set to media file at gallery level, and then image 2 and 4 (of total 5) in the gallery are individually set to Expand on click, navigation is still possible between those images in the lightbox.

I am not sure if Expand on click on gallery should be treated differently than other options, and gallery can set any option and images inside can override it to something else. So, keeping the same options will be consistent.

@madhusudhand
Copy link
Contributor Author

Regarding this point and other discussion I've been reading, I #56310 (comment) can hopefully offer some points to consider and help with alignment.

@artemiomorales Thanks for sharing a great summary. As mentioned here #56310 (comment) I believe, the new option can be safely added in a followup PR and it doesn't block the current change.

@gziolo gziolo added the Needs Accessibility Feedback Need input from accessibility label Jul 26, 2024
Copy link
Member

@gziolo gziolo left a comment

Choose a reason for hiding this comment

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

Excellent work on adding the lightbox support for individual Gallery blocks. I did a round of testing and I can confirm that the navigation between images is limited to the currently active Gallery. It also correctly ignores the images that opted out from expand on click individually. That also covers the case when only one image in the Gallery is set or only one opted in into the expand of click functionality.

We will need to verify the keyboard navigation before landing this PR, as I'm afraid it isn't fully accessible at the moment. Namely, the focus in the lightbox is always set to the close button and it is impossible to tab to the arrow buttons. Arrow left and right keys work correctly as for changing images, but there is no information announced when using assistive technologies how many items there are to browse in the lightbox, and the information announced when reaching the first and last item might be confusing.

Lightbox.navigation.with.keyboard.mov
@gziolo
Copy link
Member

gziolo commented Jul 26, 2024

Do you see a case where we would specifically want gallery to behave like individual images? (lightbox invoked but not navigation between them)

To be honest, I don't see many cases where people would want to disable image navigation. It just bothers me that there's no way to opt out of it 😅

There should always be ways to opt out. There should be an option on the Gallery level that disables the lightbox experience. The only question is how that impacts individual images. Would it mean it automatically disables the ligthbox also for individual images, or users could still enlarge individual images but not navigate between them.

@madhusudhand
Copy link
Contributor Author

We will need to verify the keyboard navigation before landing this PR, as I'm afraid it isn't fully accessible at the moment. Namely, the focus in the lightbox is always set to the close button and it is impossible to tab to the arrow buttons.

This commit 59b06b3 brings the focus to all elements and makes the other document elements inert, and not moving focus to invisible items. Please share your thoughts on the approach.

Arrow left and right keys work correctly as for changing images, but there is no information announced when using assistive technologies how many items there are to browse in the lightbox, and the information announced when reaching the first and last item might be confusing.

The above fix brings the focus and announces Next, button. It can be further improved based on the a11y feedback.

@@ -307,6 +310,12 @@ class="wp-lightbox-overlay zoom"
<button type="button" aria-label="$close_button_label" style="fill: $close_button_color" class="close-button">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" focusable="false"><path d="m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z"></path></svg>
</button>
<button type="button" aria-label="$prev_button_label" style="fill: $close_button_color" class="prev-button" data-wp-bind--hidden="!state.hasNavigation" data-wp-on--click="actions.showPreviousImage" data-wp-bind--disabled="!state.hasPreviousImage">
Copy link
Member

Choose a reason for hiding this comment

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

It needs to be further validate, but it's likely that we will have to set aria-disabled instead of disabled so the button doesn't loose focus when there are no more items to navigate to with the keyboard interactions using space or enter.

Copy link
Member

Choose a reason for hiding this comment

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

Yes, I confirmed that in my testing. As soon as button gets into disabled state the focus moves to the body element. In general, tabable elements should always be in the same order so it is predictable. Inactive buttons should be present but announce their disabled state.

I'm also not entirely sure how it all should work with arrow right and left when focus is inside the lightbox on the close button or arrow keys. I would appreciate some hepl from accessibility experts here.

@gziolo
Copy link
Member

gziolo commented Jul 26, 2024

Arrow left and right keys work correctly as for changing images, but there is no information announced when using assistive technologies how many items there are to browse in the lightbox, and the information announced when reaching the first and last item might be confusing.

The above fix brings the focus and announces Next, button. It can be further improved based on the a11y feedback.

Nice, I can confirm that I can now tab to these buttons when they aren't disabled. There might be some more consideration to take into account as I expanded on it in #62906 (comment).

@luisherranz
Copy link
Member

This commit 59b06b3 brings the focus to all elements and makes the other document elements inert, and not moving focus to invisible items. Please share your thoughts on the approach.

@afercia, I wonder if we should take this opportunity to add the area-hidden="true" attribute to all those elements as well, as you describe in this comment.

Can you confirm that adding aria-hidden and inert is the expected behavior from an accessibility point of view?

@richtabor
Copy link
Member

Is there something preventing styles from loading?

CleanShot 2024-07-27 at 11 10 26

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Gallery Affects the Gallery Block - used to display groups of images Needs Accessibility Feedback Need input from accessibility Needs Design Feedback Needs general design feedback. [Type] Enhancement A suggestion for improvement.
8 participants