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

Navigation: Fix creating Navigation from pages or menu with HTML in title #24673

Merged
merged 4 commits into from Sep 1, 2020

Conversation

noisysocks
Copy link
Member

Fixes #23919.

Pages and menu items in WordPress allow HTML in the title. We should therefore not escape the menu item title when creating a Navigation block from top-level pages or an existing menu.

Additionally, the menu items REST API endpoint was setting title.raw to the menu item CPT's post_title ($menu_item->post_title) and title.rendered to the referenced object's post_title (get_post( $menu_item->object_id )->post_title)). Both title.raw and title.rendered should be set to the menu item's title ($menu_item->title), which is properly set by wp_setup_nav_menu_item().

The only difference is that title.rendered should be passed through the_title, which escapes & characters, and nav_menu_item_title, which provides plugins a chance to customise menu item titles before display. This matches what Walker_Nav_Menu does.

How to test

  1. Create a menu which has a menu item with the title: <strong>Menu item</strong> & foo
  2. Create a page with the title: <strong>Page</strong> & foo.
  3. Insert a Navigation block, select the menu you just created, and click Create.
  4. Insert another Navigation block, select Create from all top-level pages, and click Create.

Both blocks should have bold text and a & in one of the links.

…itle

Pages and menu items in WordPress allow HTML in the title. We should
therefore not escape the menu item title when creating a Navigation
block from top-level pages or an existing menu.

Additionally, the menu items REST API endpoint was setting title.raw to
the menu item CPT's post_title and title.rendered to the referenced
post's post_title. Both title.raw and title.rendered should be set to
the menu item's title, which is properly set by
wp_setup_nav_menu_item(). The only difference is that title.rendered
should be passed through the_title, which escapes & characters, and
nav_menu_item_title, which provides plugins a chance to customise menu
item titles before display. This matches what Walker_Nav_Menu does.
@noisysocks noisysocks added [Type] Bug An existing feature does not function as intended REST API Interaction Related to REST API [Block] Navigation Affects the Navigation Block labels Aug 20, 2020
@noisysocks noisysocks added this to PRs in progress in Navigation editor via automation Aug 20, 2020
@github-actions
Copy link

github-actions bot commented Aug 20, 2020

Size Change: +5.87 kB (0%)

Total Size: 1.17 MB

Filename Size Change
build/annotations/index.js 3.67 kB +1 B
build/api-fetch/index.js 3.44 kB -3 B (0%)
build/autop/index.js 2.82 kB +1 B
build/block-directory/index.js 7.99 kB +25 B (0%)
build/block-editor/index.js 126 kB +482 B (0%)
build/block-editor/style-rtl.css 10.8 kB +62 B (0%)
build/block-editor/style.css 10.8 kB +65 B (0%)
build/block-library/editor-rtl.css 8.52 kB +163 B (1%)
build/block-library/editor.css 8.52 kB +162 B (1%)
build/block-library/index.js 136 kB +3.44 kB (2%)
build/block-library/style-rtl.css 7.45 kB +28 B (0%)
build/block-library/style.css 7.46 kB +29 B (0%)
build/block-serialization-default-parser/index.js 1.88 kB +1 B
build/blocks/index.js 47.7 kB +18 B (0%)
build/components/index.js 200 kB +16 B (0%)
build/components/style-rtl.css 15.7 kB -1 B
build/components/style.css 15.7 kB -1 B
build/compose/index.js 9.67 kB -4 B (0%)
build/core-data/index.js 12.3 kB +520 B (4%)
build/data-controls/index.js 1.29 kB +1 B
build/data/index.js 8.55 kB -3 B (0%)
build/date/index.js 5.38 kB +2 B (0%)
build/dom/index.js 4.48 kB +2 B (0%)
build/edit-navigation/index.js 11.7 kB +644 B (5%) 🔍
build/edit-navigation/style-rtl.css 1.16 kB +45 B (3%)
build/edit-navigation/style.css 1.16 kB +46 B (3%)
build/edit-post/index.js 304 kB -4 B (0%)
build/edit-site/index.js 17 kB +23 B (0%)
build/edit-widgets/index.js 11.9 kB +150 B (1%)
build/editor/index.js 45.3 kB -24 B (0%)
build/element/index.js 4.65 kB -2 B (0%)
build/format-library/index.js 7.71 kB -4 B (0%)
build/i18n/index.js 3.57 kB +1 B
build/is-shallow-equal/index.js 710 B -1 B
build/keyboard-shortcuts/index.js 2.52 kB -1 B
build/list-reusable-blocks/index.js 3.12 kB +5 B (0%)
build/media-utils/index.js 5.32 kB -12 B (0%)
build/plugins/index.js 2.56 kB -1 B
build/primitives/index.js 1.41 kB -7 B (0%)
build/rich-text/index.js 13.9 kB -2 B (0%)
build/token-list/index.js 1.27 kB -2 B (0%)
build/url/index.js 4.06 kB +2 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 953 B 0 B
build/block-directory/style.css 952 B 0 B
build/block-library/theme-rtl.css 729 B 0 B
build/block-library/theme.css 730 B 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/edit-post/style-rtl.css 5.61 kB 0 B
build/edit-post/style.css 5.61 kB 0 B
build/edit-site/style-rtl.css 3.06 kB 0 B
build/edit-site/style.css 3.06 kB 0 B
build/edit-widgets/style-rtl.css 2.45 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 537 B 0 B
build/editor/editor-styles.css 539 B 0 B
build/editor/style-rtl.css 3.8 kB 0 B
build/editor/style.css 3.79 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 621 B 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 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.17 kB 0 B

compressed-size-action

@TimothyBJacobs
Copy link
Member

This looks right to me @noisysocks, can we get a phpunit test covering this?

@noisysocks
Copy link
Member Author

This looks right to me @noisysocks, can we get a phpunit test covering this?

Done!

@noisysocks
Copy link
Member Author

Huh. The test fails in GitHub Actions but succeeds locally. I'll investigate tomorrow.

@noisysocks
Copy link
Member Author

Huh. The test fails in GitHub Actions but succeeds locally. I'll investigate tomorrow.

Turns out the regular tests were passing but the multisite tests were failing. This is because administrators in a multisite do not have unfiltered_html. I updated the test.

Co-authored-by: Timothy Jacobs <timothy@ironbounddesigns.com>
@noisysocks noisysocks merged commit dda3a9c into master Sep 1, 2020
Navigation editor automation moved this from PRs in progress to Done Sep 1, 2020
@noisysocks noisysocks deleted the fix/creating-navigation-when-html-in-title branch September 1, 2020 00:36
@github-actions github-actions bot added this to the Gutenberg 9.0 milestone Sep 1, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Affects the Navigation Block REST API Interaction Related to REST API [Type] Bug An existing feature does not function as intended
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

Inline styling markup saved as link text in navigation screen
2 participants