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

Slideshow block: Add image size selector #13362

Merged
merged 9 commits into from
Oct 14, 2019
Merged

Conversation

mmtr
Copy link
Member

@mmtr mmtr commented Aug 29, 2019

Changes proposed in this Pull Request:

Add an image size selector to the slideshow block that allows users to choose the image size for the gallery inserted in the block.

Screen Shot 2019-09-03 at 10 17 42

The selector defaults to large size. Previously, all the images were loaded in full size. This should improve the performance when visiting a page, since the large size will be enough for most users, making necessary to download less MB.

Is this a new feature or does it add/remove features to an existing part of Jetpack?

Improvement for the Slideshow block.

Testing instructions:

  • Start creating a new post.
  • Insert a slideshow block.
  • Add some images.
  • Make sure you can resize the images with the image size selector.
  • Make sure the selector defaults to large.
  • Publish the post.
  • Verify on the frontend the images are loaded with the selected size.
  • Load an existing post containing a slideshow block (created before applying this branch).
  • Make sure the image size selector has a full value (since the post was created before the image selector was available).

Proposed changelog entry for your changes:

Slideshow block: Add image size selector

@matticbot
Copy link
Contributor

Caution: This PR has changes that must be merged to WordPress.com
Hello mmtr! These changes need to be synced to WordPress.com - If you 're an a11n, please commandeer, review, and approve D32207-code before merging this PR. Thank you!

@jetpackbot
Copy link

jetpackbot commented Aug 29, 2019

Thank you for the great PR description!

When this PR is ready for review, please apply the [Status] Needs Review label. If you are an a11n, please have someone from your team review the code if possible. The Jetpack team will also review this PR and merge it to be included in the next Jetpack release.

Scheduled Jetpack release: November 5, 2019.
Scheduled code freeze: October 29, 2019

Generated by 🚫 dangerJS against c222943

@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@mmtr
Copy link
Member Author

mmtr commented Sep 3, 2019

The image selector is working after the last commit, but we still need to add a deprecated version of the block in order to support existing posts containing slideshow blocks (the block expect now images in large size but existing posts are using the full size).

@mmtr
Copy link
Member Author

mmtr commented Oct 9, 2019

The image selector is working after the last commit, but we still need to add a deprecated version of the block in order to support existing posts containing slideshow blocks (the block expect now images in large size but existing posts are using the full size).

I don't think this is possible. The deprecation would be a block with sizeSlug defaulting to full, but we don't have any way of detecting if a block is deprecated in this case, since Gutenberg removes attributes set with default values when serializing a block. This means that both, a block inserted before the image selector is available and another one inserted with the image selector, would have the same attributes serialized (sizeSlug will be omitted), so Gutenberg will use the current version of the block.

The consequence of leaving the block without handling deprecations is that blocks added before the image selector will still use full size images (which is ok) but the image selector will be set as "Large". Maybe not a big deal 🤷‍♂️.

@mmtr mmtr changed the title [WIP] Slideshow block: Add image size selector Slideshow block: Add image size selector Oct 9, 2019
@mmtr mmtr added [Status] Needs Review To request a review from Crew. Label will be renamed soon. and removed [Status] In Progress labels Oct 9, 2019
@mmtr mmtr requested a review from a team October 9, 2019 14:25
@jeherve jeherve added this to the 7.9 milestone Oct 9, 2019
@gwwar
Copy link
Contributor

gwwar commented Oct 10, 2019

The deprecation would be a block with sizeSlug defaulting to full, but we don't have any way of detecting if a block is deprecated in this case, since Gutenberg removes attributes set with default values when serializing a block.

This seem a bit silly that we can't detect this.

Can we add a block version attribute here? For example pick 1.0 for this update, and if it's missing the property we know images should be full, and then explicitly save the image size and block version on save. Later on if we make more updates to the block, we can bump the block version and we know which set of assumptions/transformations we need to make. I can defer to you though @mmtr if this seems like too much work.

Overall, this tests very well for newly created blocks.

@mmtr mmtr force-pushed the update/slideshow-block-image-size branch from 1406a4f to 8d463fd Compare October 10, 2019 13:28
@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@mmtr
Copy link
Member Author

mmtr commented Oct 10, 2019

Can we add a block version attribute here? For example pick 1.0 for this update, and if it's missing the property we know images should be full, and then explicitly save the image size and block version on save. Later on if we make more updates to the block, we can bump the block version and we know which set of assumptions/transformations we need to make. I can defer to you though @mmtr if this seems like too much work.

We would have the same problem if that block version attribute was defaulting to a value (using the default property when defining the attributes in the block settings), since Gutenberg would set the default value when the attribute was missing.

But this gave me an idea: if we don't define a default attribute value on the block settings but instead we set a default value programmatically based on the lack of the attribute + presence of images, we could differentiate newly created blocks without the attribute set from blocks created in the past by assuming that as of now is not possible to have a block with images and no size. If we find a block with images an no image size set, it'll mean it was created when the image selector was not available. I explored this approach in 41d406c and it seems it works 🙂

@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@gwwar
Copy link
Contributor

gwwar commented Oct 10, 2019

I explored this approach in 41d406c and it seems it works

Nice, I'd definitely leave a comment though explaining that :D

gwwar
gwwar previously approved these changes Oct 10, 2019
Copy link
Contributor

@gwwar gwwar left a comment

Choose a reason for hiding this comment

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

Thanks @mmtr ! This tests well for me. I also verified that old slideshows now correctly show "full" instead of "large" when a size attribute is now set.

Copy link
Member

@jeherve jeherve left a comment

Choose a reason for hiding this comment

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

It seems I can't change the number of seconds between each slide anymore. I get an error in the console whenever I try to move the slider:

Uncaught TypeError: Cannot read property 'props' of undefined
    at setAttributes (edit.js:211)
    at onChange (controls.js:75)
    at onChange (components.min.js:19)

@jeherve jeherve added [Block] Tiled Gallery [Status] Needs Author Reply We would need you to make some changes or provide some more details about your PR. Thank you! Simple Payments and removed [Status] Needs Review To request a review from Crew. Label will be renamed soon. labels Oct 11, 2019
@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@matticbot
Copy link
Contributor

mmtr, Your synced wpcom patch D32207-code has been updated.

@mmtr
Copy link
Member Author

mmtr commented Oct 14, 2019

It seems I can't change the number of seconds between each slide anymore. I get an error in the console whenever I try to move the slider:

Uncaught TypeError: Cannot read property 'props' of undefined
    at setAttributes (edit.js:211)
    at onChange (controls.js:75)
    at onChange (components.min.js:19)

Good catch! Fixed in a16c9ac but then I noted the preview was not rendering the right image size when the autoplay mode was on, so I refactored briefly how the URLs of the images are updated on c222943 which seemed to do the trick.

@mmtr mmtr added [Status] Needs Review To request a review from Crew. Label will be renamed soon. and removed [Status] Needs Author Reply We would need you to make some changes or provide some more details about your PR. Thank you! labels Oct 14, 2019
@jeherve jeherve added [Status] Ready to Merge Go ahead, you can push that green button! and removed [Status] Needs Review To request a review from Crew. Label will be renamed soon. labels Oct 14, 2019
Copy link
Member

@jeherve jeherve left a comment

Choose a reason for hiding this comment

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

This seems to work well on my end. It should be good to merge!

@mmtr mmtr merged commit 0b1d94e into master Oct 14, 2019
@mmtr mmtr deleted the update/slideshow-block-image-size branch October 14, 2019 12:50
@matticbot matticbot added [Status] Needs Changelog and removed [Status] Ready to Merge Go ahead, you can push that green button! labels Oct 14, 2019
jeherve added a commit that referenced this pull request Oct 23, 2019
jeherve added a commit that referenced this pull request Oct 29, 2019
* 7.9: Changelog

* Update version number

* Update stable tag and tested up to

* Changelog: add #13530

* changelog: add #13578

* Changelog: add #13598

* Changelog: add entry for numerous block preview changes

* Changelog: add #13599

* changelog: add #13541

* Changelog: add #13542

* Changelog: add #13331

* Changelog: add #13558

* Changelog: add #13409

* Changelog: add #13582

* Changelog: add #13600

* Changelog: add #13601

* Changelog: add #13595

* Changelog: add #12695

* Changelog: add #13009

* Changelog: add #13649

* Changelog: add #13450

* Changelog: add #13507

* Changelog: add #13658

* Changelog: add #13687

* changelog: add #13683

* Changelog: add #9323

* Changelog: add #13681

* Fix typos in readme

* Add link to WordPress Beta Tester plugin

* Changelog: add #13630

* Changelog: add #13695

* Changelog: add #13659

* Changelog: add #13716

* Changelog: add #13664

* Changelog: add #13682

* Changelog: add #13362

* Changelog: add #13563

* Add testing list for #13563

* Changelog: add #13735

* Changelog: add #13752

* Changelog: add #13624

* Changelog: add #13756

* Changelog: add #13745

* Changelog: add #13728

* Changelog: add #13779

* Changelog: add #13699

* Changelog: add #13804

* Changelog: add #13761

* Changelog: add #13637

* Changelog: add #13517

* Changelog: add #13521

* Changelog: add #13729

* Testing list: add testing instructions for #13729

* Changelog: add sync changes

* Changelog: add #13807

* Changelog: add #13654

* Changelog: add #13795

* Changelog: add #13801

* Changelog: add #13818

* Changelog: add #13725

* Changelog: add #13831

* Changelog: add #13516

* Testing list: add Twenty Twenty instructions

* Changelog: add #13799

* Changelog: add #13805

* Changelog: add #13688

* Changelog: add #13830
@noahott
Copy link

noahott commented Mar 13, 2020

Is it possible to use custom image sizes with the Slideshow block? I’ve created a number of custom image sizes with my theme but only see the default Thumbnail, Medium, Large, and Full Size options in the Image Size dropdown.

Thanks

@jeherve jeherve added the [Block] Pay With Paypal aka Simple Payments label Feb 12, 2021
@jeherve jeherve added the [Feature] Pay with PayPal aka Simple Payments label Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants