summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSankalp <sankalp123427@gmail.com>2022-05-20 19:51:31 +0530
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-05-21 14:38:53 +0200
commitfe2e1478464846638082219c933a4302e5cf3037 (patch)
tree1d37d42e6a988f0fefd28160ff88c39ec4ab3c7b
parente85ed998d55035b21c37dc4693be3ed94371c8e8 (diff)
downloaddjango-fe2e1478464846638082219c933a4302e5cf3037.tar.gz
[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.
-rw-r--r--django/contrib/admin/static/admin/js/nav_sidebar.js9
-rw-r--r--docs/releases/4.0.5.txt3
-rw-r--r--docs/spelling_wordlist1
-rw-r--r--tests/admin_views/test_nav_sidebar.py8
4 files changed, 21 insertions, 0 deletions
diff --git a/django/contrib/admin/static/admin/js/nav_sidebar.js b/django/contrib/admin/static/admin/js/nav_sidebar.js
index 86cb1cf837..261a9d4992 100644
--- a/django/contrib/admin/static/admin/js/nav_sidebar.js
+++ b/django/contrib/admin/static/admin/js/nav_sidebar.js
@@ -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');
diff --git a/docs/releases/4.0.5.txt b/docs/releases/4.0.5.txt
index b626f9ef36..15461a3f54 100644
--- a/docs/releases/4.0.5.txt
+++ b/docs/releases/4.0.5.txt
@@ -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`).
diff --git a/docs/spelling_wordlist b/docs/spelling_wordlist
index 151d56ae8c..fac3aaf225 100644
--- a/docs/spelling_wordlist
+++ b/docs/spelling_wordlist
@@ -176,6 +176,7 @@ filesystems
flatpage
flatpages
Flatpages
+focusable
fooapp
formatter
formatters
diff --git a/tests/admin_views/test_nav_sidebar.py b/tests/admin_views/test_nav_sidebar.py
index f323bbc60c..5d39ddbf4e 100644
--- a/tests/admin_views/test_nav_sidebar.py
+++ b/tests/admin_views/test_nav_sidebar.py
@@ -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')"