CodeForPhilly / CodeForPhilly/codeforphilly-ng
ExternalLink component for the 16 hand-rolled "(opens in new tab)" links
- Linguagem predominante
- TypeScript
- Estrelas
- 1
- Forks
- 1
- Merge médio
- 5d 3h
- PRs com merge (30d)
- 9
Descrição
## Context
PR #157 added a new-tab cue to every `target="_blank"` link in `apps/web`: ` (opens in new tab)` where the link has visible text, or appended to the `aria-label` where it does not. That is 16 copies across 9 files (`AppFooter`, `AppHeader`, `ProjectCard`, `ActivityCard`, `LoginPlaceholder`, `Account`, `PersonDetail`, `ProjectDetail`, `Volunteer`).
## Problem
The cue text, the `rel="noopener noreferrer"`, and the `target` are re-typed at every site. A future link will forget one of them, and changing the wording (or adding a visual icon) means touching 16 places.
## Proposal
An `ExternalLink` component in `apps/web/src/components/` that takes `href` + children, sets `target`/`rel`, and appends the sr-only cue (or merges it into a supplied `aria-label`). Migrate the 16 sites; the existing accessible-name assertions in the test suite (regex matchers on `/\(opens in new tab\)$/`) cover the migration.
Deferred from `plans/a11y-mechanical.md` (PR #157).
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Direção de pesquisa
Start in apps/web/src/components/ and inspect the 16 target links across AppFooter, AppHeader, ProjectCard, ActivityCard, LoginPlaceholder, Account, PersonDetail, ProjectDetail, and Volunteer. Run the existing accessible-name tests, then confirm every site uses the shared component and the assertions still match the new-tab cue, target, and rel behavior.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- typescript
- Domínio
- accessibility, frontend
- Tipo de issue
- Refatoração
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Ativa
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 74/100