@openui5/sap.ui.table 1.138.0 → 1.139.1

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 (105) hide show
  1. package/README.md +1 -1
  2. package/REUSE.toml +8 -1
  3. package/THIRDPARTY.txt +73 -67
  4. package/package.json +4 -4
  5. package/src/sap/ui/table/.library +1 -1
  6. package/src/sap/ui/table/AnalyticalColumn.js +1 -1
  7. package/src/sap/ui/table/AnalyticalColumnMenu.js +1 -1
  8. package/src/sap/ui/table/AnalyticalTable.js +5 -9
  9. package/src/sap/ui/table/Column.js +1 -1
  10. package/src/sap/ui/table/ColumnMenu.js +1 -1
  11. package/src/sap/ui/table/CreationRow.js +1 -1
  12. package/src/sap/ui/table/Row.js +1 -1
  13. package/src/sap/ui/table/RowAction.js +1 -1
  14. package/src/sap/ui/table/RowActionItem.js +1 -1
  15. package/src/sap/ui/table/RowSettings.js +1 -1
  16. package/src/sap/ui/table/Table.js +5 -4
  17. package/src/sap/ui/table/TablePersoController.js +1 -1
  18. package/src/sap/ui/table/TableRenderer.js +2 -8
  19. package/src/sap/ui/table/TreeTable.js +2 -2
  20. package/src/sap/ui/table/extensions/Accessibility.js +39 -50
  21. package/src/sap/ui/table/extensions/AccessibilityRender.js +2 -2
  22. package/src/sap/ui/table/extensions/DragAndDrop.js +2 -2
  23. package/src/sap/ui/table/extensions/ExtensionBase.js +3 -33
  24. package/src/sap/ui/table/extensions/Keyboard.js +3 -3
  25. package/src/sap/ui/table/extensions/KeyboardDelegate.js +13 -26
  26. package/src/sap/ui/table/extensions/Pointer.js +2 -3
  27. package/src/sap/ui/table/extensions/Scrolling.js +2 -2
  28. package/src/sap/ui/table/extensions/ScrollingIOS.js +1 -1
  29. package/src/sap/ui/table/extensions/Synchronization.js +2 -2
  30. package/src/sap/ui/table/i18n/interaction.xml +4 -4
  31. package/src/sap/ui/table/i18n/interaction_ar.xml +22 -19
  32. package/src/sap/ui/table/i18n/interaction_bg.xml +7 -4
  33. package/src/sap/ui/table/i18n/interaction_ca.xml +7 -4
  34. package/src/sap/ui/table/i18n/interaction_cnr.xml +7 -4
  35. package/src/sap/ui/table/i18n/interaction_cs.xml +9 -6
  36. package/src/sap/ui/table/i18n/interaction_cy.xml +8 -5
  37. package/src/sap/ui/table/i18n/interaction_da.xml +7 -4
  38. package/src/sap/ui/table/i18n/interaction_de.xml +7 -4
  39. package/src/sap/ui/table/i18n/interaction_el.xml +7 -4
  40. package/src/sap/ui/table/i18n/interaction_en.xml +7 -4
  41. package/src/sap/ui/table/i18n/interaction_en_GB.xml +7 -4
  42. package/src/sap/ui/table/i18n/interaction_en_US_saprigi.xml +2 -2
  43. package/src/sap/ui/table/i18n/interaction_es.xml +7 -4
  44. package/src/sap/ui/table/i18n/interaction_es_MX.xml +7 -4
  45. package/src/sap/ui/table/i18n/interaction_et.xml +7 -4
  46. package/src/sap/ui/table/i18n/interaction_fi.xml +7 -4
  47. package/src/sap/ui/table/i18n/interaction_fr.xml +8 -5
  48. package/src/sap/ui/table/i18n/interaction_fr_CA.xml +7 -4
  49. package/src/sap/ui/table/i18n/interaction_hi.xml +7 -4
  50. package/src/sap/ui/table/i18n/interaction_hr.xml +13 -10
  51. package/src/sap/ui/table/i18n/interaction_hu.xml +7 -4
  52. package/src/sap/ui/table/i18n/interaction_id.xml +8 -5
  53. package/src/sap/ui/table/i18n/interaction_it.xml +8 -5
  54. package/src/sap/ui/table/i18n/interaction_iw.xml +14 -11
  55. package/src/sap/ui/table/i18n/interaction_ja.xml +8 -5
  56. package/src/sap/ui/table/i18n/interaction_kk.xml +9 -6
  57. package/src/sap/ui/table/i18n/interaction_ko.xml +7 -4
  58. package/src/sap/ui/table/i18n/interaction_lt.xml +7 -4
  59. package/src/sap/ui/table/i18n/interaction_lv.xml +7 -4
  60. package/src/sap/ui/table/i18n/interaction_mk.xml +9 -6
  61. package/src/sap/ui/table/i18n/interaction_ms.xml +7 -4
  62. package/src/sap/ui/table/i18n/interaction_nl.xml +9 -6
  63. package/src/sap/ui/table/i18n/interaction_no.xml +7 -4
  64. package/src/sap/ui/table/i18n/interaction_pl.xml +9 -6
  65. package/src/sap/ui/table/i18n/interaction_pt.xml +7 -4
  66. package/src/sap/ui/table/i18n/interaction_pt_PT.xml +7 -4
  67. package/src/sap/ui/table/i18n/interaction_ro.xml +7 -4
  68. package/src/sap/ui/table/i18n/interaction_ru.xml +7 -4
  69. package/src/sap/ui/table/i18n/interaction_sh.xml +7 -4
  70. package/src/sap/ui/table/i18n/interaction_sk.xml +7 -4
  71. package/src/sap/ui/table/i18n/interaction_sl.xml +8 -5
  72. package/src/sap/ui/table/i18n/interaction_sr.xml +7 -4
  73. package/src/sap/ui/table/i18n/interaction_sv.xml +7 -4
  74. package/src/sap/ui/table/i18n/interaction_th.xml +10 -7
  75. package/src/sap/ui/table/i18n/interaction_tr.xml +7 -4
  76. package/src/sap/ui/table/i18n/interaction_uk.xml +7 -4
  77. package/src/sap/ui/table/i18n/interaction_vi.xml +7 -4
  78. package/src/sap/ui/table/i18n/interaction_zh_CN.xml +7 -4
  79. package/src/sap/ui/table/i18n/interaction_zh_TW.xml +11 -8
  80. package/src/sap/ui/table/library.js +10 -10
  81. package/src/sap/ui/table/menus/AnalyticalTableContextMenu.js +1 -1
  82. package/src/sap/ui/table/menus/ColumnHeaderMenuAdapter.js +1 -1
  83. package/src/sap/ui/table/menus/ContextMenu.js +1 -1
  84. package/src/sap/ui/table/menus/MobileColumnHeaderMenuAdapter.js +1 -1
  85. package/src/sap/ui/table/messagebundle_cy.properties +1 -1
  86. package/src/sap/ui/table/messagebundle_id.properties +2 -2
  87. package/src/sap/ui/table/messagebundle_lv.properties +1 -1
  88. package/src/sap/ui/table/messagebundle_ru.properties +1 -1
  89. package/src/sap/ui/table/plugins/BindingSelection.js +1 -1
  90. package/src/sap/ui/table/plugins/MultiSelectionPlugin.js +28 -11
  91. package/src/sap/ui/table/plugins/ODataV4Selection.js +8 -15
  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/plugins/V4Aggregation.js +1 -1
  96. package/src/sap/ui/table/rowmodes/Auto.js +1 -1
  97. package/src/sap/ui/table/rowmodes/Fixed.js +1 -1
  98. package/src/sap/ui/table/rowmodes/Interactive.js +1 -1
  99. package/src/sap/ui/table/rowmodes/RowMode.js +1 -1
  100. package/src/sap/ui/table/rowmodes/Variable.js +1 -1
  101. package/src/sap/ui/table/utils/TableUtils.js +1 -1
  102. package/src/sap/ui/table/utils/_ColumnUtils.js +13 -11
  103. package/src/sap/ui/table/utils/_GroupingUtils.js +1 -1
  104. package/src/sap/ui/table/utils/_HookUtils.js +1 -1
  105. package/src/sap/ui/table/utils/_MenuUtils.js +1 -1
@@ -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.138.0
35
+ * @version 1.139.1
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.138.0
138
+ * @version 1.139.1
139
139
  *
140
140
  * @constructor
141
141
  * @public
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  * If more action items are available as the available space allows to display an overflow mechanism is provided.
36
36
  * This control must only be used in the context of the <code>sap.ui.table.Table</code> control to define row actions.
37
37
  * @extends sap.ui.core.Control
38
- * @version 1.138.0
38
+ * @version 1.139.1
39
39
  *
40
40
  * @constructor
41
41
  * @public
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.core.Element
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.138.0
27
+ * @version 1.139.1
28
28
  * @since 1.45
29
29
  *
30
30
  * @constructor
@@ -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.138.0
30
+ * @version 1.139.1
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.138.0
109
+ * @version 1.139.1
110
110
  *
111
111
  * @constructor
112
112
  * @public
@@ -2506,12 +2506,13 @@ sap.ui.define([
2506
2506
  * @see sap.ui.model.ListBinding#getContexts
2507
2507
  */
2508
2508
  Table.prototype._getContexts = function(iStartIndex, iLength, iThreshold, bKeepCurrent) {
2509
- if (!this.getVisible()) {
2509
+ const oBinding = this.getBinding();
2510
+
2511
+ if (!oBinding || !this.getVisible() && oBinding.isSuspended()) {
2510
2512
  return [];
2511
2513
  }
2512
2514
 
2513
- const oBinding = this.getBinding();
2514
- return oBinding ? oBinding.getContexts(iStartIndex, iLength, iThreshold, bKeepCurrent) : [];
2515
+ return oBinding.getContexts(iStartIndex, iLength, iThreshold, bKeepCurrent);
2515
2516
  };
2516
2517
 
2517
2518
  /**
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.base.ManagedObject
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.138.0
37
+ * @version 1.139.1
38
38
  * @since 1.21.1
39
39
  *
40
40
  * @constructor
@@ -390,12 +390,8 @@ sap.ui.define([
390
390
  rm.class("sapUiTableHeaderCell");
391
391
  rm.class("sapUiTableRowActionHeaderCell");
392
392
  rm.attr("tabindex", "-1");
393
+ rm.attr("aria-label", TableUtils.getResourceText("TBL_ROW_ACTION_COLUMN_LABEL"));
393
394
  rm.openEnd();
394
- rm.openStart("span");
395
-
396
- rm.openEnd();
397
- rm.text(TableUtils.getResourceText("TBL_ROW_ACTION_COLUMN_LABEL"));
398
- rm.close("span");
399
395
 
400
396
  rm.close("div");
401
397
  }
@@ -508,8 +504,7 @@ sap.ui.define([
508
504
 
509
505
  const mAccParams = {
510
506
  column: oColumn,
511
- headerId: sHeaderId,
512
- index: iIndex
507
+ headerId: sHeaderId
513
508
  };
514
509
 
515
510
  if (nSpan > 1) {
@@ -1151,7 +1146,6 @@ sap.ui.define([
1151
1146
  const bIsLastFixedColumn = bFixedTable && iLastFixedColumnIndex === iColIndex;
1152
1147
 
1153
1148
  const oParams = {
1154
- index: iColIndex,
1155
1149
  column: oColumn,
1156
1150
  row: oRow,
1157
1151
  fixed: bFixedTable,
@@ -36,7 +36,7 @@ sap.ui.define([
36
36
  * @class
37
37
  * The TreeTable control provides a comprehensive set of features to display hierarchical data.
38
38
  * @extends sap.ui.table.Table
39
- * @version 1.138.0
39
+ * @version 1.139.1
40
40
  *
41
41
  * @constructor
42
42
  * @public
@@ -265,7 +265,7 @@ sap.ui.define([
265
265
  };
266
266
 
267
267
  TreeTable.prototype._getContexts = function(iStartIndex, iLength, iThreshold, bKeepCurrent) {
268
- if (!this.getVisible()) {
268
+ if (!this.getVisible() && this.getBinding()?.isSuspended()) {
269
269
  return [];
270
270
  }
271
271
 
@@ -371,9 +371,9 @@ sap.ui.define([
371
371
  * @see ExtensionHelper.getRowColChange
372
372
  * @see ExtensionHelper.storeDefaultsBeforeCellModifications
373
373
  */
374
- performCellModifications: function(oExtension, $Cell, aDefaultLabels, aDefaultDescriptions, aLabels, aDescriptions, sText, fAdapt) {
374
+ performCellModifications: function(oExtension, $Cell, aDefaultLabels, aDefaultDescriptions, aLabels, aDescriptions, sText, oChangeInfo, fAdapt) {
375
375
  ExtensionHelper.storeDefaultsBeforeCellModifications(oExtension, $Cell, aDefaultLabels, aDefaultDescriptions);
376
- const oChangeInfo = ExtensionHelper.getRowColChange(oExtension);
376
+
377
377
  const oTable = oExtension.getTable();
378
378
  const sTableId = oTable.getId();
379
379
  oTable.$("cellacc").text(sText || "."); //set the custom text to the prepared hidden element
@@ -406,7 +406,7 @@ sap.ui.define([
406
406
  * Modifies the labels and descriptions of a data cell.
407
407
  * @see ExtensionHelper.performCellModifications
408
408
  */
409
- modifyAccOfDataCell: function(oCellInfo) {
409
+ modifyAccOfDataCell: function(oCellInfo, oChangeInfo) {
410
410
  const oTable = this.getTable();
411
411
  const sTableId = oTable.getId();
412
412
  const oIN = oTable._getItemNavigation();
@@ -424,13 +424,8 @@ sap.ui.define([
424
424
  const sRowId = oRow.getId();
425
425
  const bHidden = ExtensionHelper.isHiddenCell($Cell, oTableInstances.cell, oRow);
426
426
  const bIsTreeColumnCell = ExtensionHelper.isTreeColumnCell(this, $Cell);
427
- const aDefaultLabels = ExtensionHelper.getAriaAttributesForDataCell(this, {
428
- index: iCol,
429
- column: oTableInstances.column,
430
- fixed: TableUtils.isFixedColumn(oTable, iCol)
431
- })["aria-labelledby"] || [];
432
427
  const aDescriptions = [];
433
- let aLabels = [];
428
+ const aLabels = [];
434
429
  const bIsGroupHeader = oRow.isGroupHeader();
435
430
  const bIsSummary = oRow.isSummary();
436
431
 
@@ -442,12 +437,10 @@ sap.ui.define([
442
437
  aLabels.push(sTableId + "-ariagrouptotallabel");
443
438
  }
444
439
 
445
- if (TableUtils.hasRowHighlights(oTable) && !bIsGroupHeader && !bIsSummary) {
440
+ if (TableUtils.hasRowHighlights(oTable) && !bIsGroupHeader && !bIsSummary && oChangeInfo.rowChange) {
446
441
  aLabels.push(sRowId + "-highlighttext");
447
442
  }
448
443
 
449
- aLabels = aLabels.concat(aDefaultLabels);
450
-
451
444
  if (!bHidden && oTableInstances.cell) {
452
445
  oInfo = ACCInfoHelper.getAccInfoOfControl(oTableInstances.cell);
453
446
  aLabels.push(oInfo ? (sTableId + "-cellacc") : oTableInstances.cell.getId());
@@ -468,7 +461,7 @@ sap.ui.define([
468
461
  }
469
462
  }
470
463
 
471
- ExtensionHelper.performCellModifications(this, $Cell, aDefaultLabels, null, aLabels, aDescriptions, sText,
464
+ ExtensionHelper.performCellModifications(this, $Cell, null, null, aLabels, aDescriptions, sText, oChangeInfo,
472
465
  function(aLabels, aDescriptions, bRowChange, bColChange) {
473
466
  if (bIsGroupHeader && bRowChange) {
474
467
  aLabels.splice(1, 0, sRowId + "-groupHeader");
@@ -488,7 +481,7 @@ sap.ui.define([
488
481
  * Modifies the labels and descriptions of a row header cell.
489
482
  * @see ExtensionHelper.performCellModifications
490
483
  */
491
- modifyAccOfRowHeader: function(oCellInfo) {
484
+ modifyAccOfRowHeader: function(oCellInfo, oChangeInfo) {
492
485
  const oTable = this.getTable();
493
486
  const sTableId = oTable.getId();
494
487
  const $Cell = jQuery(oCellInfo.cell);
@@ -500,7 +493,7 @@ sap.ui.define([
500
493
  if (!oRow.isSummary() && !oRow.isGroupHeader() && !oRow.isContentHidden()) {
501
494
  aLabels.push(sRowId + "-rowselecttext");
502
495
 
503
- if (TableUtils.hasRowHighlights(oTable)) {
496
+ if (TableUtils.hasRowHighlights(oTable) && oChangeInfo.rowChange) {
504
497
  aLabels.push(sRowId + "-highlighttext");
505
498
  }
506
499
  }
@@ -517,31 +510,26 @@ sap.ui.define([
517
510
  aLabels.push(sTableId + "-ariagrouptotallabel");
518
511
  }
519
512
 
520
- ExtensionHelper.performCellModifications(this, $Cell, aDefaultLabels, null, aLabels, null, null);
513
+ ExtensionHelper.performCellModifications(this, $Cell, aDefaultLabels, null, aLabels, null, null, oChangeInfo);
521
514
  },
522
515
 
523
516
  /*
524
517
  * Modifies the labels and descriptions of a column header cell.
525
518
  * @see ExtensionHelper.performCellModifications
526
519
  */
527
- modifyAccOfColumnHeader: function(oCellInfo) {
520
+ modifyAccOfColumnHeader: function(oCellInfo, oChangeInfo) {
528
521
  const oTable = this.getTable();
529
522
  const $Cell = jQuery(oCellInfo.cell);
530
523
  const oColumn = Element.getElementById($Cell.attr("data-sap-ui-colid"));
531
- const oColumnLabel = TableUtils.Column.getHeaderLabel(oColumn);
532
524
  const mAttributes = ExtensionHelper.getAriaAttributesForColumnHeader(this, {
533
525
  headerId: $Cell.attr("id"),
534
526
  column: oColumn,
535
- index: $Cell.attr("data-sap-ui-colindex")
527
+ index: oTable._getVisibleColumns().indexOf(oColumn)
536
528
  });
537
529
  const sText = ExtensionHelper.getColumnTooltip(oColumn);
538
530
  const aLabels = mAttributes["aria-labelledby"] || [];
539
531
  const iSpan = oCellInfo.columnSpan;
540
532
 
541
- if (oColumnLabel?.getRequired?.()) {
542
- aLabels.push(oTable.getId() + "-ariarequired");
543
- }
544
-
545
533
  if (iSpan > 1) {
546
534
  aLabels.push(oTable.getId() + "-ariacolspan");
547
535
  // Update Span information
@@ -556,12 +544,8 @@ sap.ui.define([
556
544
  aLabels.push(oTable.getId() + "-ariacolfiltered");
557
545
  }
558
546
 
559
- if (aLabels.length > 0) {
560
- aLabels.unshift($Cell.attr("id") + "-inner");
561
- }
562
-
563
547
  ExtensionHelper.performCellModifications(this, $Cell, mAttributes["aria-labelledby"], mAttributes["aria-describedby"],
564
- aLabels, mAttributes["aria-describedby"], sText
548
+ aLabels, mAttributes["aria-describedby"], sText, oChangeInfo
565
549
  );
566
550
  },
567
551
 
@@ -569,7 +553,7 @@ sap.ui.define([
569
553
  * Modifies the labels and descriptions of the column row header.
570
554
  * @see ExtensionHelper.performCellModifications
571
555
  */
572
- modifyAccOfColumnRowHeader: function(oCellInfo) {
556
+ modifyAccOfColumnRowHeader: function(oCellInfo, oChangeInfo) {
573
557
  const oTable = this.getTable();
574
558
  const $Cell = jQuery(oCellInfo.cell);
575
559
  const bEnabled = $Cell.hasClass("sapUiTableSelAllVisible");
@@ -580,7 +564,7 @@ sap.ui.define([
580
564
  );
581
565
  const aLabels = mAttributes["aria-labelledby"] || [];
582
566
  ExtensionHelper.performCellModifications(this, $Cell, [], mAttributes["aria-describedby"],
583
- aLabels, mAttributes["aria-describedby"], null
567
+ aLabels, mAttributes["aria-describedby"], null, oChangeInfo
584
568
  );
585
569
  },
586
570
 
@@ -588,7 +572,7 @@ sap.ui.define([
588
572
  * Modifies the labels and descriptions of a row action cell.
589
573
  * @see ExtensionHelper.performCellModifications
590
574
  */
591
- modifyAccOfRowAction: function(oCellInfo) {
575
+ modifyAccOfRowAction: function(oCellInfo, oChangeInfo) {
592
576
  const oTable = this.getTable();
593
577
  const sTableId = oTable.getId();
594
578
  const $Cell = jQuery(oCellInfo.cell);
@@ -611,7 +595,7 @@ sap.ui.define([
611
595
  aLabels.push(sTableId + "-ariagrouptotallabel");
612
596
  }
613
597
 
614
- if (TableUtils.hasRowHighlights(oTable) && !oRow.isGroupHeader() && !oRow.isSummary()) {
598
+ if (TableUtils.hasRowHighlights(oTable) && !oRow.isGroupHeader() && !oRow.isSummary() && oChangeInfo.rowChange) {
615
599
  aLabels.push(sRowId + "-highlighttext");
616
600
  }
617
601
 
@@ -627,7 +611,7 @@ sap.ui.define([
627
611
  }
628
612
  }
629
613
 
630
- ExtensionHelper.performCellModifications(this, $Cell, aDefaultLabels, [], aLabels, aDescriptions, sText,
614
+ ExtensionHelper.performCellModifications(this, $Cell, aDefaultLabels, [], aLabels, aDescriptions, sText, oChangeInfo,
631
615
  function(aLabels, aDescriptions, bRowChange) {
632
616
  if (bIsGroupHeader && bRowChange) {
633
617
  const iIndex = aLabels.indexOf(sTableId + "-ariarowgrouplabel") + 1;
@@ -676,12 +660,12 @@ sap.ui.define([
676
660
  if (mRenderConfig.headerSelector.visible) {
677
661
  if (mRenderConfig.headerSelector.type === "toggle") {
678
662
  mAttributes["role"] = ["checkbox"];
679
- if (mParams && mParams.enabled) {
663
+ if (mParams.enabled) {
680
664
  mAttributes["aria-checked"] = mParams.checked ? "true" : "false";
681
665
  }
682
666
  } else if (mRenderConfig.headerSelector.type === "custom") {
683
667
  mAttributes["role"] = ["button"];
684
- if (!mParams || !mParams.enabled) {
668
+ if (!mParams.enabled) {
685
669
  mAttributes["aria-disabled"] = "true";
686
670
  }
687
671
  }
@@ -750,14 +734,21 @@ sap.ui.define([
750
734
  const oTable = oExtension.getTable();
751
735
  const sTableId = oTable.getId();
752
736
 
753
- const oColumn = mParams && mParams.column;
754
- const bHasColSpan = mParams && mParams.colspan;
737
+ const oColumn = mParams.column;
738
+ const iColIndex = oTable._getVisibleColumns().indexOf(oColumn);
739
+ const bHasColSpan = mParams.colspan;
740
+ const oColumnLabel = TableUtils.Column.getHeaderLabel(oColumn);
755
741
 
756
742
  mAttributes["role"] = "columnheader";
757
- mAttributes["aria-colindex"] = mParams.index + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
743
+ mAttributes["aria-colindex"] = iColIndex + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
758
744
 
759
- if (mParams && (mParams.index < oTable.getComputedFixedColumnCount())) {
760
- mAttributes["aria-labelledby"] = [sTableId + "-ariafixedcolumn"];
745
+ mAttributes["aria-labelledby"] = [mParams.headerId + "-inner"];
746
+ if (iColIndex < oTable.getComputedFixedColumnCount()) {
747
+ mAttributes["aria-labelledby"].push([sTableId + "-ariafixedcolumn"]);
748
+ }
749
+
750
+ if (oColumnLabel?.getRequired?.()) {
751
+ mAttributes["aria-labelledby"].push(sTableId + "-ariarequired");
761
752
  }
762
753
 
763
754
  if (!bHasColSpan && oColumn) {
@@ -787,7 +778,7 @@ sap.ui.define([
787
778
  * Returns the aria attributes for a data cell.
788
779
  *
789
780
  * @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
790
- * @param {{index: int, column: sap.ui.table.Column, row: sap.ui.table.Row, fixed: boolean, rowSelected: boolean}} mParams An object
781
+ * @param {{index: int}} mParams An object
791
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
792
783
  * selected
793
784
  * @returns {object} An object containing the aria attributes
@@ -795,14 +786,11 @@ sap.ui.define([
795
786
  getAriaAttributesForDataCell: function(oExtension, mParams) {
796
787
  const mAttributes = {};
797
788
  const oTable = oExtension.getTable();
798
- const sTableId = oTable.getId();
789
+ const oColumn = mParams.column;
799
790
 
800
791
  mAttributes["role"] = "gridcell";
801
- mAttributes["aria-colindex"] = mParams.index + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
792
+ mAttributes["aria-colindex"] = oTable._getVisibleColumns().indexOf(oColumn) + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
802
793
 
803
- if (mParams.column && mParams.fixed) {
804
- mAttributes["aria-labelledby"] = [sTableId + "-ariafixedcolumn"];
805
- }
806
794
  return mAttributes;
807
795
  },
808
796
 
@@ -1024,7 +1012,7 @@ sap.ui.define([
1024
1012
  "role": ""
1025
1013
  };
1026
1014
  if (oTable.getBinding()) {
1027
- if (mParams && mParams.row) {
1015
+ if (mParams.row) {
1028
1016
  if (mParams.row.isExpandable()) {
1029
1017
  const sText = TableUtils.getResourceText("TBL_COLLAPSE_EXPAND");
1030
1018
  mAttributes["title"] = sText;
@@ -1155,7 +1143,7 @@ sap.ui.define([
1155
1143
  * @class Extension for sap.ui.table.Table which handles ACC related things.
1156
1144
  * @extends sap.ui.table.extensions.ExtensionBase
1157
1145
  * @author SAP SE
1158
- * @version 1.138.0
1146
+ * @version 1.139.1
1159
1147
  * @constructor
1160
1148
  * @private
1161
1149
  * @alias sap.ui.table.extensions.Accessibility
@@ -1166,7 +1154,7 @@ sap.ui.define([
1166
1154
  * @inheritDoc
1167
1155
  * @returns {string} The name of this extension.
1168
1156
  */
1169
- _init: function(oTable, sTableType, mSettings) {
1157
+ _init: function(oTable, mSettings) {
1170
1158
  this._accMode = ControlBehavior.isAccessibilityEnabled();
1171
1159
  this._busyCells = [];
1172
1160
 
@@ -1379,7 +1367,8 @@ sap.ui.define([
1379
1367
  }
1380
1368
  }
1381
1369
 
1382
- ExtensionHelper["modifyAccOf" + sCellType].apply(this, [oInfo]);
1370
+ const oChangeInfo = ExtensionHelper.getRowColChange(this);
1371
+ ExtensionHelper["modifyAccOf" + sCellType].apply(this, [oInfo, oChangeInfo]);
1383
1372
  };
1384
1373
 
1385
1374
  /**
@@ -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.138.0
47
+ * @version 1.139.1
48
48
  * @constructor
49
49
  * @private
50
50
  * @alias sap.ui.table.extensions.AccessibilityRender
@@ -56,7 +56,7 @@ sap.ui.define([
56
56
  * @inheritDoc
57
57
  * @returns {string} The name of this extension.
58
58
  */
59
- _init: function(oTable, sTableType, mSettings) {
59
+ _init: function(oTable, mSettings) {
60
60
  return "AccRenderExtension";
61
61
  },
62
62
 
@@ -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.138.0
277
+ * @version 1.139.1
278
278
  * @constructor
279
279
  * @private
280
280
  * @alias sap.ui.table.extensions.DragAndDrop
@@ -286,7 +286,7 @@ sap.ui.define([
286
286
  * @inheritDoc
287
287
  * @returns {string} The name of this extension.
288
288
  */
289
- _init: function(oTable, sTableType, mSettings) {
289
+ _init: function(oTable, mSettings) {
290
290
  this._oDelegate = ExtensionDelegate;
291
291
 
292
292
  TableUtils.addDelegate(oTable, this._oDelegate, oTable);
@@ -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.138.0
22
+ * @version 1.139.1
23
23
  * @constructor
24
24
  * @private
25
25
  * @alias sap.ui.table.extensions.ExtensionBase
@@ -33,14 +33,6 @@ sap.ui.define([
33
33
  */
34
34
  _table: null,
35
35
 
36
- /**
37
- * The type of the table this extension is applied to.
38
- *
39
- * @type {sap.ui.table.extensions.ExtensionBase.TABLETYPES}
40
- * @protected
41
- */
42
- _type: null,
43
-
44
36
  /**
45
37
  * The settings this extension instance has been initialized with.
46
38
  *
@@ -55,14 +47,7 @@ sap.ui.define([
55
47
  this._table = oTable;
56
48
  this._settings = mSettings || {};
57
49
 
58
- this._type = ExtensionBase.TABLETYPES.STANDARD;
59
- if (oTable.isA("sap.ui.table.TreeTable")) {
60
- this._type = ExtensionBase.TABLETYPES.TREE;
61
- } else if (oTable.isA("sap.ui.table.AnalyticalTable")) {
62
- this._type = ExtensionBase.TABLETYPES.ANALYTICAL;
63
- }
64
-
65
- const sExtensionName = this._init(this._table, this._type, this._settings);
50
+ const sExtensionName = this._init(this._table, this._settings);
66
51
 
67
52
  // Attach a getter to the table to get the instance of this extension.
68
53
  if (sExtensionName) {
@@ -77,7 +62,6 @@ sap.ui.define([
77
62
  */
78
63
  destroy: function() {
79
64
  this._table = null;
80
- this._type = null;
81
65
  this.bIsDestroyed = true;
82
66
  BaseObject.prototype.destroy.apply(this, arguments);
83
67
  },
@@ -89,19 +73,6 @@ sap.ui.define([
89
73
  getInterface: function() { return this; }
90
74
  });
91
75
 
92
- /**
93
- * Type of the table.
94
- *
95
- * @type {{TREE: string, ANALYTICAL: string, STANDARD: string}}
96
- * @public
97
- * @static
98
- */
99
- ExtensionBase.TABLETYPES = {
100
- TREE: "TREE",
101
- ANALYTICAL: "ANALYTICAL",
102
- STANDARD: "STANDARD"
103
- };
104
-
105
76
  /**
106
77
  * Returns the related table control.
107
78
  *
@@ -117,13 +88,12 @@ sap.ui.define([
117
88
  * Initialize the extension.
118
89
  *
119
90
  * @param {sap.ui.table.Table} oTable Instance of the table.
120
- * @param {sap.ui.table.extensions.ExtensionBase.TABLETYPES} sTableType The type of the table.
121
91
  * @param {Object} [mSettings] Additional settings.
122
92
  * @returns {string|null} Derived classes should return the name of the extension.
123
93
  * @abstract
124
94
  * @protected
125
95
  */
126
- ExtensionBase.prototype._init = function(oTable, sTableType, mSettings) { return null; };
96
+ ExtensionBase.prototype._init = function(oTable, mSettings) { return null; };
127
97
 
128
98
  /**
129
99
  * Hook which allows the extension to attach for additional native event listeners after the rendering of the table control.
@@ -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.138.0
268
+ * @version 1.139.1
269
269
  * @constructor
270
270
  * @private
271
271
  * @alias sap.ui.table.extensions.Keyboard
@@ -277,11 +277,11 @@ sap.ui.define([
277
277
  * @inheritDoc
278
278
  * @returns {string} The name of this extension.
279
279
  */
280
- _init: function(oTable, sTableType, mSettings) {
280
+ _init: function(oTable, mSettings) {
281
281
  this._itemNavigation = null;
282
282
  this._itemNavigationInvalidated = false; // determines whether item navigation should be reapplied from scratch
283
283
  this._itemNavigationSuspended = false; // switch off event forwarding to item navigation
284
- this._delegate = new KeyboardDelegate(sTableType);
284
+ this._delegate = new KeyboardDelegate();
285
285
  this._actionMode = false;
286
286
 
287
287
  // Register the delegates in correct order
@@ -64,30 +64,12 @@ sap.ui.define([
64
64
  *
65
65
  * @extends sap.ui.base.Object
66
66
  * @author SAP SE
67
- * @version 1.138.0
67
+ * @version 1.139.1
68
68
  * @constructor
69
69
  * @private
70
70
  * @alias sap.ui.table.extensions.KeyboardDelegate
71
71
  */
72
- const KeyboardDelegate = BaseObject.extend("sap.ui.table.extensions.KeyboardDelegate", /* @lends sap.ui.table.extensions.KeyboardDelegate */ {
73
- constructor: function(sType) {
74
- BaseObject.call(this);
75
- },
76
-
77
- /*
78
- * @see sap.ui.base.Object#destroy
79
- */
80
- destroy: function() {
81
- BaseObject.prototype.destroy.apply(this, arguments);
82
- },
83
-
84
- /*
85
- * @see sap.ui.base.Object#getInterface
86
- */
87
- getInterface: function() {
88
- return this;
89
- }
90
- });
72
+ const KeyboardDelegate = BaseObject.extend("sap.ui.table.extensions.KeyboardDelegate");
91
73
 
92
74
  /**
93
75
  * Moves the focus one row down, but stays in the same column. The focus is set to the cell, or the first interactive element inside that cell.
@@ -406,6 +388,9 @@ sap.ui.define([
406
388
  } else if (oCellInfo.isOfType(CellType.ROWHEADER)) {
407
389
  selectItems();
408
390
 
391
+ } else if (oCellInfo.isOfType(CellType.COLUMNHEADER)) {
392
+ TableUtils.Menu.openContextMenu(oTable, oEvent);
393
+
409
394
  } else if (oCellInfo.isOfType(CellType.DATACELL | CellType.ROWACTION)) {
410
395
  // The action mode should only be entered when cellClick is not handled and no selection is performed.
411
396
  let bEnterActionMode = !oTable.hasListeners("cellClick");
@@ -832,7 +817,13 @@ sap.ui.define([
832
817
  const oBusyIndicator = this.getDomRef("busyIndicator");
833
818
  if (oBusyIndicator) {
834
819
  oKeyboardExtension.setSilentFocus(oBusyIndicator);
835
- } else if (this.getColumnHeaderVisible() && (TableUtils.getVisibleColumnCount(this) || TableUtils.hasRowHeader(this))) {
820
+ } else if (!this.getColumnHeaderVisible()) {
821
+ if (this.getRows().length && !TableUtils.isNoDataVisible(this)) {
822
+ restoreFocusOnLastFocusedDataCell(this, oEvent);
823
+ } else if (bNoData) {
824
+ oKeyboardExtension.setSilentFocus(this.$("noDataCnt"));
825
+ }
826
+ } else if (TableUtils.getVisibleColumnCount(this) || TableUtils.hasRowHeader(this)) {
836
827
  setFocusOnColumnHeaderOfLastFocusedDataCell(this, oEvent);
837
828
  } else if (bNoData) {
838
829
  oKeyboardExtension.setSilentFocus(this.$("noDataCnt"));
@@ -1024,11 +1015,7 @@ sap.ui.define([
1024
1015
  delete this._oRangeSelection;
1025
1016
  }
1026
1017
 
1027
- if (oCellInfo.isOfType(CellType.COLUMNHEADER)) {
1028
- if (KeyboardDelegate._isKeyCombination(oEvent, KeyCodes.SPACE) || KeyboardDelegate._isKeyCombination(oEvent, KeyCodes.ENTER)) {
1029
- TableUtils.Menu.openContextMenu(this, oEvent);
1030
- }
1031
- } else if (KeyboardDelegate._isKeyCombination(oEvent, KeyCodes.SPACE)) {
1018
+ if (KeyboardDelegate._isKeyCombination(oEvent, KeyCodes.SPACE)) {
1032
1019
  handleSpaceAndEnter(this, oEvent);
1033
1020
  } else if (KeyboardDelegate._isKeyCombination(oEvent, KeyCodes.SPACE, ModKey.SHIFT)) {
1034
1021
  TableUtils.toggleRowSelection(this, oCellInfo.rowIndex);
@@ -668,7 +668,7 @@ sap.ui.define([
668
668
  * @class Extension for sap.ui.table.Table which handles mouse and touch related things.
669
669
  * @extends sap.ui.table.extensions.ExtensionBase
670
670
  * @author SAP SE
671
- * @version 1.138.0
671
+ * @version 1.139.1
672
672
  * @constructor
673
673
  * @private
674
674
  * @alias sap.ui.table.extensions.Pointer
@@ -680,7 +680,7 @@ sap.ui.define([
680
680
  * @inheritDoc
681
681
  * @returns {string} The name of this extension.
682
682
  */
683
- _init: function(oTable, sTableType, mSettings) {
683
+ _init: function(oTable, mSettings) {
684
684
  this._delegate = ExtensionDelegate;
685
685
 
686
686
  // Register the delegate
@@ -688,7 +688,6 @@ sap.ui.define([
688
688
 
689
689
  oTable._iLastHoveredVisibleColumnIndex = 0;
690
690
  oTable._bIsColumnResizerMoving = false;
691
- oTable._iFirstReorderableIndex = sTableType === ExtensionBase.TABLETYPES.TREE ? 1 : 0;
692
691
 
693
692
  return "PointerExtension";
694
693
  },
@@ -2327,7 +2327,7 @@ sap.ui.define([
2327
2327
  * @class Extension for sap.ui.table.Table which handles scrolling.
2328
2328
  * @extends sap.ui.table.extensions.ExtensionBase
2329
2329
  * @author SAP SE
2330
- * @version 1.138.0
2330
+ * @version 1.139.1
2331
2331
  * @constructor
2332
2332
  * @private
2333
2333
  * @alias sap.ui.table.extensions.Scrolling
@@ -2338,7 +2338,7 @@ sap.ui.define([
2338
2338
  * @inheritDoc
2339
2339
  * @returns {string} The name of this extension.
2340
2340
  */
2341
- _init: function(oTable, sTableType, mSettings) {
2341
+ _init: function(oTable, mSettings) {
2342
2342
  const _ = _private(oTable);
2343
2343
 
2344
2344
  // Horizontal scrolling
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @class Extension for sap.ui.table.Table which handles the scrollbar on iOS.
28
28
  * @extends sap.ui.table.extensions.ExtensionBase
29
29
  * @author SAP SE
30
- * @version 1.138.0
30
+ * @version 1.139.1
31
31
  * @constructor
32
32
  * @private
33
33
  * @alias sap.ui.table.extensions.ScrollingIOS