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

[Mobile] Add external link inline component #33210

Closed
wants to merge 34 commits into from

Conversation

enejb
Copy link
Contributor

@enejb enejb commented Jul 5, 2021

Description

Add inline link to an external resource in the mobile app. It replaces the current FooterMessageLink Component since it does the same thing as the external link to create consistency with the Gutenberg components code base.

How has this been tested?

  1. Open the PR on a mobile device. Start a mobile dev environment.
  2. Open the editor and add the heading block.
  3. Open the block settings notice the new inline link.

Screenshots

See Header Settings

Screen Shot 2021-07-05 at 2 30 51 PM

Image block Alt Text settings.
Screen Shot 2021-07-05 at 2 41 39 PM

Types of changes

Enhancement.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@enejb enejb added the Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) label Jul 5, 2021
@enejb enejb self-assigned this Jul 5, 2021
@enejb enejb added [Block] Heading Affects the Headings Block [Block] Image Affects the Image Block labels Jul 5, 2021
@enejb enejb requested review from SiobhyB and dcalhoun July 5, 2021 21:45
@github-actions
Copy link

github-actions bot commented Jul 5, 2021

Size Change: +24.7 kB (+2%)

Total Size: 1.28 MB

Filename Size Change
build/block-directory/index.min.js 7.09 kB +32 B (0%)
build/block-editor/index.min.js 169 kB +6.43 kB (+4%)
build/block-editor/style-rtl.css 15.8 kB +517 B (+3%)
build/block-editor/style.css 15.8 kB +524 B (+3%)
build/block-library/blocks/archives/style-rtl.css 90 B +25 B (+38%) 🚨
build/block-library/blocks/archives/style.css 90 B +25 B (+38%) 🚨
build/block-library/blocks/button/style-rtl.css 532 B +9 B (+2%)
build/block-library/blocks/button/style.css 532 B +9 B (+2%)
build/block-library/blocks/calendar/style-rtl.css 239 B +32 B (+15%) ⚠️
build/block-library/blocks/calendar/style.css 239 B +32 B (+15%) ⚠️
build/block-library/blocks/code/style-rtl.css 121 B +18 B (+17%) ⚠️
build/block-library/blocks/code/style.css 121 B +18 B (+17%) ⚠️
build/block-library/blocks/comment-template/style-rtl.css 199 B +12 B (+6%) 🔍
build/block-library/blocks/comment-template/style.css 198 B +13 B (+7%) 🔍
build/block-library/blocks/comments/editor-rtl.css 840 B +6 B (+1%)
build/block-library/blocks/comments/editor.css 839 B +7 B (+1%)
build/block-library/blocks/comments/style-rtl.css 637 B +5 B (+1%)
build/block-library/blocks/comments/style.css 636 B +6 B (+1%)
build/block-library/blocks/cover/editor-rtl.css 612 B +7 B (+1%)
build/block-library/blocks/cover/editor.css 613 B +6 B (+1%)
build/block-library/blocks/group/editor-rtl.css 394 B +57 B (+17%) ⚠️
build/block-library/blocks/group/editor.css 394 B +57 B (+17%) ⚠️
build/block-library/blocks/image/editor-rtl.css 880 B +4 B (0%)
build/block-library/blocks/image/editor.css 880 B +7 B (+1%)
build/block-library/blocks/navigation-submenu/view.min.js 0 B -423 B (removed) 🏆
build/block-library/blocks/navigation/editor-rtl.css 2.02 kB +31 B (+2%)
build/block-library/blocks/navigation/editor.css 2.03 kB +31 B (+2%)
build/block-library/blocks/navigation/style-rtl.css 2.19 kB +24 B (+1%)
build/block-library/blocks/navigation/style.css 2.18 kB +26 B (+1%)
build/block-library/blocks/paragraph/style-rtl.css 279 B +19 B (+7%) 🔍
build/block-library/blocks/paragraph/style.css 281 B +21 B (+8%) 🔍
build/block-library/blocks/post-comments-form/style-rtl.css 501 B +8 B (+2%)
build/block-library/blocks/post-comments-form/style.css 501 B +8 B (+2%)
build/block-library/blocks/post-featured-image/editor-rtl.css 586 B +39 B (+7%) 🔍
build/block-library/blocks/post-featured-image/editor.css 584 B +39 B (+7%) 🔍
build/block-library/blocks/post-terms/style-rtl.css 96 B +23 B (+32%) 🚨
build/block-library/blocks/post-terms/style.css 96 B +23 B (+32%) 🚨
build/block-library/blocks/site-logo/editor-rtl.css 490 B +2 B (0%)
build/block-library/blocks/site-logo/editor.css 490 B +2 B (0%)
build/block-library/blocks/site-title/editor-rtl.css 116 B +32 B (+38%) 🚨
build/block-library/blocks/site-title/editor.css 116 B +32 B (+38%) 🚨
build/block-library/blocks/tag-cloud/style-rtl.css 251 B +12 B (+5%) 🔍
build/block-library/blocks/tag-cloud/style.css 253 B +14 B (+6%) 🔍
build/block-library/blocks/video/editor-rtl.css 691 B +130 B (+23%) 🚨
build/block-library/blocks/video/editor.css 694 B +131 B (+23%) 🚨
build/block-library/editor-rtl.css 11.2 kB +149 B (+1%)
build/block-library/editor.css 11.2 kB +150 B (+1%)
build/block-library/index.min.js 192 kB +2.65 kB (+1%)
build/block-library/style-rtl.css 12.3 kB +99 B (+1%)
build/block-library/style.css 12.3 kB +103 B (+1%)
build/block-serialization-default-parser/index.min.js 1.12 kB +18 B (+2%)
build/block-serialization-spec-parser/index.min.js 2.83 kB +2 B (0%)
build/blocks/index.min.js 49.9 kB +311 B (+1%)
build/components/index.min.js 203 kB +4.88 kB (+2%)
build/components/style-rtl.css 11.3 kB -171 B (-1%)
build/components/style.css 11.3 kB -179 B (-2%)
build/compose/index.min.js 12.2 kB +234 B (+2%)
build/core-data/index.min.js 15.5 kB +11 B (0%)
build/customize-widgets/index.min.js 11.3 kB -3 B (0%)
build/customize-widgets/style-rtl.css 1.38 kB +5 B (0%)
build/customize-widgets/style.css 1.38 kB +5 B (0%)
build/data/index.min.js 8.08 kB +17 B (0%)
build/edit-navigation/index.min.js 16.1 kB +136 B (+1%)
build/edit-post/index.min.js 34.1 kB +3.43 kB (+11%) ⚠️
build/edit-post/style-rtl.css 7.33 kB +391 B (+6%) 🔍
build/edit-post/style.css 7.32 kB +382 B (+6%) 🔍
build/edit-site/index.min.js 57.9 kB +181 B (0%)
build/edit-site/style-rtl.css 8.37 kB +73 B (+1%)
build/edit-site/style.css 8.35 kB +72 B (+1%)
build/edit-widgets/index.min.js 16.7 kB +134 B (+1%)
build/editor/index.min.js 43.6 kB +1.92 kB (+5%) 🔍
build/editor/style-rtl.css 3.6 kB -64 B (-2%)
build/editor/style.css 3.59 kB -65 B (-2%)
build/element/index.min.js 4.68 kB +1 B (0%)
build/format-library/index.min.js 6.95 kB +183 B (+3%)
build/keyboard-shortcuts/index.min.js 1.78 kB +1 B (0%)
build/keycodes/index.min.js 1.83 kB +20 B (+1%)
build/list-reusable-blocks/index.min.js 2.13 kB +389 B (+22%) 🚨
build/notices/index.min.js 963 B +10 B (+1%)
build/nux/index.min.js 2.06 kB +10 B (0%)
build/preferences-persistence/index.min.js 2.22 kB +2 B (0%)
build/preferences/index.min.js 1.33 kB +29 B (+2%)
build/primitives/index.min.js 944 B +11 B (+1%)
build/priority-queue/index.min.js 1.58 kB +973 B (+159%) 🆘
build/rich-text/index.min.js 10.6 kB +44 B (0%)
build/server-side-render/index.min.js 1.77 kB +162 B (+10%) ⚠️
build/style-engine/index.min.js 1.48 kB -46 B (-3%)
build/url/index.min.js 3.61 kB +3 B (0%)
build/vendors/react-dom.min.js 38.5 kB -23 B (0%)
build/viewport/index.min.js 1.08 kB -8 B (-1%)
build/widgets/index.min.js 7.21 kB +26 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 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 126 B
build/block-library/blocks/audio/theme.css 126 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 84 B
build/block-library/blocks/avatar/style.css 84 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 482 B
build/block-library/blocks/button/editor.css 482 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/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/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/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/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.55 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 126 B
build/block-library/blocks/embed/theme.css 126 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 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 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 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 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 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 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 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 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 363 B
build/block-library/blocks/page-list/editor.css 363 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/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-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 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/style-rtl.css 315 B
build/block-library/blocks/post-featured-image/style.css 315 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-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 282 B
build/block-library/blocks/query-pagination/style.css 278 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 439 B
build/block-library/blocks/query/editor.css 439 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 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 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 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 464 B
build/block-library/blocks/shortcode/editor.css 464 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/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 322 B
build/block-library/blocks/spacer/editor.css 322 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 190 B
build/block-library/blocks/table/theme.css 190 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 162 B
build/block-library/classic.css 162 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
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/theme-rtl.css 719 B
build/block-library/theme.css 722 B
build/data-controls/index.min.js 653 B
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/escape-html/index.min.js 537 B
build/experiments/index.min.js 868 B
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/react-i18n/index.min.js 696 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.74 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/shortcode/index.min.js 1.53 kB
build/token-list/index.min.js 644 B
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react.min.js 4.34 kB
build/warning/index.min.js 268 B
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

Copy link
Member

@dcalhoun dcalhoun left a comment

Choose a reason for hiding this comment

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

Thank you for putting this together! From a visual standpoint, this looks good to me. I tested on an iPhone 12 mini Simulator and Samsung Galaxy S20. Removing FooterMessageLink is also a really good idea IMO.

I left several comments regarding accessibility concerns. I do understand some of them preexisted, so if you would like to ship this visual fix as-is with the accessibility issues, I understand and support that. However, we should at least create a new issue for the accessibility issues if they do not already exist. WDYT?

If you would prefer me to create the new issues, just let me know and I can. Full transparency — it'll probably be a few days until I find the time to create them.

Copy link
Contributor

@SiobhyB SiobhyB left a comment

Choose a reason for hiding this comment

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

Thank you for looping me in here @enejb! I hadn't spotted the <ExternalLink> component and agree it makes a lot more sense to re-use it vs. the <FooterMessageLink> component.

I tested on a Pixel 3 emulator and confirm that everything looks good visually to me. I was able to replicate the Object Object screenreader problem that @dcalhoun reported, however. Let me know if you'd like me to create the GitHub issue for that, as I appreciate it was ultimately me that introduced that bug with the way I set up the <FooterMessageLink> component.

The only additional suggestion I had was around expanding on the current README for ExternalLink. That's a very small suggestion, but may be useful for clarity and might help to make the component more discoverable for folks quickly browsing through.

Copy link
Contributor

@SiobhyB SiobhyB left a comment

Choose a reason for hiding this comment

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

Circling back to make sure I "approve" this following the changes. LGTM. :) 🙇

@enejb enejb force-pushed the rn/add/external-link-inline branch from d9a4fb4 to 0ad0f01 Compare August 20, 2021 22:37
@enejb enejb changed the title Rn/add/external link inline [Mobile] Add external link inline component Sep 6, 2021
@SiobhyB
Copy link
Contributor

SiobhyB commented Sep 16, 2022

I've gone ahead to update this branch and made some tweaks to resolve errors against trunk. I believe all concerns related to screen reader compatibility have now been resolved, with VoiceOver correctly reading all text using the updated component in my testing. If there are any further accessibility concerns I'm missing, I'd be happy to create a separate GitHub issue.

A noteworthy change is that I updated the LinkSettings component to use the new HelpText component, rather than FooterMessageControl. This was to account for the fact that FooterMessageLink was being used in embed-link-settings.native.js. I've taken before vs. after screenshots of the two screens this change impacts, to verify that it doesn't result in a UI change.

Social Icons Link Setting ⤵
Before After
Empty Embed Block's Link Setting ⤵
Before After

@dcalhoun, I've gone ahead to request your reviews due to your previous involvement on this PR, but let me know if you're not available or if you'd rather someone else take the review. Thanks! 🙇‍♀️

@dcalhoun
Copy link
Member

@dcalhoun, I've gone ahead to request your reviews due to your previous involvement on this PR, but let me know if you're not available or if you'd rather someone else take the review. Thanks! 🙇‍♀️

Hey @SiobhyB. 👋🏻 I have begun reviewing this again, but I will likely need a week or more to complete my review as I will be AFK for a bit. I plan to follow up middle of next week, but feel free to seek other help if you'd prefer.

@SiobhyB
Copy link
Contributor

SiobhyB commented Sep 23, 2022

I have begun reviewing this again, but I will likely need a week or more to complete my review as I will be AFK for a bit. I plan to follow up middle of next week, but feel free to seek other help if you'd prefer.

Thank you, David! That sounds good, I don't think there's an urgency to this PR. 🙇‍♀️

Copy link
Member

@dcalhoun dcalhoun left a comment

Choose a reason for hiding this comment

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

Hey @SiobhyB. 👋🏻 I appreciate your patience. Returning to this PR was challenging to regain the context required to provide (hopefully) valuable feedback.

Add inline link to an external resource in the mobile app. It replaces the current FooterMessageLink Component since it does the same thing as the external link to create consistency with the Gutenberg components code base.

My review is quite long. I hope it is not overwhelming. I felt this type of refactor introducing new paradigms to the code base was worthy of a long look. The scope of this PR seems to have grown past the original goal of replacing FooterMessageLink with an external link component, presumably to address the accessibility label issues.

Some comments call out specific issues we should address before merging. However, other of the comments are pretty open-ended. As mentioned in those opened-ended comments, it is fine if we'd prefer to move forward with the current approach instead.

Thanks!

onPress={ () => Linking.openURL( href ) }
accessibilityLabel={ __( 'Open link in a browser' ) }
accessibilityLabel={ children }
Copy link
Member

Choose a reason for hiding this comment

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

To avoid future a11y label issues, it may be worth throwing an error in this component if typeof children !== 'string'. WDYT?

Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed that's a good idea, I've added an error message in 8d4d17e.

Comment on lines +90 to +103
isWeb && (
<>
{ __(
'Enter a word or two — without spaces — to make a unique web address just for this block, called an “anchor.” Then, you’ll be able to link directly to this section of your page.'
) }
<ExternalLink
href={
'https://wordpress.org/support/article/page-jumps/'
}
>
{ __( 'Learn more about anchors' ) }
</ExternalLink>
</>
)
Copy link
Member

Choose a reason for hiding this comment

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

🤔 This comment is quite broad and provides more questions than solutions. I understand if we'd prefer to move forward without addressing this.


Here the web now relies upon passing help to a robust, composable TextControlBaseControl component that manages help text and links; native now relies upon HelpText composed further along in this hook file rather than the previous approach of passing help down to TextControlCell.

While native's Cell is quite complex and overly far-reaching — it is quite different from the web's composable approach in BaseControl and likely not the best abstraction long term — I am hesitant move the help text from TextControlCell to inline HelpText in this hook as it further diverges web and native component design, which is unfortunate.

My interpretation for the rationale of this change is that we cannot pass a multiple children types — string and interactive link — on native. Doing so leads to the Object Object accessibility (a11y) label issue. My hope is that we could identify a way to address the a11y label issue while also avoiding the divergence from web's help property here.

An example of a possible approach might involve flattening help props rather than introducing the HelpText component. The flattened help prop could be used for a11y labels, the original help prop could be rendered as normal for visible UI. Note: I didn't test any performance of such code.

const helpPropExample = (
  <>
    A top-level sentence.{" "}
    <ExternalLink href={"https://wordpress.org/support/article/page-jumps/"}>
      A nested link
    </ExternalLink>
  </>
);

function flattenElementToString(reactElement = "") {
  if (!reactElement) {
    return;
  }
  const children = reactElement.props?.children || reactElement;

  if (Array.isArray(children)) {
    return children.reduce(
      (acc, child) => acc + flattenElementsToString(child),
      ""
    );
  } else if (React.isValidElement(children)) {
    return flattenElementsToString(children);
  }

  return children;
}

const flatHelpPropExample = flattenElementToString(helpPropExample);
console.log(">>>", flatHelpPropExample); // >>> A top-level sentence. A nested link

<Text accessibilityLabel={flatHelpPropExample}>{helpPropExample}</Text>;

Comment on lines -38 to +37
footer: {
label: (
<FooterMessageLink
href={ __(
'https://wordpress.org/support/article/embeds/'
) }
value={ __( 'Learn more about embeds' ) }
/>
),
help: {
url: __( 'https://wordpress.org/support/article/embeds/' ),
moreLinkText: __( 'Learn more about embeds' ),
Copy link
Member

@dcalhoun dcalhoun Oct 20, 2022

Choose a reason for hiding this comment

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

🤔 This comment is quite broad and provides more questions than solutions. I understand if we'd prefer to move forward without addressing this.


The replacement of the composable approach with a prop-driven approach is less than ideal IMO. I.e. the ability to pass React elements means we have more optionality in regards to what we pass without defining additional props. The prop-driven approach limits us to a very specific composition defined within HelpText.

For this specific example of help, this ultimate uses HelpText, but only passes props for a "more link." So, in reality, this only needs to render an ExternalLink, not an entire HelpText. This unnecessary complexity is less than ideal IMO.

My understanding for the rationale for this change is similar to my previous comment, it is difficult to pass both a string and a interactive link and not run into accessibility label issues.


## Props

The text that's displayed within the component's tags will be "clickable" and extenal link will be added at the end.
Copy link
Member

Choose a reason for hiding this comment

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

This statement feels out of place underneath the heading of "Props." Was this intended to be a description of the children prop?

Also, I believe this only to be true on native, as it currently applies an onPress to a wrapping Text element. The web version merely renders the child text. I wonder if we can better describe this.

packages/components/src/help-text/README.md Outdated Show resolved Hide resolved
Comment on lines +41 to +45
onPress={ () => {
AccessibilityInfo.isScreenReaderEnabled().then(
( enabled ) => enabled && Linking.openURL( url )
);
} }
Copy link
Member

Choose a reason for hiding this comment

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

Similar to accessibilityRole and accessibilityHint, I wonder if this should be conditionally set if there is a url defined.

onPress={ url ? () => { /* [...] */ } : undefined }

Comment on lines 49 to 50
{ children && url && ' ' }
{ url && (
Copy link
Member

Choose a reason for hiding this comment

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

To avoid the possibility of a link without text, I wonder if we should create a compound conditional for all checks of url in this file. E.g.:

const hasMoreLink = url && moreLinkText
// [...]
{ children && hasMoreLink && ' ' }
{ hasMoreLink && ( /* [...] */ ) }

Copy link
Contributor

Choose a reason for hiding this comment

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

I appreciate that thought, gone ahead to implement your suggestion in 8ee995c.

packages/components/src/index.native.js Show resolved Hide resolved
Comment on lines +37 to +40
accessibilityRole={ url ? 'link' : 'text' }
accessibilityHint={
url ? __( 'Opens link in a browser' ) : null
}
Copy link
Member

Choose a reason for hiding this comment

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

This combination of props along with the children text appear to work for iOS. However, it does not appear to read any label loud for Android.

From testing briefly, a quick fix is adding accessibilityLabel={ moreLinkText }. It causes the moreLinkText to be read for both platforms. Unfortunately, it no longer reads the entire help text aloud on iOS.

Using something like accessibilityLabel={ children + moreLinkText } is not possible as it reads aloud "Object Object," presumably because of translation string methods used: __().

Comment on lines +34 to 41
help={
<>
{ __( 'A footer note to add to the component! ' ) }
<FooterMessageLink
href={ 'https://wordpress.org/' }
value={ __( 'Visit WordPress.org' ) }
/>
<ExternalLink href={ 'https://wordpress.org/' } >
{ __( 'Visit WordPress.org' ) }
</ExternalLink>
</>
}
Copy link
Member

Choose a reason for hiding this comment

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

While the original "Object Object" a11y label issue appears to be resolved in the app, I believe example offered here would still result in a problematic a11y label. We likely need to replace the example showcasing an inline link with the usage of HelpText showcased in the changes this PR makes to the Image edit component or change the entire architecture of this PRs approach to composing help texts with links.

SiobhyB and others added 6 commits November 2, 2022 11:49
Co-authored-by: David Calhoun <438664+dcalhoun@users.noreply.github.com>
Co-authored-by: David Calhoun <438664+dcalhoun@users.noreply.github.com>
Co-authored-by: David Calhoun <438664+dcalhoun@users.noreply.github.com>
A conditional has been created to check that s link has text associated with it before rendering.
@SiobhyB
Copy link
Contributor

SiobhyB commented Nov 2, 2022

@dcalhoun, thank you, I really appreciate the thorough review and thoughtfulness you put into ensuring quality. 🙇‍♀️ I plan to address all of your comments, but likely won't be able to get to them all until after our upcoming meetup. I know you're going to be AFK at that point, so wanted to note here that I'll aim to find someone else to do another review after working through all the points. Thanks again for your help so far!

@SiobhyB
Copy link
Contributor

SiobhyB commented Nov 16, 2023

@dcalhoun, @enejb, this is a backlog item that I never managed to prioritise again, since my last activity a year ago. Weighing up some of the hesitation around the changes and the fact that we haven't actively sought to prioritise this since June, 2021, I'm thinking of closing this PR. What are your thoughts? If we agree, I'd plan to review the accessibility improvements and spin them out into a separate PR.

@dcalhoun
Copy link
Member

[...] I'm thinking of closing this PR. What are your thoughts? If we agree, I'd plan to review the accessibility improvements and spin them out into a separate PR.

My concern regarding composition and alignment with the web, unused code, and lingering accessibility issues remain for me. So, closing the PR and focusing on a subset of the changes is sensible from my perspective.

If needed in the future, we could always reopen the PR.

@SiobhyB
Copy link
Contributor

SiobhyB commented Nov 24, 2023

Thank you, @dcalhoun! I'll go ahead to close this and review the subset of changes we can keep as part of my planned maintenance week next week.

@SiobhyB SiobhyB closed this Nov 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Heading Affects the Headings Block [Block] Image Affects the Image Block Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants