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

[RNMobile] Fix HTML to blocks conversion when no transformations are available #56723

Merged
merged 5 commits into from
Dec 4, 2023

Conversation

fluiddot
Copy link
Contributor

@fluiddot fluiddot commented Dec 1, 2023

What?

Fixes an issue related to converting HTML to blocks when using the unsupported HTML block in the native version.

This issue was introduced in #55461 after enabling the Convert to blocks option in the Classic block.

Why?

Fixes wordpress-mobile/gutenberg-mobile#6420.
Fixes wordpress-mobile/gutenberg-mobile#6084.
Related to wordpress-mobile/gutenberg-mobile#6416.

How?

Testing Instructions

  1. Open the app and create a post.
  2. Switch to HTML mode.
  3. Paste the following HTML code:
<div>
<p>Hello world!</p>
</div>
  1. Switch back to Visual mode.
  2. Tap two times on the Classic block to present the bottom sheet.
  3. Tap on Convert to blocks option.
  4. Observe that no exception/crash is produced.
  5. Observe that the Classic block is converted to an HTML block (displayed as an unsupported block).
  6. Edit the HTML block via UBE (Unsupported Block Editor).
  7. Observe that the content of the HTML block matches the copied HTML from the third step.

Testing Instructions for Keyboard

N/A

Screenshots or screencast

N/A

This file is a clone of the same `blocks-raw-handling.js` file located in `gutenberg/test/integration`. The reason for the separation is that several of the test cases fail in the native version. For now, we are going to skip them, but we'd need to work on them in the future.
Once all issues in tests are addressed, we'll remove this file in favor of the original one.
Comment on lines +29 to +36
// NOTE: This file is a clone of the same `blocks-raw-handling.js` file located in
// `gutenberg/test/integration`. The reason for the separation is that several of
// the test cases fail in the native version. For now, we are going to skip them, but
// we'd need to work on them in the future.
//
// Once all issues in tests are addressed, we'll remove this file in favor of the
// original one.
describe( 'Blocks raw handling', () => {
Copy link
Contributor Author

@fluiddot fluiddot Dec 1, 2023

Choose a reason for hiding this comment

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

As explained in the inline comment, this file is a copy with an extra test case.

In a follow-up GitHub issue, we'll track the different test cases to address and analyze why they fail then in the native version.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

My rationale for running the same tests as the web version is that the raw block handling should works the same way on both platforms. Especially, the processing shouldn’t produce exception as would lead to crashes. For the cases where the issue is related to produce a different output, we’d need determine if that produce conflicts between versions.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

As a side note, adding these tests and addressing them for the native version is also related to #55652.

Copy link
Member

Choose a reason for hiding this comment

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

I agree that raw block handling should work the same way on both platforms, and that we should utilize the web tests as a foundation for the native tests. I took a close look at these tests to understand why some of the skipped ones were failing on native. Unless I'm misunderstanding why the snapshots are obsolete in the first place, I found that several of the skipped tests only needed the snapshots updated in the native context to pass. I've added those in ca8cf35 as an experiment. If they look promising, feel free to incorporate in this PR, or we could use it as the starting point for a followup PR.

For some of the other failures, particularly when the assertion fails due to a console.log expectation (#), I noted that web sometimes aliases the window object when logging, like in the paste-handler here:

const log = ( ...args ) => window?.console?.log?.( ...args );

As noted in the approval, I don't feel this is a blocker for merging.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Unless I'm misunderstanding why the snapshots are obsolete in the first place, I found that several of the skipped tests only needed the snapshots updated in the native context to pass. I've added those in ca8cf35 as an experiment. If they look promising, feel free to incorporate in this PR, or we could use it as the starting point for a followup PR.

I originally updated the snapshots in 78dab04 for the native version, however, I was concerned that the output might not be the expected one compared to the web snapshots. That's why I updated it in bce611a. This resulted in disabling other test cases referenced in 5e44132. It might be possible that the output of the processing differs in the native version, but we'd need to check first that the differences are (1) expected and (2) won't lead to conflicts in the content between platforms.

That said, I'd postpone updating the snapshots until we investigate further what's causing the test failures.

Comment on lines +581 to +586
// This is an extra test added to cover the case fixed in:
// `rnmobile/fix/div-tag-convert-to-blocks`.
it( 'should convert to unsupported HTML block when no transformation is available', () => {
const HTML = '<div><p>Hello world!</p></div>';
expect( serialize( rawHandler( { HTML } ) ) ).toMatchSnapshot();
} );
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is the extra test cases added to cover the issue that the PR fixes.

Comment on lines +40 to +42
return parse(
`<!-- wp:html -->${ node.outerHTML }<!-- /wp:html -->`
);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Since the HTML block is not registered in the native version, the block will be generated by simply parsing the raw HTML content of an HTML block with the HTML code provided.

Copy link

github-actions bot commented Dec 1, 2023

Size Change: +38 B (0%)

Total Size: 1.72 MB

Filename Size Change
build/blocks/index.min.js 51.1 kB +38 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 964 B
build/annotations/index.min.js 2.71 kB
build/api-fetch/index.min.js 2.29 kB
build/autop/index.min.js 2.11 kB
build/blob/index.min.js 590 B
build/block-directory/index.min.js 7.25 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.29 kB
build/block-editor/content.css 4.28 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/index.min.js 247 kB
build/block-editor/style-rtl.css 15.7 kB
build/block-editor/style.css 15.7 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 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 228 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 343 B
build/block-library/blocks/form-submission-notification/editor.css 342 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.75 kB
build/block-library/blocks/gallery/style.css 1.75 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 654 B
build/block-library/blocks/group/editor.css 654 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 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.61 kB
build/block-library/blocks/image/style.css 1.6 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 2.02 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 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 505 B
build/block-library/blocks/media-text/style.css 503 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 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/navigation/view.min.js 1.04 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 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 345 B
build/block-library/blocks/post-featured-image/style.css 345 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 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 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 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 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/query/view.min.js 647 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 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 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 613 B
build/block-library/blocks/search/style.css 613 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 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 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.47 kB
build/block-library/blocks/social-links/style.css 1.47 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 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 432 B
build/block-library/blocks/table/editor.css 432 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 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/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 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 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.5 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 214 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/index.min.js 256 kB
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 2.72 kB
build/core-data/index.min.js 72.6 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.43 kB
build/customize-widgets/style.css 1.43 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.87 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 35.8 kB
build/edit-post/style-rtl.css 7.6 kB
build/edit-post/style.css 7.59 kB
build/edit-site/index.min.js 208 kB
build/edit-site/style-rtl.css 14.6 kB
build/edit-site/style.css 14.6 kB
build/edit-widgets/index.min.js 17.2 kB
build/edit-widgets/style-rtl.css 4.65 kB
build/edit-widgets/style.css 4.65 kB
build/editor/index.min.js 47.7 kB
build/editor/style-rtl.css 3.74 kB
build/editor/style.css 3.73 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.76 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/file.min.js 442 B
build/interactivity/image.min.js 2.15 kB
build/interactivity/index.min.js 12.5 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 791 B
build/interactivity/search.min.js 610 B
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.9 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2.01 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/index.min.js 5.28 kB
build/patterns/style-rtl.css 564 B
build/patterns/style.css 564 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.26 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 988 B
build/react-i18n/index.min.js 631 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.74 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 9.98 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 1.98 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.83 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 967 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

The reason for commenting them instead of removing is that, in the future, we'll restore them once we address the failing test cases.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This test snapshot is a copy of the original snapshot with an extra entry for the test case rawHandler should convert to unsupported HTML block when no transformation is available.

Note that some snapshots are commented due to:

  1. Avoid a test failure due to having obsolete snapshots.
  2. In the future, they will be restored once we address the test cases that fail in the native version.

@fluiddot
Copy link
Contributor Author

fluiddot commented Dec 1, 2023

@derekblank I've assigned you for a preliminary review, as you were also assigned to the issues. Let me know if you can take a quick look. Thanks 🙇 !

@fluiddot fluiddot added [Type] Bug An existing feature does not function as intended Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) labels Dec 1, 2023
Copy link
Member

@derekblank derekblank left a comment

Choose a reason for hiding this comment

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

I was able to test iOS successfully: I did not experience the crash when applying this fix, and the steps to produce the correct HTML succeeded.

On Android, I did not experience the crash after applying this fix, but I did experience slightly different results when producing the correct HTML. I noted that if the sample raw HTML snippet is pasted as the first piece of content at the beginning of the post body (i.e., no other blocks before it), an extra <p></p> tag is added to the HTML block when converted from a Classic block. If these steps are repeated, an extra </p> is added to the subsequent converted HTML blocks, with no opening <p> tag.

However, when a properly registered block is added (like a normal paragraph block with text), and then the raw HTML is pasted in code mode, the HTML is correct, and the Android behavior matches the correct behavior of web and iOS. So perhaps there is something to do with the <!-- wp:x --> element of the parser when interpreting the rawTransform when no other <!-- wp:x --> elements are present. This feels like an edge case, however, but perhaps it's a clue to start unblocking some of the skipped tests.

In the video examples below, the left-hand video shows the extra <p> tag being added. Also noting that the existing <p> tag from the pasted HTML is stripped out as soon as the [⋮] button is pressed. The right-hand side video demonstrates that the correct HTML is added when a registered block precedes the raw HTML.

Before After
Extra.HTML.mov
Correct.HTML.mov

As this fix eliminates the fatal exception for both platforms (which is most important), I'm approving, and would be in support of moving this change out of draft status and merging it as-is, and then addressing the tests and the non-fatal Android HTML block behavior in follow-up PRs.

@fluiddot
Copy link
Contributor Author

fluiddot commented Dec 4, 2023

I was able to test iOS successfully: I did not experience the crash when applying this fix, and the steps to produce the correct HTML succeeded.

That's great, thank you so much @derekblank for the review 🙇 !

On Android, I did not experience the crash after applying this fix, but I did experience slightly different results when producing the correct HTML. I noted that if the sample raw HTML snippet is pasted as the first piece of content at the beginning of the post body (i.e., no other blocks before it), an extra <p></p> tag is added to the HTML block when converted from a Classic block. If these steps are repeated, an extra </p> is added to the subsequent converted HTML blocks, with no opening <p> tag.

However, when a properly registered block is added (like a normal paragraph block with text), and then the raw HTML is pasted in code mode, the HTML is correct, and the Android behavior matches the correct behavior of web and iOS. So perhaps there is something to do with the <!-- wp:x --> element of the parser when interpreting the rawTransform when no other <!-- wp:x --> elements are present. This feels like an edge case, however, but perhaps it's a clue to start unblocking some of the skipped tests.

In the video examples below, the left-hand video shows the extra <p> tag being added. Also noting that the existing <p> tag from the pasted HTML is stripped out as soon as the [⋮] button is pressed. The right-hand side video demonstrates that the correct HTML is added when a registered block precedes the raw HTML.

After checking the videos you shared, I noticed that the HTML is automatically modified after pasting it (see attached video capture). This makes me wonder if any reformatting is being applied on Android in the HTML mode and if this is the cause of adding the extra <p></p> code you observed. I tried using an Android device but I can't replicate what you experienced @derekblank. As a double-check, would you mind pasting the HTML code via the browser and then testing that the conversion produces the same HTML as on iOS?

Kapture.2023-12-04.at.11.16.18.mp4

As this fix eliminates the fatal exception for both platforms (which is most important), I'm approving, and would be in support of moving this change out of draft status and merging it as-is, and then addressing the tests and the non-fatal Android HTML block behavior in follow-up PRs.

The reason for leaving it in draft was mainly to finish testing and document the changes I applied. It would be interesting to also test that no regressions are introduced in the web version. Hence, I might add another reviewer so we can incorporate it in the ongoing betafix (1.109.1). But I agree that once that's done (and if no regressions are found), we could merge it as-is. Thanks 🙇 !

@fluiddot fluiddot marked this pull request as ready for review December 4, 2023 10:53
@fluiddot
Copy link
Contributor Author

fluiddot commented Dec 4, 2023

Hence, I might add another reviewer so we can incorporate it in the ongoing betafix (1.109.1). But I agree that once that's done (and if no regressions are found), we could merge it as-is. Thanks 🙇 !

I tested the web version and works as expected. So, I'll proceed with merging the PR 🎊 .

@fluiddot fluiddot merged commit e3ef008 into trunk Dec 4, 2023
55 of 56 checks passed
@fluiddot fluiddot deleted the rnmobile/fix/div-tag-convert-to-blocks branch December 4, 2023 10:56
@github-actions github-actions bot added this to the Gutenberg 17.3 milestone Dec 4, 2023
@derekblank
Copy link
Member

After checking the videos you shared, I noticed that the HTML is automatically modified after pasting it (see attached video capture). This makes me wonder if any reformatting is being applied on Android in the HTML mode and if this is the cause of adding the extra

code you observed. I tried using an Android device but I can't replicate what you experienced.

I did note that the HTML is automatically modified as soon as the [⋮] button is pressed as well. Previously I was testing with a physical Samsung Galaxy S20. Upon testing again with an emulated Pixel 3 Pro, I did note that the HTML was automatically modified when pressing [⋮], but the transformed HTML in the block was actually correct (see example video). My initial gut reaction when testing was that the extra HTML may be a quirk of the Samsung keyboard.

Pixel3.mov

@derekblank
Copy link
Member

As a double-check, would you mind pasting the HTML code via the browser and then testing that the conversion produces the same HTML as on iOS?

Although this issue has been merged, just to confirm, the web matched iOS behavior in my testing. 👍

fluiddot added a commit that referenced this pull request Dec 5, 2023
…available (#56723)

* Add native workaround for HTML block in `htmlToBlocks`

* Add raw handling tests

This file is a clone of the same `blocks-raw-handling.js` file located in `gutenberg/test/integration`. The reason for the separation is that several of the test cases fail in the native version. For now, we are going to skip them, but we'd need to work on them in the future.
Once all issues in tests are addressed, we'll remove this file in favor of the original one.

* Update blocks raw handling test snapshot with original values

* Disable more pasteHandler test cases due to not matching test snapshot

* Comment obsolete snapshots of blocks raw handling tests

The reason for commenting them instead of removing is that, in the future, we'll restore them once we address the failing test cases.
fluiddot added a commit that referenced this pull request Dec 5, 2023
* Release script: Update react-native-editor version to 1.109.0

* Release script: Update CHANGELOG for version 1.109.0

* Release script: Update podfile

* Update `react-native-editor` changelog

* Update `react-native-editor` changelog

* Mobile - Fix issue when backspacing in an empty Paragraph block (#56496)

* Bring changes from #55134 to the mobile code

* Mobile - RichText - Force focus when the block is selected but the textinput is not, for cases when merging blocks.

* Update Buttons integration test due to a change in the logic of the app where deleting the only button available does not remove the block

* Mobile - Heading block - Adds integration test for merging a Heading block with an empty Paragraph block

* Mobile - Paragraph block - Adds integration test to check that backspacing in an empty Paragraph block merges succesfully with the previous block and keeps the focus on the TextInput

* Mobile - RichText - Set selection values to be the last character position when merging and adds some comments to explain what is doing

* Mobile - Paragraph block test - Use focusTextInput to check the TextInput is in focused instead of checking for the fomatting toolbar button

* Rename shouldFocusTextInputAfterUpdate to shouldFocusTextInputAfterMerge

* Update CHANGELOG

* Release script: Update react-native-editor version to 1.109.1

* Release script: Update CHANGELOG for version 1.109.1

* Release script: Update podfile

* [RNMobile] Fixes a crash on pasting MS Word list markup (#56653)

* Add polyfill for Element.prototype.remove

* Enable unit tests of `raw-handling` API filter `ms-list-converter`

* Update `react-native-editor` changelog

* [RNMobile] Fix issue related to receiving undefined ref in text color format (#56686)

* Fix issue related to receiving undefined ref in text color format

In rare cases, `TextColorEdit` might receive the `RichText` ref as undefined. This ref is used to get the background color of the text and use it in the toolbar button.

* Update `react-native-editor` changelog

* Add test to cover undefined `contentRef` case

* Correct typo in `changelog`

* [RNMobile] Fix HTML to blocks conversion when no transformations are available (#56723)

* Add native workaround for HTML block in `htmlToBlocks`

* Add raw handling tests

This file is a clone of the same `blocks-raw-handling.js` file located in `gutenberg/test/integration`. The reason for the separation is that several of the test cases fail in the native version. For now, we are going to skip them, but we'd need to work on them in the future.
Once all issues in tests are addressed, we'll remove this file in favor of the original one.

* Update blocks raw handling test snapshot with original values

* Disable more pasteHandler test cases due to not matching test snapshot

* Comment obsolete snapshots of blocks raw handling tests

The reason for commenting them instead of removing is that, in the future, we'll restore them once we address the failing test cases.

* RichText (native): remove HTML check in getFormatColors (#56684)

* Mobile - Global Styles - Fix issue with custom color variables not being parsed (#56752)

* [RNMobile] Address `NullPointerException` crash in `AztecHeadingSpan` (#56757)

Address rare cases where a null value is passed to a heading block, causing a crash.

* Release script: Update react-native-editor version to 1.109.2

* Release script: Update CHANGELOG for version 1.109.2

* Release script: Update podfile

---------

Co-authored-by: Gerardo Pacheco <gerardo.pacheco@automattic.com>
Co-authored-by: Ella <4710635+ellatrix@users.noreply.github.com>
Co-authored-by: Siobhan Bamber <siobhan@automattic.com>
SiobhyB pushed a commit that referenced this pull request Dec 14, 2023
* Release script: Update react-native-editor version to 1.109.0

* Release script: Update CHANGELOG for version 1.109.0

* Release script: Update podfile

* Update `react-native-editor` changelog

* Update `react-native-editor` changelog

* Mobile - Fix issue when backspacing in an empty Paragraph block (#56496)

* Bring changes from #55134 to the mobile code

* Mobile - RichText - Force focus when the block is selected but the textinput is not, for cases when merging blocks.

* Update Buttons integration test due to a change in the logic of the app where deleting the only button available does not remove the block

* Mobile - Heading block - Adds integration test for merging a Heading block with an empty Paragraph block

* Mobile - Paragraph block - Adds integration test to check that backspacing in an empty Paragraph block merges succesfully with the previous block and keeps the focus on the TextInput

* Mobile - RichText - Set selection values to be the last character position when merging and adds some comments to explain what is doing

* Mobile - Paragraph block test - Use focusTextInput to check the TextInput is in focused instead of checking for the fomatting toolbar button

* Rename shouldFocusTextInputAfterUpdate to shouldFocusTextInputAfterMerge

* Update CHANGELOG

* Release script: Update react-native-editor version to 1.109.1

* Release script: Update CHANGELOG for version 1.109.1

* Release script: Update podfile

* [RNMobile] Fixes a crash on pasting MS Word list markup (#56653)

* Add polyfill for Element.prototype.remove

* Enable unit tests of `raw-handling` API filter `ms-list-converter`

* Update `react-native-editor` changelog

* [RNMobile] Fix issue related to receiving undefined ref in text color format (#56686)

* Fix issue related to receiving undefined ref in text color format

In rare cases, `TextColorEdit` might receive the `RichText` ref as undefined. This ref is used to get the background color of the text and use it in the toolbar button.

* Update `react-native-editor` changelog

* Add test to cover undefined `contentRef` case

* Correct typo in `changelog`

* [RNMobile] Fix HTML to blocks conversion when no transformations are available (#56723)

* Add native workaround for HTML block in `htmlToBlocks`

* Add raw handling tests

This file is a clone of the same `blocks-raw-handling.js` file located in `gutenberg/test/integration`. The reason for the separation is that several of the test cases fail in the native version. For now, we are going to skip them, but we'd need to work on them in the future.
Once all issues in tests are addressed, we'll remove this file in favor of the original one.

* Update blocks raw handling test snapshot with original values

* Disable more pasteHandler test cases due to not matching test snapshot

* Comment obsolete snapshots of blocks raw handling tests

The reason for commenting them instead of removing is that, in the future, we'll restore them once we address the failing test cases.

* RichText (native): remove HTML check in getFormatColors (#56684)

* Mobile - Global Styles - Fix issue with custom color variables not being parsed (#56752)

* [RNMobile] Address `NullPointerException` crash in `AztecHeadingSpan` (#56757)

Address rare cases where a null value is passed to a heading block, causing a crash.

* Release script: Update react-native-editor version to 1.109.2

* Release script: Update CHANGELOG for version 1.109.2

* Release script: Update podfile

* Release script: Update react-native-editor version to 1.109.3

* Release script: Update CHANGELOG for version 1.109.3

* Release script: Update podfile

* Mobile - Fix having the default font sizes when there are theme font sizes available

* Update CHANGELOG entry

---------

Co-authored-by: Carlos Garcia <fluiddot@gmail.com>
Co-authored-by: Gerardo Pacheco <gerardo.pacheco@automattic.com>
Co-authored-by: Ella <4710635+ellatrix@users.noreply.github.com>
artemiomorales pushed a commit that referenced this pull request Jan 4, 2024
* Release script: Update react-native-editor version to 1.109.0

* Release script: Update CHANGELOG for version 1.109.0

* Release script: Update podfile

* Update `react-native-editor` changelog

* Update `react-native-editor` changelog

* Mobile - Fix issue when backspacing in an empty Paragraph block (#56496)

* Bring changes from #55134 to the mobile code

* Mobile - RichText - Force focus when the block is selected but the textinput is not, for cases when merging blocks.

* Update Buttons integration test due to a change in the logic of the app where deleting the only button available does not remove the block

* Mobile - Heading block - Adds integration test for merging a Heading block with an empty Paragraph block

* Mobile - Paragraph block - Adds integration test to check that backspacing in an empty Paragraph block merges succesfully with the previous block and keeps the focus on the TextInput

* Mobile - RichText - Set selection values to be the last character position when merging and adds some comments to explain what is doing

* Mobile - Paragraph block test - Use focusTextInput to check the TextInput is in focused instead of checking for the fomatting toolbar button

* Rename shouldFocusTextInputAfterUpdate to shouldFocusTextInputAfterMerge

* Update CHANGELOG

* Release script: Update react-native-editor version to 1.109.1

* Release script: Update CHANGELOG for version 1.109.1

* Release script: Update podfile

* [RNMobile] Fixes a crash on pasting MS Word list markup (#56653)

* Add polyfill for Element.prototype.remove

* Enable unit tests of `raw-handling` API filter `ms-list-converter`

* Update `react-native-editor` changelog

* [RNMobile] Fix issue related to receiving undefined ref in text color format (#56686)

* Fix issue related to receiving undefined ref in text color format

In rare cases, `TextColorEdit` might receive the `RichText` ref as undefined. This ref is used to get the background color of the text and use it in the toolbar button.

* Update `react-native-editor` changelog

* Add test to cover undefined `contentRef` case

* Correct typo in `changelog`

* [RNMobile] Fix HTML to blocks conversion when no transformations are available (#56723)

* Add native workaround for HTML block in `htmlToBlocks`

* Add raw handling tests

This file is a clone of the same `blocks-raw-handling.js` file located in `gutenberg/test/integration`. The reason for the separation is that several of the test cases fail in the native version. For now, we are going to skip them, but we'd need to work on them in the future.
Once all issues in tests are addressed, we'll remove this file in favor of the original one.

* Update blocks raw handling test snapshot with original values

* Disable more pasteHandler test cases due to not matching test snapshot

* Comment obsolete snapshots of blocks raw handling tests

The reason for commenting them instead of removing is that, in the future, we'll restore them once we address the failing test cases.

* RichText (native): remove HTML check in getFormatColors (#56684)

* Mobile - Global Styles - Fix issue with custom color variables not being parsed (#56752)

* [RNMobile] Address `NullPointerException` crash in `AztecHeadingSpan` (#56757)

Address rare cases where a null value is passed to a heading block, causing a crash.

* Release script: Update react-native-editor version to 1.109.2

* Release script: Update CHANGELOG for version 1.109.2

* Release script: Update podfile

* Release script: Update react-native-editor version to 1.109.3

* Release script: Update CHANGELOG for version 1.109.3

* Release script: Update podfile

* Mobile - Fix having the default font sizes when there are theme font sizes available

* Update CHANGELOG entry

---------

Co-authored-by: Carlos Garcia <fluiddot@gmail.com>
Co-authored-by: Gerardo Pacheco <gerardo.pacheco@automattic.com>
Co-authored-by: Ella <4710635+ellatrix@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Type] Bug An existing feature does not function as intended
Projects
None yet
2 participants