@sapui5/sap.zen.crosstab 1.84.33 → 1.84.50

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 (136) hide show
  1. package/package.json +1 -1
  2. package/src/{main/uilib/sap → sap}/zen/crosstab/.library +14 -13
  3. package/src/sap/zen/crosstab/BaseArea.js +933 -0
  4. package/src/sap/zen/crosstab/CellStyleHandler.js +109 -0
  5. package/src/sap/zen/crosstab/ColResizer.js +261 -0
  6. package/src/sap/zen/crosstab/ColumnHeaderArea.js +61 -0
  7. package/src/sap/zen/crosstab/Crosstab.js +1351 -0
  8. package/src/sap/zen/crosstab/CrosstabCellApi.js +141 -0
  9. package/src/sap/zen/crosstab/CrosstabContextMenu.js +96 -0
  10. package/src/sap/zen/crosstab/CrosstabHeaderInfo.js +699 -0
  11. package/src/sap/zen/crosstab/CrosstabRenderer.js +258 -0
  12. package/src/sap/zen/crosstab/CrosstabTestProxy.js +64 -0
  13. package/src/sap/zen/crosstab/DataArea.js +76 -0
  14. package/src/sap/zen/crosstab/DataCell.js +187 -0
  15. package/src/sap/zen/crosstab/DataCellRenderer.js +70 -0
  16. package/src/sap/zen/crosstab/DimensionHeaderArea.js +34 -0
  17. package/src/sap/zen/crosstab/EventHandler.js +664 -0
  18. package/src/sap/zen/crosstab/HeaderCell.js +357 -0
  19. package/src/sap/zen/crosstab/HeaderCellRenderer.js +333 -0
  20. package/src/sap/zen/crosstab/HeaderResizer.js +142 -0
  21. package/src/sap/zen/crosstab/IDataCell.js +34 -0
  22. package/src/sap/zen/crosstab/IHeaderCell.js +30 -0
  23. package/src/sap/zen/crosstab/PropertyBag.js +220 -0
  24. package/src/sap/zen/crosstab/RowHeaderArea.js +78 -0
  25. package/src/sap/zen/crosstab/SelectionHandler.js +892 -0
  26. package/src/sap/zen/crosstab/TextConstants.js +22 -0
  27. package/src/sap/zen/crosstab/TouchHandler.js +413 -0
  28. package/src/sap/zen/crosstab/datahandler/JsonDataHandler.js +777 -0
  29. package/src/sap/zen/crosstab/dragdrop/DragDropAreaRenderer.js +446 -0
  30. package/src/sap/zen/crosstab/dragdrop/DragDropHandler.js +674 -0
  31. package/src/sap/zen/crosstab/dragdrop/DragDropHoverManager.js +474 -0
  32. package/src/sap/zen/crosstab/dragdrop/DragDropUtils.js +579 -0
  33. package/src/sap/zen/crosstab/dragdrop/MemberDragDropHandler.js +1156 -0
  34. package/src/sap/zen/crosstab/keyboard/CrosstabKeyboardNavHandler.js +585 -0
  35. package/src/sap/zen/crosstab/library.js +49 -0
  36. package/src/sap/zen/crosstab/paging/CellMerger.js +266 -0
  37. package/src/sap/zen/crosstab/paging/Page.js +331 -0
  38. package/src/sap/zen/crosstab/paging/PageManager.js +396 -0
  39. package/src/sap/zen/crosstab/paging/PagingConstants.js +19 -0
  40. package/src/sap/zen/crosstab/paging/RequestHandler.js +103 -0
  41. package/src/sap/zen/crosstab/paging/RequestStack.js +112 -0
  42. package/src/sap/zen/crosstab/rendering/CrossRequestManager.js +468 -0
  43. package/src/sap/zen/crosstab/rendering/DataModel.js +260 -0
  44. package/src/sap/zen/crosstab/rendering/DomElementProvider.js +24 -0
  45. package/src/sap/zen/crosstab/rendering/HeaderScrollManager.js +93 -0
  46. package/src/sap/zen/crosstab/rendering/PixelScrollManager.js +189 -0
  47. package/src/sap/zen/crosstab/rendering/RenderEngine.js +2694 -0
  48. package/src/sap/zen/crosstab/rendering/RenderingConstants.js +60 -0
  49. package/src/sap/zen/crosstab/rendering/ScrollManager.js +614 -0
  50. package/src/sap/zen/crosstab/rendering/ScrollbarRenderer.js +560 -0
  51. package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/Chart.less +0 -4
  52. package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/InfoFeeding.less +120 -120
  53. package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/InfoFeeding.less +85 -85
  54. package/src/sap/zen/crosstab/utils/Measuring.js +236 -0
  55. package/src/sap/zen/crosstab/utils/Utils.js +485 -0
  56. package/ui5.yaml +4 -2
  57. package/src/main/uilib/sap/zen/crosstab/BaseArea.js +0 -1013
  58. package/src/main/uilib/sap/zen/crosstab/CellStyleHandler.js +0 -111
  59. package/src/main/uilib/sap/zen/crosstab/ColResizer.js +0 -264
  60. package/src/main/uilib/sap/zen/crosstab/ColumnHeaderArea.js +0 -52
  61. package/src/main/uilib/sap/zen/crosstab/Crosstab.js +0 -1662
  62. package/src/main/uilib/sap/zen/crosstab/CrosstabCellApi.js +0 -142
  63. package/src/main/uilib/sap/zen/crosstab/CrosstabContextMenu.js +0 -96
  64. package/src/main/uilib/sap/zen/crosstab/CrosstabHeaderInfo.js +0 -698
  65. package/src/main/uilib/sap/zen/crosstab/CrosstabRenderer.js +0 -274
  66. package/src/main/uilib/sap/zen/crosstab/CrosstabTestProxy.js +0 -59
  67. package/src/main/uilib/sap/zen/crosstab/DataArea.js +0 -74
  68. package/src/main/uilib/sap/zen/crosstab/DataCell.js +0 -196
  69. package/src/main/uilib/sap/zen/crosstab/DataCellRenderer.js +0 -71
  70. package/src/main/uilib/sap/zen/crosstab/DimensionHeaderArea.js +0 -25
  71. package/src/main/uilib/sap/zen/crosstab/EventHandler.js +0 -651
  72. package/src/main/uilib/sap/zen/crosstab/HeaderCell.js +0 -329
  73. package/src/main/uilib/sap/zen/crosstab/HeaderCellRenderer.js +0 -374
  74. package/src/main/uilib/sap/zen/crosstab/HeaderResizer.js +0 -131
  75. package/src/main/uilib/sap/zen/crosstab/IDataCell.js +0 -21
  76. package/src/main/uilib/sap/zen/crosstab/IHeaderCell.js +0 -21
  77. package/src/main/uilib/sap/zen/crosstab/PropertyBag.js +0 -209
  78. package/src/main/uilib/sap/zen/crosstab/RowHeaderArea.js +0 -71
  79. package/src/main/uilib/sap/zen/crosstab/SelectionHandler.js +0 -911
  80. package/src/main/uilib/sap/zen/crosstab/TextConstants.js +0 -9
  81. package/src/main/uilib/sap/zen/crosstab/TouchHandler.js +0 -438
  82. package/src/main/uilib/sap/zen/crosstab/datahandler/JsonDataHandler.js +0 -760
  83. package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropAreaRenderer.js +0 -436
  84. package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropHandler.js +0 -682
  85. package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropHoverManager.js +0 -467
  86. package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropUtils.js +0 -580
  87. package/src/main/uilib/sap/zen/crosstab/dragdrop/MemberDragDropHandler.js +0 -1154
  88. package/src/main/uilib/sap/zen/crosstab/keyboard/CrosstabKeyboardNavHandler.js +0 -635
  89. package/src/main/uilib/sap/zen/crosstab/library.js +0 -38
  90. package/src/main/uilib/sap/zen/crosstab/nonphx/logic.js +0 -11
  91. package/src/main/uilib/sap/zen/crosstab/paging/CellMerger.js +0 -284
  92. package/src/main/uilib/sap/zen/crosstab/paging/Page.js +0 -357
  93. package/src/main/uilib/sap/zen/crosstab/paging/PageManager.js +0 -437
  94. package/src/main/uilib/sap/zen/crosstab/paging/PagingConstants.js +0 -7
  95. package/src/main/uilib/sap/zen/crosstab/paging/RequestHandler.js +0 -97
  96. package/src/main/uilib/sap/zen/crosstab/paging/RequestStack.js +0 -108
  97. package/src/main/uilib/sap/zen/crosstab/rendering/CrossRequestManager.js +0 -462
  98. package/src/main/uilib/sap/zen/crosstab/rendering/DataModel.js +0 -250
  99. package/src/main/uilib/sap/zen/crosstab/rendering/DomElementProvider.js +0 -13
  100. package/src/main/uilib/sap/zen/crosstab/rendering/HeaderScrollManager.js +0 -97
  101. package/src/main/uilib/sap/zen/crosstab/rendering/PixelScrollManager.js +0 -180
  102. package/src/main/uilib/sap/zen/crosstab/rendering/RenderEngine.js +0 -2757
  103. package/src/main/uilib/sap/zen/crosstab/rendering/RenderingConstants.js +0 -56
  104. package/src/main/uilib/sap/zen/crosstab/rendering/ScrollManager.js +0 -638
  105. package/src/main/uilib/sap/zen/crosstab/rendering/ScrollbarRenderer.js +0 -542
  106. package/src/main/uilib/sap/zen/crosstab/utils/Measuring.js +0 -225
  107. package/src/main/uilib/sap/zen/crosstab/utils/Utils.js +0 -480
  108. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/ChartTypeSwitch.less +0 -0
  109. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/Crosstab.less +0 -0
  110. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/FilterBar.less +0 -0
  111. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/FilterPanel.less +0 -0
  112. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/Footerbar.less +0 -0
  113. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/InfoChart.less +0 -0
  114. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/NavigationPanel.less +0 -0
  115. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/chartconfig.less +0 -0
  116. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/CornerTornEffect.png +0 -0
  117. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/HTornEffect.png +0 -0
  118. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/HTornEffectData.png +0 -0
  119. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/HTornEffectHeader.png +0 -0
  120. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/VTornEffect.png +0 -0
  121. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/loading.gif +0 -0
  122. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/loading_comp.gif +0 -0
  123. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/library.source.less +0 -0
  124. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/zen.less +0 -0
  125. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize/library.source.less +0 -0
  126. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize_hcb/library.source.less +0 -0
  127. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize_hcw/library.source.less +0 -0
  128. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize_plus/library.source.less +0 -0
  129. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_bluecrystal/library.source.less +0 -0
  130. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3/library.source.less +0 -0
  131. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3_dark/library.source.less +0 -0
  132. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3_hcb/library.source.less +0 -0
  133. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3_hcw/library.source.less +0 -0
  134. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/Chart.less +0 -0
  135. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/ChartTypeSwitch.less +0 -0
  136. /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/library.source.less +0 -0
@@ -0,0 +1,664 @@
1
+ /*!
2
+ * SAPUI5
3
+ * (c) Copyright 2009-2024 SAP SE. All rights reserved.
4
+ */
5
+ /*global sap*/
6
+ sap.ui.define(
7
+ [
8
+ "jquery.sap.global",
9
+ "sap/zen/crosstab/TouchHandler",
10
+ "sap/zen/crosstab/SelectionHandler",
11
+ "sap/zen/crosstab/rendering/CrossRequestManager",
12
+ "sap/zen/crosstab/rendering/RenderingConstants",
13
+ "sap/zen/crosstab/utils/Utils",
14
+ "sap/zen/crosstab/keyboard/CrosstabKeyboardNavHandler",
15
+ "sap/zen/crosstab/HeaderResizer",
16
+ "sap/zen/crosstab/ColResizer"
17
+ ],
18
+ function(
19
+ jQuery, TouchHandler, SelectionHandler, CrossRequestManager,
20
+ RenderingConstants, Utils, CrosstabKeyboardNavHandler, HeaderResizer,
21
+ ColResizer
22
+ ){
23
+ "use strict";
24
+ jQuery.sap.declare("sap.zen.crosstab.EventHandler");
25
+ sap.zen.crosstab.EventHandler = function (oCrosstab) {
26
+ var that = this;
27
+ var oRenderEngine = oCrosstab.getRenderEngine();
28
+ var oCrossRequestManager = oRenderEngine.getCrossRequestManager();
29
+ var oKeyboardHandler = new CrosstabKeyboardNavHandler(oCrosstab, this);
30
+ var sMouseDownTargetId = null;
31
+ var bPreventClickAction = false;
32
+ var oTouchHandler = null;
33
+ var sCurrentInputFieldText = "";
34
+ var oInputField = null;
35
+ var oHeaderResizer = null;
36
+ var oColResizer = null;
37
+
38
+ this.handleHierarchyClick = function (e, sTargetId, sClickAction) {
39
+ var oCell = getCellById(sTargetId);
40
+ var sHierarchyAction = oCell.getHierarchyAction();
41
+ var sDrillState = oCell.getDrillState();
42
+ if (sDrillState !== "L") {
43
+ oCrossRequestManager.saveTableDimensions();
44
+ oCrossRequestManager.saveHScrollInfo(sClickAction);
45
+ oCrossRequestManager.saveVScrollInfo(sClickAction);
46
+ executeAction(sHierarchyAction);
47
+ }
48
+ Utils.cancelEvent(e);
49
+ };
50
+
51
+ this.handleSortClick = function (e, sTargetId, sClickAction) {
52
+ var oCell = getCellById(sTargetId);
53
+ var sSortAction = oCell.getSortAction();
54
+ if (sSortAction || oCrosstab.getTestProxy().getTestAction()) {
55
+ oCrossRequestManager.saveVScrollInfo(sClickAction);
56
+ oCrossRequestManager.saveHScrollInfo(sClickAction);
57
+ oCrossRequestManager.saveColWidths();
58
+ if (!oCrosstab.getTestProxy().getTestAction()) {
59
+ executeAction(sSortAction);
60
+ }
61
+ }
62
+ Utils.cancelEvent(e);
63
+ };
64
+
65
+ this.findTargetId = function (oDomTarget) {
66
+ var sTargetId = null;
67
+ var oJqClosestDiv;
68
+ var sCellId;
69
+
70
+ sCellId = jQuery(oDomTarget).attr("xtabspacer-cellid");
71
+ if (sCellId && sCellId.length > 0) {
72
+ sTargetId = sCellId;
73
+ } else {
74
+ oJqClosestDiv = jQuery(oDomTarget).closest("div");
75
+ if (oJqClosestDiv.length > 0) {
76
+ var sId = oJqClosestDiv.attr("id");
77
+ if (sId) {
78
+ var idx = sId.indexOf("_contentDiv");
79
+ if (idx > -1) {
80
+ sTargetId = sId.slice(0, idx);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ return sTargetId;
86
+ };
87
+
88
+ this.executeOnClickAction = function (e) {
89
+ if (bPreventClickAction) {
90
+ return;
91
+ }
92
+ sMouseDownTargetId = null;
93
+ bPreventClickAction = false;
94
+ var sTargetId = e.target.id;
95
+
96
+ if (!sTargetId) {
97
+ sTargetId = that.findTargetId(e.target);
98
+ }
99
+
100
+ if (!sTargetId) {
101
+ return;
102
+ }
103
+ var sClickAction = getActionById(sTargetId);
104
+
105
+ if (sClickAction === "sort") {
106
+ that.handleSortClick(e, sTargetId, sClickAction);
107
+ } else if (sClickAction === "hier") {
108
+ that.handleHierarchyClick(e, sTargetId, sClickAction);
109
+ } else if (sClickAction === "__ce") {
110
+ that.handleClickOnCell(e, sTargetId);
111
+ } else if (sClickAction === "vhlp") {
112
+ that.handleValueHelpClick(sTargetId);
113
+ }
114
+ Utils.cancelEvent(e);
115
+ };
116
+
117
+ this.handleClickOnCell = function(e, sTargetId){
118
+ if (oCrosstab.hasLoadingPages()) {
119
+ Utils.cancelEvent(e);
120
+ return;
121
+ }
122
+
123
+ if (sTargetId) {
124
+ var sCellId = oCrosstab.getUtils().getCellIdFromContenDivId(sTargetId);
125
+ if (sCellId) {
126
+ var oModelCell = sap.ui.getCore().getControl(sCellId);
127
+ if (oModelCell) {
128
+ if(oModelCell.isEntryEnabled()){
129
+ that.handleInputEnabledCell(sTargetId, -1, -1);
130
+ } else {
131
+ if(oCrosstab.getSelectionMode() !== undefined && oCrosstab.getSelectionMode() !== ""){
132
+ var sFlag = "";
133
+ if(e.ctrlKey){
134
+ sFlag = "CTRL";
135
+ } else if(e.shiftKey){
136
+ sFlag = "SHIFT";
137
+ }
138
+ oCrosstab.getSelectionHandler().handleCellClick(oModelCell, sFlag);
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ };
145
+
146
+ this.postPlanningValue = function () {
147
+ if (oCrosstab.isPlanningMode() === true && oInputField && oInputField.length > 0) {
148
+ var oJqInputField = jQuery(document.activeElement);
149
+ if (oJqInputField.is("input") && oInputField.attr("id") === oJqInputField.attr("id")) {
150
+ var sInputFieldValueText = oInputField.val() || "";
151
+ if (sInputFieldValueText !== sCurrentInputFieldText) {
152
+ oInputField.blur();
153
+ }
154
+ }
155
+ }
156
+ };
157
+
158
+ this.provideInputEnabledCell = function (oModelCell, sTargetId, oContentDiv, iSelectionStartPos, iSelectionEndPos) {
159
+ oInputField = oContentDiv.find("input");
160
+
161
+ if (oInputField.length === 0) {
162
+ var sRenderText = oContentDiv.text();
163
+ var html = oContentDiv.html();
164
+ var bCellIsDataCell = oModelCell.getArea().isDataArea();
165
+
166
+ var sSetContentDivWidth = null;
167
+
168
+ var executeTransferData = function (sValue) {
169
+ // Cut away the unit if the input was provided with a unit, otherwise the input is invalid
170
+ var sUnit = oModelCell.getUnit();
171
+ if (sUnit && sUnit !== "") {
172
+ var iUnitIndex = sValue.toUpperCase().indexOf(sUnit.toUpperCase());
173
+ if (iUnitIndex !== -1) {
174
+ if (iUnitIndex === 0) {
175
+ // leading unit
176
+ sValue = sValue.substring(iUnitIndex + sUnit.length);
177
+ } else {
178
+ // trailing unit
179
+ sValue = sValue.substring(0, iUnitIndex);
180
+ }
181
+
182
+ }
183
+ }
184
+
185
+ var iOffset = oCrosstab.calculateOffset(oModelCell);
186
+
187
+ // Trim the input, leading and trailing whitespaces lead to errors
188
+ sValue = jQuery.trim(sValue);
189
+
190
+ var sTransferDataCommand = oCrosstab.getTransferDataCommand();
191
+ sTransferDataCommand = sTransferDataCommand.replace("__ROW__", oModelCell.getRow() + "");
192
+ sTransferDataCommand = sTransferDataCommand.replace("__COL__", (oModelCell.getCol() - iOffset) + "");
193
+ sTransferDataCommand = sTransferDataCommand.replace("__VALUE__", sValue);
194
+ sTransferDataCommand = sTransferDataCommand.replace("__CTYPE__", oModelCell.getPassiveCellType());
195
+
196
+ oCrossRequestManager.saveVScrollInfo("plan");
197
+ oCrossRequestManager.saveHScrollInfo("plan");
198
+ oCrossRequestManager.saveColWidths();
199
+
200
+ executeAction(sTransferDataCommand, true);
201
+ };
202
+
203
+ var onLoseFocus = function (e) {
204
+ if (oInputField.val() !== sRenderText) {
205
+ executeTransferData(oInputField.val());
206
+
207
+ // This prevents that the previous entry shows up again in the cell while waiting for the delta with
208
+ // the new value
209
+ var sEncodedRenderText = jQuery("<div></div>").text(sRenderText).html();
210
+ html = html.replace(sEncodedRenderText, oInputField.val());
211
+ }
212
+ onFocusLost(e);
213
+ };
214
+
215
+ var checkTargetIsInCrosstab = function(e) {
216
+ var bIsInCrosstab = true;
217
+ var sTargetId = null;
218
+ var oJqTableDiv = null;
219
+ var oJqTarget = null;
220
+ // do keep focus if a value help is opening although the newly focused element is not part of the crosstab
221
+ if (e && e.relatedTarget && e.relatedTarget.id && oCrosstab.getValueHelpStatus() !== sap.zen.crosstab.VHLP_STATUS_OPENING) {
222
+ // does not work in FireFox yet (see https://bugzilla.mozilla.org/show_bug.cgi?id=962251)
223
+ sTargetId = e.relatedTarget.id;
224
+ oJqTarget = jQuery(document.getElementById(sTargetId));
225
+ oJqTableDiv = oCrosstab.getTableDiv();
226
+ bIsInCrosstab = oJqTarget.closest(oJqTableDiv).length > 0;
227
+ }
228
+ return bIsInCrosstab;
229
+ };
230
+
231
+ var onFocusLost = function (e) {
232
+ var oJqDiv = jQuery(document.getElementById(sTargetId + "_contentDiv"));
233
+ oJqDiv.html(html);
234
+
235
+ if (sSetContentDivWidth && bCellIsDataCell) {
236
+ oJqDiv.width(sSetContentDivWidth);
237
+ }
238
+
239
+ if (checkTargetIsInCrosstab(e) === true) {
240
+ oJqDiv.focus();
241
+ } else {
242
+ oKeyboardHandler.reset();
243
+ sCurrentInputFieldText = "";
244
+ oInputField.off("keydown focusout");
245
+ oInputField = null;
246
+ }
247
+ };
248
+
249
+ var onInputFieldKeyDown = function (e) {
250
+ if (e.which === 27) {
251
+ onFocusLost();
252
+ Utils.cancelEvent(e);
253
+ }
254
+ if (e.which === 13) {
255
+ if (oInputField.val() !== sRenderText) {
256
+ Utils.cancelEvent(e);
257
+ executeTransferData(oInputField.val());
258
+ } else {
259
+ onFocusLost();
260
+ if (oCrosstab.isIE8Mode()) {
261
+ oKeyboardHandler.keyboardNavKeyHandler(e);
262
+ }
263
+ }
264
+ }
265
+ if (e.which === 38 || e.which === 40) {
266
+ // enable vert keyboard navigation
267
+ return true;
268
+ }
269
+ if (e.which === 37 || e.which === 39) {
270
+ if (!e.ctrlKey && !e.altKey && !e.shiftKey) {
271
+ // left/right keys must work in the input field to move back and forward in the text string.
272
+ // however, left/right keys must not lead to leaving the cell/input field.
273
+ // Hence, just prevent bubbling of the event to the navigation key handler, but still execute
274
+ // the
275
+ // default
276
+ Utils.stopEventPropagation(e);
277
+ }
278
+ return true;
279
+ }
280
+ // F4
281
+ if (e.which === 115 && !bCellIsDataCell) {
282
+ that.invokeValueHelp(oModelCell, "vhlp_" + oModelCell.getId());
283
+ }
284
+ return null;
285
+ };
286
+
287
+ var iContentDivWidth = 0;
288
+ // content Div handling for data cells
289
+ if (bCellIsDataCell) {
290
+ iContentDivWidth = oContentDiv.innerWidth();
291
+ sSetContentDivWidth = Utils.getWidthFromStyle(oContentDiv);
292
+ }
293
+ oContentDiv.html("<input id=\"" + sTargetId + "_input" + "\" type=\"text\" value=\"" + sRenderText
294
+ + "\" />");
295
+
296
+ if (bCellIsDataCell) {
297
+ oContentDiv.width(iContentDivWidth + "px");
298
+ }
299
+ oInputField = jQuery(document.getElementById(sTargetId + "_input"));
300
+ if (Utils.isMainMode()) {
301
+ oInputField.addClass("sapzencrosstab-EntryEnabledInput-MainMode");
302
+ } else {
303
+ oInputField.addClass("sapzencrosstab-EntryEnabledInput");
304
+ }
305
+ oInputField.on("keydown",onInputFieldKeyDown);
306
+ oInputField.focus();
307
+ oCrosstab.getUtils().selectTextInInputField(oInputField, iSelectionStartPos, iSelectionEndPos);
308
+ oInputField.on("focusout", onLoseFocus);
309
+ } else {
310
+ oCrosstab.getUtils().selectTextInInputField(oInputField, iSelectionStartPos, iSelectionEndPos);
311
+ }
312
+ sCurrentInputFieldText = oInputField.val() || "";
313
+ // oJqCurrentInputField = oInputField;
314
+ };
315
+
316
+ this.handleValueHelpClick = function (sTargetId) {
317
+ var oCell = getCellById(sTargetId);
318
+ that.invokeValueHelp(oCell, sTargetId);
319
+ };
320
+
321
+ this.invokeValueHelp = function(oCell, sTargetId) {
322
+ if (oCell) {
323
+ oKeyboardHandler.focusNewCell(oCell, -1, -1);
324
+ var sCallValueHelpCommand = oCrosstab.getCallValueHelpCommand();
325
+
326
+ var iOffset = oCrosstab.calculateOffset(oCell);
327
+
328
+ oCrossRequestManager.saveVScrollInfo("plan");
329
+ oCrossRequestManager.saveHScrollInfo("plan");
330
+ oCrossRequestManager.saveColWidths();
331
+
332
+ sCallValueHelpCommand = sCallValueHelpCommand.replace("__ROW__", oCell.getRow());
333
+ sCallValueHelpCommand = sCallValueHelpCommand.replace("__COL__", oCell.getCol() - iOffset);
334
+ sCallValueHelpCommand = sCallValueHelpCommand.replace("__DOM_REF_ID__", sTargetId);
335
+ executeAction(sCallValueHelpCommand, true);
336
+ }
337
+ };
338
+
339
+ this.handleInputEnabledCell = function (sTargetId, iSelectionStartPos, iSelectionEndPos) {
340
+ if (sTargetId) {
341
+ sTargetId = oCrosstab.getUtils().getCellIdFromContenDivId(sTargetId);
342
+ if (sTargetId) {
343
+ var oModelCell = sap.ui.getCore().getControl(sTargetId);
344
+ if (oModelCell) {
345
+ if (oModelCell.getArea().isDataArea() || oModelCell.getArea().isRowHeaderArea()) {
346
+ oKeyboardHandler.focusNewCell(oModelCell, iSelectionStartPos, iSelectionEndPos);
347
+ }
348
+ }
349
+ }
350
+ }
351
+ };
352
+
353
+ this.sendSelectCommand = function (oCell) {
354
+ var iRow = -1;
355
+ var iCol = -1;
356
+ var sAxis = "";
357
+
358
+ if (oCell) {
359
+ var oArea = oCell.getArea();
360
+ // BICS values!
361
+ if (oArea.isRowHeaderArea()) {
362
+ sAxis = "ROWS";
363
+ } else if (oArea.isColHeaderArea()) {
364
+ sAxis = "COLUMNS";
365
+ } else {
366
+ sAxis = "DATA";
367
+ }
368
+ iRow = oCell.getRow();
369
+ iCol = oCell.getCol();
370
+ }
371
+
372
+ var onSelectJsCommand = oCrosstab.getOnSelectCommand();
373
+ onSelectJsCommand = onSelectJsCommand.replace("__ROW__", iRow + "");
374
+ onSelectJsCommand = onSelectJsCommand.replace("__COL__", iCol + "");
375
+ onSelectJsCommand = onSelectJsCommand.replace("__AXIS__", sAxis);
376
+ executeAction(onSelectJsCommand, true);
377
+ };
378
+
379
+ this.getContextElement = function(iClientX, iClientY) {
380
+ var aDisabledElements = [];
381
+ var i = 0;
382
+ var oJqElement = jQuery(document.elementFromPoint(iClientX, iClientY));
383
+
384
+ var oJqClosest = oJqElement.closest(".zenControl");
385
+ var sId = oJqClosest.attr("id");
386
+ sId = oJqElement.attr("id");
387
+ while (sId && sId.indexOf("droparea") > -1) {
388
+ aDisabledElements.push(oJqElement);
389
+ oJqElement.css("display", "none");
390
+ oJqElement = jQuery(document.elementFromPoint(iClientX, iClientY));
391
+ sId = oJqElement.attr("id");
392
+ }
393
+ for (i = 0; i < aDisabledElements.length; i++) {
394
+ aDisabledElements[i].css("display", "block");
395
+ }
396
+
397
+ return oJqElement;
398
+ };
399
+
400
+ this.onContextMenuClick = function(e) {
401
+ var oJqClickedElement = that.getContextElement(e.clientX, e.clientY);
402
+ var oContextMenu = oCrosstab.createContextMenu();
403
+ var oContext = oContextMenu.getContext(oJqClickedElement);
404
+
405
+ if(oContext){
406
+ var sContextMenuCommand = oCrosstab.getPropertyBag().getContextMenuCommand();
407
+
408
+ sContextMenuCommand = sContextMenuCommand.replace("__AXIS__", oContext.sAxis);
409
+ sContextMenuCommand = sContextMenuCommand.replace("__ROW__", oContext.iRow);
410
+ sContextMenuCommand = sContextMenuCommand.replace("__COL__", oContext.iCol);
411
+ sContextMenuCommand = sContextMenuCommand.replace("__ID__", "CONTEXT_MENU");
412
+ sContextMenuCommand = sContextMenuCommand.replace("__DOM_REF_ID__", oJqClickedElement.attr("id"));
413
+
414
+ if (sContextMenuCommand.indexOf("__REMOVE_SELECTION__") >= 0) {
415
+ sContextMenuCommand = sContextMenuCommand.replace("__REMOVE_SELECTION__", oContext.bRemoveSelection);
416
+ }
417
+ var oDynamicMenuService = sap.bi.framework.getService(null, "zen.rt.components.dynamicmenu");
418
+ oDynamicMenuService.showDynamicMenu("ExpandedMenuBuilder", oJqClickedElement.context, "", {"command":sContextMenuCommand}, "", ["crosstabActions"], "", false);
419
+ }
420
+ Utils.cancelEvent(e);
421
+ oCrosstab.enableClick();
422
+ };
423
+
424
+ this.attachEvents = function () {
425
+ var bAttachMouseMove = false;
426
+ var oJqRenderSizeDiv = oCrosstab.getRenderSizeDiv();
427
+ var oJqTableDiv = oCrosstab.getTableDiv();
428
+ //var oJqTitleDiv = oCrosstab.getTitleDiv();
429
+
430
+ oJqRenderSizeDiv.unbind("mousedown");
431
+ oJqRenderSizeDiv.bind("mousedown", this.onMouseDown);
432
+
433
+ if (oCrosstab.getPropertyBag().isMobileMode() || oCrosstab.getPropertyBag().isTestMobileMode()) {
434
+ oJqRenderSizeDiv.unbind("click");
435
+ oJqRenderSizeDiv.bind("click", function (e) {
436
+ Utils.cancelEvent(e);
437
+ });
438
+
439
+ oJqRenderSizeDiv.unbind("mousedown");
440
+ oJqRenderSizeDiv.bind("mousedown", function (e) {
441
+ Utils.cancelEvent(e);
442
+ });
443
+
444
+ oTouchHandler = new TouchHandler(this, oCrosstab);
445
+ oTouchHandler.registerTouchEvents(oJqRenderSizeDiv);
446
+
447
+ oKeyboardHandler.setEnabled(false);
448
+
449
+
450
+ // we need at least a ColResizer instance in mobile mode so we can
451
+ // expand the columns there -> keep old functionality for now
452
+ if (oCrosstab.getPropertyBag().isEnableColResize() === true) {
453
+ var oTouchColResizer = new ColResizer(oCrosstab);
454
+ oTouchHandler.setColResizer(oTouchColResizer);
455
+ }
456
+
457
+ /*if (oCrosstab.getPropertyBag().getTitleDisplayMode() && sap.zen.designmode && sap.zen.designmode.isRuntimeAuthoringMode()){
458
+ oJqTitleDiv.unbind('click');
459
+ oJqTitleDiv.bind('click', this.executeOnClickAction);
460
+ oJqTitleDiv.unbind('keyup');
461
+ oJqTitleDiv.bind('keyup', this.handleOnEnterAction);
462
+ oJqTitleDiv.unbind('focusout');
463
+ oJqTitleDiv.bind('focusout', this.handleTitleFocusOut);
464
+ }*/
465
+
466
+ /*MU undefine oJqTitleDiv oTouchHandler.registerTouchEvents(oJqTitleDiv);*/
467
+ } else {
468
+ /*if (oCrosstab.getPropertyBag().isLumiraContextMenu()) {
469
+ oJqRenderSizeDiv.unbind('contextmenu');
470
+ oJqRenderSizeDiv.bind('contextmenu', this.onContextMenuClick);
471
+ }*/
472
+
473
+ oJqRenderSizeDiv.unbind("mouseup", this.onMouseUp);
474
+ oJqRenderSizeDiv.bind("mouseup", this.onMouseUp);
475
+ oJqTableDiv.unbind("mouseup", this.onMouseUp);
476
+ oJqTableDiv.bind("mouseup", this.onMouseUp);
477
+
478
+ oJqRenderSizeDiv.unbind("click");
479
+ oJqRenderSizeDiv.bind("click", this.executeOnClickAction);
480
+
481
+ if (oCrosstab.isSelectable() === true && oCrosstab.isHoveringEnabled() === true) {
482
+ oJqRenderSizeDiv.unbind("mouseover");
483
+ oJqRenderSizeDiv.bind("mouseover", this.executeOnMouseEnter);
484
+
485
+ oJqRenderSizeDiv.unbind("mouseout");
486
+ oJqRenderSizeDiv.bind("mouseout", this.executeOnMouseOut);
487
+ }
488
+
489
+ // CHANGE THE FOLLOWING CALL TO DISABLE KEYBOARD HANDLER: single point of entry
490
+ oKeyboardHandler.setEnabled(oCrosstab.isPlanningMode());
491
+ oKeyboardHandler.attachEvents(oJqRenderSizeDiv);
492
+
493
+ // header horizontal resize
494
+ if (oCrosstab.getUserHeaderWidthCommand() && oCrosstab.getUserHeaderWidthCommand().length > 0) {
495
+ oHeaderResizer = new HeaderResizer(oCrosstab);
496
+ oHeaderResizer.initialize();
497
+ bAttachMouseMove = true;
498
+ }
499
+
500
+ // Column resize
501
+ if (oCrosstab.getPropertyBag().isEnableColResize() === true) {
502
+ oColResizer = new ColResizer(oCrosstab);
503
+ oColResizer.initialize();
504
+ bAttachMouseMove = true;
505
+ }
506
+
507
+ if (bAttachMouseMove === true) {
508
+ oJqRenderSizeDiv.unbind("mousemove", this.onMouseMove);
509
+ oJqRenderSizeDiv.bind("mousemove", this.onMouseMove);
510
+ }
511
+
512
+ // Title inline editing
513
+ /*if (oCrosstab.getPropertyBag().getTitleDisplayMode() && sap.zen.designmode && sap.zen.designmode.isRuntimeAuthoringMode()){
514
+ oJqTitleDiv.unbind('click');
515
+ oJqTitleDiv.bind('click', this.executeOnClickAction);
516
+ oJqTitleDiv.unbind('keyup');
517
+ oJqTitleDiv.bind('keyup', this.handleOnEnterAction);
518
+ oJqTitleDiv.unbind('focusout');
519
+ oJqTitleDiv.bind('focusout', this.handleTitleFocusOut);
520
+ }*/
521
+ }
522
+ };
523
+
524
+ this.onMouseMove = function(e) {
525
+ if (oColResizer && oColResizer.isResizeAction()) {
526
+ oColResizer.onMouseMove(e);
527
+ } else if (oHeaderResizer && oHeaderResizer.isResizeAction()) {
528
+ oHeaderResizer.onMouseMove(e);
529
+ }
530
+ };
531
+
532
+ this.onMouseDown = function (e) {
533
+ var sTargetId = e.target.id;
534
+ sMouseDownTargetId = sTargetId;
535
+ };
536
+
537
+ function checkMouseUpInSameCell (sCellId, e) {
538
+ var bInSameCell = false;
539
+ var oDomCell = document.getElementById(sCellId);
540
+ if (oDomCell) {
541
+ var oRect = oDomCell.getBoundingClientRect();
542
+ var bHMatches = (oRect.left < e.clientX) && (e.clientX < oRect.right);
543
+ var bVMatches = (oRect.bottom > e.clientY) && (e.clientY > oRect.top);
544
+ bInSameCell = bHMatches && bVMatches;
545
+ }
546
+ return bInSameCell;
547
+ }
548
+
549
+ this.onMouseUp = function (e) {
550
+ if (oColResizer && oColResizer.isResizeAction()) {
551
+ oColResizer.onMouseUp(e);
552
+ } else if (oHeaderResizer && oHeaderResizer.isResizeAction()) {
553
+ oHeaderResizer.onMouseUp(e);
554
+ } else {
555
+ bPreventClickAction = false;
556
+ if (sMouseDownTargetId) {
557
+ var sCellId = oCrosstab.getUtils().getCellIdFromContenDivId(sMouseDownTargetId);
558
+ // prevent action during multiple selection of cells. Make sure we stay in the same cell
559
+ if (checkMouseUpInSameCell(sCellId, e)) {
560
+ var oCell = sap.ui.getCore().getControl(sCellId);
561
+ if (oCell) {
562
+ if (oCrosstab.isPlanningMode()) {
563
+ var oDomContainerDiv = document.getElementById(sMouseDownTargetId);
564
+ var oPositions = null;
565
+ if (oDomContainerDiv) {
566
+ oPositions = oCrosstab.getUtils().getSelectionParams(oDomContainerDiv);
567
+ }
568
+ if (oPositions.iSelectionStartPos >= 0 || oPositions.iSelectionEndPos >= 0) {
569
+ bPreventClickAction = true;
570
+ that.handleInputEnabledCell(
571
+ e.target.id, oPositions.iSelectionStartPos,
572
+ oPositions.iSelectionEndPos
573
+ );
574
+ }
575
+ }
576
+ }
577
+ } else {
578
+ if (!oCrosstab.isDragAction()) {
579
+ Utils.cancelEvent(e);
580
+ Utils.stopEventPropagation(e);
581
+ }
582
+ bPreventClickAction = true;
583
+ }
584
+ }
585
+ }
586
+ };
587
+
588
+ this.restoreFocusOnCell = function () {
589
+ oKeyboardHandler.restoreFocusOnCell();
590
+ };
591
+
592
+ function getActionById (sId) {
593
+ var sAction = sId.slice(0, 4);
594
+ return sAction;
595
+ }
596
+
597
+ function getCellById (sId) {
598
+ var sCellId = sId.slice(5);
599
+ return sap.ui.getCore().getControl(sCellId);
600
+ }
601
+
602
+ function executeAction (sAction, bDontShowLoading) {
603
+ if (sAction) {
604
+ if (!bDontShowLoading) {
605
+ // oCrosstab.showLoadingIndicator();
606
+ }
607
+ oCrosstab.getUtils().executeCommandAction(sAction);
608
+ }
609
+ }
610
+
611
+ this.handleHoverEntry = function(sTargetId) {
612
+ if (sTargetId) {
613
+ var sCellId = oCrosstab.getUtils().getCellIdFromContenDivId(sTargetId);
614
+ if (sCellId && sCellId !== undefined) {
615
+ var oModelCell = sap.ui.getCore().getControl(sCellId);
616
+ if (oModelCell && oModelCell !== undefined) {
617
+ oCrosstab.getSelectionHandler().handleCellHoverEntry(oModelCell);
618
+ }
619
+ }
620
+ }
621
+ };
622
+
623
+ this.executeOnMouseEnter = function(e) {
624
+ var sPotentialAction = null;
625
+ var sTargetId = e.target.id;
626
+
627
+ if (oCrosstab.hasLoadingPages()) {
628
+ Utils.cancelEvent(e);
629
+ return;
630
+ }
631
+
632
+ if (!sTargetId) {
633
+ sTargetId = that.findTargetId(e.target);
634
+ }
635
+
636
+ if (!sTargetId) {
637
+ return;
638
+ }
639
+ sPotentialAction = getActionById(sTargetId);
640
+
641
+ if (sPotentialAction === "__ce") {
642
+ that.handleHoverEntry(sTargetId);
643
+ }
644
+ Utils.cancelEvent(e);
645
+ };
646
+
647
+
648
+ this.executeOnMouseOut = function(e) {
649
+ oCrosstab.getSelectionHandler().handleCellHoverOut(e);
650
+ Utils.cancelEvent(e);
651
+ };
652
+
653
+ this.enableClick = function() {
654
+ bPreventClickAction = false;
655
+ sMouseDownTargetId = null;
656
+ };
657
+
658
+ this.getColResizer = function() {
659
+ return oColResizer;
660
+ };
661
+ };
662
+ return sap.zen.crosstab.EventHandler;
663
+ }
664
+ );