Skip to content

fix(ui): accessibility fixes on the login, account and organization pages - #137

Open
BatLeDev wants to merge 5 commits into
masterfrom
fix-a11y-login-and-account
Open

fix(ui): accessibility fixes on the login, account and organization pages#137
BatLeDev wants to merge 5 commits into
masterfrom
fix-a11y-login-and-account

Conversation

@BatLeDev

Copy link
Copy Markdown
Member

Accessibility fixes on the pages served by simple-directory, coming from the RGAA re-audit of a customer portal, plus two regressions of the Vuetify 4 upgrade found along the way.

Login page

  • the logo alternative was the generic Site logo i18n string, it now uses the site title when there is one (RGAA 1.7)
  • the served document had no <title>, only the one the SPA sets at runtime, so the W3C validator rejected it. The built index.html now carries a {SITE_TITLE} placeholder filled by the site title, HTML-escaped before injection
  • vite injects <meta property="csp-nonce" nonce="…"> for html.cspNonce without the content attribute the HTML spec requires next to property, the second error the validator reported. A small transformIndexHtml plugin adds it (RGAA 8.2)

Account page

  • the email address was displayed in a disabled field, dimmed to 38% opacity, dropping its contrast well below 4.5:1. It is now readonly, which keeps it readable and focusable, with a hint saying it cannot be changed (RGAA 3.2)
  • the avatar image had no alt attribute (RGAA 1.1)

The page keeps starting its titles at h2: it is always embedded in an iframe, the h1 belongs to the host page.

Organization page

  • the four menus opened by a v-fab (create a department, edit the departments, invite a partner organization) had no accessible name: v-fab renders its title on the wrapping div, not on the button it contains. They go back to v-btn, like the invite member button right next to them, which was already correct (RGAA 7.1)
  • the bell button of the notification menu had no name at all, it gets a title (RGAA 7.1)
  • the organization, department, member and partner avatars were v-img without alt, so img elements with no alt attribute at all (RGAA 1.1)

Vuetify 4 upgrade leftovers

  • the 2FA roles select and the members role filter were fed the raw role keys (admin, contrib, user) while the readable labels sit right next to them in rolesLabels, which the same page even lets you edit. Both now build their items from those labels, with the configured defaults as fallback, and the role shown under each member follows
  • the upgrade replaced the removed default uppercase on buttons with text-transform: capitalize, which capitalizes every word: "Renouveler Le Mot De Passe". The rule is dropped, buttons render their label as written, and the four labels that were written in lowercase because they relied on it are capitalized

Findings from the RGAA re-audit of a customer portal, on the two pages
served by simple-directory inside it.

Login page:
- the logo alternative was the generic "Site logo" i18n string, it now
  uses the site title when there is one (RGAA 1.7)
- the served document had no <title>, only the one the SPA sets at
  runtime, so the W3C validator rejected it: the built index.html now
  carries a {SITE_TITLE} placeholder filled by the site title (RGAA 8.2)
- vite injects <meta property="csp-nonce" nonce="…"> for html.cspNonce
  without the content attribute the HTML spec requires next to property,
  which is the second error the validator reported (RGAA 8.2)

Account page:
- the email address was displayed in a disabled field, dimmed to 38%
  opacity, which drops its contrast well below 4.5:1. It is now readonly,
  which keeps it readable and focusable, with a hint saying it cannot be
  changed (RGAA 3.2)
- the avatar image had no alt attribute (RGAA 1.1)

The page keeps starting its titles at h2: it is always embedded in an
iframe, the h1 belongs to the host page.
- the four menus opened by a v-fab (create a department, edit the
  departments, invite a partner organization) had no accessible name:
  v-fab renders its title on the wrapping div, not on the button it
  contains. They go back to v-btn, like the invite member button right
  next to them, which was already correct (RGAA 7.1)
- the bell button of the notification menu had no name at all, it gets a
  title (RGAA 7.1)
- the organization, department, member and partner avatars were v-img
  without alt, so img elements with no alt attribute at all (RGAA 1.1)
- the 2FA roles select and the members role filter were fed the raw role
  keys (admin, contrib, user) while the readable labels sit right next to
  them in rolesLabels, which the same page even lets you edit. Both now
  build their items from those labels, with the configured defaults as
  fallback, and the role shown under each member follows
- the Vuetify 4 upgrade replaced the removed default uppercase on buttons
  with text-transform: capitalize, which capitalizes every word:
  "Renouveler Le Mot De Passe". The rule is dropped, buttons render their
  label as written, and the four labels that were written in lowercase
  because they relied on it are capitalized
@github-actions github-actions Bot added the fix label Aug 13, 2026
@BatLeDev
BatLeDev marked this pull request as draft August 13, 2026 15:45
Carries the boundIp session field that lib-express 1.25.0 reads, without
which tsc rejects the assignment in setSessionCookies.
- Account page email input was changed from disabled to readonly for
  accessibility (RGAA 3.2 contrast); assert readonly/non-editable instead
  of disabled.
- Raise navigationTimeout to 15s for the e2e project: full page loads
  (incl. superadmin login) can exceed 5s when the whole suite loads the
  server, causing flaky failures.
@BatLeDev
BatLeDev marked this pull request as ready for review August 14, 2026 08:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant