Skip to content

Save DOMDocument node instead of root + str_replace#25020

Merged
jorgefilipecosta merged 3 commits intomasterfrom
update/improve-dom-saving
Sep 2, 2020
Merged

Save DOMDocument node instead of root + str_replace#25020
jorgefilipecosta merged 3 commits intomasterfrom
update/improve-dom-saving

Conversation

@sirreal
Copy link
Copy Markdown
Member

@sirreal sirreal commented Sep 2, 2020

Description

We wrapped block HTML in some tags to ensure the DOMDocument parses it
correctly, then unwrapped it again with str_replace after using
saveHTML.

The saveHTML method accepts an optional argument that is the dom node
to output a subset of the document:
https://www.php.net/manual/en/domdocument.savehtml.php

Rather than calling str_replace on the entire document to get the
unwrapped block HTML, invoke saveHTML on the block root to get the
unwrapped HTML.

This prevents some additional newlines from being appended to the
output which was observed when running core block tests with Gutenberg
activated.

How has this been tested?

Manual and automated testing of some dynamic blocks.

Types of changes

Internal.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • 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.

We wrapped block HTML in some tags to ensure the DOMDocument parses it
correctly, then unwrapped it again with str_replace after using
`saveHTML`.

The `saveHTML` method accepts an optional argument that is the dom node
to output a subset of the document:
https://www.php.net/manual/en/domdocument.savehtml.php

Rather than calling `str_replace` on the entire document to get the
unwrapped block HTML, invoke `saveHTML` on the block root to get the
unwrapped HTML.

This prevents some additional newlines from being appended to the
output which was observed when running core block tests with Gutenberg
activated.
@sirreal sirreal self-assigned this Sep 2, 2020
@sirreal sirreal added the Needs Technical Feedback Needs testing from a developer perspective. label Sep 2, 2020
@sirreal sirreal marked this pull request as ready for review September 2, 2020 16:39
@github-actions
Copy link
Copy Markdown

github-actions bot commented Sep 2, 2020

Size Change: +30 B (0%)

Total Size: 1.17 MB

Filename Size Change
build/components/index.js 200 kB +18 B (0%)
build/components/style-rtl.css 15.5 kB +5 B (0%)
build/components/style.css 15.5 kB +7 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.67 kB 0 B
build/api-fetch/index.js 3.41 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 7.99 kB 0 B
build/block-directory/style-rtl.css 953 B 0 B
build/block-directory/style.css 952 B 0 B
build/block-editor/index.js 128 kB 0 B
build/block-editor/style-rtl.css 10.8 kB 0 B
build/block-editor/style.css 10.8 kB 0 B
build/block-library/editor-rtl.css 8.55 kB 0 B
build/block-library/editor.css 8.55 kB 0 B
build/block-library/index.js 137 kB 0 B
build/block-library/style-rtl.css 7.47 kB 0 B
build/block-library/style.css 7.47 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 742 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 47.7 kB 0 B
build/compose/index.js 9.67 kB 0 B
build/core-data/index.js 12.3 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.55 kB 0 B
build/date/index.js 5.38 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.48 kB 0 B
build/edit-navigation/index.js 11.7 kB 0 B
build/edit-navigation/style-rtl.css 1.16 kB 0 B
build/edit-navigation/style.css 1.16 kB 0 B
build/edit-post/index.js 305 kB 0 B
build/edit-post/style-rtl.css 6.26 kB 0 B
build/edit-post/style.css 6.24 kB 0 B
build/edit-site/index.js 17 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/index.js 12 kB 0 B
build/edit-widgets/style-rtl.css 2.46 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/editor/index.js 45.4 kB 0 B
build/editor/style-rtl.css 3.81 kB 0 B
build/editor/style.css 3.81 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.71 kB 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/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 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/media-utils/index.js 5.32 kB 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/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.41 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 13.9 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 4.06 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

@ockham
Copy link
Copy Markdown
Contributor

ockham commented Sep 2, 2020

Looking good. @sirreal Is there any chance we can modify the string we use in unit tests to cover the problematic newlines case?

const BLOCK_CONTENT = '
<p data-image-description="&lt;p&gt;Test!&lt;/p&gt;">Test</p>
<p>äöü</p>
<p>ß</p>
<p>系の家庭に</p>
<p>Example &lt;p&gt;Test!&lt;/p&gt;</p>
';

Copy link
Copy Markdown
Contributor

@ockham ockham left a comment

Choose a reason for hiding this comment

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

Let's get this into 8.9. We'll add unit test coverage afterwards.

@sirreal sirreal removed the Needs Technical Feedback Needs testing from a developer perspective. label Sep 2, 2020
Copy link
Copy Markdown
Contributor

@ockham ockham left a comment

Choose a reason for hiding this comment

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

Nice, now even with test coverage!

@westonruter
Copy link
Copy Markdown
Member

This PR caused a regression in the Categories block when a dropdown is displayed. See #25026.

sirreal added a commit that referenced this pull request Sep 2, 2020
sirreal added a commit that referenced this pull request Sep 7, 2020
sirreal added a commit that referenced this pull request Sep 7, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants