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

Refactored Gallery: Add filter for replacing inner gallery component for alternate layouts #29244

Conversation

aaronrobertshaw
Copy link
Contributor

Description

Adds a filter to allow replacing of the inner Gallery component. This will provide a means for plugins to alter the gallery's layout within the editor without having to completely reimplement the GalleryEdit component using the editor.BlockEdit filter.

A prime example of this would be a masonry layout using a dedicated React masonry component to lay out the inner blocks.

Why add this filter?

To a user, a different gallery layout is for all intents and purposes, just a style of gallery. If different gallery layouts can be presented as block styles, it will aid discovery and user experimentation as well as simplify the options in the block inserter.

The catch here is block styles alone will not help us manage the gallery's layout within the editor. In the above example of a masonry layout, we can get away with adding a plugin to enqueue frontend assets. Unfortunately, we need more control within the editor.

The GalleryEdit component is rather complex and presents a barrier to being able to simply swap it out for an alternate via the editor.BlockEdit filter. This new filter narrows the scope of the component being replaced making it much easier to augment the gallery.

How has this been tested?

Manually.

  1. Checkout and build this PR branch
  2. Create a quick plugin to leverage this filter and swap out the inner gallery component
  3. Create a new post and add a gallery, confirm your new component is used instead.

Something along the lines of:

/**
 * WordPress dependencies
 */
import { registerBlockStyle } from '@wordpress/blocks';
import { addFilter } from '@wordpress/hooks';

/**
 * Internal dependencies
 */
import MasonryGallery from './masonry-gallery.js';

registerBlockStyle( 'core/gallery', {
	name: 'masonry',
	label: 'Masonry',
} );

const maybeApplyMasonryLayout = ( CoreGallery ) => {
	return ( props ) => {
		// Return the original gallery component if masonry style not applied.
		if ( ! props.attributes.className?.includes( 'is-style-masonry' ) ) {
			return <CoreGallery { ...props } />;
		}

		return <MasonryGallery />;
	};
};

// Add a filter to conditionally replace the inner gallery component with one
// catering to alternative layouts based on block style.
addFilter(
	'editor.Gallery',
	'jetpack/masonry-gallery',
	maybeApplyMasonryLayout
);

Screenshots

GalleryFilter

Types of changes

New feature

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.

Glen Davies and others added 30 commits February 23, 2021 16:40
…ocks at the point that the block validation is run
… innerBlocks at the point that the block validation is run"

This reverts commit 4d95e95.
… gallery - with the idea that we will improve the innerblocks drag and drop in a later PR
This reverts commit 9b0abcc.
…existing gallery - with the idea that we will improve the innerblocks drag and drop in a later PR"

This reverts commit cc05d60.
…transform when dragging multiple images onto the gallery
… is async so need to keep circling through the innerblocks updates until we have all the data we need
…27087)

* Add loading spinner for image size options
Co-authored-by: Glen Davies <[email protected]>
@aaronrobertshaw aaronrobertshaw added [Block] Gallery Affects the Gallery Block - used to display groups of images [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Feb 23, 2021
@aaronrobertshaw aaronrobertshaw self-assigned this Feb 23, 2021
@github-actions
Copy link

Size Change: +21 B (0%)

Total Size: 1.39 MB

Filename Size Change
build/block-library/index.js 147 kB +21 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.79 kB 0 B
build/api-fetch/index.js 3.41 kB 0 B
build/autop/index.js 2.84 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/index.js 9.11 kB 0 B
build/block-directory/style-rtl.css 1.01 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-editor/index.js 124 kB 0 B
build/block-editor/style-rtl.css 12.1 kB 0 B
build/block-editor/style.css 12.1 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 103 B 0 B
build/block-library/blocks/audio/style.css 103 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 479 B 0 B
build/block-library/blocks/button/style.css 479 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 233 B 0 B
build/block-library/blocks/buttons/editor.css 233 B 0 B
build/block-library/blocks/buttons/style-rtl.css 318 B 0 B
build/block-library/blocks/buttons/style.css 318 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 421 B 0 B
build/block-library/blocks/columns/style.css 421 B 0 B
build/block-library/blocks/cover/editor-rtl.css 390 B 0 B
build/block-library/blocks/cover/editor.css 389 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.25 kB 0 B
build/block-library/blocks/cover/style.css 1.25 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 396 B 0 B
build/block-library/blocks/embed/style.css 395 B 0 B
build/block-library/blocks/file/editor-rtl.css 199 B 0 B
build/block-library/blocks/file/editor.css 198 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 827 B 0 B
build/block-library/blocks/gallery/editor.css 826 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.74 kB 0 B
build/block-library/blocks/gallery/style.css 1.74 kB 0 B
build/block-library/blocks/group/editor-rtl.css 318 B 0 B
build/block-library/blocks/group/editor.css 317 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 477 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 159 B 0 B
build/block-library/blocks/latest-comments/editor.css 158 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 269 B 0 B
build/block-library/blocks/latest-comments/style.css 269 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/list/editor-rtl.css 65 B 0 B
build/block-library/blocks/list/editor.css 65 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 395 B 0 B
build/block-library/blocks/navigation-link/editor.css 397 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 704 B 0 B
build/block-library/blocks/navigation-link/style.css 702 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.34 kB 0 B
build/block-library/blocks/navigation/editor.css 1.34 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 195 B 0 B
build/block-library/blocks/navigation/style.css 195 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 214 B 0 B
build/block-library/blocks/page-list/editor.css 214 B 0 B
build/block-library/blocks/page-list/style-rtl.css 527 B 0 B
build/block-library/blocks/page-list/style.css 526 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 109 B 0 B
build/block-library/blocks/paragraph/editor.css 109 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 273 B 0 B
build/block-library/blocks/paragraph/style.css 273 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 63 B 0 B
build/block-library/blocks/preformatted/style.css 63 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 316 B 0 B
build/block-library/blocks/pullquote/style.css 316 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 90 B 0 B
build/block-library/blocks/query-loop/editor.css 89 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query/editor-rtl.css 159 B 0 B
build/block-library/blocks/query/editor.css 160 B 0 B
build/block-library/blocks/quote/editor-rtl.css 61 B 0 B
build/block-library/blocks/quote/editor.css 61 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 236 B 0 B
build/block-library/blocks/separator/style.css 236 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 504 B 0 B
build/block-library/blocks/shortcode/editor.css 504 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 696 B 0 B
build/block-library/blocks/social-links/editor.css 696 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.36 kB 0 B
build/block-library/blocks/social-links/style.css 1.36 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 302 B 0 B
build/block-library/blocks/spacer/editor.css 302 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/subhead/editor-rtl.css 99 B 0 B
build/block-library/blocks/subhead/editor.css 99 B 0 B
build/block-library/blocks/subhead/style-rtl.css 80 B 0 B
build/block-library/blocks/subhead/style.css 80 B 0 B
build/block-library/blocks/table/editor-rtl.css 489 B 0 B
build/block-library/blocks/table/editor.css 489 B 0 B
build/block-library/blocks/table/style-rtl.css 386 B 0 B
build/block-library/blocks/table/style.css 386 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 557 B 0 B
build/block-library/blocks/template-part/editor.css 556 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 62 B 0 B
build/block-library/blocks/verse/editor.css 62 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 193 B 0 B
build/block-library/blocks/video/style.css 193 B 0 B
build/block-library/common-rtl.css 1.08 kB 0 B
build/block-library/common.css 1.08 kB 0 B
build/block-library/editor-rtl.css 9.16 kB 0 B
build/block-library/editor.css 9.14 kB 0 B
build/block-library/style-rtl.css 9.58 kB 0 B
build/block-library/style.css 9.59 kB 0 B
build/block-library/theme-rtl.css 748 B 0 B
build/block-library/theme.css 748 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.3 kB 0 B
build/components/index.js 272 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/compose/index.js 11.1 kB 0 B
build/core-data/index.js 16.8 kB 0 B
build/customize-widgets/index.js 4.09 kB 0 B
build/customize-widgets/style-rtl.css 168 B 0 B
build/customize-widgets/style.css 168 B 0 B
build/data-controls/index.js 830 B 0 B
build/data/index.js 8.87 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 768 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/index.js 11 kB 0 B
build/edit-navigation/style-rtl.css 1.26 kB 0 B
build/edit-navigation/style.css 1.25 kB 0 B
build/edit-post/index.js 307 kB 0 B
build/edit-post/style-rtl.css 6.81 kB 0 B
build/edit-post/style.css 6.8 kB 0 B
build/edit-site/index.js 26.1 kB 0 B
build/edit-site/style-rtl.css 4.41 kB 0 B
build/edit-site/style.css 4.41 kB 0 B
build/edit-widgets/index.js 20 kB 0 B
build/edit-widgets/style-rtl.css 3.2 kB 0 B
build/edit-widgets/style.css 3.2 kB 0 B
build/editor/editor-styles-rtl.css 543 B 0 B
build/editor/editor-styles.css 545 B 0 B
build/editor/index.js 42.1 kB 0 B
build/editor/style-rtl.css 3.89 kB 0 B
build/editor/style.css 3.89 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.77 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 4.01 kB 0 B
build/is-shallow-equal/index.js 698 B 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.96 kB 0 B
build/list-reusable-blocks/index.js 3.14 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 5.36 kB 0 B
build/notices/index.js 1.86 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.55 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/priority-queue/index.js 790 B 0 B
build/react-i18n/index.js 1.45 kB 0 B
build/redux-routine/index.js 2.83 kB 0 B
build/reusable-blocks/index.js 3.77 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 13.4 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 3.02 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@gziolo gziolo added the [Feature] Extensibility The ability to extend blocks or the editing experience label Feb 23, 2021
@gziolo gziolo requested a review from a team February 23, 2021 07:21
@@ -92,4 +92,4 @@ function RichTextVisibilityHelper( { isHidden, ...richTextProps } ) {
);
}

export default Gallery;
export default withFilters( 'editor.Gallery' )( Gallery );
Copy link
Contributor

@youknowriad youknowriad Feb 23, 2021

Choose a reason for hiding this comment

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

We've been moving away from this kind of filters in Gutenberg in general. These show too much internal implementation details and it locks the blocks (we can't iterate on them in the future).

In general, we do not favor filters and hooks in blocks, we prefer if third-party developpers rely one the Block APIs instead.

If the intent is to change the "Edit" function entirely like this seems to do, I think it's better if it's a separate block with a "transform" back and forth. (if it's not possible to implement using a block style variation)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for the quick feedback on this, appreciate it!

The desire here is to avoid separate blocks completely and to make the switching of gallery layouts as simple as selecting a block style. This makes discovering the different gallery layouts easy, encourages experimentation etc. The different gallery layouts aren't "hidden" as block transforms and the user isn't overwhelmed by multiple gallery blocks in the inserter.

So the intent is to only change the layout of the inner image blocks within the Gallery not the entire edit function.

To continue the masonry example from the PR description, a masonry layout would require a little JS or wrapping component along with some CSS within the editor. Yet, other than wrapping the inner image blocks in a masonry component, it might not need to touch anything else. Duplicating the entire GalleryEdit component to achieve this would be fragile and feels like overkill while multiplying the maintenance burden. I thought adding a masonry block style directly to the core gallery would also be outside its scope.

I can appreciate the concerns regarding possibly locking the block from future iterations. Do you have any suggestions regarding how we might achieve the above goals leveraging the current state of the Block API? Or even if it would be worth expanding the API to allow something like this wrapping rendering of inner blocks?

Copy link
Contributor

Choose a reason for hiding this comment

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

The desire here is to avoid separate blocks completely and to make the switching of gallery layouts as simple as selecting a block style.

I can understand that, though, it's a difficult balance and for me, the cons for having this filter are bigger than the pros especially since we have alternatives (even if less compelling). Developers are going to abuse this kind of filters making the block harder to maintain and evolve in the future.

Pinging @mtias @mcsf @gziolo for other opinions though.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Developers are going to abuse this kind of filters making the block harder to maintain and evolve in the future.

That's a good point. I'll leave this PR open temporarily on the off chance someone else has a creative idea on how we can achieve the desired result without the downsides.

Copy link
Member

Choose a reason for hiding this comment

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

In general, current "block styles" are a poor and opaque mechanism that — while being simple to adopt — has shown to have many shortcoming. For one, the editor knows nothing about style variations outside of a "class". A style is not described through attributes (the properties of blocks) which means logic is always going to be a fork, implementation wise, for any of its interfaces (edit / save). In that sense, style variations should be limited to simple cosmetic choices that carry no functional changes.

I'd expect masonry to also possibly have some configuration added to it in the future, which couldn't be expressed through a style variation.

To me the right way to achieve the initial goal would be to make InnerBlocks capable of masonry on its own, for whatever content is included within. Then a masonry gallery (after the refactor to use child image blocks) is just a gallery block variation that sets inner blocks to use masonry. That would also allow to have masonry applied to lists of posts on query patterns, for example.

The one thing styles have going on for them is prominence in the UI. But that can easily be absorbed by making proper block variations more canonical, or defining a block variation as a style, which would structurally be more resilient.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks @mtias for the feedback and interesting ideas.

To me the right way to achieve the initial goal would be to make InnerBlocks capable of masonry on its own, for whatever content is included within.

Essentially, the aim of the filter was to allow for the InnerBlocks children to be laid out as desired. In the masonry case, to conditionally wrap the InnerBlocks children in a masonry component if the style was selected.

If InnerBlocks was capable of having a layout provider passed to it depending on a gallery attribute that would make the block variation option more viable.

I'm wondering how flexible that can be made to cater for other possible layouts such as tiled, mosaic etc.

The one thing styles have going on for them is prominence in the UI. But that can easily be absorbed by making proper block variations more canonical, or defining a block variation as a style, which would structurally be more resilient.

Combining this idea with the first sounds like it would tick a lot of boxes.

Copy link
Contributor

Choose a reason for hiding this comment

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

To add more context, there's a proposal for an independent gallery with a masonry layout, which as said in this thread could transform from-to the main gallery block and have its own options and HTML structure, which is more extensible and maintainable approach than using block styles.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hi @priethor, thanks for the extra info.

The real aim we were trying to achieve is simplifying the user experience around galleries.

I agree an independent block has its benefits. However, once a site has the core gallery, masonry, tiled, mosaic and more layouts for a gallery, the user now needs to know they exist in the block inserter to try them, understand that they can switch between them via the block transforms and so on. On top of this, if they are all separate attempting to keep their functionality and features up-to-date across all galleries is more problematic.

If it is possible for InnerBlocks to be updated to handle different layouts, this could still cater to the masonry layout
proposed in #28247

@glendaviesnz glendaviesnz force-pushed the refactor/gallery-to-nested-image-blocks branch from ff1c4af to 90b1aff Compare February 23, 2021 20:38
@glendaviesnz glendaviesnz force-pushed the refactor/gallery-to-nested-image-blocks branch 2 times, most recently from 1925280 to 418ecc8 Compare February 24, 2021 20:59
@glendaviesnz glendaviesnz force-pushed the refactor/gallery-to-nested-image-blocks branch 2 times, most recently from 7dbc807 to b9ae71a Compare March 4, 2021 03:54
@glendaviesnz glendaviesnz force-pushed the refactor/gallery-to-nested-image-blocks branch 2 times, most recently from f4d0ea6 to 9415d57 Compare March 9, 2021 20:04
@glendaviesnz glendaviesnz force-pushed the refactor/gallery-to-nested-image-blocks branch from 66bdda6 to 4e57fb3 Compare March 22, 2021 22:52
@aaronrobertshaw
Copy link
Contributor Author

Closing this PR as the filter approach has been decided against.

@youknowriad youknowriad deleted the add/inner-gallery-filter branch April 9, 2021 07:16
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 [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Feature] Extensibility The ability to extend blocks or the editing experience
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants