@openui5/sap.ui.table 1.132.1 → 1.134.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.
- package/.reuse/dep5 +2 -9
- package/LICENSES/LicenseRef-Unicode-3.0.txt +39 -0
- package/THIRDPARTY.txt +45 -78
- package/package.json +3 -3
- package/src/sap/ui/table/.library +1 -1
- package/src/sap/ui/table/AnalyticalColumn.js +18 -13
- package/src/sap/ui/table/AnalyticalColumnMenu.js +1 -1
- package/src/sap/ui/table/AnalyticalTable.js +7 -3
- package/src/sap/ui/table/Column.js +1 -1
- package/src/sap/ui/table/ColumnMenu.js +1 -1
- package/src/sap/ui/table/CreationRow.js +1 -1
- package/src/sap/ui/table/CreationRowRenderer.js +2 -2
- package/src/sap/ui/table/Row.js +1 -1
- package/src/sap/ui/table/RowAction.js +1 -1
- package/src/sap/ui/table/RowActionItem.js +1 -1
- package/src/sap/ui/table/RowSettings.js +6 -6
- package/src/sap/ui/table/Table.js +22 -8
- package/src/sap/ui/table/TablePersoController.js +1 -1
- package/src/sap/ui/table/TableRenderer.js +48 -49
- package/src/sap/ui/table/TreeTable.js +7 -3
- package/src/sap/ui/table/extensions/Accessibility.js +535 -375
- package/src/sap/ui/table/extensions/AccessibilityRender.js +1 -9
- package/src/sap/ui/table/extensions/DragAndDrop.js +1 -1
- package/src/sap/ui/table/extensions/ExtensionBase.js +1 -1
- package/src/sap/ui/table/extensions/Keyboard.js +2 -4
- package/src/sap/ui/table/extensions/KeyboardDelegate.js +9 -46
- package/src/sap/ui/table/extensions/Pointer.js +1 -1
- package/src/sap/ui/table/extensions/Scrolling.js +1 -1
- package/src/sap/ui/table/extensions/ScrollingIOS.js +1 -1
- package/src/sap/ui/table/extensions/Synchronization.js +1 -1
- package/src/sap/ui/table/library.js +11 -11
- package/src/sap/ui/table/menus/AnalyticalTableContextMenu.js +1 -1
- package/src/sap/ui/table/menus/ColumnHeaderMenuAdapter.js +1 -1
- package/src/sap/ui/table/menus/ContextMenu.js +1 -1
- package/src/sap/ui/table/menus/MobileColumnHeaderMenuAdapter.js +54 -44
- package/src/sap/ui/table/messagebundle.properties +10 -14
- package/src/sap/ui/table/messagebundle_ar.properties +6 -9
- package/src/sap/ui/table/messagebundle_bg.properties +6 -9
- package/src/sap/ui/table/messagebundle_ca.properties +6 -9
- package/src/sap/ui/table/messagebundle_cnr.properties +6 -9
- package/src/sap/ui/table/messagebundle_cs.properties +6 -9
- package/src/sap/ui/table/messagebundle_cy.properties +6 -9
- package/src/sap/ui/table/messagebundle_da.properties +6 -9
- package/src/sap/ui/table/messagebundle_de.properties +4 -7
- package/src/sap/ui/table/messagebundle_el.properties +5 -8
- package/src/sap/ui/table/messagebundle_en.properties +6 -9
- package/src/sap/ui/table/messagebundle_en_GB.properties +4 -7
- package/src/sap/ui/table/messagebundle_en_US_saprigi.properties +6 -9
- package/src/sap/ui/table/messagebundle_es.properties +6 -9
- package/src/sap/ui/table/messagebundle_es_MX.properties +5 -8
- package/src/sap/ui/table/messagebundle_et.properties +6 -9
- package/src/sap/ui/table/messagebundle_fi.properties +6 -9
- package/src/sap/ui/table/messagebundle_fr.properties +6 -9
- package/src/sap/ui/table/messagebundle_fr_CA.properties +6 -9
- package/src/sap/ui/table/messagebundle_hi.properties +6 -9
- package/src/sap/ui/table/messagebundle_hr.properties +6 -9
- package/src/sap/ui/table/messagebundle_hu.properties +6 -9
- package/src/sap/ui/table/messagebundle_id.properties +6 -9
- package/src/sap/ui/table/messagebundle_it.properties +6 -9
- package/src/sap/ui/table/messagebundle_iw.properties +6 -9
- package/src/sap/ui/table/messagebundle_ja.properties +5 -8
- package/src/sap/ui/table/messagebundle_kk.properties +10 -13
- package/src/sap/ui/table/messagebundle_ko.properties +5 -8
- package/src/sap/ui/table/messagebundle_lt.properties +4 -7
- package/src/sap/ui/table/messagebundle_lv.properties +5 -8
- package/src/sap/ui/table/messagebundle_mk.properties +6 -9
- package/src/sap/ui/table/messagebundle_ms.properties +5 -8
- package/src/sap/ui/table/messagebundle_nl.properties +6 -9
- package/src/sap/ui/table/messagebundle_no.properties +6 -9
- package/src/sap/ui/table/messagebundle_pl.properties +6 -9
- package/src/sap/ui/table/messagebundle_pt.properties +6 -9
- package/src/sap/ui/table/messagebundle_pt_PT.properties +4 -7
- package/src/sap/ui/table/messagebundle_ro.properties +6 -9
- package/src/sap/ui/table/messagebundle_ru.properties +6 -9
- package/src/sap/ui/table/messagebundle_sh.properties +6 -9
- package/src/sap/ui/table/messagebundle_sk.properties +6 -9
- package/src/sap/ui/table/messagebundle_sl.properties +6 -9
- package/src/sap/ui/table/messagebundle_sr.properties +6 -9
- package/src/sap/ui/table/messagebundle_sv.properties +6 -9
- package/src/sap/ui/table/messagebundle_th.properties +6 -9
- package/src/sap/ui/table/messagebundle_tr.properties +6 -9
- package/src/sap/ui/table/messagebundle_uk.properties +4 -7
- package/src/sap/ui/table/messagebundle_vi.properties +6 -9
- package/src/sap/ui/table/messagebundle_zh_CN.properties +4 -7
- package/src/sap/ui/table/messagebundle_zh_TW.properties +6 -9
- package/src/sap/ui/table/plugins/BindingSelection.js +1 -1
- package/src/sap/ui/table/plugins/MultiSelectionPlugin.js +2 -2
- package/src/sap/ui/table/plugins/PluginBase.js +1 -1
- package/src/sap/ui/table/plugins/SelectionModelSelection.js +3 -1
- package/src/sap/ui/table/plugins/SelectionPlugin.js +1 -1
- package/src/sap/ui/table/plugins/V4Aggregation.js +1 -1
- package/src/sap/ui/table/rowmodes/Auto.js +1 -1
- package/src/sap/ui/table/rowmodes/Fixed.js +1 -1
- package/src/sap/ui/table/rowmodes/Interactive.js +19 -12
- package/src/sap/ui/table/rowmodes/RowMode.js +1 -1
- package/src/sap/ui/table/rowmodes/Variable.js +1 -1
- package/src/sap/ui/table/utils/TableUtils.js +15 -4
- package/src/sap/ui/table/utils/_BindingUtils.js +1 -1
- package/src/sap/ui/table/utils/_ColumnUtils.js +1 -1
- package/src/sap/ui/table/utils/_GroupingUtils.js +1 -1
- package/src/sap/ui/table/utils/_HookUtils.js +1 -1
- package/src/sap/ui/table/utils/_MenuUtils.js +1 -1
- package/LICENSES/LicenseRef-tzdata-PublicDomain.txt +0 -5
- package/LICENSES/Unicode-DFS-2015.txt +0 -51
|
@@ -127,6 +127,24 @@ sap.ui.define([
|
|
|
127
127
|
|
|
128
128
|
};
|
|
129
129
|
|
|
130
|
+
const addAriaForOverlayOrNoData = function(oTable, mAttributes, bOverlay, bNoData) {
|
|
131
|
+
const bHidden = bOverlay && oTable.getShowOverlay() || bNoData && TableUtils.isNoDataVisible(oTable);
|
|
132
|
+
if (bHidden) {
|
|
133
|
+
mAttributes["aria-hidden"] = "true";
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
let sMarker = "";
|
|
137
|
+
if (bOverlay) {
|
|
138
|
+
sMarker = "overlay";
|
|
139
|
+
}
|
|
140
|
+
if (bNoData) {
|
|
141
|
+
sMarker = bOverlay ? sMarker.concat(",", "nodata") : "nodata";
|
|
142
|
+
}
|
|
143
|
+
if (sMarker) {
|
|
144
|
+
mAttributes["data-sap-ui-table-acc-covered"] = sMarker;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
130
148
|
/*
|
|
131
149
|
* Provides utility functions used by this extension
|
|
132
150
|
*/
|
|
@@ -136,8 +154,8 @@ sap.ui.define([
|
|
|
136
154
|
* Returns the index of the column (in the array of visible columns (see Table._getVisibleColumns())) of the current focused cell
|
|
137
155
|
* In case the focused cell is a row action the given index equals the length of the visible columns.
|
|
138
156
|
* This function must not be used if the focus is on a row header.
|
|
139
|
-
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
140
|
-
* @returns {int}
|
|
157
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
158
|
+
* @returns {int} The column index of the focused cell
|
|
141
159
|
*/
|
|
142
160
|
getColumnIndexOfFocusedCell: function(oExtension) {
|
|
143
161
|
const oTable = oExtension.getTable();
|
|
@@ -262,7 +280,8 @@ sap.ui.define([
|
|
|
262
280
|
* Gets the aria-relevant numbers of columns and rows in the table, taking into account virtualization and internal columns like the row
|
|
263
281
|
* action column.
|
|
264
282
|
*
|
|
265
|
-
* @
|
|
283
|
+
* @param {sap.ui.table.Table} oTable The table instance
|
|
284
|
+
* @returns {{columnCount: int, rowCount: int}} The grid size
|
|
266
285
|
*/
|
|
267
286
|
getGridSize: function(oTable) {
|
|
268
287
|
const bHasRowHeader = TableUtils.hasRowHeader(oTable);
|
|
@@ -279,17 +298,19 @@ sap.ui.define([
|
|
|
279
298
|
/**
|
|
280
299
|
* Gets the aria-relevant index of a row, taking into account virtualization and the number of header rows.
|
|
281
300
|
*
|
|
282
|
-
* @
|
|
301
|
+
* @param {sap.ui.table.Row} oRow The row instance
|
|
302
|
+
* @returns {int} The row index
|
|
283
303
|
*/
|
|
284
304
|
getRowIndex: function(oRow) {
|
|
285
305
|
return oRow.getIndex() + 1 + TableUtils.getHeaderRowCount(oRow.getTable());
|
|
286
306
|
},
|
|
287
307
|
|
|
288
308
|
/**
|
|
289
|
-
* Determines the
|
|
290
|
-
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
309
|
+
* Determines whether the user navigates to the table initially, changes to another row or column.
|
|
310
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
311
|
+
* @returns {{rowChange: boolean, colChange: boolean, initial: boolean}} An object containing information about the change
|
|
291
312
|
*/
|
|
292
|
-
|
|
313
|
+
getRowColChange: function(oExtension) {
|
|
293
314
|
const oTable = oExtension.getTable();
|
|
294
315
|
const oIN = oTable._getItemNavigation();
|
|
295
316
|
let bIsRowChanged = false;
|
|
@@ -302,14 +323,11 @@ sap.ui.define([
|
|
|
302
323
|
const iColumnNumber = ExtensionHelper.getColumnIndexOfFocusedCell(oExtension) + 1 + (bHasRowHeader ? 1 : 0);
|
|
303
324
|
const oRow = oTable.getRows()[TableUtils.getRowIndexOfFocusedCell(oTable)];
|
|
304
325
|
const iRowNumber = oRow ? ExtensionHelper.getRowIndex(oRow) : 0;
|
|
305
|
-
const mGridSize = ExtensionHelper.getGridSize(oTable);
|
|
306
326
|
|
|
307
|
-
bIsRowChanged = oExtension._iLastRowNumber !== iRowNumber ||
|
|
327
|
+
bIsRowChanged = oExtension._iLastRowNumber !== iRowNumber ||
|
|
328
|
+
(oExtension._iLastRowNumber === iRowNumber && oExtension._iLastColumnNumber === iColumnNumber);
|
|
308
329
|
bIsColChanged = oExtension._iLastColumnNumber !== iColumnNumber;
|
|
309
330
|
bIsInitial = oExtension._iLastRowNumber == null && oExtension._iLastColumnNumber == null;
|
|
310
|
-
oTable.$("rownumberofrows").text(bIsRowChanged && iRowNumber > 0 ? TableUtils.getResourceText("TBL_ROW_ROWCOUNT", [iRowNumber, mGridSize.rowCount]) : ".");
|
|
311
|
-
oTable.$("colnumberofcols").text(bIsColChanged ? TableUtils.getResourceText("TBL_COL_COLCOUNT", [iColumnNumber, mGridSize.columnCount]) : ".");
|
|
312
|
-
oTable.$("ariacount").text(bIsInitial ? TableUtils.getResourceText("TBL_DATA_ROWS_COLS", [mGridSize.rowCount, mGridSize.columnCount]) : ".");
|
|
313
331
|
|
|
314
332
|
oExtension._iLastRowNumber = iRowNumber;
|
|
315
333
|
oExtension._iLastColumnNumber = iColumnNumber;
|
|
@@ -350,45 +368,36 @@ sap.ui.define([
|
|
|
350
368
|
/*
|
|
351
369
|
* Updates the row / column counters, adapts the labels and descriptions of the given cell and stores the the
|
|
352
370
|
* given defaults before the modification.
|
|
353
|
-
* @see ExtensionHelper.
|
|
371
|
+
* @see ExtensionHelper.getRowColChange
|
|
354
372
|
* @see ExtensionHelper.storeDefaultsBeforeCellModifications
|
|
355
373
|
*/
|
|
356
374
|
performCellModifications: function(oExtension, $Cell, aDefaultLabels, aDefaultDescriptions, aLabels, aDescriptions, sText, fAdapt) {
|
|
357
375
|
ExtensionHelper.storeDefaultsBeforeCellModifications(oExtension, $Cell, aDefaultLabels, aDefaultDescriptions);
|
|
358
|
-
const
|
|
376
|
+
const oChangeInfo = ExtensionHelper.getRowColChange(oExtension);
|
|
359
377
|
const oTable = oExtension.getTable();
|
|
378
|
+
const sTableId = oTable.getId();
|
|
360
379
|
oTable.$("cellacc").text(sText || "."); //set the custom text to the prepared hidden element
|
|
361
380
|
|
|
362
381
|
if (fAdapt) { //Allow to adapt the labels / descriptions based on the changed row / column count
|
|
363
|
-
fAdapt(aLabels, aDescriptions,
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
let sLabel = "";
|
|
367
|
-
if (oCountChangeInfo.initial) {
|
|
368
|
-
sLabel = oTable.getId() + "-ariacount";
|
|
369
|
-
if (oTable.getSelectionMode() !== SelectionMode.None) {
|
|
370
|
-
sLabel = sLabel + " " + oTable.getId() + "-ariaselection";
|
|
371
|
-
}
|
|
382
|
+
fAdapt(aLabels, aDescriptions, oChangeInfo.rowChange, oChangeInfo.colChange, oChangeInfo.initial);
|
|
372
383
|
}
|
|
373
384
|
|
|
374
|
-
if (
|
|
375
|
-
sLabel = sLabel + " " + aLabels.join(" ");
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
if (oCountChangeInfo.initial || oCountChangeInfo.rowChange) {
|
|
385
|
+
if (oChangeInfo.initial || oChangeInfo.rowChange) {
|
|
379
386
|
if (TableUtils.hasRowNavigationIndicators(oTable)) {
|
|
380
387
|
const oCellInfo = TableUtils.getCellInfo($Cell);
|
|
381
388
|
if (oCellInfo.type !== TableUtils.CELLTYPE.COLUMNHEADER && oCellInfo.type !== TableUtils.CELLTYPE.COLUMNROWHEADER) {
|
|
382
389
|
const oRowSettings = oTable.getRows()[oCellInfo.rowIndex].getAggregation("_settings");
|
|
383
390
|
if (oRowSettings.getNavigated()) {
|
|
384
|
-
|
|
391
|
+
aLabels.push(sTableId + "-rownavigatedtext");
|
|
385
392
|
}
|
|
386
393
|
}
|
|
387
394
|
}
|
|
388
395
|
}
|
|
389
396
|
|
|
397
|
+
const sLabel = aLabels && aLabels.length ? aLabels.join(" ") : null;
|
|
398
|
+
|
|
390
399
|
$Cell.attr({
|
|
391
|
-
"aria-labelledby": sLabel
|
|
400
|
+
"aria-labelledby": sLabel,
|
|
392
401
|
"aria-describedby": aDescriptions && aDescriptions.length ? aDescriptions.join(" ") : null
|
|
393
402
|
});
|
|
394
403
|
},
|
|
@@ -397,7 +406,7 @@ sap.ui.define([
|
|
|
397
406
|
* Modifies the labels and descriptions of a data cell.
|
|
398
407
|
* @see ExtensionHelper.performCellModifications
|
|
399
408
|
*/
|
|
400
|
-
|
|
409
|
+
modifyAccOfDataCell: function(oCellInfo) {
|
|
401
410
|
const oTable = this.getTable();
|
|
402
411
|
const sTableId = oTable.getId();
|
|
403
412
|
const oIN = oTable._getItemNavigation();
|
|
@@ -415,13 +424,13 @@ sap.ui.define([
|
|
|
415
424
|
const sRowId = oRow.getId();
|
|
416
425
|
const bHidden = ExtensionHelper.isHiddenCell($Cell, oTableInstances.cell);
|
|
417
426
|
const bIsTreeColumnCell = ExtensionHelper.isTreeColumnCell(this, $Cell);
|
|
418
|
-
const aDefaultLabels = ExtensionHelper.
|
|
427
|
+
const aDefaultLabels = ExtensionHelper.getAriaAttributesForDataCell(this, {
|
|
419
428
|
index: iCol,
|
|
420
429
|
column: oTableInstances.column,
|
|
421
430
|
fixed: TableUtils.isFixedColumn(oTable, iCol)
|
|
422
431
|
})["aria-labelledby"] || [];
|
|
423
432
|
const aDescriptions = [];
|
|
424
|
-
let aLabels = [
|
|
433
|
+
let aLabels = [];
|
|
425
434
|
const bIsGroupHeader = oRow.isGroupHeader();
|
|
426
435
|
const bIsSummary = oRow.isSummary();
|
|
427
436
|
|
|
@@ -442,28 +451,27 @@ sap.ui.define([
|
|
|
442
451
|
if (!bHidden) {
|
|
443
452
|
oInfo = ACCInfoHelper.getAccInfoOfControl(oTableInstances.cell);
|
|
444
453
|
aLabels.push(oInfo ? (sTableId + "-cellacc") : oTableInstances.cell.getId());
|
|
454
|
+
}
|
|
445
455
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
456
|
+
let sText = "";
|
|
457
|
+
if (oInfo) {
|
|
458
|
+
sText = oInfo.description;
|
|
450
459
|
if (TableUtils.getInteractiveElements($Cell) !== null) {
|
|
451
|
-
|
|
460
|
+
sText = TableUtils.getResourceText("TBL_CELL_INCLUDES", [sText]);
|
|
452
461
|
}
|
|
453
462
|
}
|
|
454
463
|
|
|
455
|
-
let sText = oInfo ? oInfo.description : ".";
|
|
456
464
|
if (bIsTreeColumnCell && !bHidden) {
|
|
457
|
-
const oAttributes = ExtensionHelper.
|
|
465
|
+
const oAttributes = ExtensionHelper.getAriaAttributesForTreeIcon(this, {row: oTableInstances.row});
|
|
458
466
|
if (oAttributes && oAttributes["aria-label"]) {
|
|
459
|
-
sText = oAttributes["aria-label"]
|
|
467
|
+
sText = oAttributes["aria-label"].concat(" ", sText);
|
|
460
468
|
}
|
|
461
469
|
}
|
|
462
470
|
|
|
463
471
|
ExtensionHelper.performCellModifications(this, $Cell, aDefaultLabels, null, aLabels, aDescriptions, sText,
|
|
464
472
|
function(aLabels, aDescriptions, bRowChange, bColChange) {
|
|
465
473
|
if (bIsGroupHeader && bRowChange) {
|
|
466
|
-
aLabels.splice(
|
|
474
|
+
aLabels.splice(1, 0, sRowId + "-groupHeader");
|
|
467
475
|
}
|
|
468
476
|
const bContainsTreeIcon = $Cell.find(".sapUiTableTreeIcon").not(".sapUiTableTreeIconLeaf").length === 1;
|
|
469
477
|
|
|
@@ -480,14 +488,14 @@ sap.ui.define([
|
|
|
480
488
|
* Modifies the labels and descriptions of a row header cell.
|
|
481
489
|
* @see ExtensionHelper.performCellModifications
|
|
482
490
|
*/
|
|
483
|
-
|
|
491
|
+
modifyAccOfRowHeader: function(oCellInfo) {
|
|
484
492
|
const oTable = this.getTable();
|
|
485
493
|
const sTableId = oTable.getId();
|
|
486
494
|
const $Cell = jQuery(oCellInfo.cell);
|
|
487
495
|
const oRow = oTable.getRows()[oCellInfo.rowIndex];
|
|
488
496
|
const sRowId = oRow.getId();
|
|
489
|
-
const aDefaultLabels = ExtensionHelper.
|
|
490
|
-
const aLabels =
|
|
497
|
+
const aDefaultLabels = ExtensionHelper.getAriaAttributesForRowHeader(this)["aria-labelledby"] || [];
|
|
498
|
+
const aLabels = [].concat(aDefaultLabels);
|
|
491
499
|
|
|
492
500
|
if (!oRow.isSummary() && !oRow.isGroupHeader() && !oRow.isContentHidden()) {
|
|
493
501
|
aLabels.push(sRowId + "-rowselecttext");
|
|
@@ -516,18 +524,18 @@ sap.ui.define([
|
|
|
516
524
|
* Modifies the labels and descriptions of a column header cell.
|
|
517
525
|
* @see ExtensionHelper.performCellModifications
|
|
518
526
|
*/
|
|
519
|
-
|
|
527
|
+
modifyAccOfColumnHeader: function(oCellInfo) {
|
|
520
528
|
const oTable = this.getTable();
|
|
521
529
|
const $Cell = jQuery(oCellInfo.cell);
|
|
522
530
|
const oColumn = Element.getElementById($Cell.attr("data-sap-ui-colid"));
|
|
523
531
|
const oColumnLabel = TableUtils.Column.getHeaderLabel(oColumn);
|
|
524
|
-
const mAttributes = ExtensionHelper.
|
|
532
|
+
const mAttributes = ExtensionHelper.getAriaAttributesForColumnHeader(this, {
|
|
525
533
|
headerId: $Cell.attr("id"),
|
|
526
534
|
column: oColumn,
|
|
527
535
|
index: $Cell.attr("data-sap-ui-colindex")
|
|
528
536
|
});
|
|
529
537
|
const sText = ExtensionHelper.getColumnTooltip(oColumn);
|
|
530
|
-
const aLabels =
|
|
538
|
+
const aLabels = mAttributes["aria-labelledby"] || [];
|
|
531
539
|
const iSpan = oCellInfo.columnSpan;
|
|
532
540
|
|
|
533
541
|
if (oColumnLabel?.getRequired?.()) {
|
|
@@ -548,6 +556,10 @@ sap.ui.define([
|
|
|
548
556
|
aLabels.push(oTable.getId() + "-ariacolfiltered");
|
|
549
557
|
}
|
|
550
558
|
|
|
559
|
+
if (aLabels.length > 0) {
|
|
560
|
+
aLabels.unshift($Cell.attr("id") + "-inner");
|
|
561
|
+
}
|
|
562
|
+
|
|
551
563
|
ExtensionHelper.performCellModifications(this, $Cell, mAttributes["aria-labelledby"], mAttributes["aria-describedby"],
|
|
552
564
|
aLabels, mAttributes["aria-describedby"], sText
|
|
553
565
|
);
|
|
@@ -557,17 +569,17 @@ sap.ui.define([
|
|
|
557
569
|
* Modifies the labels and descriptions of the column row header.
|
|
558
570
|
* @see ExtensionHelper.performCellModifications
|
|
559
571
|
*/
|
|
560
|
-
|
|
572
|
+
modifyAccOfColumnRowHeader: function(oCellInfo) {
|
|
561
573
|
const oTable = this.getTable();
|
|
562
574
|
const $Cell = jQuery(oCellInfo.cell);
|
|
563
575
|
const bEnabled = $Cell.hasClass("sapUiTableSelAllVisible");
|
|
564
576
|
|
|
565
|
-
const mAttributes = ExtensionHelper.
|
|
566
|
-
this,
|
|
577
|
+
const mAttributes = ExtensionHelper.getAriaAttributesForColumnRowHeader(
|
|
578
|
+
this,
|
|
567
579
|
{enabled: bEnabled, checked: bEnabled && !oTable.$().hasClass("sapUiTableSelAll")}
|
|
568
580
|
);
|
|
569
|
-
const aLabels =
|
|
570
|
-
ExtensionHelper.performCellModifications(this, $Cell,
|
|
581
|
+
const aLabels = mAttributes["aria-labelledby"] || [];
|
|
582
|
+
ExtensionHelper.performCellModifications(this, $Cell, [], mAttributes["aria-describedby"],
|
|
571
583
|
aLabels, mAttributes["aria-describedby"], null
|
|
572
584
|
);
|
|
573
585
|
},
|
|
@@ -576,15 +588,15 @@ sap.ui.define([
|
|
|
576
588
|
* Modifies the labels and descriptions of a row action cell.
|
|
577
589
|
* @see ExtensionHelper.performCellModifications
|
|
578
590
|
*/
|
|
579
|
-
|
|
591
|
+
modifyAccOfRowAction: function(oCellInfo) {
|
|
580
592
|
const oTable = this.getTable();
|
|
581
593
|
const sTableId = oTable.getId();
|
|
582
594
|
const $Cell = jQuery(oCellInfo.cell);
|
|
583
595
|
const oRow = oTable.getRows()[oCellInfo.rowIndex];
|
|
584
596
|
const sRowId = oRow.getId();
|
|
585
597
|
const bHidden = ExtensionHelper.isHiddenCell($Cell);
|
|
586
|
-
const aDefaultLabels = ExtensionHelper.
|
|
587
|
-
const aLabels = [
|
|
598
|
+
const aDefaultLabels = ExtensionHelper.getAriaAttributesForRowAction(this)["aria-labelledby"] || [];
|
|
599
|
+
const aLabels = [].concat(aDefaultLabels);
|
|
588
600
|
const aDescriptions = [];
|
|
589
601
|
const bIsGroupHeader = oRow.isGroupHeader();
|
|
590
602
|
|
|
@@ -611,9 +623,6 @@ sap.ui.define([
|
|
|
611
623
|
if (oInfo) {
|
|
612
624
|
aLabels.push(sTableId + "-cellacc");
|
|
613
625
|
sText = oInfo.description;
|
|
614
|
-
if (TableUtils.getInteractiveElements($Cell) !== null) {
|
|
615
|
-
aDescriptions.push(sTableId + "-toggleedit");
|
|
616
|
-
}
|
|
617
626
|
}
|
|
618
627
|
}
|
|
619
628
|
}
|
|
@@ -629,336 +638,506 @@ sap.ui.define([
|
|
|
629
638
|
},
|
|
630
639
|
|
|
631
640
|
/**
|
|
632
|
-
* Returns the
|
|
633
|
-
* @
|
|
634
|
-
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension.
|
|
635
|
-
* @param {string} sType
|
|
636
|
-
* @param {object} [mParams]
|
|
641
|
+
* Returns the aria attributes for the tr element that contains the column row header cell.
|
|
642
|
+
* @returns {object} An object containing the aria attributes
|
|
637
643
|
*/
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
644
|
+
getAriaAttributesForColumnRowHeaderRow: function() {
|
|
645
|
+
return {
|
|
646
|
+
"role": "row",
|
|
647
|
+
"aria-hidden": "true"
|
|
648
|
+
};
|
|
649
|
+
},
|
|
642
650
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
sMarker = "nodata";
|
|
651
|
-
}
|
|
651
|
+
/**
|
|
652
|
+
* Returns the aria attributes for the column row header cell.
|
|
653
|
+
* @returns {object} An object containing the aria attributes
|
|
654
|
+
*/
|
|
655
|
+
getAriaAttributesForColumnRowHeaderCell: function() {
|
|
656
|
+
return {"role": "columnheader"};
|
|
657
|
+
},
|
|
652
658
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
659
|
+
/**
|
|
660
|
+
* Returns the aria attributes for the column row header content (select all checkbox/deselect all icon).
|
|
661
|
+
*
|
|
662
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
663
|
+
* @param {{enabled: boolean, checked: boolean}} mParams Whether the select all checkbox is enabled and checked
|
|
664
|
+
* @returns {object} An object containing the aria attributes
|
|
665
|
+
*/
|
|
666
|
+
getAriaAttributesForColumnRowHeader: function(oExtension, mParams) {
|
|
667
|
+
const mAttributes = {};
|
|
668
|
+
const oTable = oExtension.getTable();
|
|
657
669
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
mAttributes["data-sap-ui-table-acc-covered"] = sMarker;
|
|
663
|
-
}
|
|
670
|
+
const mRenderConfig = oTable._getSelectionPlugin().getRenderConfig();
|
|
671
|
+
|
|
672
|
+
if (oTable.getSelectionMode() !== SelectionMode.None) {
|
|
673
|
+
mAttributes["aria-label"] = TableUtils.getResourceText("TBL_TABLE_SELECTION_COLUMNHEADER");
|
|
664
674
|
}
|
|
665
675
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
} else if (mRenderConfig.headerSelector.type === "custom") {
|
|
677
|
-
mAttributes["role"] = ["button"];
|
|
678
|
-
if (!mParams || !mParams.enabled) {
|
|
679
|
-
mAttributes["aria-disabled"] = "true";
|
|
680
|
-
}
|
|
681
|
-
}
|
|
676
|
+
if (mRenderConfig.headerSelector.visible) {
|
|
677
|
+
if (mRenderConfig.headerSelector.type === "toggle") {
|
|
678
|
+
mAttributes["role"] = ["checkbox"];
|
|
679
|
+
if (mParams && mParams.enabled) {
|
|
680
|
+
mAttributes["aria-checked"] = mParams.checked ? "true" : "false";
|
|
681
|
+
}
|
|
682
|
+
} else if (mRenderConfig.headerSelector.type === "custom") {
|
|
683
|
+
mAttributes["role"] = ["button"];
|
|
684
|
+
if (!mParams || !mParams.enabled) {
|
|
685
|
+
mAttributes["aria-disabled"] = "true";
|
|
682
686
|
}
|
|
683
|
-
break;
|
|
684
687
|
}
|
|
688
|
+
}
|
|
689
|
+
return mAttributes;
|
|
690
|
+
},
|
|
685
691
|
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
mAttributes["aria-colindex"] = TableUtils.getVisibleColumnCount(oTable) + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
|
|
697
|
-
mAttributes["aria-labelledby"] = [sTableId + "-rowacthdr"];
|
|
698
|
-
break;
|
|
699
|
-
|
|
700
|
-
case AccExtension.ELEMENTTYPES.COLUMNHEADER: {
|
|
701
|
-
const oColumn = mParams && mParams.column;
|
|
702
|
-
const bHasColSpan = mParams && mParams.colspan;
|
|
703
|
-
|
|
704
|
-
mAttributes["role"] = "columnheader";
|
|
705
|
-
mAttributes["aria-colindex"] = mParams.index + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
|
|
706
|
-
let aLabels = [];
|
|
707
|
-
|
|
708
|
-
if (mParams && mParams.headerId) {
|
|
709
|
-
const aHeaders = ExtensionHelper.getRelevantColumnHeaders(oTable, oColumn);
|
|
710
|
-
const iIdx = aHeaders.indexOf(mParams.headerId);
|
|
711
|
-
aLabels = iIdx > 0 ? aHeaders.slice(0, iIdx + 1) : [mParams.headerId];
|
|
712
|
-
}
|
|
713
|
-
for (let i = 0; i < aLabels.length; i++) {
|
|
714
|
-
aLabels[i] = aLabels[i] + "-inner";
|
|
715
|
-
}
|
|
716
|
-
mAttributes["aria-labelledby"] = aLabels;
|
|
692
|
+
/**
|
|
693
|
+
* Returns the aria attributes for a row addon (header, actions).
|
|
694
|
+
* @returns {object} An object containing the aria attributes
|
|
695
|
+
*/
|
|
696
|
+
getAriaAttributesForRowAddon: function() {
|
|
697
|
+
return {
|
|
698
|
+
"role": "row",
|
|
699
|
+
"aria-hidden": "true"
|
|
700
|
+
};
|
|
701
|
+
},
|
|
717
702
|
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
703
|
+
/**
|
|
704
|
+
* Returns the aria attributes for a row header cell.
|
|
705
|
+
*
|
|
706
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
707
|
+
* @returns {object} An object containing the aria attributes
|
|
708
|
+
*/
|
|
709
|
+
getAriaAttributesForRowHeader: function(oExtension) {
|
|
710
|
+
const mAttributes = {};
|
|
711
|
+
const oTable = oExtension.getTable();
|
|
712
|
+
const sTableId = oTable.getId();
|
|
721
713
|
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
714
|
+
mAttributes["role"] = "gridcell";
|
|
715
|
+
mAttributes["aria-colindex"] = 1;
|
|
716
|
+
if (TableUtils.hasRowHeader(oTable) && oTable.getSelectionMode() === SelectionMode.None) {
|
|
717
|
+
mAttributes["aria-labelledby"] = [sTableId + "-rowselecthdr"];
|
|
718
|
+
}
|
|
719
|
+
return mAttributes;
|
|
720
|
+
},
|
|
729
721
|
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
*/
|
|
741
|
-
if (!oColumnHeaderMenu && oColumn._menuHasItems()) {
|
|
742
|
-
mAttributes["aria-haspopup"] = "menu";
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
break;
|
|
746
|
-
}
|
|
722
|
+
/**
|
|
723
|
+
* Returns the aria attributes for a row action cell.
|
|
724
|
+
*
|
|
725
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
726
|
+
* @returns {object} An object containing the aria attributes
|
|
727
|
+
*/
|
|
728
|
+
getAriaAttributesForRowAction: function(oExtension) {
|
|
729
|
+
const mAttributes = {};
|
|
730
|
+
const oTable = oExtension.getTable();
|
|
731
|
+
const sTableId = oTable.getId();
|
|
747
732
|
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
733
|
+
mAttributes["role"] = "gridcell";
|
|
734
|
+
mAttributes["aria-colindex"] = TableUtils.getVisibleColumnCount(oTable) + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
|
|
735
|
+
mAttributes["aria-labelledby"] = [sTableId + "-rowacthdr"];
|
|
751
736
|
|
|
752
|
-
|
|
753
|
-
|
|
737
|
+
return mAttributes;
|
|
738
|
+
},
|
|
754
739
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
740
|
+
/**
|
|
741
|
+
* Returns the aria attributes for a column header.
|
|
742
|
+
*
|
|
743
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
744
|
+
* @param {{column: sap.ui.table.Column, headerId: string, index: int, colspan: boolean}} mParams An object containing the instance of the
|
|
745
|
+
* column, the id of the header cell, the index of the column and whether the column has span
|
|
746
|
+
* @returns {object} An object containing the aria attributes
|
|
747
|
+
*/
|
|
748
|
+
getAriaAttributesForColumnHeader: function(oExtension, mParams) {
|
|
749
|
+
const mAttributes = {};
|
|
750
|
+
const oTable = oExtension.getTable();
|
|
751
|
+
const sTableId = oTable.getId();
|
|
758
752
|
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
753
|
+
const oColumn = mParams && mParams.column;
|
|
754
|
+
const bHasColSpan = mParams && mParams.colspan;
|
|
755
|
+
|
|
756
|
+
mAttributes["role"] = "columnheader";
|
|
757
|
+
mAttributes["aria-colindex"] = mParams.index + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
|
|
758
|
+
|
|
759
|
+
if (mParams && (mParams.index < oTable.getComputedFixedColumnCount())) {
|
|
760
|
+
mAttributes["aria-labelledby"] = [sTableId + "-ariafixedcolumn"];
|
|
761
|
+
}
|
|
762
762
|
|
|
763
|
-
|
|
763
|
+
if (!bHasColSpan && oColumn) {
|
|
764
|
+
mAttributes["aria-sort"] = oColumn.getSortOrder().toLowerCase();
|
|
765
|
+
/** @deprecated As of version 1.120 */
|
|
766
|
+
if (!oColumn.getSorted()) {
|
|
767
|
+
mAttributes["aria-sort"] = "none";
|
|
768
|
+
}
|
|
769
|
+
const oColumnHeaderMenu = oColumn.getHeaderMenuInstance();
|
|
770
|
+
if (oColumnHeaderMenu) {
|
|
771
|
+
const sPopupType = oColumnHeaderMenu.getAriaHasPopupType();
|
|
772
|
+
if (sPopupType !== "None") {
|
|
773
|
+
mAttributes["aria-haspopup"] = sPopupType.toLowerCase();
|
|
764
774
|
}
|
|
765
|
-
break;
|
|
766
775
|
}
|
|
776
|
+
/**
|
|
777
|
+
* @deprecated As of Version 1.117
|
|
778
|
+
*/
|
|
779
|
+
if (!oColumnHeaderMenu && oColumn._menuHasItems()) {
|
|
780
|
+
mAttributes["aria-haspopup"] = "menu";
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
return mAttributes;
|
|
784
|
+
},
|
|
767
785
|
|
|
768
|
-
|
|
769
|
-
|
|
786
|
+
/**
|
|
787
|
+
* Returns the aria attributes for a data cell.
|
|
788
|
+
*
|
|
789
|
+
* @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
|
|
791
|
+
* 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
|
+
* selected
|
|
793
|
+
* @returns {object} An object containing the aria attributes
|
|
794
|
+
*/
|
|
795
|
+
getAriaAttributesForDataCell: function(oExtension, mParams) {
|
|
796
|
+
const mAttributes = {};
|
|
797
|
+
const oTable = oExtension.getTable();
|
|
798
|
+
const sTableId = oTable.getId();
|
|
770
799
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, true);
|
|
774
|
-
break;
|
|
800
|
+
mAttributes["role"] = "gridcell";
|
|
801
|
+
mAttributes["aria-colindex"] = mParams.index + 1 + (TableUtils.hasRowHeader(oTable) ? 1 : 0);
|
|
775
802
|
|
|
776
|
-
|
|
777
|
-
|
|
803
|
+
if (mParams.column && mParams.fixed) {
|
|
804
|
+
mAttributes["aria-labelledby"] = [sTableId + "-ariafixedcolumn"];
|
|
805
|
+
}
|
|
806
|
+
return mAttributes;
|
|
807
|
+
},
|
|
778
808
|
|
|
779
|
-
|
|
780
|
-
|
|
809
|
+
/**
|
|
810
|
+
* Returns the aria attributes for the table element that wraps the content.
|
|
811
|
+
*
|
|
812
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
813
|
+
* @returns {object} An object containing the aria attributes
|
|
814
|
+
*/
|
|
815
|
+
getAriaAttributesForTable: function(oExtension) {
|
|
816
|
+
const mAttributes = {"role": "presentation"};
|
|
817
|
+
const oTable = oExtension.getTable();
|
|
781
818
|
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
}
|
|
819
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, true);
|
|
820
|
+
return mAttributes;
|
|
821
|
+
},
|
|
786
822
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
823
|
+
/**
|
|
824
|
+
* Returns the aria attributes for the container that wraps the data cells.
|
|
825
|
+
*
|
|
826
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
827
|
+
* @returns {object} An object containing the aria attributes
|
|
828
|
+
*/
|
|
829
|
+
getAriaAttributesForContent: function(oExtension) {
|
|
830
|
+
const mAttributes = {};
|
|
831
|
+
const oTable = oExtension.getTable();
|
|
832
|
+
const sTableId = oTable.getId();
|
|
790
833
|
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
mAttributes["aria-owns"].push(sTableId + "-table-fixed");
|
|
802
|
-
}
|
|
803
|
-
if (bHasFixedTopRows) {
|
|
804
|
-
mAttributes["aria-owns"].push(sTableId + "-table-fixrow");
|
|
805
|
-
if (bHasFixedColumns) {
|
|
806
|
-
mAttributes["aria-owns"].push(sTableId + "-table-fixed-fixrow");
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
if (bHasFixedBottomRows) {
|
|
810
|
-
mAttributes["aria-owns"].push(sTableId + "-table-fixrow-bottom");
|
|
811
|
-
if (bHasFixedColumns) {
|
|
812
|
-
mAttributes["aria-owns"].push(sTableId + "-table-fixed-fixrow-bottom");
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
if (bHasRowHeader) {
|
|
816
|
-
mAttributes["aria-owns"].push(sTableId + "-sapUiTableRowHdrScr");
|
|
817
|
-
}
|
|
818
|
-
if (bHasRowActions) {
|
|
819
|
-
mAttributes["aria-owns"].push(sTableId + "-sapUiTableRowActionScr");
|
|
820
|
-
}
|
|
834
|
+
mAttributes["role"] = TableUtils.Grouping.isInGroupMode(oTable) || TableUtils.Grouping.isInTreeMode(oTable) ? "treegrid" : "grid";
|
|
835
|
+
mAttributes["aria-describedby"] = [sTableId + "-ariaselection"];
|
|
836
|
+
mAttributes["aria-labelledby"] = oTable.getAriaLabelledBy() || [];
|
|
837
|
+
if (oTable.getTitle()) {
|
|
838
|
+
mAttributes["aria-labelledby"].push(oTable.getTitle().getId());
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
if (oTable.getSelectionMode() === SelectionMode.MultiToggle) {
|
|
842
|
+
mAttributes["aria-multiselectable"] = "true";
|
|
843
|
+
}
|
|
821
844
|
|
|
822
|
-
|
|
823
|
-
|
|
845
|
+
const mRowCounts = oTable._getRowCounts();
|
|
846
|
+
const bHasFixedColumns = TableUtils.hasFixedColumns(oTable);
|
|
847
|
+
const bHasFixedTopRows = mRowCounts.fixedTop > 0;
|
|
848
|
+
const bHasFixedBottomRows = mRowCounts.fixedBottom > 0;
|
|
849
|
+
const bHasRowHeader = TableUtils.hasRowHeader(oTable);
|
|
850
|
+
const bHasRowActions = TableUtils.hasRowActions(oTable);
|
|
851
|
+
const mGridSize = ExtensionHelper.getGridSize(oTable);
|
|
824
852
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
853
|
+
mAttributes["aria-owns"] = [sTableId + "-sapUiTableColHdrCnt", sTableId + "-table"];
|
|
854
|
+
if (bHasFixedColumns) {
|
|
855
|
+
mAttributes["aria-owns"].push(sTableId + "-table-fixed");
|
|
856
|
+
}
|
|
857
|
+
if (bHasFixedTopRows) {
|
|
858
|
+
mAttributes["aria-owns"].push(sTableId + "-table-fixrow");
|
|
859
|
+
if (bHasFixedColumns) {
|
|
860
|
+
mAttributes["aria-owns"].push(sTableId + "-table-fixed-fixrow");
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
if (bHasFixedBottomRows) {
|
|
864
|
+
mAttributes["aria-owns"].push(sTableId + "-table-fixrow-bottom");
|
|
865
|
+
if (bHasFixedColumns) {
|
|
866
|
+
mAttributes["aria-owns"].push(sTableId + "-table-fixed-fixrow-bottom");
|
|
829
867
|
}
|
|
868
|
+
}
|
|
869
|
+
if (bHasRowHeader) {
|
|
870
|
+
mAttributes["aria-owns"].push(sTableId + "-sapUiTableRowHdrScr");
|
|
871
|
+
}
|
|
872
|
+
if (bHasRowActions) {
|
|
873
|
+
mAttributes["aria-owns"].push(sTableId + "-sapUiTableRowActionScr");
|
|
874
|
+
}
|
|
830
875
|
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
mAttributes["aria-level"] = "2"; // Level is mandatory for headings with ARIA 1.1 and the default is 2
|
|
834
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
835
|
-
break;
|
|
836
|
-
|
|
837
|
-
case AccExtension.ELEMENTTYPES.COLUMNHEADER_TBL: //Table of column headers
|
|
838
|
-
mAttributes["role"] = "presentation";
|
|
839
|
-
break;
|
|
840
|
-
|
|
841
|
-
case AccExtension.ELEMENTTYPES.COLUMNHEADER_ROW: //The area which contains the column headers
|
|
842
|
-
mAttributes["role"] = "row";
|
|
843
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
844
|
-
break;
|
|
845
|
-
|
|
846
|
-
case AccExtension.ELEMENTTYPES.CREATIONROW_TBL: // Table of the creation row
|
|
847
|
-
mAttributes["role"] = "presentation";
|
|
848
|
-
break;
|
|
849
|
-
|
|
850
|
-
case AccExtension.ELEMENTTYPES.CREATIONROW: // Root of the creation row
|
|
851
|
-
mAttributes["role"] = "form";
|
|
852
|
-
mAttributes["aria-labelledby"] = mParams.creationRow.getId() + "-label";
|
|
853
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
854
|
-
break;
|
|
855
|
-
|
|
856
|
-
case AccExtension.ELEMENTTYPES.ROWHEADER_COL: //The area which contains the row headers
|
|
857
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, true);
|
|
858
|
-
break;
|
|
859
|
-
|
|
860
|
-
case AccExtension.ELEMENTTYPES.TH: //The "technical" column headers
|
|
861
|
-
mAttributes["role"] = "presentation";
|
|
862
|
-
mAttributes["scope"] = "col";
|
|
863
|
-
mAttributes["aria-hidden"] = "true";
|
|
864
|
-
break;
|
|
865
|
-
|
|
866
|
-
case AccExtension.ELEMENTTYPES.TR: //The rows
|
|
867
|
-
mAttributes["role"] = "row";
|
|
868
|
-
if (mParams.rowNavigated) {
|
|
869
|
-
mAttributes["aria-current"] = true;
|
|
870
|
-
}
|
|
876
|
+
mAttributes["aria-rowcount"] = mGridSize.rowCount;
|
|
877
|
+
mAttributes["aria-colcount"] = mGridSize.columnCount;
|
|
871
878
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
if (TableUtils.hasFixedColumns(oTable)) {
|
|
878
|
-
for (let j = 0; j < oTable.getComputedFixedColumnCount(); j++) {
|
|
879
|
-
mAttributes["aria-owns"].push(sTableId + "-rows-row" + mParams.index + "-col" + j);
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
if (TableUtils.hasRowActions(oTable)) {
|
|
883
|
-
mAttributes["aria-owns"].push(sTableId + "-rowact" + mParams.index);
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
break;
|
|
887
|
-
|
|
888
|
-
case AccExtension.ELEMENTTYPES.TREEICON: //The expand/collapse icon in the TreeTable
|
|
889
|
-
if (TableUtils.Grouping.isInTreeMode(oTable)) {
|
|
890
|
-
mAttributes = {
|
|
891
|
-
"aria-label": "",
|
|
892
|
-
"title": "",
|
|
893
|
-
"role": ""
|
|
894
|
-
};
|
|
895
|
-
if (oTable.getBinding()) {
|
|
896
|
-
if (mParams && mParams.row) {
|
|
897
|
-
if (mParams.row.isExpandable()) {
|
|
898
|
-
const sText = TableUtils.getResourceText("TBL_COLLAPSE_EXPAND");
|
|
899
|
-
mAttributes["title"] = sText;
|
|
900
|
-
|
|
901
|
-
mAttributes["aria-expanded"] = "" + (!!mParams.row.isExpanded());
|
|
902
|
-
mAttributes["aria-hidden"] = "false";
|
|
903
|
-
mAttributes["role"] = "button";
|
|
904
|
-
} else {
|
|
905
|
-
mAttributes["aria-label"] = TableUtils.getResourceText("TBL_LEAF");
|
|
906
|
-
mAttributes["aria-hidden"] = "true";
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
-
break;
|
|
879
|
+
if (oTable.isA("sap.ui.table.AnalyticalTable")) {
|
|
880
|
+
mAttributes["aria-roledescription"] = TableUtils.getResourceText("TBL_ANALYTICAL_TABLE_ROLE_DESCRIPTION");
|
|
881
|
+
}
|
|
882
|
+
return mAttributes;
|
|
883
|
+
},
|
|
912
884
|
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
885
|
+
/**
|
|
886
|
+
* Returns the aria attributes for the table header.
|
|
887
|
+
*
|
|
888
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
889
|
+
* @returns {object} An object containing the aria attributes
|
|
890
|
+
*/
|
|
891
|
+
getAriaAttributesForTableHeader: function(oExtension) {
|
|
892
|
+
const mAttributes = {
|
|
893
|
+
"role": "heading",
|
|
894
|
+
"aria-level": "2" // Level is mandatory for headings with ARIA 1.1 and the default is 2
|
|
895
|
+
};
|
|
896
|
+
const oTable = oExtension.getTable();
|
|
916
897
|
|
|
917
|
-
|
|
898
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
899
|
+
return mAttributes;
|
|
900
|
+
},
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* Returns the aria attributes for the row that contains the column headers.
|
|
904
|
+
*
|
|
905
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
906
|
+
* @returns {object} An object containing the aria attributes
|
|
907
|
+
*/
|
|
908
|
+
getAriaAttributesForColumnHeaderRow: function(oExtension) {
|
|
909
|
+
const mAttributes = {"role": "row"};
|
|
910
|
+
const oTable = oExtension.getTable();
|
|
911
|
+
const sTableId = oTable.getId();
|
|
912
|
+
|
|
913
|
+
mAttributes["aria-rowindex"] = ["1"];
|
|
914
|
+
mAttributes["aria-owns"] = [];
|
|
915
|
+
if (TableUtils.hasRowHeader(oTable)) {
|
|
916
|
+
mAttributes["aria-owns"].push(sTableId + "-rowcolhdr");
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
for (let j = 0; j < TableUtils.getVisibleColumnCount(oTable); j++) {
|
|
920
|
+
mAttributes["aria-owns"].push(oTable._getVisibleColumns()[j].getId());
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
if (TableUtils.hasRowActions(oTable)) {
|
|
924
|
+
mAttributes["aria-owns"].push(sTableId + "-rowacthdr");
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
928
|
+
return mAttributes;
|
|
929
|
+
},
|
|
930
|
+
|
|
931
|
+
/**
|
|
932
|
+
* Returns the aria attributes for the creation row.
|
|
933
|
+
*
|
|
934
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
935
|
+
* @param {{creationRow: sap.ui.table.CreationRow}} mParams An object containing the instance of the creation row
|
|
936
|
+
* @returns {object} An object containing the aria attributes
|
|
937
|
+
*/
|
|
938
|
+
getAriaAttributesForCreationRow: function(oExtension, mParams) {
|
|
939
|
+
const mAttributes = {};
|
|
940
|
+
const oTable = oExtension.getTable();
|
|
941
|
+
mAttributes["role"] = "form";
|
|
942
|
+
mAttributes["aria-labelledby"] = mParams.creationRow.getId() + "-label";
|
|
943
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
944
|
+
return mAttributes;
|
|
945
|
+
},
|
|
946
|
+
|
|
947
|
+
/**
|
|
948
|
+
* Returns the aria attributes for the container element that contains the row headers.
|
|
949
|
+
*
|
|
950
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
951
|
+
* @returns {object} An object containing the aria attributes
|
|
952
|
+
*/
|
|
953
|
+
getAriaAttributesForRowHeaderCol: function(oExtension) {
|
|
954
|
+
const mAttributes = {};
|
|
955
|
+
const oTable = oExtension.getTable();
|
|
956
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, true);
|
|
957
|
+
return mAttributes;
|
|
958
|
+
},
|
|
959
|
+
|
|
960
|
+
/**
|
|
961
|
+
* Returns the aria attributes for a column header.
|
|
962
|
+
*
|
|
963
|
+
* @returns {object} An object containing the aria attributes
|
|
964
|
+
*/
|
|
965
|
+
getAriaAttributesForTh: function() {
|
|
966
|
+
return {
|
|
967
|
+
"role": "presentation",
|
|
968
|
+
"scope": "col",
|
|
969
|
+
"aria-hidden": "true"
|
|
970
|
+
};
|
|
971
|
+
},
|
|
972
|
+
|
|
973
|
+
/**
|
|
974
|
+
* Returns the aria attributes for the scrollable part of a row.
|
|
975
|
+
*
|
|
976
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
977
|
+
* @param {{index: int, fixedCol: boolean, rowNavigated: boolean}} mParams An object containing the index of the row, whether the row is fixed
|
|
978
|
+
* and whether the row is navigated
|
|
979
|
+
* @returns {object} An object containing the aria attributes
|
|
980
|
+
*/
|
|
981
|
+
getAriaAttributesForTr: function(oExtension, mParams) {
|
|
982
|
+
const mAttributes = {};
|
|
983
|
+
const oTable = oExtension.getTable();
|
|
984
|
+
const sTableId = oTable.getId();
|
|
985
|
+
|
|
986
|
+
mAttributes["role"] = "row";
|
|
987
|
+
if (mParams.rowNavigated) {
|
|
988
|
+
mAttributes["aria-current"] = true;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
mAttributes["aria-owns"] = [];
|
|
992
|
+
if (TableUtils.hasRowHeader(oTable)) {
|
|
993
|
+
mAttributes["aria-owns"].push(sTableId + "-rowsel" + mParams.index);
|
|
994
|
+
}
|
|
918
995
|
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
996
|
+
for (let j = 0; j < TableUtils.getVisibleColumnCount(oTable); j++) {
|
|
997
|
+
mAttributes["aria-owns"].push(sTableId + "-rows-row" + mParams.index + "-col" + j);
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
if (TableUtils.hasRowActions(oTable)) {
|
|
1001
|
+
mAttributes["aria-owns"].push(sTableId + "-rowact" + mParams.index);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
return mAttributes;
|
|
1005
|
+
},
|
|
1006
|
+
|
|
1007
|
+
/**
|
|
1008
|
+
* Returns the aria attributes for a tree icon (expand/collapse).
|
|
1009
|
+
*
|
|
1010
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
1011
|
+
* @param {{oRow: sap.ui.table.Row}} mParams An object containing the instance of the row
|
|
1012
|
+
* @returns {object} An object containing the aria attributes
|
|
1013
|
+
*/
|
|
1014
|
+
getAriaAttributesForTreeIcon: function(oExtension, mParams) {
|
|
1015
|
+
let mAttributes = {};
|
|
1016
|
+
const oTable = oExtension.getTable();
|
|
1017
|
+
|
|
1018
|
+
if (TableUtils.Grouping.isInTreeMode(oTable)) {
|
|
1019
|
+
mAttributes = {
|
|
1020
|
+
"aria-label": "",
|
|
1021
|
+
"title": "",
|
|
1022
|
+
"role": ""
|
|
1023
|
+
};
|
|
1024
|
+
if (oTable.getBinding()) {
|
|
1025
|
+
if (mParams && mParams.row) {
|
|
1026
|
+
if (mParams.row.isExpandable()) {
|
|
1027
|
+
const sText = TableUtils.getResourceText("TBL_COLLAPSE_EXPAND");
|
|
1028
|
+
mAttributes["title"] = sText;
|
|
1029
|
+
|
|
1030
|
+
mAttributes["aria-expanded"] = "" + (!!mParams.row.isExpanded());
|
|
1031
|
+
mAttributes["aria-hidden"] = "false";
|
|
1032
|
+
mAttributes["role"] = "button";
|
|
924
1033
|
} else {
|
|
925
|
-
|
|
1034
|
+
mAttributes["aria-label"] = TableUtils.getResourceText("TBL_LEAF");
|
|
1035
|
+
mAttributes["aria-hidden"] = "true";
|
|
926
1036
|
}
|
|
927
|
-
} else {
|
|
928
|
-
aLabels.push(sTableId + "-noDataMsg");
|
|
929
1037
|
}
|
|
930
|
-
|
|
931
|
-
mAttributes["aria-labelledby"] = aLabels;
|
|
932
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
933
|
-
break;
|
|
934
1038
|
}
|
|
1039
|
+
}
|
|
1040
|
+
return mAttributes;
|
|
1041
|
+
},
|
|
935
1042
|
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
1043
|
+
/**
|
|
1044
|
+
* Returns the aria attributes for the no data container.
|
|
1045
|
+
*
|
|
1046
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
1047
|
+
* @returns {object} An object containing the aria attributes
|
|
1048
|
+
*/
|
|
1049
|
+
getAriaAttributesForNoData: function(oExtension) {
|
|
1050
|
+
const mAttributes = {};
|
|
1051
|
+
const oTable = oExtension.getTable();
|
|
1052
|
+
const sTableId = oTable.getId();
|
|
944
1053
|
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
948
|
-
break;
|
|
1054
|
+
const vNoContentMessage = TableUtils.getNoContentMessage(oTable);
|
|
1055
|
+
const aLabels = [];
|
|
949
1056
|
|
|
950
|
-
|
|
951
|
-
mAttributes["aria-hidden"] = "true";
|
|
952
|
-
break;
|
|
1057
|
+
mAttributes["role"] = "gridcell";
|
|
953
1058
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
1059
|
+
if (TableUtils.isA(vNoContentMessage, "sap.ui.core.Control")) {
|
|
1060
|
+
if (vNoContentMessage.getAccessibilityReferences instanceof Function) {
|
|
1061
|
+
const oAccRef = vNoContentMessage.getAccessibilityReferences();
|
|
1062
|
+
aLabels.push(oAccRef.title);
|
|
1063
|
+
aLabels.push(oAccRef.description);
|
|
1064
|
+
} else {
|
|
1065
|
+
aLabels.push(vNoContentMessage.getId());
|
|
1066
|
+
}
|
|
1067
|
+
} else {
|
|
1068
|
+
aLabels.push(sTableId + "-noDataMsg");
|
|
957
1069
|
}
|
|
958
1070
|
|
|
1071
|
+
mAttributes["aria-labelledby"] = aLabels;
|
|
1072
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
959
1073
|
return mAttributes;
|
|
960
|
-
}
|
|
1074
|
+
},
|
|
1075
|
+
|
|
1076
|
+
/**
|
|
1077
|
+
* Returns the aria attributes for the overlay.
|
|
1078
|
+
*
|
|
1079
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
1080
|
+
* @returns {object} An object containing the aria attributes
|
|
1081
|
+
*/
|
|
1082
|
+
getAriaAttributesForOverlay: function(oExtension) {
|
|
1083
|
+
const mAttributes = {};
|
|
1084
|
+
const oTable = oExtension.getTable();
|
|
1085
|
+
const sTableId = oTable.getId();
|
|
1086
|
+
|
|
1087
|
+
mAttributes["role"] = "region";
|
|
1088
|
+
mAttributes["aria-labelledby"] = [].concat(oTable.getAriaLabelledBy());
|
|
1089
|
+
if (oTable.getTitle()) {
|
|
1090
|
+
mAttributes["aria-labelledby"].push(oTable.getTitle().getId());
|
|
1091
|
+
}
|
|
1092
|
+
mAttributes["aria-labelledby"].push(sTableId + "-ariainvalid");
|
|
1093
|
+
return mAttributes;
|
|
1094
|
+
},
|
|
1095
|
+
|
|
1096
|
+
/**
|
|
1097
|
+
* Returns the aria attributes for the table footer.
|
|
1098
|
+
*
|
|
1099
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
1100
|
+
* @returns {object} An object containing the aria attributes
|
|
1101
|
+
*/
|
|
1102
|
+
getAriaAttributesForTableFooter: function(oExtension) {
|
|
1103
|
+
const mAttributes = {};
|
|
1104
|
+
const oTable = oExtension.getTable();
|
|
1105
|
+
|
|
1106
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
1107
|
+
return mAttributes;
|
|
1108
|
+
},
|
|
1109
|
+
|
|
1110
|
+
/**
|
|
1111
|
+
* Returns the aria attributes for a sub header.
|
|
1112
|
+
*
|
|
1113
|
+
* @param {sap.ui.table.extensions.Accessibility} oExtension The accessibility extension
|
|
1114
|
+
* @returns {object} An object containing the aria attributes
|
|
1115
|
+
*/
|
|
1116
|
+
getAriaAttributesForTableSubHeader: function(oExtension) {
|
|
1117
|
+
const mAttributes = {};
|
|
1118
|
+
const oTable = oExtension.getTable();
|
|
1119
|
+
|
|
1120
|
+
addAriaForOverlayOrNoData(oTable, mAttributes, true, false);
|
|
1121
|
+
return mAttributes;
|
|
1122
|
+
},
|
|
1123
|
+
|
|
1124
|
+
/**
|
|
1125
|
+
* Returns the aria attributes for the header of the row actions column.
|
|
1126
|
+
*
|
|
1127
|
+
* @returns {object} An object containing the aria attributes
|
|
1128
|
+
*/
|
|
1129
|
+
getAriaAttributesForRowActionHeader: function() {
|
|
1130
|
+
return {"aria-hidden": "true"};
|
|
1131
|
+
},
|
|
961
1132
|
|
|
1133
|
+
/**
|
|
1134
|
+
* Returns the aria attributes for a presentational element that needs to be hidden for screen readers.
|
|
1135
|
+
*
|
|
1136
|
+
* @returns {object} An object containing the aria attributes
|
|
1137
|
+
*/
|
|
1138
|
+
getAriaAttributesForPresentation: function() {
|
|
1139
|
+
return {"role": "presentation"};
|
|
1140
|
+
}
|
|
962
1141
|
};
|
|
963
1142
|
|
|
964
1143
|
/**
|
|
@@ -969,7 +1148,7 @@ sap.ui.define([
|
|
|
969
1148
|
* @class Extension for sap.ui.table.Table which handles ACC related things.
|
|
970
1149
|
* @extends sap.ui.table.extensions.ExtensionBase
|
|
971
1150
|
* @author SAP SE
|
|
972
|
-
* @version 1.
|
|
1151
|
+
* @version 1.134.0
|
|
973
1152
|
* @constructor
|
|
974
1153
|
* @private
|
|
975
1154
|
* @alias sap.ui.table.extensions.Accessibility
|
|
@@ -1039,7 +1218,7 @@ sap.ui.define([
|
|
|
1039
1218
|
* @protected
|
|
1040
1219
|
*/
|
|
1041
1220
|
getAriaAttributesFor: function(sType, mParams) {
|
|
1042
|
-
return ExtensionHelper
|
|
1221
|
+
return ExtensionHelper["getAriaAttributesFor" + sType](this, mParams);
|
|
1043
1222
|
},
|
|
1044
1223
|
|
|
1045
1224
|
/**
|
|
@@ -1068,7 +1247,7 @@ sap.ui.define([
|
|
|
1068
1247
|
*/
|
|
1069
1248
|
onfocusout: function(oEvent) {
|
|
1070
1249
|
const oTable = this.getTable();
|
|
1071
|
-
if (!oTable) {
|
|
1250
|
+
if (!oTable || oEvent.target.classList.contains("sapUiTableCtrlBefore")) {
|
|
1072
1251
|
return;
|
|
1073
1252
|
}
|
|
1074
1253
|
|
|
@@ -1088,37 +1267,16 @@ sap.ui.define([
|
|
|
1088
1267
|
/**
|
|
1089
1268
|
* Known element types (DOM areas) in the table.
|
|
1090
1269
|
*
|
|
1091
|
-
* @type {{DATACELL: string, COLUMNHEADER: string, ROWHEADER: string, ROWACTION: string, COLUMNROWHEADER: string
|
|
1092
|
-
* TABLE: string, TABLEHEADER: string, TABLEFOOTER: string, TABLESUBHEADER: string, COLUMNHEADER_TBL: string, COLUMNHEADER_ROW: string,
|
|
1093
|
-
* CREATIONROW_TBL: string, ROWHEADER_COL: string, TH: string, TR: string, TREEICON: string, ROWACTIONHEADER: string,
|
|
1094
|
-
* NODATA: string, OVERLAY: string}|*}
|
|
1270
|
+
* @type {{DATACELL: string, COLUMNHEADER: string, ROWHEADER: string, ROWACTION: string, COLUMNROWHEADER: string}|*}
|
|
1095
1271
|
* @see sap.ui.table.extensions.AccessibilityRender.writeAriaAttributesFor
|
|
1096
1272
|
* @public
|
|
1097
1273
|
*/
|
|
1098
1274
|
AccExtension.ELEMENTTYPES = {
|
|
1099
|
-
DATACELL: "
|
|
1100
|
-
COLUMNHEADER: "
|
|
1101
|
-
ROWHEADER: "
|
|
1102
|
-
ROWACTION: "
|
|
1103
|
-
COLUMNROWHEADER: "
|
|
1104
|
-
ROOT: "ROOT", // The tables root dom element
|
|
1105
|
-
CONTAINER: "CONTAINER", // The table container
|
|
1106
|
-
CONTENT: "CONTENT", // The content area of the table which contains all the table elements, rowheaders, columnheaders, etc
|
|
1107
|
-
TABLE: "TABLE", // The "real" table element(s)
|
|
1108
|
-
TABLEHEADER: "TABLEHEADER", // TODO: Delete in UI5 2
|
|
1109
|
-
TABLEFOOTER: "TABLEFOOTER", // The table footer area
|
|
1110
|
-
TABLESUBHEADER: "TABLESUBHEADER", // The table toolbar and extension areas
|
|
1111
|
-
COLUMNHEADER_TBL: "COLUMNHEADER_TABLE", // The table with the column headers
|
|
1112
|
-
COLUMNHEADER_ROW: "COLUMNHEADER_ROW", // The table row with the column headers
|
|
1113
|
-
CREATIONROW_TBL: "CREATIONROW_TABLE", // The table with the creation row
|
|
1114
|
-
CREATIONROW: "CREATIONROW", // The root of the creation row
|
|
1115
|
-
ROWHEADER_COL: "ROWHEADER_COL", // The area which contains the row headers
|
|
1116
|
-
TH: "TH", // The "technical" column headers
|
|
1117
|
-
TR: "TR", // The rows
|
|
1118
|
-
TREEICON: "TREEICON", // The expand/collapse icon in the TreeTable
|
|
1119
|
-
ROWACTIONHEADER: "ROWACTIONHEADER", // The header of the row action column
|
|
1120
|
-
NODATA: "NODATA", // The no data container
|
|
1121
|
-
OVERLAY: "OVERLAY" // The overlay container
|
|
1275
|
+
DATACELL: "DataCell", // Standard data cell (standard, group or sum)
|
|
1276
|
+
COLUMNHEADER: "ColumnHeader", // Column header
|
|
1277
|
+
ROWHEADER: "RowHeader", // Row header (standard, group or sum)
|
|
1278
|
+
ROWACTION: "RowAction", // Row action (standard, group or sum)
|
|
1279
|
+
COLUMNROWHEADER: "ColumnRowHeader" // Select all row selector content
|
|
1122
1280
|
};
|
|
1123
1281
|
|
|
1124
1282
|
/**
|
|
@@ -1239,7 +1397,9 @@ sap.ui.define([
|
|
|
1239
1397
|
const bIsSelected = oTable._getSelectionPlugin().isSelected(oRow);
|
|
1240
1398
|
|
|
1241
1399
|
if ($Ref.row) {
|
|
1242
|
-
$Ref.row.not($Ref.rowHeaderPart).not($Ref.rowActionPart).add(
|
|
1400
|
+
$Ref.row.not($Ref.rowHeaderPart).not($Ref.rowActionPart).add(
|
|
1401
|
+
$Ref.row.children(".sapUiTableCell")
|
|
1402
|
+
).attr("aria-selected", bIsSelected ? "true" : "false");
|
|
1243
1403
|
}
|
|
1244
1404
|
|
|
1245
1405
|
sTextKeyboard = bIsSelected ? mKeyboardTexts.rowDeselect : mKeyboardTexts.rowSelect;
|
|
@@ -1270,7 +1430,7 @@ sap.ui.define([
|
|
|
1270
1430
|
});
|
|
1271
1431
|
|
|
1272
1432
|
if ($TreeIcon) {
|
|
1273
|
-
$TreeIcon.attr(ExtensionHelper.
|
|
1433
|
+
$TreeIcon.attr(ExtensionHelper.getAriaAttributesForTreeIcon(this, {row: oRow}));
|
|
1274
1434
|
}
|
|
1275
1435
|
};
|
|
1276
1436
|
|