From 90eab2f62deeaa462444071c547149938d908249 Mon Sep 17 00:00:00 2001 From: Cahit Guerguec Date: Mon, 17 Nov 2025 17:24:11 +0100 Subject: [PATCH] fix(ui5-table): accessibility improvements implemented - The correct npm package is used for translations Fixes: #12630 - ariaLabelledByElements is used instead of aria-labelledby Fixes: #12657 - The sample now uses correct mode property Fixes: #11946 --- packages/main/src/TableCustomAnnouncement.ts | 29 ++++++++----------- .../main/Table/ScrollToLoad/sample.html | 2 +- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/packages/main/src/TableCustomAnnouncement.ts b/packages/main/src/TableCustomAnnouncement.ts index db60b4527b65..6e35512072ab 100644 --- a/packages/main/src/TableCustomAnnouncement.ts +++ b/packages/main/src/TableCustomAnnouncement.ts @@ -23,37 +23,32 @@ import { } from "./generated/i18n/i18n-defaults.js"; let invisibleText: HTMLElement; -const i18nBundle = new I18nBundle("@ui5/webcomponents/main"); +const i18nBundle = new I18nBundle("@ui5/webcomponents"); const checkVisibility = (element: HTMLElement): boolean => { return element.checkVisibility() || getComputedStyle(element).display === "contents"; }; -const updateInvisibleText = (element: HTMLElement, text: string | string[] = []) => { - const invisibleTextId = "ui5-table-invisible-text"; +const updateInvisibleText = (element: any, text: string | string[] = []) => { if (!invisibleText || !invisibleText.isConnected) { invisibleText = document.createElement("span"); - invisibleText.id = invisibleTextId; + invisibleText.id = "ui5-table-invisible-text"; invisibleText.ariaHidden = "true"; invisibleText.style.display = "none"; document.body.appendChild(invisibleText); } - let ariaLabelledBy = (element.getAttribute("aria-labelledby") || "").split(" ").filter(Boolean); - const invisibleTextAssociated = ariaLabelledBy.includes(invisibleTextId); - + const ariaLabelledByElements = [...(element.ariaLabelledByElements || [])]; + const invisibleTextIndex = ariaLabelledByElements.indexOf(invisibleText); text = Array.isArray(text) ? text.filter(Boolean).join(" . ").trim() : text.trim(); - if (text && !invisibleTextAssociated) { - ariaLabelledBy.push(invisibleTextId); - } else if (!text && invisibleTextAssociated) { - ariaLabelledBy = ariaLabelledBy.filter(id => id !== invisibleTextId); - } - invisibleText.textContent = text; - if (ariaLabelledBy.length > 0) { - element.setAttribute("aria-labelledby", ariaLabelledBy.join(" ")); - } else { - element.removeAttribute("aria-labelledby"); + + if (text && invisibleTextIndex === -1) { + ariaLabelledByElements.unshift(invisibleText); + element.ariaLabelledByElements = ariaLabelledByElements; + } else if (!text && invisibleTextIndex > -1) { + ariaLabelledByElements.splice(invisibleTextIndex, 1); + element.ariaLabelledByElements = ariaLabelledByElements.length ? ariaLabelledByElements : null; } }; diff --git a/packages/website/docs/_samples/main/Table/ScrollToLoad/sample.html b/packages/website/docs/_samples/main/Table/ScrollToLoad/sample.html index d5bff7513ba7..c776818833c4 100644 --- a/packages/website/docs/_samples/main/Table/ScrollToLoad/sample.html +++ b/packages/website/docs/_samples/main/Table/ScrollToLoad/sample.html @@ -12,7 +12,7 @@
- + Product