@openui5/sap.ui.table 1.93.3 → 1.96.2
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 +6 -11
- package/THIRDPARTY.txt +10 -16
- package/package.json +3 -3
- package/src/sap/ui/table/.library +1 -1
- package/src/sap/ui/table/AnalyticalColumn.js +1 -1
- package/src/sap/ui/table/AnalyticalColumnMenu.js +1 -1
- package/src/sap/ui/table/AnalyticalTable.js +51 -12
- package/src/sap/ui/table/Column.js +29 -6
- package/src/sap/ui/table/ColumnMenu.js +3 -1
- package/src/sap/ui/table/CreationRow.js +1 -1
- 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 +3 -2
- package/src/sap/ui/table/Table.js +79 -98
- package/src/sap/ui/table/TablePersoController.js +1 -1
- package/src/sap/ui/table/TableRenderer.js +9 -3
- package/src/sap/ui/table/TreeTable.js +27 -2
- package/src/sap/ui/table/extensions/Accessibility.js +45 -26
- package/src/sap/ui/table/extensions/AccessibilityRender.js +1 -1
- 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 +25 -45
- package/src/sap/ui/table/extensions/KeyboardDelegate.js +67 -46
- package/src/sap/ui/table/extensions/Pointer.js +1 -14
- package/src/sap/ui/table/extensions/Scrolling.js +133 -126
- package/src/sap/ui/table/extensions/ScrollingIOS.js +369 -0
- package/src/sap/ui/table/extensions/Synchronization.js +1 -1
- package/src/sap/ui/table/library.js +10 -10
- package/src/sap/ui/table/messagebundle_fr.properties +1 -1
- package/src/sap/ui/table/messagebundle_it.properties +3 -3
- package/src/sap/ui/table/plugins/BindingSelection.js +1 -1
- package/src/sap/ui/table/plugins/PluginBase.js +1 -1
- package/src/sap/ui/table/plugins/SelectionModelSelection.js +17 -28
- package/src/sap/ui/table/plugins/SelectionPlugin.js +1 -1
- package/src/sap/ui/table/plugins/V4Aggregation.js +9 -2
- package/src/sap/ui/table/rowmodes/AutoRowMode.js +16 -1
- package/src/sap/ui/table/rowmodes/FixedRowMode.js +16 -1
- package/src/sap/ui/table/rowmodes/InteractiveRowMode.js +23 -9
- package/src/sap/ui/table/rowmodes/RowMode.js +10 -28
- package/src/sap/ui/table/rowmodes/VariableRowMode.js +1 -1
- package/src/sap/ui/table/themes/base/Cell.less +1 -10
- package/src/sap/ui/table/themes/base/Grouping.less +4 -1
- package/src/sap/ui/table/themes/base/ScrollingIOS.less +26 -0
- package/src/sap/ui/table/themes/base/Table.less +1 -1
- package/src/sap/ui/table/themes/base/library.source.less +1 -0
- package/src/sap/ui/table/utils/TableUtils.js +25 -60
- 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 +5 -1
- package/src/sap/ui/table/utils/_HookUtils.js +1 -1
- package/src/sap/ui/table/utils/_MenuUtils.js +1 -1
- package/ui5.yaml +4 -1
|
@@ -439,6 +439,72 @@ sap.ui.define([
|
|
|
439
439
|
}
|
|
440
440
|
},
|
|
441
441
|
|
|
442
|
+
/**
|
|
443
|
+
* Updates the visibility, position and scroll range of the horizontal scrollbar.
|
|
444
|
+
*
|
|
445
|
+
* @param {sap.ui.table.Table} oTable Instance of the table.
|
|
446
|
+
*/
|
|
447
|
+
updateScrollbar: function(oTable) {
|
|
448
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
449
|
+
var oHSb = oScrollExtension.getHorizontalScrollbar();
|
|
450
|
+
|
|
451
|
+
if (!oHSb) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
var mTableSizes = oTable._collectTableSizes();
|
|
456
|
+
var $Table = oTable.$();
|
|
457
|
+
var iColsWidth = mTableSizes.tableCtrlScrollWidth;
|
|
458
|
+
|
|
459
|
+
if (Device.browser.safari) {
|
|
460
|
+
iColsWidth = Math.max(iColsWidth, oTable._getColumnsWidth(oTable.getComputedFixedColumnCount()));
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
var bHorizontalScrollbarRequired = iColsWidth > mTableSizes.tableCtrlScrWidth;
|
|
464
|
+
|
|
465
|
+
if (bHorizontalScrollbarRequired) {
|
|
466
|
+
// Show the horizontal scrollbar, if it is not already visible.
|
|
467
|
+
if (!oScrollExtension.isHorizontalScrollbarVisible()) {
|
|
468
|
+
$Table.addClass("sapUiTableHScr");
|
|
469
|
+
oHSb.classList.remove("sapUiTableHidden");
|
|
470
|
+
|
|
471
|
+
if (Device.browser.safari) {
|
|
472
|
+
var $sapUiTableColHdr = $Table.find(".sapUiTableCtrlScroll, .sapUiTableColHdrScr > .sapUiTableColHdr");
|
|
473
|
+
// min-width on table elements does not work for safari
|
|
474
|
+
$sapUiTableColHdr.outerWidth(iColsWidth);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
var iScrollPadding = mTableSizes.tableCtrlFixedWidth;
|
|
479
|
+
if ($Table.find(".sapUiTableRowHdrScr").length > 0) {
|
|
480
|
+
iScrollPadding += mTableSizes.tableRowHdrScrWidth;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
if (oTable._bRtlMode) {
|
|
484
|
+
oHSb.style.marginRight = iScrollPadding + "px";
|
|
485
|
+
oHSb.style.marginLeft = "";
|
|
486
|
+
} else {
|
|
487
|
+
oHSb.style.marginLeft = iScrollPadding + "px";
|
|
488
|
+
oHSb.style.marginRight = "";
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
var oHSbContent = oTable.getDomRef("hsb-content");
|
|
492
|
+
if (oHSbContent) {
|
|
493
|
+
oHSbContent.style.width = iColsWidth + "px";
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
if (!bHorizontalScrollbarRequired && oScrollExtension.isHorizontalScrollbarVisible()) {
|
|
498
|
+
// Hide the horizontal scrollbar, if it is visible.
|
|
499
|
+
$Table.removeClass("sapUiTableHScr");
|
|
500
|
+
oHSb.classList.add("sapUiTableHidden");
|
|
501
|
+
if (Device.browser.safari) {
|
|
502
|
+
// min-width on table elements does not work for safari
|
|
503
|
+
$Table.find(".sapUiTableCtrlScroll, .sapUiTableColHdr").css("width", "");
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
|
|
442
508
|
/**
|
|
443
509
|
* Will be called if the horizontal scrollbar is clicked.
|
|
444
510
|
*
|
|
@@ -1467,7 +1533,7 @@ sap.ui.define([
|
|
|
1467
1533
|
onRowsUpdated: function(oEvent) {
|
|
1468
1534
|
log("VerticalScrollingHelper.onRowsUpdated: Reason " + oEvent.getParameters().reason, this);
|
|
1469
1535
|
|
|
1470
|
-
|
|
1536
|
+
VerticalScrollingHelper.updateScrollbarVisibility(this);
|
|
1471
1537
|
|
|
1472
1538
|
if (_private(this).aOnRowsUpdatedPreprocessors.length > 0) {
|
|
1473
1539
|
log("VerticalScrollingHelper.onRowsUpdated (preprocessors)", this);
|
|
@@ -1578,7 +1644,8 @@ sap.ui.define([
|
|
|
1578
1644
|
var oScrollExtension = oTable._getScrollExtension();
|
|
1579
1645
|
|
|
1580
1646
|
log("VerticalScrollingHelper.adjustToTotalRowCount", oTable);
|
|
1581
|
-
|
|
1647
|
+
VerticalScrollingHelper.updateScrollbarVisibility(oTable);
|
|
1648
|
+
HorizontalScrollingHelper.updateScrollbar(oTable);
|
|
1582
1649
|
oScrollExtension.updateVerticalScrollHeight();
|
|
1583
1650
|
|
|
1584
1651
|
VerticalScrollProcess.start(oTable, VerticalScrollProcess.AdjustToTotalRowCount, function(resolve, reject, oProcessInterface) {
|
|
@@ -1618,6 +1685,67 @@ sap.ui.define([
|
|
|
1618
1685
|
});
|
|
1619
1686
|
},
|
|
1620
1687
|
|
|
1688
|
+
/**
|
|
1689
|
+
* This hook is called when the table layout is updated, for example when resizing.
|
|
1690
|
+
*
|
|
1691
|
+
* @param {sap.ui.table.utils.TableUtils.RowsUpdateReason} sReason The reason for updating the table sizes.
|
|
1692
|
+
* @private
|
|
1693
|
+
*/
|
|
1694
|
+
onUpdateTableSizes: function(sReason) {
|
|
1695
|
+
VerticalScrollingHelper.updateScrollbarPosition(this);
|
|
1696
|
+
VerticalScrollingHelper.updateScrollbarVisibility(this);
|
|
1697
|
+
HorizontalScrollingHelper.updateScrollbar(this);
|
|
1698
|
+
},
|
|
1699
|
+
|
|
1700
|
+
updateScrollbarPosition: function(oTable) {
|
|
1701
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
1702
|
+
var oVSb = oScrollExtension.getVerticalScrollbar();
|
|
1703
|
+
var oTableCCnt = oTable.getDomRef("tableCCnt");
|
|
1704
|
+
|
|
1705
|
+
if (!oVSb || !oTableCCnt) {
|
|
1706
|
+
return;
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
var iTop = oTableCCnt.offsetTop;
|
|
1710
|
+
|
|
1711
|
+
var oVSbBg = oTable.getDomRef("vsb-bg");
|
|
1712
|
+
if (oVSbBg) {
|
|
1713
|
+
oVSbBg.style.top = iTop + "px";
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
if (oTable._getRowCounts().fixedTop > 0) {
|
|
1717
|
+
iTop += oTable._iVsbTop;
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
oVSb.style.top = iTop + "px";
|
|
1721
|
+
},
|
|
1722
|
+
|
|
1723
|
+
updateScrollbarVisibility: function(oTable) {
|
|
1724
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
1725
|
+
var oVSb = oScrollExtension.getVerticalScrollbar();
|
|
1726
|
+
var oTableElement = oTable ? oTable.getDomRef() : null;
|
|
1727
|
+
|
|
1728
|
+
if (!oVSb || !oTableElement) {
|
|
1729
|
+
return;
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
var bVerticalScrollbarRequired = oScrollExtension.isVerticalScrollbarRequired();
|
|
1733
|
+
|
|
1734
|
+
// Show the currently invisible scrollbar.
|
|
1735
|
+
if (bVerticalScrollbarRequired && !oScrollExtension.isVerticalScrollbarVisible()) {
|
|
1736
|
+
if (!oScrollExtension.isVerticalScrollbarExternal()) {
|
|
1737
|
+
oTableElement.classList.add("sapUiTableVScr");
|
|
1738
|
+
}
|
|
1739
|
+
oVSb.classList.remove("sapUiTableHidden");
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
// Hide the currently visible scrollbar.
|
|
1743
|
+
if (!bVerticalScrollbarRequired && oScrollExtension.isVerticalScrollbarVisible()) {
|
|
1744
|
+
oTableElement.classList.remove("sapUiTableVScr");
|
|
1745
|
+
oVSb.classList.add("sapUiTableHidden");
|
|
1746
|
+
}
|
|
1747
|
+
},
|
|
1748
|
+
|
|
1621
1749
|
/**
|
|
1622
1750
|
* Adds the event listeners which are required for the vertical scrolling.
|
|
1623
1751
|
*
|
|
@@ -2163,7 +2291,7 @@ sap.ui.define([
|
|
|
2163
2291
|
* @class Extension for sap.ui.table.Table which handles scrolling.
|
|
2164
2292
|
* @extends sap.ui.table.extensions.ExtensionBase
|
|
2165
2293
|
* @author SAP SE
|
|
2166
|
-
* @version 1.
|
|
2294
|
+
* @version 1.96.2
|
|
2167
2295
|
* @constructor
|
|
2168
2296
|
* @private
|
|
2169
2297
|
* @alias sap.ui.table.extensions.Scrolling
|
|
@@ -2212,6 +2340,7 @@ sap.ui.define([
|
|
|
2212
2340
|
VerticalScrollingHelper.addEventListeners(oTable);
|
|
2213
2341
|
ScrollingHelper.addEventListeners(oTable);
|
|
2214
2342
|
TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.TotalRowCountChanged, VerticalScrollingHelper.onTotalRowCountChanged, oTable);
|
|
2343
|
+
TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.UpdateSizes, VerticalScrollingHelper.onUpdateTableSizes, oTable);
|
|
2215
2344
|
},
|
|
2216
2345
|
|
|
2217
2346
|
/**
|
|
@@ -2225,6 +2354,7 @@ sap.ui.define([
|
|
|
2225
2354
|
VerticalScrollingHelper.removeEventListeners(oTable);
|
|
2226
2355
|
ScrollingHelper.removeEventListeners(oTable);
|
|
2227
2356
|
TableUtils.Hook.deregister(oTable, TableUtils.Hook.Keys.Table.TotalRowCountChanged, VerticalScrollingHelper.onTotalRowCountChanged, oTable);
|
|
2357
|
+
TableUtils.Hook.deregister(oTable, TableUtils.Hook.Keys.Table.UpdateSizes, VerticalScrollingHelper.onUpdateTableSizes, oTable);
|
|
2228
2358
|
},
|
|
2229
2359
|
|
|
2230
2360
|
/**
|
|
@@ -2404,71 +2534,6 @@ sap.ui.define([
|
|
|
2404
2534
|
}
|
|
2405
2535
|
};
|
|
2406
2536
|
|
|
2407
|
-
/**
|
|
2408
|
-
* Updates the visibility, position and range of the horizontal scrollbar.
|
|
2409
|
-
*
|
|
2410
|
-
* @param {Object} oTableSizes The object containing the table sizes.
|
|
2411
|
-
*/
|
|
2412
|
-
ScrollExtension.prototype.updateHorizontalScrollbar = function(oTableSizes) {
|
|
2413
|
-
var oTable = this.getTable();
|
|
2414
|
-
var oHSb = this.getHorizontalScrollbar();
|
|
2415
|
-
|
|
2416
|
-
if (!oTable || !oHSb || !oTableSizes) {
|
|
2417
|
-
return;
|
|
2418
|
-
}
|
|
2419
|
-
|
|
2420
|
-
// get the width of the container
|
|
2421
|
-
var $Table = oTable.$();
|
|
2422
|
-
var iColsWidth = oTableSizes.tableCtrlScrollWidth;
|
|
2423
|
-
if (Device.browser.safari) {
|
|
2424
|
-
iColsWidth = Math.max(iColsWidth, oTable._getColumnsWidth(oTable.getComputedFixedColumnCount()));
|
|
2425
|
-
}
|
|
2426
|
-
|
|
2427
|
-
var bHorizontalScrollbarRequired = iColsWidth > oTableSizes.tableCtrlScrWidth;
|
|
2428
|
-
|
|
2429
|
-
if (bHorizontalScrollbarRequired) {
|
|
2430
|
-
// Show the horizontal scrollbar, if it is not already visible.
|
|
2431
|
-
if (!this.isHorizontalScrollbarVisible()) {
|
|
2432
|
-
$Table.addClass("sapUiTableHScr");
|
|
2433
|
-
oHSb.classList.remove("sapUiTableHidden");
|
|
2434
|
-
|
|
2435
|
-
if (Device.browser.safari) {
|
|
2436
|
-
var $sapUiTableColHdr = $Table.find(".sapUiTableCtrlScroll, .sapUiTableColHdrScr > .sapUiTableColHdr");
|
|
2437
|
-
// min-width on table elements does not work for safari
|
|
2438
|
-
$sapUiTableColHdr.outerWidth(iColsWidth);
|
|
2439
|
-
}
|
|
2440
|
-
}
|
|
2441
|
-
|
|
2442
|
-
var iScrollPadding = oTableSizes.tableCtrlFixedWidth;
|
|
2443
|
-
if ($Table.find(".sapUiTableRowHdrScr").length > 0) {
|
|
2444
|
-
iScrollPadding += oTableSizes.tableRowHdrScrWidth;
|
|
2445
|
-
}
|
|
2446
|
-
|
|
2447
|
-
if (oTable._bRtlMode) {
|
|
2448
|
-
oHSb.style.marginRight = iScrollPadding + "px";
|
|
2449
|
-
oHSb.style.marginLeft = "";
|
|
2450
|
-
} else {
|
|
2451
|
-
oHSb.style.marginLeft = iScrollPadding + "px";
|
|
2452
|
-
oHSb.style.marginRight = "";
|
|
2453
|
-
}
|
|
2454
|
-
|
|
2455
|
-
var oHSbContent = oTable.getDomRef("hsb-content");
|
|
2456
|
-
if (oHSbContent) {
|
|
2457
|
-
oHSbContent.style.width = iColsWidth + "px";
|
|
2458
|
-
}
|
|
2459
|
-
}
|
|
2460
|
-
|
|
2461
|
-
if (!bHorizontalScrollbarRequired && this.isHorizontalScrollbarVisible()) {
|
|
2462
|
-
// Hide the horizontal scrollbar, if it is visible.
|
|
2463
|
-
$Table.removeClass("sapUiTableHScr");
|
|
2464
|
-
oHSb.classList.add("sapUiTableHidden");
|
|
2465
|
-
if (Device.browser.safari) {
|
|
2466
|
-
// min-width on table elements does not work for safari
|
|
2467
|
-
$Table.find(".sapUiTableCtrlScroll, .sapUiTableColHdr").css("width", "");
|
|
2468
|
-
}
|
|
2469
|
-
}
|
|
2470
|
-
};
|
|
2471
|
-
|
|
2472
2537
|
/**
|
|
2473
2538
|
* Updates the height of the vertical scrollbar.
|
|
2474
2539
|
*/
|
|
@@ -2499,35 +2564,6 @@ sap.ui.define([
|
|
|
2499
2564
|
return oTable._getRowCounts()._scrollSize * oTable._getBaseRowHeight();
|
|
2500
2565
|
};
|
|
2501
2566
|
|
|
2502
|
-
/**
|
|
2503
|
-
* Updates the position of the vertical scrollbar.
|
|
2504
|
-
*/
|
|
2505
|
-
ScrollExtension.prototype.updateVerticalScrollbarPosition = function() {
|
|
2506
|
-
var oTable = this.getTable();
|
|
2507
|
-
var oVSb = this.getVerticalScrollbar();
|
|
2508
|
-
|
|
2509
|
-
if (!oTable || !oVSb) {
|
|
2510
|
-
return;
|
|
2511
|
-
}
|
|
2512
|
-
|
|
2513
|
-
var oTableCCnt = oTable.getDomRef("tableCCnt");
|
|
2514
|
-
|
|
2515
|
-
if (oTableCCnt) {
|
|
2516
|
-
var iTop = oTableCCnt.offsetTop;
|
|
2517
|
-
|
|
2518
|
-
var oVSbBg = oTable.getDomRef("vsb-bg");
|
|
2519
|
-
if (oVSbBg) {
|
|
2520
|
-
oVSbBg.style.top = iTop + "px";
|
|
2521
|
-
}
|
|
2522
|
-
|
|
2523
|
-
if (oTable._getRowCounts().fixedTop > 0) {
|
|
2524
|
-
iTop += oTable._iVsbTop;
|
|
2525
|
-
}
|
|
2526
|
-
|
|
2527
|
-
oVSb.style.top = iTop + "px";
|
|
2528
|
-
}
|
|
2529
|
-
};
|
|
2530
|
-
|
|
2531
2567
|
/**
|
|
2532
2568
|
* Updates the vertical scroll position.
|
|
2533
2569
|
*
|
|
@@ -2604,35 +2640,6 @@ sap.ui.define([
|
|
|
2604
2640
|
}
|
|
2605
2641
|
};
|
|
2606
2642
|
|
|
2607
|
-
/**
|
|
2608
|
-
* Updates the visibility of the vertical scrollbar.
|
|
2609
|
-
*/
|
|
2610
|
-
ScrollExtension.prototype.updateVerticalScrollbarVisibility = function() {
|
|
2611
|
-
var oTable = this.getTable();
|
|
2612
|
-
var oTableElement = oTable ? oTable.getDomRef() : null;
|
|
2613
|
-
var oVSb = this.getVerticalScrollbar();
|
|
2614
|
-
|
|
2615
|
-
if (!oTableElement || !oVSb) {
|
|
2616
|
-
return;
|
|
2617
|
-
}
|
|
2618
|
-
|
|
2619
|
-
var bVerticalScrollbarRequired = this.isVerticalScrollbarRequired();
|
|
2620
|
-
|
|
2621
|
-
// Show the currently invisible scrollbar.
|
|
2622
|
-
if (bVerticalScrollbarRequired && !this.isVerticalScrollbarVisible()) {
|
|
2623
|
-
if (!this.isVerticalScrollbarExternal()) {
|
|
2624
|
-
oTableElement.classList.add("sapUiTableVScr");
|
|
2625
|
-
}
|
|
2626
|
-
oVSb.classList.remove("sapUiTableHidden");
|
|
2627
|
-
}
|
|
2628
|
-
|
|
2629
|
-
// Hide the currently visible scrollbar.
|
|
2630
|
-
if (!bVerticalScrollbarRequired && this.isVerticalScrollbarVisible()) {
|
|
2631
|
-
oTableElement.classList.remove("sapUiTableVScr");
|
|
2632
|
-
oVSb.classList.add("sapUiTableHidden");
|
|
2633
|
-
}
|
|
2634
|
-
};
|
|
2635
|
-
|
|
2636
2643
|
/**
|
|
2637
2644
|
* Checks whether the vertical scrollbar is required.
|
|
2638
2645
|
*
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* OpenUI5
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Provides helper sap.ui.table.extensions.ScrollingIOS.
|
|
8
|
+
sap.ui.define([
|
|
9
|
+
"./ExtensionBase",
|
|
10
|
+
"../utils/TableUtils"
|
|
11
|
+
], function(ExtensionBase, TableUtils) {
|
|
12
|
+
"use strict";
|
|
13
|
+
|
|
14
|
+
var ExtensionDelegate = {
|
|
15
|
+
onAfterRendering: function() {
|
|
16
|
+
var oScrollIOSExtension = this._getScrollIOSExtension();
|
|
17
|
+
oScrollIOSExtension.attachScrollbar();
|
|
18
|
+
oScrollIOSExtension.updateVerticalScrollbar();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Extension for sap.ui.table.Table which displays vertical scrollbar on iOS and provides event handlers for user interaction.
|
|
24
|
+
* <b>This is an internal class that is only intended to be used inside the sap.ui.table library! Any usage outside the sap.ui.table library
|
|
25
|
+
* is strictly prohibited!</b>
|
|
26
|
+
*
|
|
27
|
+
* <b>Displays vertical scrollbar on iOS and provides event handlers for user interaction.</b>
|
|
28
|
+
*
|
|
29
|
+
* @class Extension for sap.ui.table.Table which handles the scrollbar on iOS.
|
|
30
|
+
* @extends sap.ui.table.extensions.ExtensionBase
|
|
31
|
+
* @author SAP SE
|
|
32
|
+
* @version 1.96.2
|
|
33
|
+
* @constructor
|
|
34
|
+
* @private
|
|
35
|
+
* @alias sap.ui.table.extensions.ScrollingIOS
|
|
36
|
+
*/
|
|
37
|
+
var ScrollIOSExtension = ExtensionBase.extend("sap.ui.table.extensions.ScrollingIOS", /** @lends sap.ui.table.extensions.ScrollingIOS.prototype */ {
|
|
38
|
+
/**
|
|
39
|
+
* @override
|
|
40
|
+
* @inheritDoc
|
|
41
|
+
* @returns {string} The name of this extension.
|
|
42
|
+
*/
|
|
43
|
+
_init: function(oTable) {
|
|
44
|
+
TableUtils.addDelegate(oTable, ExtensionDelegate, oTable);
|
|
45
|
+
oTable.addStyleClass("sapUiTableVSbIOSActive");
|
|
46
|
+
|
|
47
|
+
if (this.attachScrollbar()) {
|
|
48
|
+
this.updateVerticalScrollbar();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return "ScrollIOSExtension";
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @override
|
|
56
|
+
* @inheritDoc
|
|
57
|
+
*/
|
|
58
|
+
destroy: function() {
|
|
59
|
+
var oTable = this.getTable();
|
|
60
|
+
|
|
61
|
+
TableUtils.removeDelegate(oTable, ExtensionDelegate);
|
|
62
|
+
oTable.removeStyleClass("sapUiTableVSbIOSActive");
|
|
63
|
+
clearTimeout(this._iUpdateDefaultScrollbarPositionTimeoutId);
|
|
64
|
+
ExtensionBase.prototype.destroy.apply(this, arguments);
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @override
|
|
69
|
+
* @inheritDoc
|
|
70
|
+
*/
|
|
71
|
+
_attachEvents: function() {
|
|
72
|
+
var oTable = this.getTable();
|
|
73
|
+
|
|
74
|
+
TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.TotalRowCountChanged, this.onTotalRowCountChanged, this);
|
|
75
|
+
TableUtils.Hook.register(oTable, TableUtils.Hook.Keys.Table.UpdateSizes, this.onUpdateTableSizes, this);
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @override
|
|
80
|
+
* @inheritDoc
|
|
81
|
+
*/
|
|
82
|
+
_detachEvents: function() {
|
|
83
|
+
var oTable = this.getTable();
|
|
84
|
+
|
|
85
|
+
var oVSb = oTable._getScrollExtension().getVerticalScrollbar();
|
|
86
|
+
if (oVSb) {
|
|
87
|
+
oVSb.removeEventListener("scroll", this._onVerticalScrollEventHandler);
|
|
88
|
+
}
|
|
89
|
+
delete this._onVerticalScrollEventHandler;
|
|
90
|
+
|
|
91
|
+
var oVSbIOS = this.getVerticalScrollbar();
|
|
92
|
+
if (oVSbIOS) {
|
|
93
|
+
oVSbIOS.removeEventListener("pointerdown", this._onPointerDownEventHandler);
|
|
94
|
+
}
|
|
95
|
+
delete this._onPointerDownEventHandler;
|
|
96
|
+
|
|
97
|
+
var oVSbThumb = this.getVerticalScrollbarThumb();
|
|
98
|
+
if (oVSbThumb) {
|
|
99
|
+
oVSbThumb.removeEventListener("touchmove", this._onTouchMoveEventHandler);
|
|
100
|
+
}
|
|
101
|
+
delete this._onTouchMoveEventHandler;
|
|
102
|
+
|
|
103
|
+
TableUtils.Hook.deregister(oTable, TableUtils.Hook.Keys.Table.TotalRowCountChanged, this.onTotalRowCountChanged, this);
|
|
104
|
+
TableUtils.Hook.deregister(oTable, TableUtils.Hook.Keys.Table.UpdateSizes, this.onUpdateTableSizes, this);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
ScrollIOSExtension.prototype.onUpdateTableSizes = function() {
|
|
109
|
+
this.updateVerticalScrollbarVisibility();
|
|
110
|
+
this.updateVerticalScrollbarThumbHeight();
|
|
111
|
+
this.updateVerticalScrollbarThumbPosition();
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
ScrollIOSExtension.prototype.onTotalRowCountChanged = function() {
|
|
115
|
+
this.updateVerticalScrollbarVisibility();
|
|
116
|
+
this.updateVerticalScrollbarThumbHeight();
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Inserts the scrollbar into the DOM if it does not yet exist.
|
|
121
|
+
*
|
|
122
|
+
* @returns {boolean} Whether the scrollbar was attached.
|
|
123
|
+
*/
|
|
124
|
+
ScrollIOSExtension.prototype.attachScrollbar = function() {
|
|
125
|
+
var oTable = this.getTable();
|
|
126
|
+
var oVSb = oTable._getScrollExtension().getVerticalScrollbar();
|
|
127
|
+
var oVSbIOS = this.getVerticalScrollbar();
|
|
128
|
+
var oVSbThumb = this.getVerticalScrollbarThumb();
|
|
129
|
+
|
|
130
|
+
if (!oVSb) {
|
|
131
|
+
return false; // Cannot attach
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Render scrollbar
|
|
135
|
+
if (!oVSbIOS) {
|
|
136
|
+
oVSbIOS = document.createElement("div");
|
|
137
|
+
oVSbIOS.setAttribute("id", oTable.getId() + "-vsb-ios");
|
|
138
|
+
oVSbIOS.classList.add("sapUiTableVSbIOS");
|
|
139
|
+
|
|
140
|
+
oVSbThumb = document.createElement("div");
|
|
141
|
+
oVSbThumb.classList.add("sapUiTableVSbIOSThumb");
|
|
142
|
+
oVSbIOS.append(oVSbThumb);
|
|
143
|
+
|
|
144
|
+
oVSb.after(oVSbIOS);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Attach events
|
|
148
|
+
if (!this._onPointerDownEventHandler) {
|
|
149
|
+
this._onPointerDownEventHandler = this.onPointerDown.bind(this);
|
|
150
|
+
oVSbIOS.addEventListener("pointerdown", this._onPointerDownEventHandler);
|
|
151
|
+
this._onTouchMoveEventHandler = this.onTouchMove.bind(this);
|
|
152
|
+
oVSbThumb.addEventListener("touchmove", this._onTouchMoveEventHandler);
|
|
153
|
+
this._onVerticalScrollEventHandler = this.updateVerticalScrollbarThumbPosition.bind(this);
|
|
154
|
+
oVSb.addEventListener("scroll", this._onVerticalScrollEventHandler);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return true;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Gets DOM reference of the custom vertical scrollbar.
|
|
162
|
+
*
|
|
163
|
+
* @returns {HTMLElement|null} Returns <code>null</code>, if the vertical scrollbar does not exist.
|
|
164
|
+
*/
|
|
165
|
+
ScrollIOSExtension.prototype.getVerticalScrollbar = function() {
|
|
166
|
+
var oTable = this.getTable();
|
|
167
|
+
return oTable ? oTable.getDomRef("vsb-ios") : null;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Gets DOM reference of the thumb of the custom vertical scrollbar.
|
|
172
|
+
*
|
|
173
|
+
* @returns {HTMLElement|null} Returns <code>null</code>, if the vertical scrollbar thumb does not exist.
|
|
174
|
+
*/
|
|
175
|
+
ScrollIOSExtension.prototype.getVerticalScrollbarThumb = function() {
|
|
176
|
+
var oVSb = this.getVerticalScrollbar();
|
|
177
|
+
return oVSb ? oVSb.firstElementChild : null;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Checks whether the vertical scrollbar is visible.
|
|
182
|
+
*
|
|
183
|
+
* @returns {boolean} Returns <code>true</code>, if the vertical scrollbar is visible.
|
|
184
|
+
*/
|
|
185
|
+
ScrollIOSExtension.prototype.isVerticalScrollbarVisible = function() {
|
|
186
|
+
var oVSbIOS = this.getVerticalScrollbar();
|
|
187
|
+
return oVSbIOS ? !oVSbIOS.classList.contains("sapUiTableHidden") : false;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Performs a full update of the vertical scrollbar.
|
|
192
|
+
*/
|
|
193
|
+
ScrollIOSExtension.prototype.updateVerticalScrollbar = function() {
|
|
194
|
+
var oTable = this.getTable();
|
|
195
|
+
var oTableCCnt = oTable.getDomRef("tableCCnt");
|
|
196
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
197
|
+
|
|
198
|
+
var oVSbIOS = this.getVerticalScrollbar();
|
|
199
|
+
var iTop = oScrollExtension.isVerticalScrollbarExternal() ? 0 : oTableCCnt.offsetTop;
|
|
200
|
+
|
|
201
|
+
if (oTable._getRowCounts().fixedTop > 0) {
|
|
202
|
+
iTop += oTable._iVsbTop;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
oVSbIOS.style.height = oScrollExtension.getVerticalScrollbarHeight() + "px";
|
|
206
|
+
oVSbIOS.style.top = iTop + "px";
|
|
207
|
+
|
|
208
|
+
this.updateVerticalScrollbarVisibility();
|
|
209
|
+
this.updateVerticalScrollbarThumbHeight();
|
|
210
|
+
this.updateVerticalScrollbarThumbPosition();
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Updates the visibility of the vertical scrollbar.
|
|
215
|
+
*/
|
|
216
|
+
ScrollIOSExtension.prototype.updateVerticalScrollbarVisibility = function() {
|
|
217
|
+
var oTable = this.getTable();
|
|
218
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
219
|
+
var oVSbIOS = this.getVerticalScrollbar();
|
|
220
|
+
|
|
221
|
+
if (!oVSbIOS) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (oScrollExtension.isVerticalScrollbarRequired() && !this.isVerticalScrollbarVisible()) {
|
|
226
|
+
// Show the currently invisible scrollbar.
|
|
227
|
+
oVSbIOS.classList.remove("sapUiTableHidden");
|
|
228
|
+
} else if (!oScrollExtension.isVerticalScrollbarRequired() && this.isVerticalScrollbarVisible()) {
|
|
229
|
+
// Hide the currently visible scrollbar.
|
|
230
|
+
oVSbIOS.classList.add("sapUiTableHidden");
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Updates the position of the vertical scroll thumb
|
|
236
|
+
*/
|
|
237
|
+
ScrollIOSExtension.prototype.updateVerticalScrollbarThumbPosition = function() {
|
|
238
|
+
var oVSbThumb = this.getVerticalScrollbarThumb();
|
|
239
|
+
|
|
240
|
+
if (oVSbThumb) {
|
|
241
|
+
oVSbThumb.style.top = this.getCalculateThumbOffset() + "px";
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Updates the height of the vertical scroll thumb
|
|
247
|
+
*/
|
|
248
|
+
ScrollIOSExtension.prototype.updateVerticalScrollbarThumbHeight = function() {
|
|
249
|
+
var oTable = this.getTable();
|
|
250
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
251
|
+
var oVSbThumb = this.getVerticalScrollbarThumb();
|
|
252
|
+
|
|
253
|
+
if (oVSbThumb) {
|
|
254
|
+
if (oScrollExtension.isVerticalScrollbarRequired()) {
|
|
255
|
+
oVSbThumb.style.height = this.getCalculateThumbHeight() + "px";
|
|
256
|
+
} else {
|
|
257
|
+
oVSbThumb.style.height = "0";
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Calculates the height of the vertical scroll thumb
|
|
264
|
+
*
|
|
265
|
+
* @returns {int} The calculated height of the vertical scroll thumb
|
|
266
|
+
*/
|
|
267
|
+
ScrollIOSExtension.prototype.getCalculateThumbHeight = function() {
|
|
268
|
+
var oTable = this.getTable();
|
|
269
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
270
|
+
var iVerticalScrollbarHeight = oScrollExtension.getVerticalScrollbarHeight();
|
|
271
|
+
var iVerticalScrollHeight = oScrollExtension.getVerticalScrollHeight();
|
|
272
|
+
|
|
273
|
+
return Math.round(Math.pow(iVerticalScrollbarHeight, 2) / iVerticalScrollHeight);
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Calculates the position of the vertical scroll thumb
|
|
278
|
+
*
|
|
279
|
+
* @returns {number} The calculated offset of the vertical scroll thumb
|
|
280
|
+
*/
|
|
281
|
+
ScrollIOSExtension.prototype.getCalculateThumbOffset = function() {
|
|
282
|
+
var oTable = this.getTable();
|
|
283
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
284
|
+
var iVerticalScrollbarHeight = oScrollExtension.getVerticalScrollbarHeight();
|
|
285
|
+
var iVerticalScrollHeight = oScrollExtension.getVerticalScrollHeight();
|
|
286
|
+
var oVSb = oScrollExtension.getVerticalScrollbar();
|
|
287
|
+
var iVerticalScrollTop = oVSb ? oScrollExtension.getVerticalScrollbar().scrollTop : 0;
|
|
288
|
+
|
|
289
|
+
return Math.round(iVerticalScrollTop * iVerticalScrollbarHeight / iVerticalScrollHeight);
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Updates the position of the vertical scroll thumb and the table position accordingly
|
|
294
|
+
*
|
|
295
|
+
* @param {jQuery.Event} oEvent The event triggered
|
|
296
|
+
*/
|
|
297
|
+
ScrollIOSExtension.prototype.onTouchMove = function(oEvent) {
|
|
298
|
+
var oTable = this.getTable();
|
|
299
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
300
|
+
var oVSbThumb = this.getVerticalScrollbarThumb();
|
|
301
|
+
var iThumbTop = oVSbThumb.getBoundingClientRect().y;
|
|
302
|
+
var iThumbHeight = this.getCalculateThumbHeight();
|
|
303
|
+
var iTop = oVSbThumb.offsetTop + oEvent.touches[0].pageY - iThumbTop - iThumbHeight / 2;
|
|
304
|
+
var iOffset = Math.min(oScrollExtension.getVerticalScrollbarHeight() - iThumbHeight, Math.max(0, iTop));
|
|
305
|
+
|
|
306
|
+
oEvent.preventDefault();
|
|
307
|
+
oVSbThumb.style.top = iOffset + "px";
|
|
308
|
+
|
|
309
|
+
clearTimeout(this._iUpdateDefaultScrollbarPositionTimeoutId);
|
|
310
|
+
this._iUpdateDefaultScrollbarPositionTimeoutId = setTimeout(function () {
|
|
311
|
+
this.updateDefaultScrollbarPosition(iOffset, iThumbHeight);
|
|
312
|
+
delete this._iUpdateDefaultScrollbarPositionTimeoutId;
|
|
313
|
+
}.bind(this), 30);
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Sets the position of the vertical scroll thumb and updates the table position accordingly
|
|
318
|
+
*
|
|
319
|
+
* @param {jQuery.Event} oEvent The event triggered
|
|
320
|
+
*/
|
|
321
|
+
ScrollIOSExtension.prototype.onPointerDown = function (oEvent) {
|
|
322
|
+
var oTable = this.getTable();
|
|
323
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
324
|
+
var oVSbThumb = this.getVerticalScrollbarThumb();
|
|
325
|
+
var iThumbTop = oVSbThumb.getBoundingClientRect().y;
|
|
326
|
+
var iThumbHeight = this.getCalculateThumbHeight();
|
|
327
|
+
var iTop = oVSbThumb.offsetTop + oEvent.clientY - iThumbTop - iThumbHeight / 2;
|
|
328
|
+
var iOffset = Math.min(oScrollExtension.getVerticalScrollbarHeight() - iThumbHeight, Math.max(0, iTop));
|
|
329
|
+
|
|
330
|
+
oVSbThumb.style.top = iOffset + "px";
|
|
331
|
+
this.updateDefaultScrollbarPosition(iOffset, iThumbHeight);
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Updates the scroll position of the default scrollbar
|
|
336
|
+
*
|
|
337
|
+
* @param {number} iOffset The position of the scroll thumb
|
|
338
|
+
* @param {number} iThumbHeight The height of the scroll thumb
|
|
339
|
+
*/
|
|
340
|
+
ScrollIOSExtension.prototype.updateDefaultScrollbarPosition = function(iOffset, iThumbHeight) {
|
|
341
|
+
var oTable = this.getTable();
|
|
342
|
+
if (!oTable) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
var oScrollExtension = oTable._getScrollExtension();
|
|
347
|
+
var iScrollbarHeight = oScrollExtension.getVerticalScrollbarHeight();
|
|
348
|
+
|
|
349
|
+
if (iOffset + iThumbHeight >= iScrollbarHeight) {
|
|
350
|
+
oScrollExtension.scrollVerticallyMax(true);
|
|
351
|
+
} else {
|
|
352
|
+
var iScrollTop = iOffset * oScrollExtension.getVerticalScrollHeight() / iScrollbarHeight;
|
|
353
|
+
|
|
354
|
+
var oVSb = oScrollExtension.getVerticalScrollbar();
|
|
355
|
+
oVSb.scrollTop = iScrollTop;
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
return ScrollIOSExtension;
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Gets the scroll extension.
|
|
364
|
+
*
|
|
365
|
+
* @name sap.ui.table.Table#_getScrollIOSExtension
|
|
366
|
+
* @function
|
|
367
|
+
* @returns {sap.ui.table.extensions.ScrollingIOS} The scroll extension.
|
|
368
|
+
* @private
|
|
369
|
+
*/
|
|
@@ -142,7 +142,7 @@ sap.ui.define([
|
|
|
142
142
|
* @class Extension for sap.ui.table.Table that allows synchronization with a table.
|
|
143
143
|
* @extends sap.ui.table.extensions.ExtensionBase
|
|
144
144
|
* @author SAP SE
|
|
145
|
-
* @version 1.
|
|
145
|
+
* @version 1.96.2
|
|
146
146
|
* @constructor
|
|
147
147
|
* @private
|
|
148
148
|
* @alias sap.ui.table.extensions.Synchronization
|