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

fix: Enable access to block settings within UBE #48435

Merged
merged 10 commits into from
Mar 1, 2023

Conversation

dcalhoun
Copy link
Member

@dcalhoun dcalhoun commented Feb 24, 2023

Related PRs

What?

Repair access to the block settings sidebar within the unsupported block editor
(UBE). Fixes #48298.

Repair hiding of unrelated editor UI in the UBE. Fixes #47966.

Why?

Without access to the block settings, a user cannot modify important settings
for a given block.

Also, displaying UI elements unrelated to the sole block is
confusing and unnecessary.

How?

Block Settings

Previously, the UBE relied upon the presence of the "Show more settings" button,
but that was removed in #46709. This updates the UBE to rely upon the sidebar
toggle button that is present in the post editor header. Because the sidebar toggle
button can also reveal the post settings, this only displays the sidebar toggle
button whenever a block is selected.

Post Title Visibility

The override styles used by the UBE were no longer successfully applied once #46212
wrapped the editor within an iframe. It is not possible to style iframe
children elements from the parent document context. These changes no
copy the override styles to reside within the iframe document so they are
applied to the children elements.

Unrelated Changes

This also updates existing Android-specific scripts to only run when Android
devices are detected by parsing the user agent string. Previously, the entire
editor-behavior-overrides script was only loaded by the Android platform.
Now, both platforms load the script, and portions of it only run for Android.

Testing Instructions

Note
There is one known issue. On iOS, tapping towards the bottom of the screen — between the sole block and the keyboard toolbar — clears the block selection, but the sidebar toggle button remains erroneously displayed. This does not occur for Android. This can be seen at the end of the screencast below.

Verify the steps outlined in #48298, #34668, and #47966 pass.

  1. Using the WordPress mobile app, open a post containing unsupported blocks,
    e.g. Archives, Table.
  2. Select an unsupported block.
  3. Tap the ? button.
  4. Tap "Edit using web editor."
  5. Verify the sidebar toggle button is not present in the top-right corner.
  6. Select the unsupported block.
  7. Tap the sidebar toggle button in the top-right corner.
  8. Verify the block settings are displayed.

Testing Instructions for Keyboard

n/a

Screenshots or screencast

Screen.Recording.2023-02-27.at.20.45.31.mov

The "Show more settings" menu item is no longer included in the block
toolbar after #46709 merged. Rather than relying upon that menu item,
this conditionally displays the sidebar toggle button whenever a block
is selected.
CSS selectors rely upon a single white space between selectors to
represent an ancestor relationship. Globally removing white space in the
stylesheet breaks this functionality, as it transforms the selector to
target a single element with all the selectors.

The white space stripping should likely be replaced with a proper CSS
minification long term.
Hide the entire "block settings" drop-down menu now that we no longer
rely upon it to access the "Show more settings" menu option that was
removed entirely.
This relates more to editor behavior than the post content.
@dcalhoun dcalhoun added [Type] Regression Related to a regression in the latest release Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) labels Feb 24, 2023
@dcalhoun dcalhoun self-assigned this Feb 24, 2023
@dcalhoun dcalhoun added the Mobile App - Automation Label used to initiate Mobile App PR Automation label Feb 24, 2023
@github-actions
Copy link

github-actions bot commented Feb 24, 2023

Size Change: -189 B (0%)

Total Size: 1.33 MB

Filename Size Change
build/block-editor/index.min.js 196 kB +937 B (0%)
build/block-editor/style-rtl.css 14.5 kB +52 B (0%)
build/block-editor/style.css 14.5 kB +52 B (0%)
build/block-library/index.min.js 201 kB +124 B (0%)
build/components/index.min.js 207 kB +30 B (0%)
build/edit-site/index.min.js 63.9 kB -1.34 kB (-2%)
build/edit-site/style-rtl.css 10 kB -18 B (0%)
build/edit-site/style.css 9.99 kB -19 B (0%)
build/private-apis/index.min.js 937 B -3 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 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.11 kB
build/block-editor/content.css 4.1 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
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 91 B
build/block-library/blocks/avatar/style.css 91 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 628 B
build/block-library/blocks/button/style.css 627 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 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 100 B
build/block-library/blocks/categories/style.css 100 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 406 B
build/block-library/blocks/columns/style.css 406 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 612 B
build/block-library/blocks/cover/editor.css 613 B
build/block-library/blocks/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.56 kB
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 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 265 B
build/block-library/blocks/file/style.css 265 B
build/block-library/blocks/file/view.min.js 353 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 984 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 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 76 B
build/block-library/blocks/heading/style.css 76 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 830 B
build/block-library/blocks/image/editor.css 829 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
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 507 B
build/block-library/blocks/media-text/style.css 505 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 716 B
build/block-library/blocks/navigation-link/editor.css 715 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 B
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 376 B
build/block-library/blocks/page-list/editor.css 376 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 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 501 B
build/block-library/blocks/post-comments-form/style.css 501 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 134 B
build/block-library/blocks/post-excerpt/style.css 134 B
build/block-library/blocks/post-featured-image/editor-rtl.css 586 B
build/block-library/blocks/post-featured-image/editor.css 584 B
build/block-library/blocks/post-featured-image/style-rtl.css 318 B
build/block-library/blocks/post-featured-image/style.css 318 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 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 282 B
build/block-library/blocks/post-template/style.css 282 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-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 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 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 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 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 463 B
build/block-library/blocks/query/editor.css 463 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 132 B
build/block-library/blocks/read-more/style.css 132 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 409 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 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 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 489 B
build/block-library/blocks/site-logo/editor.css 489 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 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 404 B
build/block-library/blocks/template-part/editor.css 404 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/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 179 B
build/block-library/blocks/video/style.css 179 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 11.6 kB
build/block-library/editor.css 11.6 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.7 kB
build/block-library/style.css 12.7 kB
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 51 kB
build/components/style-rtl.css 11.7 kB
build/components/style.css 11.7 kB
build/compose/index.min.js 12.4 kB
build/core-data/index.min.js 16.2 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.58 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.72 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 34.8 kB
build/edit-post/style-rtl.css 7.53 kB
build/edit-post/style.css 7.52 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.55 kB
build/edit-widgets/style.css 4.55 kB
build/editor/index.min.js 45.7 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.27 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 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.99 kB
build/notices/index.min.js 977 B
build/plugins/index.min.js 1.95 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/react-i18n/index.min.js 702 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 10.8 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.53 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.69 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 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.31 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@dcalhoun dcalhoun marked this pull request as ready for review February 24, 2023 22:22
@dcalhoun dcalhoun requested a review from geriux February 24, 2023 22:23
@dcalhoun
Copy link
Member Author

Hey @geriux. 👋🏻 There is one known issue referenced in the PR description, but I wanted to seek your feedback on the approach here. Also, if you have any ideas on known issue let me know. 😬😄 Thanks!

@dcalhoun
Copy link
Member Author

dcalhoun commented Feb 27, 2023

For the known issue, it appears the logic clearing block selection does dispatch CLEAR_SELECTED_BLOCK, but for whatever reason that is not received by the store extending logic in this PR. Clicking elsewhere does cause the dispatched event to arrive to the store extending logic.

Additionally, I attempted to leverage the clearBlockSelection settings to prevent removing selection from the sole block. However, the setting value is stale/incorrect only when clicking in this space between the title and block toolbar.

It is like this space is a "twilight zone." 😄 Not sure what is going on.

@geriux
Copy link
Member

geriux commented Feb 27, 2023

There is one known issue. On iOS, tapping in-between the block toolbar and the post title clears the block selection, but the sidebar toggle button remains erroneously displayed. This does not occur for Android. This can be seen at the end of the screencast below.

One thing that noticed from this comment was the mention of the post title and then I realized from testing and seeing the demo video that the Post title and the (+) Button are there.

I guess something changed in Gutenberg Web and how it loads the editor but it looks like other things we have for the UBE are not working correctly, like the CSS rules to hide the Post title, (+) button, etc.

Maybe if we check why that's not working it could solve the issue you mentioned about the post title clearing the selection, what do you think?

I looked for an older screenshot of the UBE and this is what it looked like:

Screenshot 2023-02-27 at 13 10 17

As you can see only the toolbar and the block are visible.

@dcalhoun
Copy link
Member Author

dcalhoun commented Feb 27, 2023

One thing that noticed from this comment was the mention of the post title and then I realized from testing and seeing the demo video that the Post title and the (+) Button are there.

Yes, I noticed the same and investigated it a bit.

Maybe if we check why that's not working it could solve the issue you mentioned about the post title clearing the selection, what do you think?

I had considered them separate issues, but you are right that solving #47966 might have an impact on the clear selected block issue. I'll look into it more. 👀

@geriux
Copy link
Member

geriux commented Feb 27, 2023

Yes, I noticed the same and investigated it a bit.

Ohh I missed that issue, thanks for sharing the link 😃

I had considered them separate issues, but you are right that solving #47966 might have an impact on the clear selected block issue. I'll look into it more. 👀

I wonder if we could use the iFrame's address to render the content in the UBE directly 🤔 I haven't tested this but maybe it could be a possible fix if trying to inject content within the iframe becomes difficult.

@geriux
Copy link
Member

geriux commented Feb 27, 2023

I wonder if we could use the iFrame's address to render the content in the UBE directly 🤔 I haven't tested this but maybe it could be a possible fix if trying to inject content within the iframe becomes difficult.

Nevermind, it is setting the editor's content using srcdoc instead of an URL 😅

The editor canvas now relies upon an iframe. It is not possible to style
elements within an iframe from the parent context. This copies the
styles from the parent conext to the iframe.

Additionally, the logic selecting the first block also failed due to the
block not existing when it was invoked. This relocates that logic until
after the iframe is ready.
On Android, there were times where the iframe was present, but the
nested window was not yet ready.
Append the styles to the `document` element, as React will remove the
mutation to the `head` element.
@@ -327,16 +327,16 @@ private void injectCssScript() {
mWebView.evaluateJavascript(injectCssScript, message -> {
if (message != null) {
String editorStyle = getFileContentFromAssets("gutenberg-web-single-block/editor-style-overrides.css");
editorStyle = removeWhiteSpace(removeNewLines(editorStyle));
Copy link
Member Author

@dcalhoun dcalhoun Feb 28, 2023

Choose a reason for hiding this comment

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

This rudimentary stripping of whitespace inadvertently modifies the CSS selectors, causing them to be interpreted as completely different selectors. E.g. .ancestor .descendent is different from .sibling-1.sibling-2. Ideally, a proper CSS minification is utilized long term.

// Setup the editor with the inserted block.
const post = window.wp.data.select( 'core/editor' ).getCurrentPost();
window.wp.data
.dispatch( 'core/editor' )
.setupEditor( post, { content: blockHTML } );

// Select the first block.
const clientId = blockEditorSelect.getBlocks()[ 0 ].clientId;
Copy link
Member Author

Choose a reason for hiding this comment

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

This often threw an error where the first block was undefined. This logic was relocated to editor-behavior-overrides to await the iframe render.

Comment on lines +126 to +129
// The editor-canvas iframe relies upon `srcdoc`, which does not trigger a
// `load` event. Thus, we must poll for the iframe to be ready.
let overrideAttempts = 0;
const overrideInterval = setInterval( () => {
Copy link
Member Author

Choose a reason for hiding this comment

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

I explored a few different approaches for awaiting the iframe render. Unfortunately, none of them succeeded.

  • iframe.onload does not work when the iframe uses srcdoc instead of src.
  • Awaiting a "ready Gutenberg" via subscribing to the store runs before the iframe renders.

Comment on lines +148 to +150
// Append to document rather than the head, as React will remove this
// mutation.
canvasIframe.contentDocument.documentElement.appendChild(
Copy link
Member Author

Choose a reason for hiding this comment

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

The iframe implementation "manages" the head element. So, we must avoid mutating that element, otherwise React may remove any changes we make.

@dcalhoun
Copy link
Member Author

👋🏻 @geriux. I updated this PR to address the missing styles hiding the unrelated editor UI. Unfortunately, doing so did not resolve the issue where tapping certain areas of the do not properly trigger a CLEAR_SELECTED_BLOCK action and toggle the sidebar button.

That said, while I am not too proud of the implementation presented in this PR, I am wondering it makes sense to land this in a beta fix for the time being. It improves the UX a good bit IMO and we are approach the app release. If desired, we could iterate further on the implementation at a future time.

For future iterations, there are a lot of oddities that occur due to the new iframe. It is a bit of a "dance" to get the UBE functioning as we expect. It may be worthwhile to push again for a first-party mechanism for rendering a single block with a streamlined interface to support it that doesn't involve overriding existing styles and scripts.

@geriux
Copy link
Member

geriux commented Feb 28, 2023

That said, while I am not too proud of the implementation presented in this PR, I am wondering it makes sense to land this in a beta fix for the time being. It improves the UX a good bit IMO and we are approach the app release. If desired, we could iterate further on the implementation at a future time.

I agree we should land this for now and see what we do afterward, I'll focus on reviewing and testing today, thanks!

For future iterations, there are a lot of oddities that occur due to the new iframe. It is a bit of a "dance" to get the UBE functioning as we expect. It may be worthwhile to push again for a first-party mechanism for rendering a single block with a streamlined interface to support it that doesn't involve overriding existing styles and scripts.

I was thinking maybe we could add a flag so it doesn't load the iFrame for the UBE, I saw this PR so maybe we could do the same.

@dcalhoun
Copy link
Member Author

I agree we should land this for now and see what we do afterward, I'll focus on reviewing and testing today, thanks!

Great — thanks!

I was thinking maybe we could add a flag so it doesn't load the iFrame for the UBE, I saw this PR so maybe we could do the same.

Possibly. I did see the flag as well. However, It seems the iframe initiative is being done for very specific reasons, some of which are outlined in more detail in #20797. While not all the reasons may be relevant for the UBE, some of them may be relevant. E.g. avoiding leaked admin styles overriding theme styles in the editor. So, I am unsure if disabling the iframe is a good long-term solution or if the flag will even be available long term.

Copy link
Member

@geriux geriux left a comment

Choose a reason for hiding this comment

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

LGTM! 🚀 Nice work and thanks for working on a fix so quickly 👏

The new code and organization changes make sense to me, I also tested this on both iOS and Android, and I shared what I tested over this comment in Gutenberg mobile.

@dcalhoun dcalhoun merged commit aefb9c8 into trunk Mar 1, 2023
@dcalhoun dcalhoun deleted the fix/enable-access-to-block-settings-within-ube branch March 1, 2023 15:00
@github-actions github-actions bot added this to the Gutenberg 15.3 milestone Mar 1, 2023
dcalhoun added a commit that referenced this pull request Mar 1, 2023
* fix: Enable access to block settings within UBE

The "Show more settings" menu item is no longer included in the block
toolbar after #46709 merged. Rather than relying upon that menu item,
this conditionally displays the sidebar toggle button whenever a block
is selected.

* fix: Disable white space stripping that breaks nested CSS selectors

CSS selectors rely upon a single white space between selectors to
represent an ancestor relationship. Globally removing white space in the
stylesheet breaks this functionality, as it transforms the selector to
target a single element with all the selectors.

The white space stripping should likely be replaced with a proper CSS
minification long term.

* fix: Hide block actions unrelated to editing a single block

Hide the entire "block settings" drop-down menu now that we no longer
rely upon it to access the "Show more settings" menu option that was
removed entirely.

* refactor: Relocate script toggling block settings visibility

This relates more to editor behavior than the post content.

* fix: Apply styles and script to editor canvas iframe

The editor canvas now relies upon an iframe. It is not possible to style
elements within an iframe from the parent context. This copies the
styles from the parent conext to the iframe.

Additionally, the logic selecting the first block also failed due to the
block not existing when it was invoked. This relocates that logic until
after the iframe is ready.

* fix: Expand conditional checks for partial DOM trees

On Android, there were times where the iframe was present, but the
nested window was not yet ready.

* refactor: Rename for brevity

* fix: Avoid React removing appended iframe styles

Append the styles to the `document` element, as React will remove the
mutation to the `head` element.

* docs: Add change log entry
geriux pushed a commit that referenced this pull request Mar 2, 2023
* Release script: Update react-native-editor version to 1.89.0

* Release script: Update with changes from 'npm run core preios'

* Mobile - Update changelog

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

* Release script: Update with changes from 'npm run core preios'

* fix: Enable access to block settings within UBE (#48435)

* fix: Enable access to block settings within UBE

The "Show more settings" menu item is no longer included in the block
toolbar after #46709 merged. Rather than relying upon that menu item,
this conditionally displays the sidebar toggle button whenever a block
is selected.

* fix: Disable white space stripping that breaks nested CSS selectors

CSS selectors rely upon a single white space between selectors to
represent an ancestor relationship. Globally removing white space in the
stylesheet breaks this functionality, as it transforms the selector to
target a single element with all the selectors.

The white space stripping should likely be replaced with a proper CSS
minification long term.

* fix: Hide block actions unrelated to editing a single block

Hide the entire "block settings" drop-down menu now that we no longer
rely upon it to access the "Show more settings" menu option that was
removed entirely.

* refactor: Relocate script toggling block settings visibility

This relates more to editor behavior than the post content.

* fix: Apply styles and script to editor canvas iframe

The editor canvas now relies upon an iframe. It is not possible to style
elements within an iframe from the parent context. This copies the
styles from the parent conext to the iframe.

Additionally, the logic selecting the first block also failed due to the
block not existing when it was invoked. This relocates that logic until
after the iframe is ready.

* fix: Expand conditional checks for partial DOM trees

On Android, there were times where the iframe was present, but the
nested window was not yet ready.

* refactor: Rename for brevity

* fix: Avoid React removing appended iframe styles

Append the styles to the `document` element, as React will remove the
mutation to the `head` element.

* docs: Add change log entry

---------

Co-authored-by: Gerardo <gerardo.pacheco@automattic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Mobile App - Automation Label used to initiate Mobile App PR Automation Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Type] Regression Related to a regression in the latest release
Projects
None yet
2 participants