`Link` marks links to the same page with a different query as `aria-current="page"`
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 72/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- typescript
- Domaine
- accessibility, frontend
Piste de recherche
Start by locating linkActiveAttributes() and the tests for Link active state. Read how it compares the target and current URLs, then check cases with query parameters, reordered parameters, extra current parameters, and links without a query. Done when query-bearing links are marked current only when their parameters match, while query-free menu links retain the described behavior.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Since #676, Link adds aria-current="page" and data-void-active when its destination is the current page. linkActiveAttributes() compares only the pathname ("The query and hash are ignored"). So a link that changes only the query is marked as the current page, even though it leads somewhere else.
Repro (Void 1.6.1)
On /posts?page=2:
<Link href="/posts?page=1">Previous</Link>
<Link href="/posts?page=3">Next</Link>
Both render with aria-current="page" and data-void-active. Screen readers announce "Previous, current page" and "Next, current page". The same happens with any links that change only the query: pagination, previous/next date ranges, sort and filter tabs. A GET link's data merged into its query has the same issue.
Expected
A link whose href has a query is current only when that query matches the current URL. The page itself (/posts?page=2) is the current page; the other two links aren't.
Ignoring the query is still right for links without one. A menu link to /posts should stay current on /posts?page=2 or /posts?sort=new, so that part of the behaviour should stay.
Suggested fix
In linkActiveAttributes(), when the target has a query, also require each of its params to have the same value in the current URL:
const queryMatches = [...target.searchParams].every(
([key, value]) => current.searchParams.getAll(key).includes(value),
);
if (linkPath === currentPath && queryMatches) return { 'aria-current': 'page', 'data-void-active': '' };
Comparing params one by one, instead of the raw search string, means param order doesn't matter. It also keeps a tab link like ?status=open current on ?status=open&page=2. A stricter rule, the whole query must match, would work too.
Another option is a way to opt out, such as activeMatch={false}, though fixing the default is better: most apps won't know their pagination links are announced wrong.
Workaround
Pass aria-current={undefined} on those links, since user attributes win. data-void-active still stays on them.
- Langage dominant
- TypeScript
- Étoiles
- 627
- Forks
- 66
- Merge moyen
- 13 h 57 min
- PR mergées (30 j)
- 194
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de voidzero-dev/void
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
voidzero-dev/void#677 ·
Les mainteneurs répondent en général sous 1 jour
-
Export a guard for `VoidActionError` at every statusPeut-être pris @karthickeyan-dev l’a pris aujourd’hui. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 78/100
voidzero-dev/void#714 ·
Les mainteneurs répondent en général sous 1 jour
-
`@void/solid`: `useParams()` keeps the first page's params after client-side navigationPeut-être pris @yujiym l’a pris aujourd’hui. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 20/100
voidzero-dev/void#708 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 28/100
voidzero-dev/void#692 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 30/100
voidzero-dev/void#689 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de voidzero-dev/void
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
paperclipai/paperclip#19120 ·
Les mainteneurs répondent en général sous 1 jour
-
Gradle liquibaseDiffChangelog drops jhi_date_time_wrapperPeut-être pris @mraible l’a pris aujourd’hui. Ouvertearea: triage theme: undefined
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
jhipster/generator-jhipster#35998 ·
Les mainteneurs répondent en général sous 1 jour
-
ai:assign:coding feature p3 ui-ux windows
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
CherryHQ/cherry-studio#23569 · 2 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
lingdojo/kana-dojo#33602 · 1 commentaire · 5 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
GoogleCloudPlatform/BigQuery-Agent-Analytics-Plugins#16 ·
Les mainteneurs répondent en général sous 1 jour