Skip to content

Image block: Show placeholder when uploading HEIC files#63643

Merged
noisysocks merged 4 commits into
trunkfrom
fix/show-placeholder-when-uploading-heic
Jul 24, 2024
Merged

Image block: Show placeholder when uploading HEIC files#63643
noisysocks merged 4 commits into
trunkfrom
fix/show-placeholder-when-uploading-heic

Conversation

@noisysocks

@noisysocks noisysocks commented Jul 17, 2024

Copy link
Copy Markdown
Member

What, why, how

In https://core.trac.wordpress.org/ticket/53645 we're adding support for HEIC images to Core. These will be automatically converted to a JPEG on the server after they're uploaded.

This PR improves the UX of uploading a HEIC image in a browser that doesn't support viewing HEIC images e.g. Chrome, Firefox.

Currently the temporary blob image that displays during upload can't be displayed and so the browser will display the default alt text during upload:

Kapture.2024-07-17.at.16.19.38.mp4

This PR detects when the image fails to load and during upload shows a placeholder div instead:

Kapture.2024-07-17.at.16.21.59.mp4

In browsers that support HEIC aka Safari, you'll see a preview of the image while it uploads.

Testing instructions

It's a bit tricky, sorry. You'll have to set Gutenberg to use this branch and WordPress to use adamsilverstein:add/heic-support (wordpress-develop#7034).

One way to do that is to:

  1. Clone wordpress-develop locally and cd to it
  2. Check out adamsilverstein:add/heic-support
  3. npm install; npx grunt
  4. cd back to your local Gutenberg repo
  5. Create a .wp-env.override.json with `{ "core": "/path/to/your/local/wordpress-develop/build" }
  6. npx wp-env start

Unfortunately we can't use Playground because it doesn't support ImageMagick.

Once your testing environment is set up:

  1. Open the post or site editor
  2. Upload a HEIC image. There are sample images available here: https://github.com/dsoprea/heic-exif-samples
  3. Test both a browser that supports HEIC (Safari) and one that doesn't (Firefox, Chrome)

@noisysocks noisysocks added [Type] Enhancement A suggestion for improvement. [Block] Image Affects the Image Block labels Jul 17, 2024
@github-actions

github-actions Bot commented Jul 17, 2024

Copy link
Copy Markdown

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: noisysocks <noisysocks@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: swissspidy <swissspidy@git.wordpress.org>

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

@github-actions

github-actions Bot commented Jul 17, 2024

Copy link
Copy Markdown

Size Change: +4.5 kB (+0.26%)

Total Size: 1.76 MB

Filename Size Change
build/block-editor/content-rtl.css 4.59 kB +9 B (+0.2%)
build/block-editor/content.css 4.59 kB +8 B (+0.17%)
build/block-editor/index.min.js 254 kB -50 B (-0.02%)
build/block-editor/style-rtl.css 16.2 kB -24 B (-0.15%)
build/block-editor/style.css 16.2 kB -22 B (-0.14%)
build/block-library/blocks/image/editor-rtl.css 862 B +17 B (+2.01%)
build/block-library/blocks/image/editor.css 861 B +18 B (+2.14%)
build/block-library/blocks/image/style-rtl.css 1.59 kB +50 B (+3.24%)
build/block-library/blocks/image/style.css 1.59 kB +51 B (+3.32%)
build/block-library/blocks/image/view.min.js 1.65 kB +70 B (+4.43%)
build/block-library/blocks/post-comments-form/style-rtl.css 527 B +5 B (+0.96%)
build/block-library/blocks/post-comments-form/style.css 528 B +6 B (+1.15%)
build/block-library/blocks/search/editor-rtl.css 193 B +10 B (+5.46%) 🔍
build/block-library/blocks/search/editor.css 193 B +10 B (+5.46%) 🔍
build/block-library/blocks/term-description/style-rtl.css 126 B +18 B (+16.67%) ⚠️
build/block-library/blocks/term-description/style.css 126 B +18 B (+16.67%) ⚠️
build/block-library/editor-rtl.css 11.9 kB +17 B (+0.14%)
build/block-library/editor.css 11.9 kB +20 B (+0.17%)
build/block-library/index.min.js 216 kB +204 B (+0.09%)
build/block-library/style-rtl.css 14.7 kB +58 B (+0.4%)
build/block-library/style.css 14.6 kB +57 B (+0.39%)
build/blocks/index.min.js 52.2 kB +62 B (+0.12%)
build/components/index.min.js 221 kB +193 B (+0.09%)
build/components/style-rtl.css 12 kB +35 B (+0.29%)
build/components/style.css 12 kB +40 B (+0.33%)
build/compose/index.min.js 12.9 kB +14 B (+0.11%)
build/core-commands/index.min.js 2.81 kB +24 B (+0.86%)
build/core-data/index.min.js 72.8 kB +65 B (+0.09%)
build/edit-post/index.min.js 12.6 kB +47 B (+0.37%)
build/edit-post/style-rtl.css 2.31 kB -23 B (-0.98%)
build/edit-post/style.css 2.31 kB -24 B (-1.03%)
build/edit-site/index.min.js 213 kB +1.76 kB (+0.84%)
build/edit-site/posts-rtl.css 6.78 kB +80 B (+1.19%)
build/edit-site/posts.css 6.79 kB +96 B (+1.43%)
build/edit-site/style-rtl.css 11.9 kB +160 B (+1.36%)
build/edit-site/style.css 12 kB +185 B (+1.57%)
build/edit-widgets/index.min.js 17.6 kB -12 B (-0.07%)
build/editor/index.min.js 99.3 kB +988 B (+1%)
build/editor/style-rtl.css 9.32 kB +220 B (+2.42%)
build/editor/style.css 9.32 kB +222 B (+2.44%)
build/interactivity/image.min.js 1.78 kB +67 B (+3.9%)
build/patterns/index.min.js 7.36 kB -2 B (-0.03%)
build/preferences/style-rtl.css 554 B -24 B (-4.15%)
build/preferences/style.css 554 B -24 B (-4.15%)
build/reusable-blocks/index.min.js 2.54 kB -199 B (-7.27%)
ℹ️ 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/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
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/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-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/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/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/commands/index.min.js 16.1 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
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-widgets/style-rtl.css 4.2 kB
build/edit-widgets/style.css 4.2 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/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/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/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

@swissspidy
swissspidy self-requested a review July 17, 2024 06:39

@andrewserong andrewserong left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Great idea!

Just left a comment about the placeholder state and whether it'd be worth reusing the existing placeholder if possible, to retain the transparent background and the height if the image was already in a placeholder state?

Comment on lines +64 to +69
// Shown while image is being uploded but cannot be previewed.
.block-editor-image__skeleton {
aspect-ratio: 4 / 3;
background: $gray-100;
}

@andrewserong andrewserong Jul 17, 2024

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Would it be worth reusing the placeholder state for when an image is deselected? Currently that placeholder state uses a transparent background, and a different size, so with the gray color and 4/3, I notice a flash of gray and a different height during the upload. It's more noticeable if the image block exists on top of a darker background.

2024-07-17.16.48.27.mp4

It's very quick in the video since I'm testing Gutenberg without the core patch, so might be easy to miss 😄

@noisysocks noisysocks Jul 17, 2024

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Deselected!! I thought we already had a placeholder state, but couldn't find it 😛 Good suggestion I'll do that.

@noisysocks noisysocks Jul 18, 2024

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I've switched to using Placeholder.

I'm not a big fan of how the spinner looks on top of the diagonal line, though. It makes the spinner hard to see.

Screenshot 2024-07-18 at 14 47 31

Mind you, this problem also exists on trunk. When there is a preview it can be hard to see the spinner depending on the image being uploaded.

Screenshot 2024-07-18 at 14 48 52

Maybe we should put the spinner in a translucent box?

Screenshot 2024-07-18 at 14 47 22 Screenshot 2024-07-18 at 14 51 43

Or maybe we should denote that the image is uploading using a different technique e.g. pulsating the block's opacity?

Or maybe it's fine how it is?

What do you think @jasmussen?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

What do you think @jasmussen?

I'm not sure if Joen is around at the moment, so I'll just give a soft ping to @WordPress/gutenberg-design for visibility 🙂

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Good plan. We can come back to this later, at any rate. HEIC is not very common and what's in this PR is better than what's in trunk.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'd lean towards tweaking the overlay color/opacity a bit, so that the spinner remains visible, rather than adding another smaller 'surface' behind the spinner.

Another option could be a different loading animation in place of the spinner. The overlay could pulse between different opacity levels. That might require more holistic exploration though, so identify other applications.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Here's what increasing the opacity of the placeholder from 0.1 to 0.2 looks like against a few different backgrounds:

Screenshot 2024-07-19 at 15 09 46 Screenshot 2024-07-19 at 15 09 55 Screenshot 2024-07-19 at 15 10 05

That OK with you @jameskoster? If you want to play with it yourself an easy way to test is to make this change so that the placeholder and spinner will aways show for all image blocks:

diff --git a/packages/block-library/src/image/image.js b/packages/block-library/src/image/image.js
index 385a740e652..3417b1fc1a8 100644
--- a/packages/block-library/src/image/image.js
+++ b/packages/block-library/src/image/image.js
@@ -827,7 +827,7 @@ export default function Image( {
 	const isRounded = attributes.className?.includes( 'is-style-rounded' );
 
 	let img =
-		temporaryURL && hasImageErrored ? (
+		true || ( temporaryURL && hasImageErrored ) ? (
 			// Show a placeholder during upload when the blob URL can't be loaded. This can
 			// happen when the user uploads a HEIC image in a browser that doesn't support them.
 			<Placeholder

Also happy to punt this to later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for that tip :)

Does the overlay background need to be currentColor? Since it's part of the UI I think it could use a UI color like $gray-900. Then with opacity something like .7 we get this:

Screenshot 2024-07-19 at 10 18 27

This ensures the spinner is visible, and has similar visual weight to the dropzone treatment.

What do you think?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I like it but I'm scared that I'm hiding a UI change that needs some design attention in an otherwise innocuous PR 😅

I'll revert f5e8ac8, merge this, and then open a new PR with your suggestion.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@swissspidy

Copy link
Copy Markdown
Member

Thanks for working on this 👍 This was on my todo list for a while as I need it for https://github.com/swissspidy/media-experiments (where this is also noticeable with HEIF images, but also MOV videos)

@noisysocks

Copy link
Copy Markdown
Member Author

Thanks for working on this 👍 This was on my todo list for a while as I need it for https://github.com/swissspidy/media-experiments (where this is also noticeable with HEIF images, but also MOV videos)

Ideally when we have client side HEIC processing we'd still show the preview once it's been converted on the client. Future problem though 🙂

@noisysocks noisysocks added the Needs Design Feedback Needs general design feedback. label Jul 18, 2024
@swissspidy

Copy link
Copy Markdown
Member

Thanks for working on this 👍 This was on my todo list for a while as I need it for swissspidy/media-experiments (where this is also noticeable with HEIF images, but also MOV videos)

Ideally when we have client side HEIC processing we'd still show the preview once it's been converted on the client. Future problem though 🙂

That happens automatically already, the image is updated after processing :)

@andrewserong andrewserong left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the iterations here!

HEIC is not very common and what's in this PR is better than what's in trunk.

@jameskoster had some good suggestions in the thread, but if you wanted to land this as a first pass, I think you're right, it's an improvement on what's in trunk, and it doesn't affect the usual flow. So this LGTM! But do feel free to hold off if you wanted to iterate further.

Again, a lightning fast clip that shows the flicker of the placeholder state, as this is just testing Gutenberg without the core patch, while dragging an HEIC image onto an image block. But this placeholder state's looking pretty good to me:

2024-07-19 11 23 02

@noisysocks

Copy link
Copy Markdown
Member Author

Thanks Andy. I'll revert f5e8ac8, merge this, and then open a new PR with @jameskoster's suggestion. Just so that design change gets a bit more attention.

@noisysocks
noisysocks enabled auto-merge (squash) July 24, 2024 04:38
@noisysocks

Copy link
Copy Markdown
Member Author

Safe to ignore failing performance tests as they passed on 9cf0967 which we're now back at on the count of reverting.

@noisysocks
noisysocks disabled auto-merge July 24, 2024 05:01
@noisysocks
noisysocks merged commit acd36db into trunk Jul 24, 2024
@noisysocks
noisysocks deleted the fix/show-placeholder-when-uploading-heic branch July 24, 2024 05:02
@github-actions github-actions Bot added this to the Gutenberg 18.9 milestone Jul 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Block] Image Affects the Image Block Needs Design Feedback Needs general design feedback. [Type] Enhancement A suggestion for improvement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants