1
0
mirror of https://github.com/django/django.git synced 2025-07-07 03:09:22 +00:00

[4.0.x] Fixed #33725 -- Made hidden quick filter in admin's navigation sidebar not focusable.

Regression in d915dd1c5809d7c2bb3679751cd5277571dcd9f7.

Follow up to 780473d75625d014cbe9b0acdea40b7a5970d5d8.

Backport of 90dcf271147693a8897f644c4c8943c5b73c02f8 from main.
This commit is contained in:
Sankalp 2022-05-20 19:51:31 +05:30 committed by Mariusz Felisiak
parent e85ed998d5
commit fe2e147846
4 changed files with 21 additions and 0 deletions

View File

@ -13,6 +13,12 @@
navLink.tabIndex = 0;
}
}
function disableNavFilterTabbing() {
document.getElementById('nav-filter').tabIndex = -1;
}
function enableNavFilterTabbing() {
document.getElementById('nav-filter').tabIndex = 0;
}
const main = document.getElementById('main');
let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
@ -21,6 +27,7 @@
}
if (navSidebarIsOpen === 'false') {
disableNavLinkTabbing();
disableNavFilterTabbing();
}
main.classList.toggle('shifted', navSidebarIsOpen === 'true');
@ -28,9 +35,11 @@
if (navSidebarIsOpen === 'true') {
navSidebarIsOpen = 'false';
disableNavLinkTabbing();
disableNavFilterTabbing();
} else {
navSidebarIsOpen = 'true';
enableNavLinkTabbing();
enableNavFilterTabbing();
}
localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
main.classList.toggle('shifted');

View File

@ -14,3 +14,6 @@ Bugfixes
* Fixed a bug in Django 4.0 that caused a crash of ``QuerySet.filter()`` on
``IsNull()`` expressions (:ticket:`33705`).
* Fixed a bug in Django 4.0 where a hidden quick filter toolbar in the admin's
navigation sidebar was focusable (:ticket:`33725`).

View File

@ -176,6 +176,7 @@ filesystems
flatpage
flatpages
Flatpages
focusable
fooapp
formatter
formatters

View File

@ -144,10 +144,14 @@ class SeleniumTests(AdminSeleniumTestCase):
self.assertEqual(toggle_button.get_attribute("aria-label"), "Toggle navigation")
for link in self.selenium.find_elements_by_css_selector("#nav-sidebar a"):
self.assertEqual(link.get_attribute("tabIndex"), "0")
filter_input = self.selenium.find_element_by_css_selector("#nav-filter")
self.assertEqual(filter_input.get_attribute("tabIndex"), "0")
toggle_button.click()
# Hidden sidebar is not reachable via keyboard navigation.
for link in self.selenium.find_elements_by_css_selector("#nav-sidebar a"):
self.assertEqual(link.get_attribute("tabIndex"), "-1")
filter_input = self.selenium.find_element_by_css_selector("#nav-filter")
self.assertEqual(filter_input.get_attribute("tabIndex"), "-1")
main_element = self.selenium.find_element_by_css_selector("#main")
self.assertNotIn("shifted", main_element.get_attribute("class").split())
@ -182,9 +186,13 @@ class SeleniumTests(AdminSeleniumTestCase):
# Hidden sidebar is not reachable via keyboard navigation.
for link in self.selenium.find_elements_by_css_selector("#nav-sidebar a"):
self.assertEqual(link.get_attribute("tabIndex"), "-1")
filter_input = self.selenium.find_element_by_css_selector("#nav-filter")
self.assertEqual(filter_input.get_attribute("tabIndex"), "-1")
toggle_button.click()
for link in self.selenium.find_elements_by_css_selector("#nav-sidebar a"):
self.assertEqual(link.get_attribute("tabIndex"), "0")
filter_input = self.selenium.find_element_by_css_selector("#nav-filter")
self.assertEqual(filter_input.get_attribute("tabIndex"), "0")
self.assertEqual(
self.selenium.execute_script(
"return localStorage.getItem('django.admin.navSidebarIsOpen')"