From 369d3e523115bf780bec301eb1c958bf64b05484 Mon Sep 17 00:00:00 2001 From: Nariman Jelveh Date: Mon, 17 Aug 2026 22:19:49 -0700 Subject: [PATCH] fix(dashboard): name the person in the share rows' accessible labels Every grant row's mode select announced as bare 'Access level' and every revoke button as 'Remove access', so a screen reader user tabbing the list could not tell whose grant a control changes. Carry the holder in the aria-label ('Access level for alice' / 'Remove access for alice'); the visible UI and the revoke tooltip stay as they were. i18n() encodes the interpolated string as a whole, quotes included, so the labels stay attribute-safe for any holder name. --- src/gui/src/UI/Dashboard/UIShareModal.js | 7 +++++-- src/gui/src/i18n/translations/en.js | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/src/UI/Dashboard/UIShareModal.js b/src/gui/src/UI/Dashboard/UIShareModal.js index b0b09f719..5ffed4580 100644 --- a/src/gui/src/UI/Dashboard/UIShareModal.js +++ b/src/gui/src/UI/Dashboard/UIShareModal.js @@ -227,8 +227,11 @@ export default function UIShareModal ({ path: item_path, name, owner, fsentry, $ rows += '
'; rows += avatar_html(share.holder ?? ''); rows += ``; - rows += ``; - rows += ``; + // The accessible names carry the holder: a list where every row + // reads as bare "Access level" / "Remove access" leaves a screen + // reader user unable to tell whose grant a control changes. + rows += ``; + rows += ``; rows += '
'; } if ( !shares.length ) { diff --git a/src/gui/src/i18n/translations/en.js b/src/gui/src/i18n/translations/en.js index 211966b39..fb778a7f0 100644 --- a/src/gui/src/i18n/translations/en.js +++ b/src/gui/src/i18n/translations/en.js @@ -381,11 +381,13 @@ const en = { share_access_write: 'Can edit', share_access_manage: 'Can edit & share', share_access_level: 'Access level', + share_access_level_for: 'Access level for {{recipient}}', share_add_people: 'Add people by email or username', share_who_has_access: 'Who has access', share_no_one: 'Not shared with anyone yet.', share_owner: 'Owner', share_remove_access: 'Remove access', + share_remove_access_for: 'Remove access for {{recipient}}', share_remove_from_shared: 'Remove from Shared', share_nothing_shared: 'Nothing has been shared with you yet.', share_done: 'Done',