You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix aria.js bugs: incorrect role element problem, mobile focus problem, tippy problem (#23450)
This PR is extracted from #23346 to address some unclear (I don't
understand) code-belonging concerns.
This PR needs to be backported, otherwise the `aria.js` is too buggy in
some cases. Since there would be two minor conflicts, I will do the
backport manually.
Before: the `aria.js` is still buggy in some cases.
After: tested with AppleVoice, Android TalkBack
* Fix incorrect dropdown init code
* Fix incorrect role element (the menu role should be on the `$menu`
element, but not on the `$focusable`)
* Fix the focus-show-click-hide problem on mobile. Now the language menu
works as expected
* Fix incorrect dropdown template function setting
* Clarify the logic in aria.js
* Hide item's tippy after menu gets hidden
* Fix incorrect tippy `setProps` after `destroy`
* Fix UI lag problem when page gets redirected during menu hiding
animation with screen reader
* Improve comments
* Implement the layout proposed by #19861
<details>
https://github.com/go-gitea/gitea/blob/d74a7efb60f94a4b8e6e5f65332f94f1be31b761/web_src/js/features/aria.md?plain=1#L38-L47
</details>
$item.find('a').attr('tabindex','-1');// as above, the elements inside the dropdown menu item should not be focusable, the focus should always be on the dropdown primary element.
14
-
}
15
-
16
-
// when the menu items are loaded from AJAX requests, the items are created dynamically
// * with search input: the input is focused, and it works perfectly with aria-activedescendant pointing another sibling element.
13
+
// Dropdown has 2 different focusing behaviors
14
+
// * with search input: the input is focused, and it works with aria-activedescendant pointing another sibling element.
42
15
// * without search input (but the readonly text), the dropdown itself is focused. then the aria-activedescendant points to the element inside dropdown
16
+
// Some desktop screen readers may change the focus, but dropdown requires that the focus must be on its primary element, then they don't work well.
43
17
44
-
// expected user interactions for dropdown with aria support:
18
+
// Expected user interactions for dropdown with aria support:
45
19
// * user can use Tab to focus in the dropdown, then the dropdown menu (list) will be shown
46
20
// * user presses Tab on the focused dropdown to move focus to next sibling focusable element (but not the menu item)
47
21
// * user can use arrow key Up/Down to navigate between menu items
@@ -51,31 +25,83 @@ function attachOneDropdownAria($dropdown) {
0 commit comments