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

Post Featured Image: Add size selector #38044

Merged
merged 6 commits into from
Jan 20, 2022
Merged

Conversation

Mamaduka
Copy link
Member

Description

Resolves #33789.

PR adds image size dropdown to the Featured Image block. This new option will be displayed in the "Dimensions" panel.

Now that I added yet another option to "Dimensions" control, I think they look a little out of place. Maybe we should go with the initial design proposed in the issue?

How has this been tested?

  1. Add a featured image block to the post.
  2. The "Dimensions" should display a new size selector.
  3. Changing size should display featured image in this size, both in editor and frontend.
  4. Confirm same in Site Editor.

Note: Size dropdown isn't displayed if Post Featured Image has no media selected.

Screenshots

CleanShot 2022-01-18 at 17 08 17

Types of changes

Enhancement

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).
  • I've updated related schemas if appropriate.

@Mamaduka Mamaduka self-assigned this Jan 18, 2022
@Mamaduka Mamaduka added [Block] Post Featured Image Affects the Post Featured Image Block [Type] Enhancement A suggestion for improvement. Needs Design Feedback Needs general design feedback. labels Jan 18, 2022
@@ -19,7 +19,8 @@ function render_block_core_post_featured_image( $attributes, $content, $block )
}
$post_ID = $block->context['postId'];

$featured_image = get_the_post_thumbnail( $post_ID );
$sizeSlug = isset( $attributes['sizeSlug'] ) ? $attributes['sizeSlug'] : 'post-thumbnail';
Copy link
Member Author

Choose a reason for hiding this comment

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

I decided to fall back to post-thumbnail, so this change doesn't break current behavior.

Comment on lines +83 to +90
const imageSizeOptions = imageSizes
.filter( ( { slug } ) => {
return media?.media_details?.sizes?.[ slug ]?.source_url;
} )
.map( ( { name, slug } ) => ( {
value: slug,
label: name,
} ) );
Copy link
Member Author

Choose a reason for hiding this comment

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

I should probably memoize this value, but I'm not 100% convinced that it won't be premature optimization.

@github-actions
Copy link

github-actions bot commented Jan 18, 2022

Size Change: +944 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-editor/index.min.js 141 kB +280 B (0%)
build/block-library/blocks/navigation/editor-rtl.css 1.99 kB +57 B (+3%)
build/block-library/blocks/navigation/editor.css 2 kB +59 B (+3%)
build/block-library/blocks/navigation/style-rtl.css 1.85 kB +21 B (+1%)
build/block-library/blocks/navigation/style.css 1.84 kB +25 B (+1%)
build/block-library/editor-rtl.css 10.1 kB +44 B (0%)
build/block-library/editor.css 10.1 kB +42 B (0%)
build/block-library/index.min.js 166 kB +751 B (0%)
build/block-library/style-rtl.css 10.8 kB +18 B (0%)
build/block-library/style.css 10.8 kB +18 B (0%)
build/blocks/index.min.js 46.4 kB +13 B (0%)
build/components/index.min.js 214 kB -361 B (0%)
build/edit-post/index.min.js 29.6 kB +16 B (0%)
build/edit-post/style-rtl.css 7.15 kB -14 B (0%)
build/edit-post/style.css 7.14 kB -15 B (0%)
build/edit-site/index.min.js 37.7 kB -10 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 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 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 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 65 B
build/block-library/blocks/archives/style.css 65 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 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 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 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
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 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.6 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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/editor-rtl.css 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/view.min.js 2.81 kB
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 402 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 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/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-template/style-rtl.css 305 B
build/block-library/blocks/post-template/style.css 305 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 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 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 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 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 214 B
build/block-library/blocks/tag-cloud/style.css 215 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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/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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 908 B
build/block-library/common.css 905 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 676 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 13.3 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-site/style-rtl.css 6.85 kB
build/edit-site/style.css 6.84 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.17 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.75 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.58 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@Mamaduka
Copy link
Member Author

How other blocks display image dimension settings:

Media & Text Image Latest Posts
media-text image latest-posts

@jasmussen
Copy link
Contributor

jasmussen commented Jan 18, 2022

Very nice, thanks for working on this. Here's before:
before

Here's after:

after

As a small step, I'd put the size selector at the bottom, below the scale control, as the scale control is directly contextual (and appears as a result of) the width/height controls, and to reduce the prominence. A question also immediately comes to mind: if we are to allow the size selector, should we not show it regardless of whether you've added an image to the block or not? The featured image block, in my estimation, is the most useful when unset and inside a loop. If I can only set the size property when I've added an image first, the feature might not be as useful.

One thing that's unique about the Size selector is that it's not really clear what it does. As a long time WordPress user, I know that it lets you choose between the different sizes that WordPress auto-bakes for you as soon as you upload an image. But for anyone not familiar, the term "image size" might suggest dimensions, and otherwise confuse in context of width and heights. Because of that, I would suggest the Size selector be a non-default field that you can explicitly add from the tools panel ellipsis menu. That might also solve the problem of it not appearing when the block doesn't have an image. What do you think?

Finally, and this is not something to address in this PR, but something we should ticket as general improvements to size selectors across blocks. Firstly, changing to sentence case to match the rest of the UI: "Full size" instead of "Full Size". Secondly, I think it would be useful/helpful with showing the dimensions of the particular file right in the dropdown, like so:

Screenshot 2022-01-18 at 15 37 45

Would that be possible?


One more thing, the alignment control in this screenshot, how can I reproduce that? I don't see it in the Latest Posts block, and we really need to wrap that control onto two lines so the "Image alignment" label itself doesn't wrap.

@Mamaduka
Copy link
Member Author

Thank you for the great feedback, @jasmussen.

What do you think about reverting #36540 and going with the initial design proposed in the issue? It will also match other image settings I mentioned in my previous commit.

if we are to allow the size selector, should we not show it regardless of whether you've added an image to the block or not?

The image size options are based on image sizes available for each media item + editor image size settings. e.g., The image with size 250x250 won't have the "Large" option available since default WP installation won't generate it. So we need selected media to generate correct size options.

I would suggest the Size selector be a non-default field that you can explicitly add from the tools panel ellipsis menu.

Sounds good.

Secondly, I think it would be useful/helpful with showing the dimensions of the particular file right in the dropdown, like so:

I think the font size selector uses something similar in design. So maybe we can adopt it.

One more thing, the alignment control in this screenshot, how can I reproduce that? I don't see it in the Latest Posts block, and we really need to wrap that control onto two lines so the "Image alignment" label itself doesn't wrap.

You'll need to enable "Display featured image" for the latest post block.

@jasmussen
Copy link
Contributor

What do you think about reverting #36540 and going with the initial design proposed in the issue? It will also match other image settings I mentioned in my previous commit.

In principle I think it's okay for width, height, and scale options to be part of a generic tools panel. Can you expand on what might make that problematic?

The image size options are based on image sizes available for each media item + editor image size settings. e.g., The image with size 250x250 won't have the "Large" option available since default WP installation won't generate it. So we need selected media to generate correct size options.

That's a tricky piece indeed. Could we change the behavior to be aspirational? I.e. if you choose Large even when no image is loaded, what it means is that "Large" will be chosen if available, otherwise it will be the next largest source? The idea being that it'd be useful as a set it and forget option for featured images in a loop.

I think the change might be important too, for future cases. I'd love to see the idea of "featured image" becoming more of a data source than a block, so that I could use a featured image inside Media & Text, for example. (#35221)

I think the font size selector uses something similar in design. So maybe we can adopt it.

👌

You'll need to enable "Display featured image" for the latest post block.

Ah, thank you! Yes that's trunk, I'll see if I can push a separate fix.

@jasmussen
Copy link
Contributor

Oh I saw @jameskoster just created an excellent ticket where some of the discussion here might be relevant: #38050

@Mamaduka
Copy link
Member Author

In principle I think it's okay for width, height, and scale options to be part of a generic tools panel. Can you expand on what might make that problematic?

One reason is that we can't use ImageSizeControl with the tools panel.

@jasmussen
Copy link
Contributor

Ah, gotcha. So, keeping in mind the following doesn't necessarily have to block this PR from happening, and could be a followup anyone could work on, is there anything we can do to make it possible to add to the tools panel? It's entirely likely I'm missing some obvious reason, but it seems to me like it should be possible to add this to the tools panel, and whatever is blocking it could be worth fixing at the root.

@Mamaduka
Copy link
Member Author

So, keeping in mind the following doesn't necessarily have to block this PR from happening, and could be a followup anyone could work on

That's correct. We can do this in follow-up PRs.

is there anything we can do to make it possible to add to the tools panel?

The ImageSizeControl currently can be added only as a single tools panel item, and not as separate items of "width," "height," and "size`.

@jasmussen
Copy link
Contributor

The image size control, in addition to the entire image block inspector, could use a little design love on its own, it's somewhere on my todo list! But I think we could get it to a point where adding it as one big item would be totally fine. I don't think it has to be a hard rule that each tool is a single input field.

In order to move this PR forward without all that, though, I wonder if some pieces would fall in place if we moved the size selector above the width/height controls 🤔 — the key to me is that the contextually appearing scale control appears right after the controls that invoked it, i.e. width/height.

@stacimc
Copy link
Contributor

stacimc commented Jan 18, 2022

This is looking great! Personally I still think the ToolsPanel is a good fit, in particular to @jasmussen's point about the Size selector being potentially confusing -- it seems like a good use case for a non-default control.

The image size control, in addition to the entire image block inspector, could use a little design love on its own, it's somewhere on my todo list! But I think we could get it to a point where adding it as one big item would be totally fine.

Linking the height & width into a single ToolsPanelItem sounds good to me as well. I wouldn't anticipate a need for keeping them separate. It's not quite the same, but there's precedent with linking border properties into a single item.

@Mamaduka
Copy link
Member Author

I moved the "Sizes" panel below scales and made it a non-default control.

CleanShot 2022-01-19 at 07 52 15

I can do a follow-up PR for size hints in the dropdown.

@jasmussen
Copy link
Contributor

Took it for another spin, and it's looking very nicely balanced to me:
currently

I do still think it would make sense to find a way to enable the Size selector also on the empty Featured Image block, so you can define a preferred size. But I recognize that's tricky on a technical level, and it's also not something that should block this PR. In that light, this is looking good to me, but could use a more technical review 👍 👍. Thanks again for your excellent work!

Copy link
Contributor

@jameskoster jameskoster left a comment

Choose a reason for hiding this comment

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

It's working well :)

I'm not sure if it's something to do here or as a part of #38050, but it might be nice to add some helper text to the Size dropdown to clarify what it does. Probably doesn't need to hold this up.

@jasmussen
Copy link
Contributor

Based on the discussion and some of the separate action items, I created #38068 with some initial mockups for image block inspector improvements. Please add any thoughts you have!

@Mamaduka
Copy link
Member Author

I added the help text to the size selector as suggested.

CleanShot 2022-01-19 at 15 05 32

@jasmussen
Copy link
Contributor

Just wanted to note that inspired by this PR I've done some initial mockup work on a Latest Posts block inspector refresh. There's no task attached to it yet, and I'm not satisfied with the balance, and I don't think we are technically able to do with the dimension controls what's shown. But with that in mind, I'm sharing here just in case it inspires feedback or better ideas; this is a mockup I expect to come back to and refresh before it gets its own ticket.

Before:

Before

After:

Latest Posts inspector controls

@Mamaduka
Copy link
Member Author

It looks much nicer, @jasmussen 🦸

@jameskoster
Copy link
Contributor

I added the help text to the size selector as suggested.

Perhaps something like:

Select the size of the source image. Smaller sizes will load quicker.

@Mamaduka
Copy link
Member Author

Smaller sizes will load quicker.

I'm worried that this might be a little misleading for inexperienced users. The responsive images can handle loading smaller images on mobile/tablet devices in the core.

@jameskoster
Copy link
Contributor

Jeez I totally forgot about that :) So all that really matters is to choose a Size that doesn't look blurry? 🤔

@Mamaduka
Copy link
Member Author

So all that really matters is to choose a Size that doesn't look blurry?

Something like that 😄 Or if you want to fine-tune the output.

Should we go with this as a help text update? - "Select the size of the source image."

@jameskoster
Copy link
Contributor

I'm not sure how helpful that really is, but probably better than nothing :D

I wish there was an "auto" option for this setting that used the correct size based on height / width.

@Mamaduka
Copy link
Member Author

I'm not sure how helpful that really is, but probably better than nothing :D
👍

I wish there was an "auto" option for this setting that used the correct size based on height / width.

That would be neat.

{ !! imageSizeOptions.length && (
<ToolsPanelItem
hasValue={ () => !! sizeSlug && sizeSlug !== DEFAULT_SIZE }
label={ __( 'Size' ) }
Copy link
Contributor

Choose a reason for hiding this comment

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

Would it make sense to use Image size rather than Size? That matches the labeling in the Image block for example:
Screen Shot 2022-01-19 at 10 51 51 AM

The added helptext is great in the panel, but it feels a bit confusing to see Size listed alongside Width and Height in the ToolsPanel menu where you lack that context.

Screen Shot 2022-01-19 at 10 52 22 AM

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't have any preference here, but since we're trying to unify image dimensions controls across the blocks would be nice to agree on a single ToolsPanelItem label.

@jasmussen, @jameskoster, what do you think?

Copy link
Contributor

Choose a reason for hiding this comment

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

In my mockup (#38068 inspired by and paired with #38050) I changed it from Image size to Size, exactly because "Image size" as a term seems to suggest dimensions (width and height). However I can see how "Size" on its own isn't necessarily better 🤔

This might be one of the situations where we keep the "Image size" label that it's had for a long time, and then seeking a better name be a part of addressing #38050.

Copy link
Member Author

Choose a reason for hiding this comment

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

I have updated the label. I'm going to merge this, and we can change labels back after settings unification.

@Mamaduka Mamaduka merged commit e218703 into trunk Jan 20, 2022
@Mamaduka Mamaduka deleted the try/feature-image-size-selector branch January 20, 2022 11:26
@github-actions github-actions bot added this to the Gutenberg 12.5 milestone Jan 20, 2022
@Humanify-nl
Copy link

Just wanted to note that inspired by this PR I've done some initial mockup work on a Latest Posts block inspector refresh. There's no task attached to it yet, and I'm not satisfied with the balance, and I don't think we are technically able to do with the dimension controls what's shown. But with that in mind, I'm sharing here just in case it inspires feedback or better ideas; this is a mockup I expect to come back to and refresh before it gets its own ticket.

After:

Latest Posts inspector controls

As an advocate of the devil / user psychology perspective;

I feel this block is trying to cram all the stuff from a query loop into a post list that has exactly the same application (please correct me if i'm wrong here).

What is the difference between a latest post block and a query loop (with a grid pattern that is formatted as a list)?

@NicoHood
Copy link

NicoHood commented Nov 9, 2022

I dont know why, but I dont have this feature in my wordpress 6.1 installation. Is this a bug of the astra theme?
image

@Mamaduka
Copy link
Member Author

Mamaduka commented Nov 9, 2022

Hi, @NicoHood

The control can be enabled from the Dimensions panel options.

CleanShot 2022-11-09 at 20 37 45

@NicoHood
Copy link

NicoHood commented Nov 9, 2022

Oh wow, that is amazing! I feel so stupid now. Thanks a lot!

I am not sure if it make sense to make this more prominent than the fixed size dimensions. The fixed size broke the layout in most cases anyways, so why not superceed this with this option and move it outside this hidden submenu?

@Mamaduka
Copy link
Member Author

Mamaduka commented Nov 9, 2022

The fixed size broke the layout in most cases anyways, so why not superceed this with this option and move it outside this hidden submenu?

I can remember the exact reason, but we can always change what's displayed by default if there's a good case of it 👍

@Humanify-nl
Copy link

Hi, @NicoHood

The control can be enabled from the Dimensions panel options.

How does one set these Panels as “open” as default behavior. I have removed many controls but the panels that do matter for my theme setup are hidden, I rather not ask clients to go find and collapse this them selves.

I didn’t read about any setting in theme.json to set which “setting” panels are open on default? How do we do this?

@panfanky
Copy link

panfanky commented Mar 13, 2024

You may need to allow for the control of Dimensions->Image size in the Control Panel by

{
	"settings":{
	   "appearanceTools":true
        }
}

in theme.json
After the setting you can set it to false again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Post Featured Image Affects the Post Featured 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.

[Post Featured Image]: Add image size controls
7 participants