@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.
Files changed (53) hide show
  1. package/.reuse/dep5 +6 -11
  2. package/THIRDPARTY.txt +10 -16
  3. package/package.json +3 -3
  4. package/src/sap/ui/table/.library +1 -1
  5. package/src/sap/ui/table/AnalyticalColumn.js +1 -1
  6. package/src/sap/ui/table/AnalyticalColumnMenu.js +1 -1
  7. package/src/sap/ui/table/AnalyticalTable.js +51 -12
  8. package/src/sap/ui/table/Column.js +29 -6
  9. package/src/sap/ui/table/ColumnMenu.js +3 -1
  10. package/src/sap/ui/table/CreationRow.js +1 -1
  11. package/src/sap/ui/table/Row.js +1 -1
  12. package/src/sap/ui/table/RowAction.js +1 -1
  13. package/src/sap/ui/table/RowActionItem.js +1 -1
  14. package/src/sap/ui/table/RowSettings.js +3 -2
  15. package/src/sap/ui/table/Table.js +79 -98
  16. package/src/sap/ui/table/TablePersoController.js +1 -1
  17. package/src/sap/ui/table/TableRenderer.js +9 -3
  18. package/src/sap/ui/table/TreeTable.js +27 -2
  19. package/src/sap/ui/table/extensions/Accessibility.js +45 -26
  20. package/src/sap/ui/table/extensions/AccessibilityRender.js +1 -1
  21. package/src/sap/ui/table/extensions/DragAndDrop.js +1 -1
  22. package/src/sap/ui/table/extensions/ExtensionBase.js +1 -1
  23. package/src/sap/ui/table/extensions/Keyboard.js +25 -45
  24. package/src/sap/ui/table/extensions/KeyboardDelegate.js +67 -46
  25. package/src/sap/ui/table/extensions/Pointer.js +1 -14
  26. package/src/sap/ui/table/extensions/Scrolling.js +133 -126
  27. package/src/sap/ui/table/extensions/ScrollingIOS.js +369 -0
  28. package/src/sap/ui/table/extensions/Synchronization.js +1 -1
  29. package/src/sap/ui/table/library.js +10 -10
  30. package/src/sap/ui/table/messagebundle_fr.properties +1 -1
  31. package/src/sap/ui/table/messagebundle_it.properties +3 -3
  32. package/src/sap/ui/table/plugins/BindingSelection.js +1 -1
  33. package/src/sap/ui/table/plugins/PluginBase.js +1 -1
  34. package/src/sap/ui/table/plugins/SelectionModelSelection.js +17 -28
  35. package/src/sap/ui/table/plugins/SelectionPlugin.js +1 -1
  36. package/src/sap/ui/table/plugins/V4Aggregation.js +9 -2
  37. package/src/sap/ui/table/rowmodes/AutoRowMode.js +16 -1
  38. package/src/sap/ui/table/rowmodes/FixedRowMode.js +16 -1
  39. package/src/sap/ui/table/rowmodes/InteractiveRowMode.js +23 -9
  40. package/src/sap/ui/table/rowmodes/RowMode.js +10 -28
  41. package/src/sap/ui/table/rowmodes/VariableRowMode.js +1 -1
  42. package/src/sap/ui/table/themes/base/Cell.less +1 -10
  43. package/src/sap/ui/table/themes/base/Grouping.less +4 -1
  44. package/src/sap/ui/table/themes/base/ScrollingIOS.less +26 -0
  45. package/src/sap/ui/table/themes/base/Table.less +1 -1
  46. package/src/sap/ui/table/themes/base/library.source.less +1 -0
  47. package/src/sap/ui/table/utils/TableUtils.js +25 -60
  48. package/src/sap/ui/table/utils/_BindingUtils.js +1 -1
  49. package/src/sap/ui/table/utils/_ColumnUtils.js +1 -1
  50. package/src/sap/ui/table/utils/_GroupingUtils.js +5 -1
  51. package/src/sap/ui/table/utils/_HookUtils.js +1 -1
  52. package/src/sap/ui/table/utils/_MenuUtils.js +1 -1
  53. 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
- this._getScrollExtension().updateVerticalScrollbarVisibility();
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
- oScrollExtension.updateVerticalScrollbarVisibility();
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.93.3
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.93.3
145
+ * @version 1.96.2
146
146
  * @constructor
147
147
  * @private
148
148
  * @alias sap.ui.table.extensions.Synchronization