Admin toolbar navigation accessibility
Maintainer thường phản hồi trong vòng 3 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 52/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- angular, html, typescript
- Lĩnh vực
- accessibility, frontend
Hướng nghiên cứu
Locate the admin navigation component by searching the Angular app for admin-sidebar; the issue provides rendered markup but no source file or test path. Read how the sidebar renders expandable sections and handles keyboard focus, then verify the behavior with keyboard navigation and VoiceOver. Done means screen readers and keyboard users can navigate the links and toggle sections without skipped items or a focus loop.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
@lgeggleston
Submitted on behalf of University of Virginia (UVA) Library’s Assessment, Communications, and User Experience (ACE) team as part of internal DSpace 9 accessibility audit.
Issue 1 of 3: Admin Navigation for Screen Readers
Describe the bug
The left-hand admin navigation bar is not fully usable with Voice Over (screen reader). The dropdowns are not functional with voice over key commands, resulting in an unusable interface for screen reader users.
Page
General Alerts and Sitewide Issues
WCAG Guideline
WCAG 2.1.1, 2.4.3, 4.1.2, 1.3.1
To Reproduce
Located in Admin Menu Bar.
Relevant code
Start of code snippet:
\<nav \_ngcontent-dspace-angular-c1031589132="" id="admin-sidebar" class="navbar navbar-dark p-0 vh-100 ng-trigger ng-trigger-slideSidebar ng-tns-c1031589132-4 collapsed ng-star-inserted" aria-label="Admin navigation bar" style="max-width: 55px;"\>\<div \_ngcontent-dspace-angular-c1031589132="" id="sidebar-header-container" aria-hidden="true" class=
Expected behavior
The admin navigation bar is not navigable or operable for screen reader users. The voice over navigation issues are occurring due to inconsistent semantics and poorly used ARIA roles. The role="menubar" on the container forces screen readers into application menu mode, affecting navigation commands. The nested interactive elements with tabindex="0" creates two focusable elements nested inside each other: The outer <a> with tabindex="0" and the inner <span> with tabindex="0" and role="button". This creates duplicate tab stops and confuses screen readers about which element to focus. Links with href="javascript:void(0);" should be <button> elements since they trigger actions (expanding sections), not navigation. The role="menuitem" on expandable sections is not proper use; menu item roles shouldn't expand/collapse - they should either navigate or trigger actions. For expandable sections, you need <button> elements with aria-expanded. There is also a mix of role="menuitem" and actual navigation links. Some items are real links (Admin Search, Processes, etc.) and some are toggles. The inconsistent semantics confuse navigation for keyboard navigation.
For expandable sections:
\<button aria-expanded="false" aria-controls="admin-menu-section-new"\> \<i aria-hidden="true" class="fa-plus fas"\>\</i\> New \<i aria-hidden="true" class="fa-chevron-right"\>\</i\>\</button\> For navigation links: \<a href="/admin/search"\> \<i aria-hidden="true" class="fa-search fas"\>\</i\> Admin Search\</a\> Remove: role="menubar" from container role="menuitem" from all elements All nested tabindex="0" elements All href="javascript:void(0);" links Inner \<span role="button"\> elements (since we will be using semantic \<button\>).
Suggested fix / example code
The following is example code; please update for each item and check for Javascript changes. Navigation Landmark:
\<nav aria-label="Admin navigation"\> ...\</nav\> Expandable section (with toggle): \<button type="button" aria-expanded="false" aria-controls="admin-menu-section-new"\> \<i aria-hidden="true" class="fa-plus fas"\>\</i\> \<span\>New\</span\> \<i aria-hidden="true" class="fa-chevron-right"\>\</i\>\</button\> Individual Links (going to different page): \<a href="/admin/search"\> \<i aria-hidden="true" class="fa-search fas"\>\</i\> \<span\>Admin Search\</span\>\</a\> Pin Sidebar button: \<button type="button" aria-pressed="false"\> \<i aria-hidden="true" class="fa-angle-double-right"\</i\> \<span\>Pin sidebar\</span\>\</button\>
Issue 2 of 3: Admin Bar for Keyboard Navigation
Describe the bug
The admin navigation bar is not fully usable with keyboard navigation. Using the standard keyboard navigation (no VO), the focus order jumps around and skips menu items entirely.
Page
General Alerts and Sitewide Issues
WCAG Guideline
WCAG 2.1.1, 2.4.3, 4.1.2, 1.3.1
To Reproduce
Relevant code
Start of code snippet:
\<nav \_ngcontent-dspace-angular-c1031589132="" id="admin-sidebar" class="navbar navbar-dark p-0 vh-100 ng-trigger ng-trigger-slideSidebar ng-tns-c1031589132-4 collapsed ng-star-inserted" aria-label="Admin navigation bar" style="max-width: 55px;"\>\<div \_ngcontent-dspace-angular-c1031589132="" id="sidebar-header-container" aria-hidden="true" class="sidebar-full-width-container ng-tns-c1031589132-4"\>
Expected behavior
The admin navigation bar is not navigable or operable for keyboard users. The voice over navigation issues are occurring due to inconsistent semantics and poorly used ARIA roles. The role="menubar" on the container forces screen readers into application menu mode, affecting navigation commands. The nested interactive elements with tabindex="0" creates two focusable elements nested inside each other: The outer <a> with tabindex="0" and the inner <span> with tabindex="0" and role="button". This creates duplicate tab stops and confuses screen readers about which element to focus. Links with href="javascript:void(0);" should be <button> elements since they trigger actions (expanding sections), not navigation. The role="menuitem" on expandable sections is not proper use; menu item roles shouldn't expand/collapse - they should either navigate or trigger actions. For expandable sections, you need <button> elements with aria-expanded. There is also a mix of role="menuitem" and actual navigation links. Some items are real links (Admin Search, Processes, etc.) and some are toggles. The inconsistent semantics confuse navigation for keyboard navigation.
For expandable sections: \<button aria-expanded="false" aria-controls="admin-menu-section-new"\> \<i aria-hidden="true" class="fa-plus fas"\>\</i\> New \<i aria-hidden="true" class="fa-chevron-right"\>\</i\>\</button\>
For navigation links: \<a href="/admin/search"\> \<i aria-hidden="true" class="fa-search fas"\>\</i\> Admin Search\</a\>
Remove: role="menubar" from container role="menuitem" from all elements All nested tabindex="0" elements All href="javascript:void(0);" links Inner <span role="button"> elements (since we will be using semantic <button>).
Suggested fix / example code
The following is example code; please update for each item and check for Javascript changes. Navigation Landmark:
\<nav aria-label="Admin navigation"\> ...\</nav\> Expandable section (with toggle): \<button type="button" aria-expanded="false" aria-controls="admin-menu-section-new"\> \<i aria-hidden="true" class="fa-plus fas"\>\</i\> \<span\>New\</span\> \<i aria-hidden="true" class="fa-chevron-right"\>\</i\>\</button\> Individual Links (going to different page): \<a href="/admin/search"\> \<i aria-hidden="true" class="fa-search fas"\>\</i\> \<span\>Admin Search\</span\>\</a\> Pin Sidebar button: \<button type="button" aria-pressed="false"\> \<i aria-hidden="true" class="fa-angle-double-right"\>\</i\> \<span\>Pin sidebar\</span\>\</button\>
Issue 3 of 3: Admin Navigation Keyboard Trap
Describe the bug
The screen reader in Mac (VoiceOver) gets stuck in a loop when reading the page. The focus goes from skip to main content button > admin menu > window name, and gets stuck repeating window name. Including a video instead of a photo for clarity on what this looks like. This is the same issue as the main navigation bar. The admin navigation bar starts with <nav>, but then they switch to role=menubar and role=menuitem, which make VoiceOver in Safari jump to the window level. VO in Safari registers these roles as software/application type of navigation, so it automatically jumps to the window-level. Since both the admin navigation and main navigation use role=menu, VO will keep going in a loop because it's being told constantly to jump up.
Page
General Alerts and Sitewide Issues
WCAG Guideline
WCAG 2.1.2, 4.1.2, 1.3.1
To Reproduce
Located in Admin menu bar.
Relevant code
See issue 2 of 3 code block above
Expected behavior
Screen reader users cannot access the page. Removing the role="menubar" and role="menuitem" roles fully resolves the VoiceOver looping behavior. This loop occurs because VoiceOver treats these roles as desktop application menus and repeatedly jumps out of the webpage into Safari’s window-level navigation. Converting expandable items into <button aria-expanded> and leaving navigation items as standard <a> links restores correct semantics and prevents the loop.
Suggested fix / example code
See code block above, as well as code block for navigation bar.
- Ngôn ngữ chính
- TypeScript
- Star
- 180
- Fork
- 577
- Merge trung bình
- 3 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 133
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của DSpace/dspace-angular
-
Visual issues with qualdrop fieldsCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mởaffects: 10.x affects: 9.x bug component: submission Difficulty: Low help wanted ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
DSpace/dspace-angular#6412 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 3 ngày
-
accessibility affects: 10.x affects: 8.x affects: 9.x bug help wanted ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
DSpace/dspace-angular#6364 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Author browse links on item page open in a new tab, unlike other browse linksCó thể đã có người làm @jesielviana đã nhận 19 ngày trước. Đang mởaffects: main bug component: Item low priority
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
DSpace/dspace-angular#6268 · 4 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Mathjax single dollar sign delimiter configuration causes unintentional math rendering in abstractsĐang mởbug needs triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
DSpace/dspace-angular#6263 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
UI spacing regression on ds-generic-item-page-field (extra spaces around metadata values) in v10.xĐang mởaffects: 10.x affects: main bug component: Item ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
DSpace/dspace-angular#6254 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 3 ngày
Tất cả issue của DSpace/dspace-angular
Issue tương tự
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
lingdojo/kana-dojo#33286 · 1 bình luận · 5 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
friction
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 77/100
kentcdodds/kody#4499 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
hemilabs/ui-monorepo#2605 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 6 ngày
-
build.yml: macOS arm64 DMG fails, cargo missing on the macos-26 runner imageCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
getopenscreen/openscreen#1423 ·
Maintainer thường phản hồi trong vòng 1 ngày