-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#3140 - Maintain focus after filter selection [-NL] #3533
base: main
Are you sure you want to change the base?
Conversation
🥳 Successfully deployed to developer sandbox nl. |
🥳 Successfully deployed to developer sandbox nl. |
1 similar comment
🥳 Successfully deployed to developer sandbox nl. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Works great! See comments for some code changes though, but after those are in (or otherwise discussed) I'd be glad to approve
I like your approach here
let focusedElement = document.getElementById(lastClickedFilterId); | ||
if (focusedElement) { | ||
//Focus the element | ||
focusedElement.setAttribute("tabindex", "-1"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(Q) Why is -1 added here? Isn't < a > tab-able by default?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is just another (more enforced) way of focusing the element so that you can immediately resume tabbing from it.
if (lastClickedFilterId) { | ||
let focusedElement = document.getElementById(lastClickedFilterId); | ||
if (focusedElement) { | ||
//Focus the element | ||
focusedElement.setAttribute("tabindex", "-1"); | ||
focusedElement.focus({ preventScroll: true }); | ||
|
||
// Announce focus change for screen readers | ||
announceForScreenReaders("Filter refocused on " + focusedElement.textContent); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (lastClickedFilterId) { | |
let focusedElement = document.getElementById(lastClickedFilterId); | |
if (focusedElement) { | |
//Focus the element | |
focusedElement.setAttribute("tabindex", "-1"); | |
focusedElement.focus({ preventScroll: true }); | |
// Announce focus change for screen readers | |
announceForScreenReaders("Filter refocused on " + focusedElement.textContent); | |
} | |
} | |
if (lastClickedFilterId) { | |
let focusedElement = document.getElementById(lastClickedFilterId); | |
if (focusedElement) { | |
//Focus the element | |
focusedElement.setAttribute("tabindex", "-1"); | |
focusedElement.focus({ preventScroll: true }); | |
// Announce focus change for screen readers | |
announceForScreenReaders("Filter refocused on " + focusedElement.textContent); | |
} | |
// Cleanup the filter after use | |
localStorage.removeItem("admin_filter_focus_id"); | |
} |
(optional) Rather than using an event listener, I think just adding a cleanup step right after use should be sufficient! This should be more performant. What are your thoughts?
liveRegion.style.position = "absolute"; | ||
liveRegion.style.left = "-9999px"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(blocking) Can you use class="usa-sr-only" instead?
@@ -0,0 +1,12 @@ | |||
{% load i18n %} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{% load i18n %} | |
{% comment %} Override of this file: https://github.com/django/django/blob/main/django/contrib/admin/templates/admin/filter.html {% endcomment %} | |
{% load i18n %} |
(optional / nice to have) For tracing purposes, this would be helpful! Not needed though, just a minor time saver
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Swapping over to approved since the requested changes are small! Just shoot me a message when your changes are in and I'll take a quick look, though hold off on merging before looking through it
Also worth noting that you have some merge conflicts
🥳 Successfully deployed to developer sandbox nl. |
Ticket 3140
Resolves #3140
Changes
Context for reviewers
Setup
Code Review Verification Steps
As the original developer, I have
Satisfied acceptance criteria and met development standards
Ensured code standards are met (Original Developer)
Validated user-facing changes (if applicable)
As a code reviewer, I have
Reviewed, tested, and left feedback about the changes
Validated user-facing changes as a developer
Note: Multiple code reviewers can share the checklists above, a second reviewer should not make a duplicate checklist. All checks should be checked before approving, even those labeled N/A.
As a designer reviewer, I have
Verified that the changes match the design intention
Validated user-facing changes as a designer
References
Screenshots