@openui5/sap.ui.table 1.142.0 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/REUSE.toml +1 -1
  2. package/THIRDPARTY.txt +2 -2
  3. package/package.json +3 -3
  4. package/src/sap/ui/table/.library +1 -1
  5. package/src/sap/ui/table/AnalyticalColumn.js +1 -1
  6. package/src/sap/ui/table/AnalyticalColumnMenu.js +1 -1
  7. package/src/sap/ui/table/AnalyticalTable.js +1 -1
  8. package/src/sap/ui/table/Column.js +1 -1
  9. package/src/sap/ui/table/ColumnMenu.js +1 -1
  10. package/src/sap/ui/table/CreationRow.js +1 -1
  11. package/src/sap/ui/table/Row.js +1 -1
  12. package/src/sap/ui/table/RowAction.js +1 -1
  13. package/src/sap/ui/table/RowActionItem.js +1 -7
  14. package/src/sap/ui/table/RowSettings.js +1 -1
  15. package/src/sap/ui/table/Table.js +1 -1
  16. package/src/sap/ui/table/TablePersoController.js +1 -1
  17. package/src/sap/ui/table/TableRenderer.js +42 -31
  18. package/src/sap/ui/table/TreeTable.js +1 -1
  19. package/src/sap/ui/table/extensions/Accessibility.js +53 -20
  20. package/src/sap/ui/table/extensions/AccessibilityRender.js +1 -1
  21. package/src/sap/ui/table/extensions/DragAndDrop.js +3 -3
  22. package/src/sap/ui/table/extensions/ExtensionBase.js +1 -1
  23. package/src/sap/ui/table/extensions/Keyboard.js +1 -1
  24. package/src/sap/ui/table/extensions/KeyboardDelegate.js +1 -1
  25. package/src/sap/ui/table/extensions/Pointer.js +1 -1
  26. package/src/sap/ui/table/extensions/Scrolling.js +1 -1
  27. package/src/sap/ui/table/extensions/ScrollingIOS.js +1 -1
  28. package/src/sap/ui/table/extensions/Synchronization.js +1 -1
  29. package/src/sap/ui/table/library.js +10 -10
  30. package/src/sap/ui/table/menus/AnalyticalTableContextMenu.js +2 -2
  31. package/src/sap/ui/table/menus/ColumnHeaderMenuAdapter.js +1 -1
  32. package/src/sap/ui/table/menus/ContextMenu.js +1 -1
  33. package/src/sap/ui/table/menus/MobileColumnHeaderMenuAdapter.js +1 -1
  34. package/src/sap/ui/table/messagebundle.properties +12 -0
  35. package/src/sap/ui/table/messagebundle_ar.properties +8 -0
  36. package/src/sap/ui/table/messagebundle_bg.properties +8 -0
  37. package/src/sap/ui/table/messagebundle_ca.properties +8 -0
  38. package/src/sap/ui/table/messagebundle_cnr.properties +8 -0
  39. package/src/sap/ui/table/messagebundle_cs.properties +8 -0
  40. package/src/sap/ui/table/messagebundle_cy.properties +8 -0
  41. package/src/sap/ui/table/messagebundle_da.properties +8 -0
  42. package/src/sap/ui/table/messagebundle_de.properties +8 -0
  43. package/src/sap/ui/table/messagebundle_el.properties +8 -0
  44. package/src/sap/ui/table/messagebundle_en.properties +8 -0
  45. package/src/sap/ui/table/messagebundle_en_GB.properties +8 -0
  46. package/src/sap/ui/table/messagebundle_en_US_saprigi.properties +8 -0
  47. package/src/sap/ui/table/messagebundle_es.properties +9 -1
  48. package/src/sap/ui/table/messagebundle_es_MX.properties +8 -0
  49. package/src/sap/ui/table/messagebundle_et.properties +8 -0
  50. package/src/sap/ui/table/messagebundle_fi.properties +8 -0
  51. package/src/sap/ui/table/messagebundle_fr.properties +9 -1
  52. package/src/sap/ui/table/messagebundle_fr_CA.properties +8 -0
  53. package/src/sap/ui/table/messagebundle_hi.properties +8 -0
  54. package/src/sap/ui/table/messagebundle_hr.properties +8 -0
  55. package/src/sap/ui/table/messagebundle_hu.properties +8 -0
  56. package/src/sap/ui/table/messagebundle_id.properties +8 -0
  57. package/src/sap/ui/table/messagebundle_it.properties +8 -0
  58. package/src/sap/ui/table/messagebundle_iw.properties +8 -0
  59. package/src/sap/ui/table/messagebundle_ja.properties +8 -0
  60. package/src/sap/ui/table/messagebundle_kk.properties +8 -0
  61. package/src/sap/ui/table/messagebundle_ko.properties +8 -0
  62. package/src/sap/ui/table/messagebundle_lt.properties +8 -0
  63. package/src/sap/ui/table/messagebundle_lv.properties +8 -0
  64. package/src/sap/ui/table/messagebundle_mk.properties +8 -0
  65. package/src/sap/ui/table/messagebundle_ms.properties +8 -0
  66. package/src/sap/ui/table/messagebundle_nl.properties +8 -0
  67. package/src/sap/ui/table/messagebundle_no.properties +8 -0
  68. package/src/sap/ui/table/messagebundle_pl.properties +8 -0
  69. package/src/sap/ui/table/messagebundle_pt.properties +8 -0
  70. package/src/sap/ui/table/messagebundle_pt_PT.properties +8 -0
  71. package/src/sap/ui/table/messagebundle_ro.properties +8 -0
  72. package/src/sap/ui/table/messagebundle_ru.properties +8 -0
  73. package/src/sap/ui/table/messagebundle_sh.properties +8 -0
  74. package/src/sap/ui/table/messagebundle_sk.properties +8 -0
  75. package/src/sap/ui/table/messagebundle_sl.properties +8 -0
  76. package/src/sap/ui/table/messagebundle_sr.properties +8 -0
  77. package/src/sap/ui/table/messagebundle_sv.properties +8 -0
  78. package/src/sap/ui/table/messagebundle_th.properties +8 -0
  79. package/src/sap/ui/table/messagebundle_tr.properties +8 -0
  80. package/src/sap/ui/table/messagebundle_uk.properties +8 -0
  81. package/src/sap/ui/table/messagebundle_vi.properties +10 -2
  82. package/src/sap/ui/table/messagebundle_zh_CN.properties +8 -0
  83. package/src/sap/ui/table/messagebundle_zh_TW.properties +10 -2
  84. package/src/sap/ui/table/plugins/BindingSelection.js +1 -1
  85. package/src/sap/ui/table/plugins/MultiSelectionPlugin.js +1 -1
  86. package/src/sap/ui/table/plugins/ODataV4Aggregation.js +1 -1
  87. package/src/sap/ui/table/plugins/ODataV4Hierarchy.js +1 -1
  88. package/src/sap/ui/table/plugins/ODataV4MultiLevel.js +1 -1
  89. package/src/sap/ui/table/plugins/ODataV4MultiSelection.js +1 -1
  90. package/src/sap/ui/table/plugins/ODataV4Selection.js +1 -1
  91. package/src/sap/ui/table/plugins/ODataV4SingleSelection.js +1 -1
  92. package/src/sap/ui/table/plugins/PluginBase.js +1 -1
  93. package/src/sap/ui/table/plugins/SelectionModelSelection.js +1 -1
  94. package/src/sap/ui/table/plugins/SelectionPlugin.js +1 -1
  95. package/src/sap/ui/table/rowmodes/Auto.js +1 -1
  96. package/src/sap/ui/table/rowmodes/Fixed.js +1 -1
  97. package/src/sap/ui/table/rowmodes/Interactive.js +1 -1
  98. package/src/sap/ui/table/rowmodes/RowMode.js +1 -1
  99. package/src/sap/ui/table/rowmodes/Variable.js +1 -1
  100. package/src/sap/ui/table/rules/ColumnTemplate.support.js +2 -7
  101. package/src/sap/ui/table/themes/base/Row.less +2 -18
  102. package/src/sap/ui/table/themes/base/Table.less +1 -1
  103. package/src/sap/ui/table/themes/sap_hcb/base_Row.less +1 -17
  104. package/src/sap/ui/table/themes/sap_hcb/base_Table.less +1 -1
  105. package/src/sap/ui/table/utils/TableUtils.js +1 -1
  106. package/src/sap/ui/table/utils/_ColumnUtils.js +1 -1
  107. package/src/sap/ui/table/utils/_GroupingUtils.js +1 -1
  108. package/src/sap/ui/table/utils/_HookUtils.js +1 -1
  109. package/src/sap/ui/table/utils/_MenuUtils.js +1 -1
package/REUSE.toml CHANGED
@@ -385,7 +385,7 @@ SPDX-FileComment = "these files belong to: handlebars"
385
385
  [[annotations]]
386
386
  path = "src/sap.ui.core/src/sap/ui/thirdparty/require.js"
387
387
  precedence = "aggregate"
388
- SPDX-FileCopyrightText = "2010-2012, The Dojo Foundation"
388
+ SPDX-FileCopyrightText = "2010-2024, jQuery Foundation and other contributors"
389
389
  SPDX-License-Identifier = "MIT"
390
390
  SPDX-FileComment = "these files belong to: requireJS"
391
391
 
package/THIRDPARTY.txt CHANGED
@@ -254,8 +254,8 @@ License: MIT
254
254
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/MIT.txt
255
255
  Contained in: src/sap.ui.core/src/sap/ui/thirdparty/handlebars.js
256
256
 
257
- Component: requireJS, version: 2.1.8
258
- Copyright: 2010-2012, The Dojo Foundation
257
+ Component: requireJS, version: 2.3.7
258
+ Copyright: 2010-2024, jQuery Foundation and other contributors
259
259
  License: MIT
260
260
  License Text: https://github.com/UI5/openui5/blob/master/LICENSES/MIT.txt
261
261
  Contained in: src/sap.ui.core/src/sap/ui/thirdparty/require.js
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openui5/sap.ui.table",
3
- "version": "1.142.0",
3
+ "version": "1.143.0",
4
4
  "description": "OpenUI5 UI Library sap.ui.table",
5
5
  "author": "SAP SE (https://www.sap.com)",
6
6
  "license": "Apache-2.0",
@@ -14,7 +14,7 @@
14
14
  "url": "https://github.com/UI5/openui5.git"
15
15
  },
16
16
  "dependencies": {
17
- "@openui5/sap.ui.core": "1.142.0",
18
- "@openui5/sap.ui.unified": "1.142.0"
17
+ "@openui5/sap.ui.core": "1.143.0",
18
+ "@openui5/sap.ui.unified": "1.143.0"
19
19
  }
20
20
  }
@@ -6,7 +6,7 @@
6
6
  <copyright>OpenUI5
7
7
  * (c) Copyright 2025 SAP SE or an SAP affiliate company.
8
8
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.</copyright>
9
- <version>1.142.0</version>
9
+ <version>1.143.0</version>
10
10
 
11
11
  <documentation>Table-like controls, mainly for desktop scenarios.</documentation>
12
12
 
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.table.Column
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.142.0
50
+ * @version 1.143.0
51
51
  *
52
52
  * @constructor
53
53
  * @public
@@ -20,7 +20,7 @@ sap.ui.define(['./ColumnMenu', "sap/ui/unified/MenuRenderer", './utils/TableUtil
20
20
  * @extends sap.ui.table.ColumnMenu
21
21
  *
22
22
  * @author SAP SE
23
- * @version 1.142.0
23
+ * @version 1.143.0
24
24
  *
25
25
  * @constructor
26
26
  * @public
@@ -52,7 +52,7 @@ sap.ui.define([
52
52
  * @see {@link topic:148892ff9aea4a18b912829791e38f3e Tables: Which One Should I Choose?}
53
53
  *
54
54
  * @extends sap.ui.table.Table
55
- * @version 1.142.0
55
+ * @version 1.143.0
56
56
  *
57
57
  * @constructor
58
58
  * @public
@@ -63,7 +63,7 @@ sap.ui.define([
63
63
  * @class
64
64
  * The column allows you to define column specific properties that will be applied when rendering the table.
65
65
  * @extends sap.ui.core.Element
66
- * @version 1.142.0
66
+ * @version 1.143.0
67
67
  *
68
68
  * @constructor
69
69
  * @public
@@ -40,7 +40,7 @@ sap.ui.define([
40
40
  * @class
41
41
  * The column menu provides all common actions that can be performed on a column.
42
42
  * @extends sap.ui.unified.Menu
43
- * @version 1.142.0
43
+ * @version 1.143.0
44
44
  *
45
45
  * @constructor
46
46
  * @public
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * <code>sap.ui.commons</code> library.
33
33
  * @extends sap.ui.core.Control
34
34
  * @author SAP SE
35
- * @version 1.142.0
35
+ * @version 1.143.0
36
36
  *
37
37
  * @constructor
38
38
  * @private
@@ -135,7 +135,7 @@ sap.ui.define([
135
135
  * @class
136
136
  * The row.
137
137
  * @extends sap.ui.core.Element
138
- * @version 1.142.0
138
+ * @version 1.143.0
139
139
  *
140
140
  * @constructor
141
141
  * @public
@@ -39,7 +39,7 @@ sap.ui.define([
39
39
  * of the order in the <code>items</code> aggregation.
40
40
  *
41
41
  * @extends sap.ui.core.Control
42
- * @version 1.142.0
42
+ * @version 1.143.0
43
43
  *
44
44
  * @constructor
45
45
  * @public
@@ -36,7 +36,7 @@ sap.ui.define([
36
36
  * @extends sap.ui.core.Element
37
37
  *
38
38
  * @author SAP SE
39
- * @version 1.142.0
39
+ * @version 1.143.0
40
40
  * @since 1.45
41
41
  *
42
42
  * @constructor
@@ -100,9 +100,6 @@ sap.ui.define([
100
100
  return TableUtils.isA(oParent, "sap.ui.table.RowAction") ? oParent : null;
101
101
  };
102
102
 
103
- /**
104
- * @inheritDoc
105
- */
106
103
  Item.prototype.setIcon = function(sIcon) {
107
104
  this.setProperty("icon", sIcon, true);
108
105
  if (this._oIcon) {
@@ -111,9 +108,6 @@ sap.ui.define([
111
108
  return this;
112
109
  };
113
110
 
114
- /**
115
- * @inheritDoc
116
- */
117
111
  Item.prototype.setText = function(sText) {
118
112
  this.setProperty("text", sText, true);
119
113
  if (this._oIcon) {
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * The <code>RowSettings</code> control allows you to configure a row.
28
28
  * You can only use this control in the context of the <code>sap.ui.table.Table</code> control to define row settings.
29
29
  * @extends sap.ui.core.Element
30
- * @version 1.142.0
30
+ * @version 1.143.0
31
31
  *
32
32
  * @constructor
33
33
  * @public
@@ -106,7 +106,7 @@ sap.ui.define([
106
106
  * the data model and binding being used.
107
107
  * </p>
108
108
  * @extends sap.ui.core.Control
109
- * @version 1.142.0
109
+ * @version 1.143.0
110
110
  *
111
111
  * @constructor
112
112
  * @public
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.base.ManagedObject
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.142.0
37
+ * @version 1.143.0
38
38
  * @since 1.21.1
39
39
  *
40
40
  * @constructor
@@ -97,6 +97,7 @@ sap.ui.define([
97
97
  }
98
98
 
99
99
  const oScrollExtension = oTable._getScrollExtension();
100
+ const oAccRenderExtension = oTable._getAccRenderExtension();
100
101
  if (oScrollExtension.isVerticalScrollbarRequired() && !oScrollExtension.isVerticalScrollbarExternal()) {
101
102
  rm.class("sapUiTableVScr"); // show vertical scrollbar
102
103
  }
@@ -186,7 +187,7 @@ sap.ui.define([
186
187
  this.renderTabElement(rm, "sapUiTableCtrlBefore", bDummyTabbable ? "0" : "-1");
187
188
 
188
189
  rm.openStart("div", oTable.getId() + "-sapUiTableGridCnt");
189
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Content");
190
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Content");
190
191
  rm.openEnd();
191
192
 
192
193
  this.renderColRsz(rm, oTable);
@@ -206,12 +207,12 @@ sap.ui.define([
206
207
  this.renderHSbBackground(rm, oTable);
207
208
  this.renderHSb(rm, oTable);
208
209
 
209
- oTable._getAccRenderExtension().writeHiddenAccTexts(rm, oTable);
210
+ oAccRenderExtension.writeHiddenAccTexts(rm, oTable);
210
211
 
211
212
  rm.openStart("div", oTable.getId() + "-overlay");
212
213
  rm.class("sapUiTableOverlayArea");
213
214
  rm.attr("tabindex", "0");
214
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Overlay");
215
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Overlay");
215
216
  rm.openEnd();
216
217
  rm.close("div");
217
218
 
@@ -415,12 +416,28 @@ sap.ui.define([
415
416
  let bEnabled = false;
416
417
  let bSelAll = false;
417
418
  const mRenderConfig = oTable._getSelectionPlugin().getRenderConfig();
419
+ const oAccRenderExtension = oTable._getAccRenderExtension();
418
420
 
419
421
  rm.openStart("div");
420
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "ColumnRowHeaderRow");
422
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "ColumnRowHeaderRow");
421
423
  rm.openEnd();
422
- rm.openStart("div", oTable.getId() + "-rowcolhdr");
423
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "ColumnRowHeaderCell");
424
+
425
+ const iHeaderRowCount = TableUtils.getHeaderRowCount(oTable);
426
+ if (iHeaderRowCount > 1) {
427
+ // In multi label scenario extra hidden cells are rendered in order to maintain correct aria-ownns relationship for each header row. They
428
+ // are rendered in the same row which does not affect the announcement because the row has aria-hidden.
429
+ for (let i = 0; i < iHeaderRowCount - 1; i++) {
430
+ rm.openStart("div", oTable.getId() + "-rowcolhdr" + i);
431
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "ColumnRowHeaderCell", {bLabel: false});
432
+ rm.openEnd();
433
+ rm.close("div");
434
+ }
435
+ rm.openStart("div", oTable.getId() + "-rowcolhdr" + (iHeaderRowCount - 1));
436
+ } else {
437
+ rm.openStart("div", oTable.getId() + "-rowcolhdr");
438
+ }
439
+
440
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "ColumnRowHeaderCell", {bLabel: true});
424
441
  rm.openEnd();
425
442
  rm.openStart("div", oTable.getId() + "-selall");
426
443
 
@@ -458,7 +475,7 @@ sap.ui.define([
458
475
  enabled: bEnabled,
459
476
  checked: bSelAll
460
477
  };
461
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "ColumnRowHeader", oParams);
478
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "ColumnRowHeader", oParams);
462
479
 
463
480
  rm.openEnd();
464
481
 
@@ -473,14 +490,6 @@ sap.ui.define([
473
490
  }
474
491
  }
475
492
 
476
- if (TableUtils.hasRowHeader(oTable) && oTable.getSelectionMode() === library.SelectionMode.None) {
477
- rm.openStart("span", oTable.getId() + "-rowselecthdr");
478
- rm.class("sapUiPseudoInvisibleText");
479
- rm.openEnd();
480
- rm.text(TableUtils.getResourceText("TBL_ROW_SELECTION_COLUMN_LABEL"));
481
- rm.close("span");
482
- }
483
-
484
493
  rm.close("div").close("div").close("div");
485
494
  };
486
495
 
@@ -627,11 +636,12 @@ sap.ui.define([
627
636
  // =============================================================================
628
637
 
629
638
  TableRenderer.renderRowHdr = function(rm, oTable) {
639
+ const oAccRenderExtension = oTable._getAccRenderExtension();
630
640
  rm.openStart("div", oTable.getId() + "-sapUiTableRowHdrScr");
631
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Presentation");
641
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Presentation");
632
642
  rm.class("sapUiTableRowHdrScr");
633
643
  rm.class("sapUiTableNoOpacity");
634
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "RowHeaderCol");
644
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "RowHeaderCol");
635
645
  rm.openEnd();
636
646
 
637
647
  // start with the first current top visible row
@@ -688,9 +698,10 @@ sap.ui.define([
688
698
 
689
699
  TableRenderer.renderRowAddon = function(rm, oTable, oRow, iRowIndex, bHeader) {
690
700
  const bRowSelected = oRow._isSelected();
701
+ const oAccRenderExtension = oTable._getAccRenderExtension();
691
702
 
692
703
  rm.openStart("div");
693
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "RowAddon");
704
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "RowAddon");
694
705
 
695
706
  rm.attr("data-sap-ui-related", oRow.getId());
696
707
  rm.attr("data-sap-ui-rowindex", iRowIndex);
@@ -725,7 +736,7 @@ sap.ui.define([
725
736
  rowSelected: bRowSelected,
726
737
  rowHidden: oRow.isEmpty()
727
738
  };
728
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, bHeader ? "RowHeader" : "RowAction", oParams);
739
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, bHeader ? "RowHeader" : "RowAction", oParams);
729
740
 
730
741
  rm.openEnd();
731
742
  if (bHeader) {
@@ -824,7 +835,8 @@ sap.ui.define([
824
835
  rm.class(sClass);
825
836
  });
826
837
 
827
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, bHeader ? "Presentation" : "Table");
838
+ const oAccRenderExtension = oTable._getAccRenderExtension();
839
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, bHeader ? "Presentation" : "Table");
828
840
 
829
841
  rm.class("sapUiTableCtrl");
830
842
  if (bHeader) {
@@ -890,7 +902,7 @@ sap.ui.define([
890
902
  if (oColParam.shouldRender) {
891
903
  if (iStartRow === 0) {
892
904
  rm.openStart("th", oTable.getId() + sSuffix + iCol);
893
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Th", {column: oColumn});
905
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Th", {column: oColumn});
894
906
  } else {
895
907
  rm.openStart("th");
896
908
  }
@@ -915,7 +927,7 @@ sap.ui.define([
915
927
  // dummy column to fill the table width
916
928
  if (bRenderDummyColumn) {
917
929
  rm.openStart("th", bHeader && oTable.getId() + "-dummycolhdr");
918
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Presentation");
930
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Presentation");
919
931
  rm.openEnd().close("th");
920
932
  }
921
933
 
@@ -1016,7 +1028,8 @@ sap.ui.define([
1016
1028
  rm.class("sapUiTableRow");
1017
1029
  rm.class("sapUiTableHeaderRow");
1018
1030
  rm.class("sapUiTableColHdrTr");
1019
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "ColumnHeaderRow", {rowIndex: iRow});
1031
+ const oAccRenderExtension = oTable._getAccRenderExtension();
1032
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "ColumnHeaderRow", {rowIndex: iRow, fixedCol: bFixedTable});
1020
1033
  rm.openEnd();
1021
1034
 
1022
1035
  //
@@ -1068,7 +1081,7 @@ sap.ui.define([
1068
1081
 
1069
1082
  if (!bFixedTable && bHasOnlyFixedColumns && aColumns.length > 0) {
1070
1083
  rm.openStart("td").class("sapUiTableCellDummy");
1071
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Presentation");
1084
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Presentation");
1072
1085
  rm.openEnd().close("td");
1073
1086
  }
1074
1087
  rm.close("tr");
@@ -1118,7 +1131,8 @@ sap.ui.define([
1118
1131
  fixedCol: bFixedTable,
1119
1132
  rowNavigated: oRowSettings ? oRowSettings.getNavigated() : false
1120
1133
  };
1121
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Tr", oParams);
1134
+ const oAccRenderExtension = oTable._getAccRenderExtension();
1135
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Tr", oParams);
1122
1136
 
1123
1137
  rm.openEnd();
1124
1138
 
@@ -1130,14 +1144,14 @@ sap.ui.define([
1130
1144
  }
1131
1145
  if (!bFixedTable && bHasOnlyFixedColumns && aCells.length > 0) {
1132
1146
  rm.openStart("td").class("sapUiTableCellDummy");
1133
- oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "Presentation");
1147
+ oAccRenderExtension.writeAriaAttributesFor(rm, oTable, "Presentation");
1134
1148
  rm.openEnd();
1135
1149
  rm.close("td");
1136
1150
  }
1137
1151
  rm.close("tr");
1138
1152
  };
1139
1153
 
1140
- TableRenderer.renderTableCell = function(rm, oTable, oRow, oCell, iCellIndex, bFixedTable, iStartColumn, iEndColumn, aVisibleColumns, iLastFixedColumnIndex, bSelected) {
1154
+ TableRenderer.renderTableCell = function(rm, oTable, oRow, oCell, iCellIndex, bFixedTable, iStartColumn, iEndColumn, aVisibleColumns, iLastFixedColumnIndex) {
1141
1155
  const oColumn = Column.ofCell(oCell);
1142
1156
  const iColIndex = oColumn.getIndex();
1143
1157
 
@@ -1153,10 +1167,7 @@ sap.ui.define([
1153
1167
  const bIsLastFixedColumn = bFixedTable && iLastFixedColumnIndex === iColIndex;
1154
1168
 
1155
1169
  const oParams = {
1156
- column: oColumn,
1157
- row: oRow,
1158
- fixed: bFixedTable,
1159
- rowSelected: bSelected
1170
+ column: oColumn
1160
1171
  };
1161
1172
  oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "DataCell", oParams);
1162
1173
 
@@ -38,7 +38,7 @@ sap.ui.define([
38
38
  * The control can be used in combination with {@link sap.ui.model.json.JSONModel JSONModel} and {@link sap.ui.model.odata.v2.ODataModel ODataModel V2}.
39
39
  * For a tree-table-like behavior with OData V4 services, use the {@link sap.ui.table.Table Table} control with the {@link sap.ui.table.plugins.ODataV4Hierarchy ODataV4Hierarchy} plugin.
40
40
  * @extends sap.ui.table.Table
41
- * @version 1.142.0
41
+ * @version 1.143.0
42
42
  *
43
43
  * @constructor
44
44
  * @public
@@ -449,6 +449,12 @@ sap.ui.define([
449
449
  let sText = "";
450
450
  if (oInfo) {
451
451
  sText = oInfo.description;
452
+ if (bIsTreeColumnCell && !bHidden) {
453
+ const sExpandCollapseButtonText = oTableInstances.row.isExpanded() ?
454
+ TableUtils.getResourceText("TBL_COLLAPSE_BUTTON") : TableUtils.getResourceText("TBL_EXPAND_BUTTON");
455
+
456
+ sText = sExpandCollapseButtonText.concat(" ", oInfo.description);
457
+ }
452
458
  if (TableUtils.getInteractiveElements($Cell) !== null) {
453
459
  sText = TableUtils.getResourceText("TBL_CELL_INCLUDES", [sText]);
454
460
  }
@@ -634,10 +640,26 @@ sap.ui.define([
634
640
 
635
641
  /**
636
642
  * Returns the aria attributes for the column row header cell.
643
+ *
644
+ * @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
645
+ * @param {{bLabel: boolean}} mParams Whether an aria-label should be added
637
646
  * @returns {object} An object containing the aria attributes
638
647
  */
639
- getAriaAttributesForColumnRowHeaderCell: function() {
640
- return {"role": "columnheader"};
648
+ getAriaAttributesForColumnRowHeaderCell: function(oExtension, mParams) {
649
+ const mAttributes = {"role": "columnheader"};
650
+ const oTable = oExtension.getTable();
651
+ const sSelectionMode = oTable.getSelectionMode();
652
+
653
+ if (mParams.bLabel) {
654
+ if (sSelectionMode !== SelectionMode.None) {
655
+ mAttributes["aria-label"] = TableUtils.getResourceText("TBL_TABLE_SELECTION_COLUMNHEADER");
656
+ } else if (TableUtils.hasRowHeader(oTable)) {
657
+ // Table has no selection, but because group mode is active, selection column is still visible with focusable row header cells.
658
+ mAttributes["aria-label"] = TableUtils.getResourceText("TBL_ROW_SELECTION_COLUMN_LABEL");
659
+ }
660
+ }
661
+
662
+ return mAttributes;
641
663
  },
642
664
 
643
665
  /**
@@ -650,13 +672,8 @@ sap.ui.define([
650
672
  getAriaAttributesForColumnRowHeader: function(oExtension, mParams) {
651
673
  const mAttributes = {};
652
674
  const oTable = oExtension.getTable();
653
-
654
675
  const mRenderConfig = oTable._getSelectionPlugin().getRenderConfig();
655
676
 
656
- if (oTable.getSelectionMode() !== SelectionMode.None) {
657
- mAttributes["aria-label"] = TableUtils.getResourceText("TBL_TABLE_SELECTION_COLUMNHEADER");
658
- }
659
-
660
677
  if (mRenderConfig.headerSelector.visible) {
661
678
  if (mRenderConfig.headerSelector.type === "toggle") {
662
679
  mAttributes["role"] = ["checkbox"];
@@ -725,8 +742,8 @@ sap.ui.define([
725
742
  * Returns the aria attributes for a column header.
726
743
  *
727
744
  * @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
728
- * @param {{column: sap.ui.table.Column, headerId: string, index: int, colspan: boolean}} mParams An object containing the instance of the
729
- * column, the id of the header cell, the index of the column and whether the column has span
745
+ * @param {{column: sap.ui.table.Column, headerId: string, colspan: boolean}} mParams An object containing the instance of the
746
+ * column, the id of the header cell, and whether the column has span
730
747
  * @returns {object} An object containing the aria attributes
731
748
  */
732
749
  getAriaAttributesForColumnHeader: function(oExtension, mParams) {
@@ -778,9 +795,7 @@ sap.ui.define([
778
795
  * Returns the aria attributes for a data cell.
779
796
  *
780
797
  * @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
781
- * @param {{index: int}} mParams An object
782
- * containing the index of the row, the instance of the column, the instance of the row, whether the column is fixed and whether the row is
783
- * selected
798
+ * @param {{column: sap.ui.table.Column}} mParams An object containing the instance of the column
784
799
  * @returns {object} An object containing the aria attributes
785
800
  */
786
801
  getAriaAttributesForDataCell: function(oExtension, mParams) {
@@ -891,23 +906,37 @@ sap.ui.define([
891
906
  * Returns the aria attributes for the row that contains the column headers.
892
907
  *
893
908
  * @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
894
- * @param {object} mParams An object for additional parameters
895
- * @param {int} mParams.rowIndex The index of the row
909
+ * @param {{rowIndex: int, fixedCol: boolean}} mParams An object containing the index of the row and whether the column is fixed
896
910
  * @returns {object} An object containing the aria attributes
897
911
  */
898
912
  getAriaAttributesForColumnHeaderRow: function(oExtension, mParams) {
899
913
  const mAttributes = {"role": "row"};
914
+ if (mParams.fixedCol) {
915
+ return mAttributes;
916
+ }
900
917
  const oTable = oExtension.getTable();
901
918
  const sTableId = oTable.getId();
902
919
 
903
920
  mAttributes["aria-rowindex"] = mParams.rowIndex + 1;
904
921
  mAttributes["aria-owns"] = [];
905
- if (TableUtils.hasRowHeader(oTable)) {
906
- mAttributes["aria-owns"].push(sTableId + "-rowcolhdr");
907
- }
908
922
 
909
- for (let j = 0; j < TableUtils.getVisibleColumnCount(oTable); j++) {
910
- mAttributes["aria-owns"].push(oTable._getVisibleColumns()[j].getId());
923
+ const aVisibleColumns = oTable._getVisibleColumns();
924
+ if (TableUtils.getHeaderRowCount(oTable) > 1) {
925
+ if (TableUtils.hasRowHeader(oTable)) {
926
+ mAttributes["aria-owns"].push(sTableId + "-rowcolhdr" + mParams.rowIndex);
927
+ }
928
+ let j = 0;
929
+ while (j < TableUtils.getVisibleColumnCount(oTable)) {
930
+ mAttributes["aria-owns"].push(aVisibleColumns[j].getId() + (mParams.rowIndex > 0 ? "_" + mParams.rowIndex : ""));
931
+ j += parseInt(aVisibleColumns[j].getHeaderSpan()[mParams.rowIndex]) || 1;
932
+ }
933
+ } else {
934
+ if (TableUtils.hasRowHeader(oTable)) {
935
+ mAttributes["aria-owns"].push(sTableId + "-rowcolhdr");
936
+ }
937
+ for (let j = 0; j < TableUtils.getVisibleColumnCount(oTable); j++) {
938
+ mAttributes["aria-owns"].push(aVisibleColumns[j].getId());
939
+ }
911
940
  }
912
941
 
913
942
  if (TableUtils.hasRowActions(oTable)) {
@@ -978,6 +1007,10 @@ sap.ui.define([
978
1007
  mAttributes["aria-current"] = true;
979
1008
  }
980
1009
 
1010
+ if (mParams.fixedCol) {
1011
+ return mAttributes;
1012
+ }
1013
+
981
1014
  mAttributes["aria-owns"] = [];
982
1015
  if (TableUtils.hasRowHeader(oTable)) {
983
1016
  mAttributes["aria-owns"].push(sTableId + "-rowsel" + mParams.index);
@@ -1143,7 +1176,7 @@ sap.ui.define([
1143
1176
  * @class Extension for sap.ui.table.Table which handles ACC related things.
1144
1177
  * @extends sap.ui.table.extensions.ExtensionBase
1145
1178
  * @author SAP SE
1146
- * @version 1.142.0
1179
+ * @version 1.143.0
1147
1180
  * @constructor
1148
1181
  * @private
1149
1182
  * @alias sap.ui.table.extensions.Accessibility
@@ -44,7 +44,7 @@ sap.ui.define([
44
44
  * @class Extension for sap.ui.table.TableRenderer which handles ACC related things.
45
45
  * @extends sap.ui.table.extensions.ExtensionBase
46
46
  * @author SAP SE
47
- * @version 1.142.0
47
+ * @version 1.143.0
48
48
  * @constructor
49
49
  * @private
50
50
  * @alias sap.ui.table.extensions.AccessibilityRender
@@ -61,12 +61,12 @@ sap.ui.define([
61
61
  scrollVertically: TableUtils.throttle(function(oTable, bDown, iBase, iPercentage) {
62
62
  const oVerticalScrollbar = oTable._getScrollExtension().getVerticalScrollbar();
63
63
  oVerticalScrollbar.scrollTop += this.calculateScrollDistance(iBase, iPercentage) * (bDown ? 1 : -1);
64
- }, 50),
64
+ }, 50, {leading: false}),
65
65
 
66
66
  scrollHorizontally: TableUtils.throttle(function(oTable, bRight, iBase, iPercentage) {
67
67
  const oHorizontalScrollbar = oTable._getScrollExtension().getHorizontalScrollbar();
68
68
  oHorizontalScrollbar.scrollLeft += this.calculateScrollDistance(iBase, iPercentage) * (bRight ? 1 : -1);
69
- }, 50),
69
+ }, 50, {leading: false}),
70
70
 
71
71
  calculateScrollDistance: function(iBase, iPercentage) {
72
72
  const iMinDistance = 2;
@@ -274,7 +274,7 @@ sap.ui.define([
274
274
  *
275
275
  * @extends sap.ui.table.extensions.ExtensionBase
276
276
  * @author SAP SE
277
- * @version 1.142.0
277
+ * @version 1.143.0
278
278
  * @constructor
279
279
  * @private
280
280
  * @alias sap.ui.table.extensions.DragAndDrop
@@ -19,7 +19,7 @@ sap.ui.define([
19
19
  * @abstract
20
20
  * @extends sap.ui.base.Object
21
21
  * @author SAP SE
22
- * @version 1.142.0
22
+ * @version 1.143.0
23
23
  * @constructor
24
24
  * @private
25
25
  * @alias sap.ui.table.extensions.ExtensionBase
@@ -265,7 +265,7 @@ sap.ui.define([
265
265
  * @class Extension for sap.ui.table.Table which handles keyboard related things.
266
266
  * @extends sap.ui.table.extensions.ExtensionBase
267
267
  * @author SAP SE
268
- * @version 1.142.0
268
+ * @version 1.143.0
269
269
  * @constructor
270
270
  * @private
271
271
  * @alias sap.ui.table.extensions.Keyboard
@@ -64,7 +64,7 @@ sap.ui.define([
64
64
  *
65
65
  * @extends sap.ui.base.Object
66
66
  * @author SAP SE
67
- * @version 1.142.0
67
+ * @version 1.143.0
68
68
  * @constructor
69
69
  * @private
70
70
  * @alias sap.ui.table.extensions.KeyboardDelegate
@@ -670,7 +670,7 @@ sap.ui.define([
670
670
  * @class Extension for sap.ui.table.Table which handles mouse and touch related things.
671
671
  * @extends sap.ui.table.extensions.ExtensionBase
672
672
  * @author SAP SE
673
- * @version 1.142.0
673
+ * @version 1.143.0
674
674
  * @constructor
675
675
  * @private
676
676
  * @alias sap.ui.table.extensions.Pointer
@@ -2314,7 +2314,7 @@ sap.ui.define([
2314
2314
  * @class Extension for sap.ui.table.Table which handles scrolling.
2315
2315
  * @extends sap.ui.table.extensions.ExtensionBase
2316
2316
  * @author SAP SE
2317
- * @version 1.142.0
2317
+ * @version 1.143.0
2318
2318
  * @constructor
2319
2319
  * @private
2320
2320
  * @alias sap.ui.table.extensions.Scrolling
@@ -29,7 +29,7 @@ sap.ui.define([
29
29
  * @class Extension for sap.ui.table.Table which handles the scrollbar on iOS.
30
30
  * @extends sap.ui.table.extensions.ExtensionBase
31
31
  * @author SAP SE
32
- * @version 1.142.0
32
+ * @version 1.143.0
33
33
  * @constructor
34
34
  * @private
35
35
  * @alias sap.ui.table.extensions.ScrollingIOS
@@ -185,7 +185,7 @@ sap.ui.define([
185
185
  * @class Extension for sap.ui.table.Table that allows synchronization with a table.
186
186
  * @extends sap.ui.table.extensions.ExtensionBase
187
187
  * @author SAP SE
188
- * @version 1.142.0
188
+ * @version 1.143.0
189
189
  * @constructor
190
190
  * @private
191
191
  * @alias sap.ui.table.extensions.Synchronization