Skip to content

Commit 90eab2f

Browse files
committed
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
1 parent b818abb commit 90eab2f

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

packages/main/src/TableCustomAnnouncement.ts

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,37 +23,32 @@ import {
2323
} from "./generated/i18n/i18n-defaults.js";
2424

2525
let invisibleText: HTMLElement;
26-
const i18nBundle = new I18nBundle("@ui5/webcomponents/main");
26+
const i18nBundle = new I18nBundle("@ui5/webcomponents");
2727

2828
const checkVisibility = (element: HTMLElement): boolean => {
2929
return element.checkVisibility() || getComputedStyle(element).display === "contents";
3030
};
3131

32-
const updateInvisibleText = (element: HTMLElement, text: string | string[] = []) => {
33-
const invisibleTextId = "ui5-table-invisible-text";
32+
const updateInvisibleText = (element: any, text: string | string[] = []) => {
3433
if (!invisibleText || !invisibleText.isConnected) {
3534
invisibleText = document.createElement("span");
36-
invisibleText.id = invisibleTextId;
35+
invisibleText.id = "ui5-table-invisible-text";
3736
invisibleText.ariaHidden = "true";
3837
invisibleText.style.display = "none";
3938
document.body.appendChild(invisibleText);
4039
}
4140

42-
let ariaLabelledBy = (element.getAttribute("aria-labelledby") || "").split(" ").filter(Boolean);
43-
const invisibleTextAssociated = ariaLabelledBy.includes(invisibleTextId);
44-
41+
const ariaLabelledByElements = [...(element.ariaLabelledByElements || [])];
42+
const invisibleTextIndex = ariaLabelledByElements.indexOf(invisibleText);
4543
text = Array.isArray(text) ? text.filter(Boolean).join(" . ").trim() : text.trim();
46-
if (text && !invisibleTextAssociated) {
47-
ariaLabelledBy.push(invisibleTextId);
48-
} else if (!text && invisibleTextAssociated) {
49-
ariaLabelledBy = ariaLabelledBy.filter(id => id !== invisibleTextId);
50-
}
51-
5244
invisibleText.textContent = text;
53-
if (ariaLabelledBy.length > 0) {
54-
element.setAttribute("aria-labelledby", ariaLabelledBy.join(" "));
55-
} else {
56-
element.removeAttribute("aria-labelledby");
45+
46+
if (text && invisibleTextIndex === -1) {
47+
ariaLabelledByElements.unshift(invisibleText);
48+
element.ariaLabelledByElements = ariaLabelledByElements;
49+
} else if (!text && invisibleTextIndex > -1) {
50+
ariaLabelledByElements.splice(invisibleTextIndex, 1);
51+
element.ariaLabelledByElements = ariaLabelledByElements.length ? ariaLabelledByElements : null;
5752
}
5853
};
5954

packages/website/docs/_samples/main/Table/ScrollToLoad/sample.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<div class="section" style="height: 100px; overflow: auto;">
1313
<!-- playground-fold-end -->
1414
<ui5-table id="table">
15-
<ui5-table-growing id="growing" type="Scroll" slot="features"></ui5-table-growing>
15+
<ui5-table-growing id="growing" mode="Scroll" slot="features"></ui5-table-growing>
1616
<!-- playground-fold -->
1717
<ui5-table-header-row slot="headerRow">
1818
<ui5-table-header-cell id="produtCol"><span>Product</span></ui5-table-header-cell>

0 commit comments

Comments
 (0)