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

Transform Nav Links with children into Submenus #34831

Merged
merged 1 commit into from
Sep 30, 2021

Conversation

tellthemachines
Copy link
Contributor

@tellthemachines tellthemachines commented Sep 15, 2021

Description

With #33775, navigation submenus are now rendered as Submenu blocks, instead of being nested inside Navigation Link blocks.

Although Navigation is not yet in core, it's in Gutenberg, so there are likely instances of it in use out there. This means we need to consider how to deprecate submenus in Navigation Links and migrate them safely to Submenu blocks.

Because we're switching from one type of block to another, a standard block deprecation/migration won't work here.

This PR tries transforming Navigation Link blocks with children into Submenu blocks as soon as they load in the editor.

Advantages:

  • Removes a bunch of submenu-related logic from Navigation Link.
  • Navigation block "open on click" setting will work seamlessly with existing submenus, whereas it wouldn't work at all if the submenus were still rendered in Navigation Link blocks.

Downsides:

Opening a post with legacy Navigation Links in it will show unsaved changes straightaway. (Edit: this is expected with deprecations)

Other thoughts:

  • We could also try changing the server side render so that Navigation Links with children are output instead as Submenus, but this would mean users wouldn't be able to preserve the old markup for existing Navigation blocks on the front end. Block deprecations don't do that, and I'm thinking it would be good to keep the behaviour similar to a regular deprecation.

All thoughts and feedback welcome!

How has this been tested?

  1. Checkout a branch prior to Add a Submenu block for use in Navigation #33775 being merged, and create a Navigation block with submenus.
  2. Checkout this PR, and open the post with the previously created Navigation block.
  3. Verify that all Navigation Links with submenus have been converted to Submenu blocks.

Screenshots

Types of changes

Bug fix (non-breaking change which fixes an issue)

(Marking this as bug fix mostly because it patches the issue of using the new open on click functionality with Navigation blocks created prior to #33775, though it's not really a bug as much as a known breaking change 🤔)

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).

@github-actions
Copy link

Size Change: -269 B (0%)

Total Size: 1.06 MB

Filename Size Change
build/block-library/index.min.js 153 kB -269 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.19 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 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/index.min.js 128 kB
build/block-editor/style-rtl.css 13.8 kB
build/block-editor/style.css 13.8 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 58 B
build/block-library/blocks/audio/editor.css 58 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 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 600 B
build/block-library/blocks/button/style.css 600 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 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 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 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 983 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 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 70 B
build/block-library/blocks/group/theme.css 70 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 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 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 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 488 B
build/block-library/blocks/media-text/style.css 485 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 489 B
build/block-library/blocks/navigation-link/editor.css 488 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 300 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.72 kB
build/block-library/blocks/navigation/editor.css 1.72 kB
build/block-library/blocks/navigation/style-rtl.css 1.5 kB
build/block-library/blocks/navigation/style.css 1.49 kB
build/block-library/blocks/navigation/view.min.js 2.73 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 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 202 B
build/block-library/blocks/page-list/style.css 202 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/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 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 398 B
build/block-library/blocks/post-featured-image/editor.css 398 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 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 60 B
build/block-library/blocks/post-title/style.css 60 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 378 B
build/block-library/blocks/pullquote/style.css 378 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 301 B
build/block-library/blocks/query-pagination/editor.css 292 B
build/block-library/blocks/query-pagination/style-rtl.css 259 B
build/block-library/blocks/query-pagination/style.css 257 B
build/block-library/blocks/query-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 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 220 B
build/block-library/blocks/quote/theme.css 222 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 374 B
build/block-library/blocks/search/style.css 375 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 250 B
build/block-library/blocks/separator/style.css 250 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 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 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 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.3 kB
build/block-library/blocks/social-links/style.css 1.3 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 636 B
build/block-library/blocks/template-part/editor.css 635 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/term-description/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 853 B
build/block-library/common.css 849 B
build/block-library/editor-rtl.css 9.72 kB
build/block-library/editor.css 9.71 kB
build/block-library/reset-rtl.css 527 B
build/block-library/reset.css 527 B
build/block-library/style-rtl.css 10.3 kB
build/block-library/style.css 10.3 kB
build/block-library/theme-rtl.css 658 B
build/block-library/theme.css 663 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.9 kB
build/components/index.min.js 209 kB
build/components/style-rtl.css 15.8 kB
build/components/style.css 15.8 kB
build/compose/index.min.js 10.2 kB
build/core-data/index.min.js 12.3 kB
build/customize-widgets/index.min.js 11.1 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.45 kB
build/edit-navigation/index.min.js 16.2 kB
build/edit-navigation/style-rtl.css 3.62 kB
build/edit-navigation/style.css 3.62 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29 kB
build/edit-post/style-rtl.css 7.23 kB
build/edit-post/style.css 7.22 kB
build/edit-site/index.min.js 26.6 kB
build/edit-site/style-rtl.css 5.07 kB
build/edit-site/style.css 5.07 kB
build/edit-widgets/index.min.js 16.1 kB
build/edit-widgets/style-rtl.css 4.09 kB
build/edit-widgets/style.css 4.09 kB
build/editor/index.min.js 37.7 kB
build/editor/style-rtl.css 3.74 kB
build/editor/style.css 3.73 kB
build/element/index.min.js 3.17 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 5.34 kB
build/format-library/style-rtl.css 668 B
build/format-library/style.css 670 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.72 kB
build/keycodes/index.min.js 1.3 kB
build/list-reusable-blocks/index.min.js 1.85 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.88 kB
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.28 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.32 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.27 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@adamziel
Copy link
Contributor

adamziel commented Sep 21, 2021

What if... instead of transforming the block right away, we displayed a static markup rendered on the backend with an overlay saying "This block is now deprecated, click here to migrate to the new version?" This way the markup wouldn't change unexpectedly, we wouldn't activate the "Save" button on load, and we could still remove the obsolete logic.

@draganescu
Copy link
Contributor

Yes @adamziel 's suggestion makes a lot of sense. This way we can remove the code and also not cause an unexpected behavior.

@glendaviesnz
Copy link
Contributor

What if... instead of transforming the block right away, we displayed a static markup rendered on the backend with an overlay saying "This block is now deprecated, click here to migrate to the new version?"

We did something similar with the Gallery block #34606. We are not automatically deprecation/migrating the old gallery blocks with the initial release, but wanted to give users a way to manually migrate - in this case a button in the toolbar launches the overlay which explains the update process.

@tellthemachines
Copy link
Contributor Author

Opening a post with legacy Navigation Links in it will show unsaved changes straightaway.

I recently realised this is the expected behaviour for block deprecations, so I shouldn't have listed it as a downside. Apologies for inducing folks in error with my inaccurate PR description 😅 - I'll edit it to remove that line.

What if... instead of transforming the block right away, we displayed a static markup rendered on the backend with an overlay saying "This block is now deprecated, click here to migrate to the new version?"

It couldn't be an option though, otherwise we wouldn't be able to remove the extra logic. Authors would only have the choice of accepting the changes or leaving the post or template altogether, they wouldn't be able to edit it and preserve the deprecated markup. I'm not sure this would be a great experience tbh, especially because the changes are barely noticeable in the interface. The behaviour for creating submenus remains exactly the same, and any migrated submenus will look exactly the same as they did before.

We did something similar with the Gallery block #34606.

In the Gallery case it's more justified though, both because the changes are super evident, and because the block has been in core for ages. The Navigation block is still experimental in the plugin only, so the risk of breaking things for anyone is very minor.

@adamziel
Copy link
Contributor

adamziel commented Sep 29, 2021

I recently realised this is the expected behaviour for block deprecations, so I shouldn't have listed it as a downside. Apologies for inducing folks in error with my inaccurate PR description 😅 - I'll edit it to remove that line.

Ooh interesting! I'm want to learn more, how did you find out?

It couldn't be an option though, otherwise we wouldn't be able to remove the extra logic.

Couldn't we display the pre-rendered thing without offering any interactions?

Authors would only have the choice of accepting the changes or leaving the post or template altogether

My thinking is they would still be able to edit the rest of the post, just not this specific part of it. On save, we'd reuse the same "raw" markup as we received from the API.

Any migrated submenus will look exactly the same as they did before

Wait, would they? My thinking was this could break the display because the markup changes but any custom CSS does not.

I'm not sure this would be a great experience tbh, especially because the changes are barely noticeable in the interface.

If the structure remains the same or similar enough, the implicit replace thing could work.

@adamziel
Copy link
Contributor

adamziel commented Sep 29, 2021

They look fairly similar! The structure is the same, and the only backwards-incompatible differences I spotted were in class names:

  • li class changed from wp-block-navigation-link to wp-block-navigation-submenu
  • ul lost wp-block-navigation-link__container class

A defensive approach here would involve re-adding the old class names to their corresponding elements. I'm not sure if that would break anything though. What are your thoughts on that @tellthemachines ?

Old markup:

<ul class="wp-block-navigation__container">
   <li class=" wp-block-navigation-item has-child wp-block-navigation-link">
      <a class="wp-block-navigation-link__content wp-block-navigation-item__content" href="/about">
         <span class="wp-block-navigation-link__label">About</span>
         <span class="wp-block-navigation-link__submenu-icon wp-block-navigation__submenu-icon">
            <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false">
               <path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path>
            </svg>
         </span>
      </a>
      <ul class="wp-block-navigation-link__container wp-block-navigation__submenu-container">
         <li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-link__content wp-block-navigation-item__content" href="/privacy-policy"><span class="wp-block-navigation-link__label">Privacy policy</span></a></li>
      </ul>
   </li>
   <li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-link__content wp-block-navigation-item__content" href="/blog"><span class="wp-block-navigation-link__label">Blog</span></a></li>
</ul>

New markup:

<ul class="wp-block-navigation__container">
   <li class=" wp-block-navigation-item has-child open-on-hover-click wp-block-navigation-submenu">
      <a class="wp-block-navigation-item__content" href="/about">About</a>
      <button class="wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle" aria-expanded="false">
         <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" role="img" aria-hidden="true" focusable="false">
            <path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path>
         </svg>
      </button>
      <ul class="wp-block-navigation__submenu-container">
         <li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-link__content wp-block-navigation-item__content" href="/privacy-policy"><span class="wp-block-navigation-link__label">Privacy Policy</span></a></li>
      </ul>
   </li>
   <li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-link__content wp-block-navigation-item__content" href="/blog"><span class="wp-block-navigation-link__label">Blog</span></a></li>
</ul>

@tellthemachines
Copy link
Contributor Author

Ooh interesting! I'm want to learn more, how did you find out?

Happened to find this convo on Slack a few days ago. Then I went and experimented with a few blocks that have deprecations, by creating the blocks in an older version of WP and then opening the post with a newer version, and unsaved changes do appear.

My thinking is they would still be able to edit the rest of the post, just not this specific part of it. On save, we'd reuse the same "raw" markup as we received from the API.

I don't know if having a switch preventing certain blocks from being editable/saved would be useful in any other situation, but it seems overkill for this particular one 😅

A defensive approach here would involve re-adding the old class names to their corresponding elements. I'm not sure if that would break anything though. What are your thoughts on that @tellthemachines ?

Ah, that discrepancy won't be a problem because, as of #34171, all the styles are attached to the generic classes shared by both sets of markup. It was actually my intention to clean up some of those extra classnames that are no longer needed, but forgot about it. I'll go create an issue for it now 🗒️

Again, the Navigation block is still experimental, so these types of changes are expected. Once it lands in core we'll have to be more cautious.

@tellthemachines tellthemachines added [Block] Navigation Link Affects the Navigation Link Block [Block] Submenu Affects the Submenu Block - for submenus in navigation labels Sep 30, 2021
Copy link
Contributor

@adamziel adamziel left a comment

Choose a reason for hiding this comment

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

Perfect @tellthemachines, sounds like we're good here!

@adamziel adamziel merged commit 8792218 into trunk Sep 30, 2021
@adamziel adamziel deleted the try/transform-nav-link-submenus branch September 30, 2021 12:47
@github-actions github-actions bot added this to the Gutenberg 11.7 milestone Sep 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Link Affects the Navigation Link Block [Block] Submenu Affects the Submenu Block - for submenus in navigation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants