What assistive technology is not told: row actions named alike, text kept in tooltips, links that open elsewhere, and fields without their purpose #276
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#276
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
From an accessibility read of the templates on 2026-09-18. axe cannot see any of it: every control has a name, every link has text; what is missing is context, purpose and the text only a hover reveals.
Row actions are named alike
documents/upload_list.html:42-49draws "Download", "Edit", "Delete" on every row with nothing naming the row; the same shape is inapplications/interview_list.html,applications/tag_list.html,jobs/industry_list.html,connections/list.html, and the sections ofdocuments/cv_detail.html,documents/letter_detail.htmlandjobs/company_detail.html. SC 2.4.4 passes because the row is the context, but a links list, which is how many screen-reader users find their way round a page, reads "Edit, Edit, Edit, Delete, Delete, Delete". The bulk checkbox already does this right:jobs/partials/company_row.html:10says "Select {name}". Fix: the samearia-label, or ansr-onlysuffix, on every per-row action.Information that lives only in a
titlejobs/partials/company_row.html:93-94: the notes column istruncatewith the full text only intitle.jobs/industry_list.html:50: "NACE division" only intitleon the code.partials/plugin_tags.html:24: the provenance explanation only intitle.accounts/invite_list.html:48: the invitation link an administrator must hand over ismax-w-xs truncatewith no copy control.A keyboard or touch user never sees a title, and a magnifier user sees an ellipsis with nowhere to go. Fix: show the text (wrap, or
line-clamp-2, or a visible expansion), and a copy button for the invitation link.Four links open a new tab without saying so
applications/report.html:257(the listing links),documents/cv_detail.html:16anddocuments/letter_detail.html:15and:42(the previews). The other fifteentarget="_blank"links carry ansr-only"opens in a new tab" or say external; these four should say the same.The person's own fields do not say what they are for
SC 1.3.5 (identify input purpose, AA): a field collecting something about the person carries the
autocompletetoken that names it, so a browser can fill it and speech or cognitive tooling can recognise it. Only the telephone field has one (autocomplete="tel"). Sign-up's first and last name (accounts/forms.py:94-99) wantgiven-nameandfamily-name; the person's own postal address rows wantaddress-line1,address-line2,postal-code,address-level2andcountry-name; the account page's username wantsusername. allauth already sets email and password. A contact's or a company's fields are about somebody else and are exempt. Check: a unit test over the rendered sign-up and Your details forms.Smaller
partials/table/head.html:16-17, the sidebar labels (accounts/profile.html:27,settings/base.html:16,server/base.html:11),applications/report.html:237,core/import_csv_map.html:17and:72, the server tables. The hardest text on the page for low-vision and dyslexic readers, and VoiceOver can spell out CSS-uppercased text letter by letter.text-xs font-medium text-ink-500withoutuppercase tracking-widereads the same and better.applications/partials/application_card.html:50-52) and the backup age on the server overview; nothing in the templates uses<time datetime>. A<time>with the date in it costs nothing.