WordPress / openverse-frontend

The gateway to the Openverse. Openverse is a search tool for CC-licensed and public domain content across the internet.
https://wordpress.org/openverse
MIT License
72 stars 64 forks source link

Move the sidebar in the DOM order #2185

Closed obulat closed 1 year ago

obulat commented 1 year ago

Fixes

Fixes #2125 by @obulat Fixes #2182 by @obulat

Description

This PR moves the sidebar in the DOM order to the position right after the header. Then, using CSS grid, the visual order is changed back to "sidebar on the right". This way, the focus order for keyboard users and for screenreader users is Header -> Filters sidebar -> Main -> Footer.

Normally, using CSS to change the DOM order is bad, but in the case of the search page layout, this actually converts the DOM order into the expected one.

Previously, we used code to manually handle focus after "Tab"/"Shift+Tab" presses on "Filters" button and the last tabbable element in the sidebar and main content. However, this only worked for the keyboard navigation, and not the screenreader navigation. This PR allows us to remove the manual focus management code.

Changes in the tabbing order

Before

Screenshot 2023-02-15 at 8 58 34 AM

After LTR

Screenshot 2023-02-15 at 9 07 03 AM

After RTL

Screenshot 2023-02-15 at 5 30 23 PM

Testing Instructions

Open the search page. Move focus using your keyboard "Tab" key: after the Filters

Checklist

[best_practices]: https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines

Developer Certificate of Origin

Developer Certificate of Origin ``` Developer Certificate of Origin Version 1.1 Copyright (C) 2004, 2006 The Linux Foundation and its contributors. 1 Letterman Drive Suite D4700 San Francisco, CA, 94129 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. ```
github-actions[bot] commented 1 year ago

Storybook and Tailwind configuration previews: Ready

Storybook: https://wordpress.github.io/openverse-frontend/_preview/2185 Tailwind: https://wordpress.github.io/openverse-frontend/_preview/2185/tailwind

Please note that GitHub pages takes a little time to deploy newly pushed code, if the links above don't work or you see old versions, wait 5 minutes and try again.

You can check the GitHub pages deployment action list to see the current status of the deployments.

github-actions[bot] commented 1 year ago

Size Change: -2.21 kB (0%)

Total Size: 879 kB

Filename Size Change
./.nuxt/dist/client/app.js 141 kB -354 B (0%)
./.nuxt/dist/client/app.modern.js 116 kB -396 B (0%)
./.nuxt/dist/client/commons/app.js 87.7 kB +12 B (0%)
./.nuxt/dist/client/commons/app.modern.js 78.1 kB +14 B (0%)
./.nuxt/dist/client/components/v-all-results-grid.js 7.46 kB -75 B (-1%)
./.nuxt/dist/client/components/v-all-results-grid.modern.js 4.96 kB -98 B (-2%)
./.nuxt/dist/client/components/v-external-search-form.js 1.91 kB -155 B (-8%)
./.nuxt/dist/client/components/v-external-search-form.modern.js 1.9 kB -151 B (-7%)
./.nuxt/dist/client/components/v-image-grid.js 4.85 kB -76 B (-2%)
./.nuxt/dist/client/components/v-image-grid.modern.js 2.39 kB -74 B (-3%)
./.nuxt/dist/client/components/v-related-images.modern.js 2.95 kB -79 B (-3%)
./.nuxt/dist/client/components/v-search-grid.js 5.74 kB -143 B (-2%)
./.nuxt/dist/client/components/v-search-grid.modern.js 5.66 kB -138 B (-2%)
./.nuxt/dist/client/components/v-sources-table.js 16.1 kB +27 B (0%)
./.nuxt/dist/client/components/v-sources-table.modern.js 16.1 kB +27 B (0%)
./.nuxt/dist/client/pages/image/_id/index.modern.js 7.27 kB -54 B (-1%)
./.nuxt/dist/client/pages/search.js 5.02 kB -86 B (-2%)
./.nuxt/dist/client/pages/search.modern.js 2.52 kB -90 B (-3%)
./.nuxt/dist/client/pages/search/audio.js 6.07 kB -85 B (-1%)
./.nuxt/dist/client/pages/search/audio.modern.js 3.58 kB -78 B (-2%)
./.nuxt/dist/client/pages/search/image.js 563 B -62 B (-10%) 👏
./.nuxt/dist/client/pages/search/image.modern.js 2.63 kB -112 B (-4%)
ℹ️ View Unchanged | Filename | Size | Change | | :--- | :---: | :---: | | `./.nuxt/dist/client/237.js` | 273 B | 0 B | | `./.nuxt/dist/client/237.modern.js` | 277 B | 0 B | | `./.nuxt/dist/client/238.js` | 1.85 kB | 0 B | | `./.nuxt/dist/client/components/loading-icon.js` | 746 B | 0 B | | `./.nuxt/dist/client/components/loading-icon.modern.js` | 751 B | -1 B (0%) | | `./.nuxt/dist/client/components/table-sort-icon.js` | 509 B | 0 B | | `./.nuxt/dist/client/components/table-sort-icon.modern.js` | 513 B | 0 B | | `./.nuxt/dist/client/components/v-audio-cell.js` | 388 B | 0 B | | `./.nuxt/dist/client/components/v-audio-cell.modern.js` | 392 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-audio-details.js` | 2.54 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-audio-details.modern.js` | 1.79 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-audio-track-skeleton.js` | 1.01 kB | 0 B | | `./.nuxt/dist/client/components/v-audio-track-skeleton.modern.js` | 1.02 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-audio-track.js` | 5.2 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-audio-track.modern.js` | 5.15 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-back-to-search-results-link.js` | 538 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-back-to-search-results-link.modern.js` | 542 B | 0 B | | `./.nuxt/dist/client/components/v-bone.js` | 684 B | 0 B | | `./.nuxt/dist/client/components/v-bone.modern.js` | 689 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-box-layout.js` | 1.23 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-box-layout.modern.js` | 1.23 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-content-link.js` | 1.11 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-content-link.modern.js` | 1.09 kB | -2 B (0%) | | `./.nuxt/dist/client/components/v-content-page.js` | 467 B | 0 B | | `./.nuxt/dist/client/components/v-content-page.modern.js` | 470 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-content-report-button.js` | 774 B | -4 B (-1%) | | `./.nuxt/dist/client/components/v-content-report-button.modern.js` | 783 B | 0 B | | `./.nuxt/dist/client/components/v-content-report-form.js` | 6.1 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-content-report-form.modern.js` | 3.58 kB | +3 B (0%) | | `./.nuxt/dist/client/components/v-content-report-popover.js` | 1.23 kB | 0 B | | `./.nuxt/dist/client/components/v-content-report-popover.modern.js` | 4.23 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-copy-button.js` | 3.99 kB | 0 B | | `./.nuxt/dist/client/components/v-copy-button.modern.js` | 4 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-copy-license.js` | 1 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-copy-license.modern.js` | 1 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-copy-license/components/v-error-image/components/v-media-reuse/components/v-search-grid/d219393b.js` | 9.88 kB | 0 B | | `./.nuxt/dist/client/components/v-copy-license/components/v-error-image/components/v-media-reuse/components/v-search-grid/d219393b.modern.js` | 9.86 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-dmca-notice.js` | 748 B | 0 B | | `./.nuxt/dist/client/components/v-dmca-notice.modern.js` | 753 B | 0 B | | `./.nuxt/dist/client/components/v-error-image.js` | 1.69 kB | +3 B (0%) | | `./.nuxt/dist/client/components/v-error-image.modern.js` | 1.68 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-error-section.js` | 372 B | 0 B | | `./.nuxt/dist/client/components/v-error-section.modern.js` | 374 B | 0 B | | `./.nuxt/dist/client/components/v-external-source-list.js` | 900 B | 0 B | | `./.nuxt/dist/client/components/v-external-source-list.modern.js` | 901 B | -2 B (0%) | | `./.nuxt/dist/client/components/v-full-layout.js` | 1.51 kB | 0 B | | `./.nuxt/dist/client/components/v-full-layout.modern.js` | 1.51 kB | +4 B (0%) | | `./.nuxt/dist/client/components/v-grid-skeleton.js` | 1.61 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-grid-skeleton.modern.js` | 1.62 kB | -4 B (0%) | | `./.nuxt/dist/client/components/v-home-gallery.js` | 4.79 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-home-gallery.modern.js` | 4.78 kB | 0 B | | `./.nuxt/dist/client/components/v-homepage-content.js` | 1.72 kB | +2 B (0%) | | `./.nuxt/dist/client/components/v-homepage-content.modern.js` | 1.69 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-image-carousel.js` | 4.73 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-image-carousel.modern.js` | 4.7 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-image-cell-square.js` | 1.02 kB | 0 B | | `./.nuxt/dist/client/components/v-image-cell-square.modern.js` | 1.02 kB | 0 B | | `./.nuxt/dist/client/components/v-image-cell.js` | 1.45 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-image-cell.modern.js` | 1.45 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-image-details.js` | 2.16 kB | +4 B (0%) | | `./.nuxt/dist/client/components/v-image-details.modern.js` | 1.42 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-license-tab-panel.js` | 522 B | +1 B (0%) | | `./.nuxt/dist/client/components/v-license-tab-panel.modern.js` | 525 B | +1 B (0%) | | `./.nuxt/dist/client/components/v-load-more.js` | 3.16 kB | -2 B (0%) | | `./.nuxt/dist/client/components/v-load-more.modern.js` | 683 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-media-license.js` | 818 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-media-license.modern.js` | 828 B | 0 B | | `./.nuxt/dist/client/components/v-media-reuse.js` | 1.62 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-media-reuse.modern.js` | 1.61 kB | -1 B (0%) | | `./.nuxt/dist/client/components/v-media-tag.js` | 429 B | 0 B | | `./.nuxt/dist/client/components/v-media-tag.modern.js` | 434 B | +1 B (0%) | | `./.nuxt/dist/client/components/v-modal.js` | 991 B | 0 B | | `./.nuxt/dist/client/components/v-modal.modern.js` | 981 B | 0 B | | `./.nuxt/dist/client/components/v-no-results.js` | 751 B | 0 B | | `./.nuxt/dist/client/components/v-no-results.modern.js` | 750 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-radio.js` | 1.5 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-radio.modern.js` | 1.47 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-related-audio.js` | 1.25 kB | 0 B | | `./.nuxt/dist/client/components/v-related-audio.modern.js` | 1.25 kB | -2 B (0%) | | `./.nuxt/dist/client/components/v-related-images.js` | 1.05 kB | -2 B (0%) | | `./.nuxt/dist/client/components/v-report-desc-form.js` | 967 B | +2 B (0%) | | `./.nuxt/dist/client/components/v-report-desc-form.modern.js` | 967 B | 0 B | | `./.nuxt/dist/client/components/v-row-layout.js` | 1.7 kB | 0 B | | `./.nuxt/dist/client/components/v-row-layout.modern.js` | 1.71 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-scroll-button.js` | 813 B | 0 B | | `./.nuxt/dist/client/components/v-scroll-button.modern.js` | 818 B | 0 B | | `./.nuxt/dist/client/components/v-search-results-title.js` | 594 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-search-results-title.modern.js` | 599 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-search-type-radio.js` | 795 B | 0 B | | `./.nuxt/dist/client/components/v-search-type-radio.modern.js` | 767 B | -3 B (0%) | | `./.nuxt/dist/client/components/v-server-timeout.js` | 299 B | 0 B | | `./.nuxt/dist/client/components/v-server-timeout.modern.js` | 303 B | 0 B | | `./.nuxt/dist/client/components/v-sketch-fab-viewer.js` | 3.37 kB | -2 B (0%) | | `./.nuxt/dist/client/components/v-sketch-fab-viewer.modern.js` | 893 B | -2 B (0%) | | `./.nuxt/dist/client/components/v-skip-to-content-container.js` | 889 B | +2 B (0%) | | `./.nuxt/dist/client/components/v-skip-to-content-container.modern.js` | 891 B | -1 B (0%) | | `./.nuxt/dist/client/components/v-snackbar.js` | 1.19 kB | +1 B (0%) | | `./.nuxt/dist/client/components/v-snackbar.modern.js` | 1.19 kB | -2 B (0%) | | `./.nuxt/dist/client/components/v-warning-suppressor.js` | 298 B | 0 B | | `./.nuxt/dist/client/components/v-warning-suppressor.modern.js` | 303 B | 0 B | | `./.nuxt/dist/client/pages/about.js` | 1.49 kB | +1 B (0%) | | `./.nuxt/dist/client/pages/about.modern.js` | 1.5 kB | -1 B (0%) | | `./.nuxt/dist/client/pages/audio/_id/index.js` | 7.95 kB | -4 B (0%) | | `./.nuxt/dist/client/pages/audio/_id/index.modern.js` | 4.79 kB | -2 B (0%) | | `./.nuxt/dist/client/pages/external-sources.js` | 1.51 kB | 0 B | | `./.nuxt/dist/client/pages/external-sources.modern.js` | 1.51 kB | +2 B (0%) | | `./.nuxt/dist/client/pages/feedback.js` | 1.29 kB | +1 B (0%) | | `./.nuxt/dist/client/pages/feedback.modern.js` | 1.29 kB | +1 B (0%) | | `./.nuxt/dist/client/pages/image/_id/index.js` | 9.22 kB | -2 B (0%) | | `./.nuxt/dist/client/pages/image/_id/report.js` | 3.6 kB | -1 B (0%) | | `./.nuxt/dist/client/pages/image/_id/report.modern.js` | 4.2 kB | +1 B (0%) | | `./.nuxt/dist/client/pages/index.js` | 6.84 kB | 0 B | | `./.nuxt/dist/client/pages/index.modern.js` | 6.77 kB | +3 B (0%) | | `./.nuxt/dist/client/pages/preferences.js` | 1.23 kB | -1 B (0%) | | `./.nuxt/dist/client/pages/preferences.modern.js` | 1.22 kB | -1 B (0%) | | `./.nuxt/dist/client/pages/privacy.js` | 964 B | +1 B (0%) | | `./.nuxt/dist/client/pages/privacy.modern.js` | 966 B | 0 B | | `./.nuxt/dist/client/pages/search-help.js` | 1.56 kB | -1 B (0%) | | `./.nuxt/dist/client/pages/search-help.modern.js` | 1.53 kB | 0 B | | `./.nuxt/dist/client/pages/search/index.js` | 508 B | 0 B | | `./.nuxt/dist/client/pages/search/index.modern.js` | 515 B | +1 B (0%) | | `./.nuxt/dist/client/pages/search/model-3d.js` | 242 B | 0 B | | `./.nuxt/dist/client/pages/search/model-3d.modern.js` | 246 B | 0 B | | `./.nuxt/dist/client/pages/search/search-page.types.js` | 266 B | 0 B | | `./.nuxt/dist/client/pages/search/search-page.types.modern.js` | 271 B | 0 B | | `./.nuxt/dist/client/pages/search/video.js` | 240 B | 0 B | | `./.nuxt/dist/client/pages/search/video.modern.js` | 244 B | 0 B | | `./.nuxt/dist/client/pages/sources.js` | 1.52 kB | -1 B (0%) | | `./.nuxt/dist/client/pages/sources.modern.js` | 1.52 kB | 0 B | | `./.nuxt/dist/client/runtime.js` | 2.74 kB | 0 B | | `./.nuxt/dist/client/runtime.modern.js` | 2.74 kB | 0 B | | `./.nuxt/dist/client/vendors/app.js` | 63.8 kB | +2 B (0%) | | `./.nuxt/dist/client/vendors/app.modern.js` | 62.9 kB | +6 B (0%) |

compressed-size-action

dhruvkb commented 1 year ago

@obulat how did you generate the tab-order image? Can you also share what the tab-order looks like for RTL languages?

zackkrida commented 1 year ago

@dhruvkb it's a firefox feature!

CleanShot 2023-02-15 at 09 11 33

dhruvkb commented 1 year ago

Whoa, that's awesome! In all this time of using Firefox, I never knew about this.