@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.
- package/package.json +1 -1
- package/src/{main/uilib/sap → sap}/zen/crosstab/.library +14 -13
- package/src/sap/zen/crosstab/BaseArea.js +933 -0
- package/src/sap/zen/crosstab/CellStyleHandler.js +109 -0
- package/src/sap/zen/crosstab/ColResizer.js +261 -0
- package/src/sap/zen/crosstab/ColumnHeaderArea.js +61 -0
- package/src/sap/zen/crosstab/Crosstab.js +1351 -0
- package/src/sap/zen/crosstab/CrosstabCellApi.js +141 -0
- package/src/sap/zen/crosstab/CrosstabContextMenu.js +96 -0
- package/src/sap/zen/crosstab/CrosstabHeaderInfo.js +699 -0
- package/src/sap/zen/crosstab/CrosstabRenderer.js +258 -0
- package/src/sap/zen/crosstab/CrosstabTestProxy.js +64 -0
- package/src/sap/zen/crosstab/DataArea.js +76 -0
- package/src/sap/zen/crosstab/DataCell.js +187 -0
- package/src/sap/zen/crosstab/DataCellRenderer.js +70 -0
- package/src/sap/zen/crosstab/DimensionHeaderArea.js +34 -0
- package/src/sap/zen/crosstab/EventHandler.js +664 -0
- package/src/sap/zen/crosstab/HeaderCell.js +357 -0
- package/src/sap/zen/crosstab/HeaderCellRenderer.js +333 -0
- package/src/sap/zen/crosstab/HeaderResizer.js +142 -0
- package/src/sap/zen/crosstab/IDataCell.js +34 -0
- package/src/sap/zen/crosstab/IHeaderCell.js +30 -0
- package/src/sap/zen/crosstab/PropertyBag.js +220 -0
- package/src/sap/zen/crosstab/RowHeaderArea.js +78 -0
- package/src/sap/zen/crosstab/SelectionHandler.js +892 -0
- package/src/sap/zen/crosstab/TextConstants.js +22 -0
- package/src/sap/zen/crosstab/TouchHandler.js +413 -0
- package/src/sap/zen/crosstab/datahandler/JsonDataHandler.js +777 -0
- package/src/sap/zen/crosstab/dragdrop/DragDropAreaRenderer.js +446 -0
- package/src/sap/zen/crosstab/dragdrop/DragDropHandler.js +674 -0
- package/src/sap/zen/crosstab/dragdrop/DragDropHoverManager.js +474 -0
- package/src/sap/zen/crosstab/dragdrop/DragDropUtils.js +579 -0
- package/src/sap/zen/crosstab/dragdrop/MemberDragDropHandler.js +1156 -0
- package/src/sap/zen/crosstab/keyboard/CrosstabKeyboardNavHandler.js +585 -0
- package/src/sap/zen/crosstab/library.js +49 -0
- package/src/sap/zen/crosstab/paging/CellMerger.js +266 -0
- package/src/sap/zen/crosstab/paging/Page.js +331 -0
- package/src/sap/zen/crosstab/paging/PageManager.js +396 -0
- package/src/sap/zen/crosstab/paging/PagingConstants.js +19 -0
- package/src/sap/zen/crosstab/paging/RequestHandler.js +103 -0
- package/src/sap/zen/crosstab/paging/RequestStack.js +112 -0
- package/src/sap/zen/crosstab/rendering/CrossRequestManager.js +468 -0
- package/src/sap/zen/crosstab/rendering/DataModel.js +260 -0
- package/src/sap/zen/crosstab/rendering/DomElementProvider.js +24 -0
- package/src/sap/zen/crosstab/rendering/HeaderScrollManager.js +93 -0
- package/src/sap/zen/crosstab/rendering/PixelScrollManager.js +189 -0
- package/src/sap/zen/crosstab/rendering/RenderEngine.js +2694 -0
- package/src/sap/zen/crosstab/rendering/RenderingConstants.js +60 -0
- package/src/sap/zen/crosstab/rendering/ScrollManager.js +614 -0
- package/src/sap/zen/crosstab/rendering/ScrollbarRenderer.js +560 -0
- package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/Chart.less +0 -4
- package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/InfoFeeding.less +120 -120
- package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/InfoFeeding.less +85 -85
- package/src/sap/zen/crosstab/utils/Measuring.js +236 -0
- package/src/sap/zen/crosstab/utils/Utils.js +485 -0
- package/ui5.yaml +4 -2
- package/src/main/uilib/sap/zen/crosstab/BaseArea.js +0 -1013
- package/src/main/uilib/sap/zen/crosstab/CellStyleHandler.js +0 -111
- package/src/main/uilib/sap/zen/crosstab/ColResizer.js +0 -264
- package/src/main/uilib/sap/zen/crosstab/ColumnHeaderArea.js +0 -52
- package/src/main/uilib/sap/zen/crosstab/Crosstab.js +0 -1662
- package/src/main/uilib/sap/zen/crosstab/CrosstabCellApi.js +0 -142
- package/src/main/uilib/sap/zen/crosstab/CrosstabContextMenu.js +0 -96
- package/src/main/uilib/sap/zen/crosstab/CrosstabHeaderInfo.js +0 -698
- package/src/main/uilib/sap/zen/crosstab/CrosstabRenderer.js +0 -274
- package/src/main/uilib/sap/zen/crosstab/CrosstabTestProxy.js +0 -59
- package/src/main/uilib/sap/zen/crosstab/DataArea.js +0 -74
- package/src/main/uilib/sap/zen/crosstab/DataCell.js +0 -196
- package/src/main/uilib/sap/zen/crosstab/DataCellRenderer.js +0 -71
- package/src/main/uilib/sap/zen/crosstab/DimensionHeaderArea.js +0 -25
- package/src/main/uilib/sap/zen/crosstab/EventHandler.js +0 -651
- package/src/main/uilib/sap/zen/crosstab/HeaderCell.js +0 -329
- package/src/main/uilib/sap/zen/crosstab/HeaderCellRenderer.js +0 -374
- package/src/main/uilib/sap/zen/crosstab/HeaderResizer.js +0 -131
- package/src/main/uilib/sap/zen/crosstab/IDataCell.js +0 -21
- package/src/main/uilib/sap/zen/crosstab/IHeaderCell.js +0 -21
- package/src/main/uilib/sap/zen/crosstab/PropertyBag.js +0 -209
- package/src/main/uilib/sap/zen/crosstab/RowHeaderArea.js +0 -71
- package/src/main/uilib/sap/zen/crosstab/SelectionHandler.js +0 -911
- package/src/main/uilib/sap/zen/crosstab/TextConstants.js +0 -9
- package/src/main/uilib/sap/zen/crosstab/TouchHandler.js +0 -438
- package/src/main/uilib/sap/zen/crosstab/datahandler/JsonDataHandler.js +0 -760
- package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropAreaRenderer.js +0 -436
- package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropHandler.js +0 -682
- package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropHoverManager.js +0 -467
- package/src/main/uilib/sap/zen/crosstab/dragdrop/DragDropUtils.js +0 -580
- package/src/main/uilib/sap/zen/crosstab/dragdrop/MemberDragDropHandler.js +0 -1154
- package/src/main/uilib/sap/zen/crosstab/keyboard/CrosstabKeyboardNavHandler.js +0 -635
- package/src/main/uilib/sap/zen/crosstab/library.js +0 -38
- package/src/main/uilib/sap/zen/crosstab/nonphx/logic.js +0 -11
- package/src/main/uilib/sap/zen/crosstab/paging/CellMerger.js +0 -284
- package/src/main/uilib/sap/zen/crosstab/paging/Page.js +0 -357
- package/src/main/uilib/sap/zen/crosstab/paging/PageManager.js +0 -437
- package/src/main/uilib/sap/zen/crosstab/paging/PagingConstants.js +0 -7
- package/src/main/uilib/sap/zen/crosstab/paging/RequestHandler.js +0 -97
- package/src/main/uilib/sap/zen/crosstab/paging/RequestStack.js +0 -108
- package/src/main/uilib/sap/zen/crosstab/rendering/CrossRequestManager.js +0 -462
- package/src/main/uilib/sap/zen/crosstab/rendering/DataModel.js +0 -250
- package/src/main/uilib/sap/zen/crosstab/rendering/DomElementProvider.js +0 -13
- package/src/main/uilib/sap/zen/crosstab/rendering/HeaderScrollManager.js +0 -97
- package/src/main/uilib/sap/zen/crosstab/rendering/PixelScrollManager.js +0 -180
- package/src/main/uilib/sap/zen/crosstab/rendering/RenderEngine.js +0 -2757
- package/src/main/uilib/sap/zen/crosstab/rendering/RenderingConstants.js +0 -56
- package/src/main/uilib/sap/zen/crosstab/rendering/ScrollManager.js +0 -638
- package/src/main/uilib/sap/zen/crosstab/rendering/ScrollbarRenderer.js +0 -542
- package/src/main/uilib/sap/zen/crosstab/utils/Measuring.js +0 -225
- package/src/main/uilib/sap/zen/crosstab/utils/Utils.js +0 -480
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/ChartTypeSwitch.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/Crosstab.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/FilterBar.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/FilterPanel.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/Footerbar.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/InfoChart.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/NavigationPanel.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/chartconfig.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/CornerTornEffect.png +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/HTornEffect.png +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/HTornEffectData.png +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/HTornEffectHeader.png +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/VTornEffect.png +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/loading.gif +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/img/loading_comp.gif +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/base/zen.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize_hcb/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize_hcw/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_belize_plus/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_bluecrystal/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3_dark/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3_hcb/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_fiori_3_hcw/library.source.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/Chart.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/ChartTypeSwitch.less +0 -0
- /package/src/{main/uilib/sap → sap}/zen/crosstab/themes/sap_hcb/library.source.less +0 -0
|
@@ -1,635 +0,0 @@
|
|
|
1
|
-
jQuery.sap.declare("sap.zen.crosstab.keyboard.CrosstabKeyboardNavHandler");
|
|
2
|
-
jQuery.sap.require("sap.zen.crosstab.rendering.RenderingConstants");
|
|
3
|
-
|
|
4
|
-
sap.zen.crosstab.keyboard.CrosstabKeyboardNavHandler = function (oCrosstab, oEventHandler) {
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
var iFocusRow = -1;
|
|
8
|
-
var iFocusCol = -1;
|
|
9
|
-
var iOldFocusRow = -1;
|
|
10
|
-
var iOldFocusCol = -1;
|
|
11
|
-
var iNavDx = 0;
|
|
12
|
-
var iNavDy = 0;
|
|
13
|
-
var that = this;
|
|
14
|
-
var bEnabled = false;
|
|
15
|
-
var oDataArea = oCrosstab.getDataArea();
|
|
16
|
-
|
|
17
|
-
this.reset = function() {
|
|
18
|
-
this.disableCell(iFocusRow, iFocusCol);
|
|
19
|
-
this.disableCell(iOldFocusRow, iOldFocusCol);
|
|
20
|
-
iFocusRow = -1;
|
|
21
|
-
iFocusCol = -1;
|
|
22
|
-
iOldFocusRow = -1;
|
|
23
|
-
iOldFocusCol = -1;
|
|
24
|
-
iNavDx = 0;
|
|
25
|
-
iNavDy = 0;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
this.setEnabled = function (pbEnabled) {
|
|
29
|
-
bEnabled = pbEnabled;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
this.attachEvents = function (oJqDiv) {
|
|
33
|
-
if (!bEnabled) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
oJqDiv.off("keydown", this.keyboardNavKeyHandler);
|
|
37
|
-
oJqDiv.on("keydown", this.keyboardNavKeyHandler);
|
|
38
|
-
// this must be used to make a div accept keydown events and focus-enabled
|
|
39
|
-
oJqDiv.attr("tabindex", sap.zen.crosstab.rendering.RenderingConstants.TABINDEX);
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
this.getFocusScrollDiv = function (oCell) {
|
|
43
|
-
var oDomScrollDiv = null;
|
|
44
|
-
if (oCell.getArea().isDataArea() || oCell.getArea().isColHeaderArea()) {
|
|
45
|
-
oDomScrollDiv = document.getElementById(oCrosstab.getId() + '_lowerRight_scrollDiv');
|
|
46
|
-
} else if (oCell.getArea().isRowHeaderArea()) {
|
|
47
|
-
oDomScrollDiv = document.getElementById(oCrosstab.getId() + '_lowerLeft_scrollDiv');
|
|
48
|
-
}
|
|
49
|
-
return oDomScrollDiv;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
this.movePixelCellIntoFocus = function (oCell, oDomCell, oScrollDivRect, bUserSelected, bLookAheadMode, bNewLine) {
|
|
53
|
-
var bHasScrolled = false;
|
|
54
|
-
|
|
55
|
-
var oCellDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(oDomCell);
|
|
56
|
-
var iScrollDivRectWidth = oScrollDivRect.width;
|
|
57
|
-
var iContentDivRectWidth = oCellDivRect.width;
|
|
58
|
-
var iScrollDivRectHeight = oScrollDivRect.height;
|
|
59
|
-
var iContentDivRectHeight = oCellDivRect.height;
|
|
60
|
-
|
|
61
|
-
// horizontal
|
|
62
|
-
if (iContentDivRectWidth < iScrollDivRectWidth) {
|
|
63
|
-
if (oCellDivRect.end > oScrollDivRect.end) {
|
|
64
|
-
var iOldScrollPos = oCrosstab.getHScrollbar().getScrollPosition();
|
|
65
|
-
oCrosstab.scrollHorizontal(iOldScrollPos + oCellDivRect.end - oScrollDivRect.end);
|
|
66
|
-
bHasScrolled = true;
|
|
67
|
-
} else if (oCellDivRect.begin < oScrollDivRect.begin) {
|
|
68
|
-
var iOldScrollPos = oCrosstab.getHScrollbar().getScrollPosition();
|
|
69
|
-
oCrosstab.scrollHorizontal(iOldScrollPos - (oScrollDivRect.begin - oCellDivRect.begin));
|
|
70
|
-
bHasScrolled = true;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// vertical
|
|
74
|
-
if (bUserSelected || bLookAheadMode || bNewLine) {
|
|
75
|
-
if (iContentDivRectHeight < iScrollDivRectHeight) {
|
|
76
|
-
if (oCellDivRect.bottom > oScrollDivRect.bottom) {
|
|
77
|
-
var iOldScrollPos = oCrosstab.getVScrollbar().getScrollPosition();
|
|
78
|
-
oCrosstab.scrollVertical(iOldScrollPos + oCellDivRect.bottom - oScrollDivRect.bottom);
|
|
79
|
-
bHasScrolled = true;
|
|
80
|
-
|
|
81
|
-
} else if (oCellDivRect.top < oScrollDivRect.top) {
|
|
82
|
-
var iOldScrollPos = oCrosstab.getVScrollbar().getScrollPosition();
|
|
83
|
-
oCrosstab.scrollVertical(iOldScrollPos - (oScrollDivRect.top - oCellDivRect.top));
|
|
84
|
-
bHasScrolled = true;
|
|
85
|
-
}
|
|
86
|
-
} else {
|
|
87
|
-
// cell is higher than scrolldiv -> scroll to beginning of cell
|
|
88
|
-
var iOldScrollPos = oCrosstab.getVScrollbar().getScrollPosition();
|
|
89
|
-
oCrosstab.scrollVertical(iOldScrollPos - (oScrollDivRect.top - oCellDivRect.top));
|
|
90
|
-
bHasScrolled = true;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return bHasScrolled;
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
this.moveRowHeaderAreaCellHorizontally = function(oCell, oDomCell) {
|
|
98
|
-
var oScrollDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(document.getElementById(oCrosstab.getId() + "_lowerLeft_scrollDiv"));
|
|
99
|
-
var oCellDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(oDomCell);
|
|
100
|
-
|
|
101
|
-
var iScrollDivRectWidth = oScrollDivRect.width;
|
|
102
|
-
var iContentDivRectWidth = oCellDivRect.width;
|
|
103
|
-
|
|
104
|
-
var oHeaderHScrollbar = oCrosstab.getHorizontalHeaderScrollbar();
|
|
105
|
-
|
|
106
|
-
if (iContentDivRectWidth < iScrollDivRectWidth) {
|
|
107
|
-
if (oCellDivRect.end > oScrollDivRect.end) {
|
|
108
|
-
var iOldScrollPos = oHeaderHScrollbar.getScrollPosition();
|
|
109
|
-
oCrosstab.scrollHeaderHorizontal(iOldScrollPos + oCellDivRect.end - oScrollDivRect.end);
|
|
110
|
-
} else if (oCellDivRect.begin < oScrollDivRect.begin) {
|
|
111
|
-
var iOldScrollPos = oHeaderHScrollbar.getScrollPosition();
|
|
112
|
-
oCrosstab.scrollHeaderHorizontal(iOldScrollPos - (oScrollDivRect.begin - oCellDivRect.begin));
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
this.moveRowColCellIntoFocus = function (oCell, oDomCell, oScrollDivRect, bUserSelected, bLookAheadMode, bNewLine) {
|
|
118
|
-
var bHasScrolled = false;
|
|
119
|
-
|
|
120
|
-
var oCellDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(oDomCell);
|
|
121
|
-
var iScrollDivRectWidth = oScrollDivRect.width;
|
|
122
|
-
var iContentDivRectWidth = oCellDivRect.width;
|
|
123
|
-
|
|
124
|
-
var iRenderStartCol = oCrosstab.getDataArea().getRenderStartCol();
|
|
125
|
-
var iRenderStartRow = oCrosstab.getDataArea().getRenderStartRow();
|
|
126
|
-
|
|
127
|
-
var iMaxRow = oCrosstab.getDataArea().getRowCnt() - 1;
|
|
128
|
-
|
|
129
|
-
// horizontal check: only for data cells. Header cells do not scroll horizontally
|
|
130
|
-
if (oCell.getArea().isDataArea() || oCell.getArea().isColHeaderArea()) {
|
|
131
|
-
var oHScrollbar = oCrosstab.getHScrollbar();
|
|
132
|
-
if (oHScrollbar) {
|
|
133
|
-
if (iContentDivRectWidth < iScrollDivRectWidth) {
|
|
134
|
-
// check if the cell's content div fits in into the visible area
|
|
135
|
-
// horizontal
|
|
136
|
-
if (oCellDivRect.end > oScrollDivRect.end) {
|
|
137
|
-
oCrosstab.scrollHorizontal(iRenderStartCol + 1);
|
|
138
|
-
bHasScrolled = true;
|
|
139
|
-
} else if (oCellDivRect.begin < oScrollDivRect.begin) {
|
|
140
|
-
oCrosstab.scrollHorizontal(iRenderStartCol - 1);
|
|
141
|
-
bHasScrolled = true;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// horizontal header scrolling if relevant
|
|
148
|
-
if (oCrosstab.isHeaderHScrolling() === true && oCell.getArea().isRowHeaderArea()) {
|
|
149
|
-
this.moveRowHeaderAreaCellHorizontally(oCell, oDomCell);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// vertical correction: only for data and row header cells
|
|
153
|
-
if (iRenderStartRow === oCell.getTableRow() - oCrosstab.getTableFixedColHeaderRowCnt()) {
|
|
154
|
-
// cell is already at the top. Don't try to shift it in from below.
|
|
155
|
-
// this is especially important for cells with such large rowspans that the
|
|
156
|
-
// whole cell does never fit into the crosstab viewport.
|
|
157
|
-
// This check will be made further down too after the cell was scrolled into focus and
|
|
158
|
-
// before the "fine tuning" begins
|
|
159
|
-
return bHasScrolled;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
if (oCell.getArea().isDataArea() || (oCell.getArea().isRowHeaderArea() && bUserSelected) || bLookAheadMode || bNewLine) {
|
|
163
|
-
var oVScrollbar = oCrosstab.getVScrollbar();
|
|
164
|
-
if (oVScrollbar) {
|
|
165
|
-
var iRenderedRows = oCrosstab.getDataArea().getRenderRowCnt();
|
|
166
|
-
var iCurrentVScrollPos = oVScrollbar.getScrollPosition();
|
|
167
|
-
var iRow = oCell.getTableRow() - oCrosstab.getTableFixedColHeaderRowCnt();
|
|
168
|
-
// cell sticks out at the top
|
|
169
|
-
if (iRow < iRenderStartRow) {
|
|
170
|
-
oCrosstab.scrollVertical(iRow);
|
|
171
|
-
bHasScrolled = true;
|
|
172
|
-
} else if (iRow + oCell.getRowSpan() > (iRenderStartRow + iRenderedRows)) {
|
|
173
|
-
// cell sticks out at the bottom
|
|
174
|
-
var iCellRowsVisible = iRenderStartRow + iRenderedRows - oCell.getRow();
|
|
175
|
-
var iScrollDelta = oCell.getRowSpan() - iCellRowsVisible;
|
|
176
|
-
var iNewScrollPos = Math.max(0, Math.min(iCurrentVScrollPos + iScrollDelta + 1, iMaxRow));
|
|
177
|
-
|
|
178
|
-
if (iScrollDelta !== 0) {
|
|
179
|
-
oCrosstab.scrollVertical(iNewScrollPos);
|
|
180
|
-
bHasScrolled = true;
|
|
181
|
-
}
|
|
182
|
-
iRenderStartRow = oCrosstab.getDataArea().getRenderStartRow();
|
|
183
|
-
// trying to shift in a cell from the bottom that doesn't fit at the top -> go to top
|
|
184
|
-
if (iRenderStartRow > iRow) {
|
|
185
|
-
oCrosstab.scrollVertical(iRow);
|
|
186
|
-
bHasScrolled = true;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
iRenderStartRow = oCrosstab.getDataArea().getRenderStartRow();
|
|
191
|
-
if (iRenderStartRow === oCell.getTableRow() - oCrosstab.getTableFixedColHeaderRowCnt()) {
|
|
192
|
-
// cell was already scrolled to the top. Don't try to shift it in from below.
|
|
193
|
-
// this is especially important for cells with such large rowspans that the
|
|
194
|
-
// whole cell does never fit into the crosstab viewport
|
|
195
|
-
return bHasScrolled;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (bHasScrolled) {
|
|
199
|
-
oDomCell = document.getElementById(oCell.getId());
|
|
200
|
-
oCellDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(oDomCell);
|
|
201
|
-
iCurrentVScrollPos = oVScrollbar.getScrollPosition();
|
|
202
|
-
}
|
|
203
|
-
// final correction due to vertical "half cells"
|
|
204
|
-
if (oCellDivRect.bottom > oScrollDivRect.bottom) {
|
|
205
|
-
while (oCellDivRect.bottom > oScrollDivRect.bottom && iCurrentVScrollPos < iMaxRow) {
|
|
206
|
-
oCrosstab.scrollVertical(Math.min(iCurrentVScrollPos + 1, iMaxRow));
|
|
207
|
-
iCurrentVScrollPos = oVScrollbar.getScrollPosition();
|
|
208
|
-
oDomCell = document.getElementById(oCell.getId());
|
|
209
|
-
oCellDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(oDomCell);
|
|
210
|
-
bHasScrolled = true;
|
|
211
|
-
}
|
|
212
|
-
} else if (oCellDivRect.top < oScrollDivRect.top) {
|
|
213
|
-
oCrosstab.scrollVertical(Math.max(0, iCurrentVScrollPos - 1));
|
|
214
|
-
bHasScrolled = true;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return bHasScrolled;
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
this.getCellIntoDom = function (oCell, oOldCell, bNewLine) {
|
|
223
|
-
var iNewPos = 0;
|
|
224
|
-
if (iNavDy === 0) {
|
|
225
|
-
var oHScrollbar = oCrosstab.getHScrollbar();
|
|
226
|
-
if (oHScrollbar && !bNewLine) {
|
|
227
|
-
if (iNavDx > 0) {
|
|
228
|
-
iNewPos = oHScrollbar.getScrollPosition() + oOldCell.getColSpan();
|
|
229
|
-
} else if (iNavDx < 0) {
|
|
230
|
-
iNewPos = oCell.getTableCol() - oCrosstab.getTableFixedRowHeaderColCnt();
|
|
231
|
-
}
|
|
232
|
-
oCrosstab.scrollHorizontal(iNewPos);
|
|
233
|
-
}
|
|
234
|
-
} else if (iNavDx == 0) {
|
|
235
|
-
var oVScrollbar = oCrosstab.getVScrollbar();
|
|
236
|
-
if (oVScrollbar) {
|
|
237
|
-
if (iNavDy > 0) {
|
|
238
|
-
iNewPos = oVScrollbar.getScrollPosition() + oOldCell.getRowSpan();
|
|
239
|
-
} else {
|
|
240
|
-
if (iNavDy < 0) {
|
|
241
|
-
iNewPos = oCell.getTableRow() - oCrosstab.getTableFixedColHeaderRowCnt();
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
oCrosstab.scrollVertical(iNewPos);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
this.getRowLookAheadCell = function (oCell) {
|
|
250
|
-
var oLookAheadCell = null;
|
|
251
|
-
var oTempCell = null;
|
|
252
|
-
var iMaxCol = 0;
|
|
253
|
-
var iMinCol = 0;
|
|
254
|
-
if (oCell.getRowSpan() > 1) {
|
|
255
|
-
if (iNavDx > 0) {
|
|
256
|
-
iMinCol = oCell.getTableCol();
|
|
257
|
-
iMaxCol = oCrosstab.getRenderStartCol() + oCrosstab.getRenderColCnt()
|
|
258
|
-
+ oCrosstab.getTableFixedRowHeaderColCnt();
|
|
259
|
-
for (var i = iMinCol; i <= iMaxCol; i++) {
|
|
260
|
-
oTempCell = oCrosstab.getTableCellWithSpans(iFocusRow, i);
|
|
261
|
-
if (oTempCell.getRowSpan() === 1) {
|
|
262
|
-
oLookAheadCell = oTempCell;
|
|
263
|
-
break;
|
|
264
|
-
} else {
|
|
265
|
-
if (oLookAheadCell) {
|
|
266
|
-
if (oTempCell.getRowSpan() < oLookAheadCell.getRowSpan()) {
|
|
267
|
-
oLookAheadCell = oTempCell;
|
|
268
|
-
}
|
|
269
|
-
} else {
|
|
270
|
-
oLookAheadCell = oTempCell;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
} else {
|
|
276
|
-
oLookAheadCell = oCell;
|
|
277
|
-
}
|
|
278
|
-
return oLookAheadCell;
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
this.scrollCellIntoFocus = function (oCell, bUserSelected, bNewLine, oOldCell) {
|
|
282
|
-
var oLookAheadCell = oCell;
|
|
283
|
-
var bLookAheadMode = false;
|
|
284
|
-
if (!bUserSelected && oCell.getArea().isRowHeaderArea() && bNewLine === true && oCrosstab.getVScrollbar() && !oCrosstab.isHeaderHScrolling()) {
|
|
285
|
-
// find the cell that is needed for positioning when scrolling. Only during horizontal forward navigation!
|
|
286
|
-
if (iNavDx > 0 && iNavDy === 0) {
|
|
287
|
-
oLookAheadCell = this.getRowLookAheadCell(oCell);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (oLookAheadCell !== oCell) {
|
|
292
|
-
oCell = oLookAheadCell;
|
|
293
|
-
bLookAheadMode = true;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
var oDomScrollDiv = this.getFocusScrollDiv(oCell);
|
|
297
|
-
if (!oDomScrollDiv) {
|
|
298
|
-
return false;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
var bHasScrolled = false;
|
|
302
|
-
var isPixelScrolling = oCrosstab.getPropertyBag().isPixelScrolling();
|
|
303
|
-
|
|
304
|
-
var oDomCell = document.getElementById(oCell.getId());
|
|
305
|
-
if (!oDomCell && !isPixelScrolling) {
|
|
306
|
-
this.getCellIntoDom(oCell, oOldCell, bNewLine);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
if (!oDomCell) {
|
|
310
|
-
return false;
|
|
311
|
-
}
|
|
312
|
-
// the bounding client rects
|
|
313
|
-
var oScrollDivRect = oCrosstab.getUtils().getRtlAwareBoundingClientRect(oDomScrollDiv);
|
|
314
|
-
|
|
315
|
-
if (isPixelScrolling) {
|
|
316
|
-
bHasScrolled = this.movePixelCellIntoFocus(oCell, oDomCell, oScrollDivRect, bUserSelected, bLookAheadMode, bNewLine);
|
|
317
|
-
} else {
|
|
318
|
-
bHasScrolled = this.moveRowColCellIntoFocus(oCell, oDomCell, oScrollDivRect, bUserSelected, bLookAheadMode, bNewLine);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
return bHasScrolled;
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
this.keyboardNavKeyHandler = function (e) {
|
|
325
|
-
// check handling the right crosstab
|
|
326
|
-
if (iFocusRow > -1 && iFocusCol > -1) {
|
|
327
|
-
iNavDx = 0;
|
|
328
|
-
iNavDy = 0;
|
|
329
|
-
if (e.which === 9) {
|
|
330
|
-
// TAB
|
|
331
|
-
iNavDx = 1;
|
|
332
|
-
} else if (e.which === 38) {
|
|
333
|
-
iNavDy = -1;
|
|
334
|
-
// ARROW UP
|
|
335
|
-
} else if (e.which === 40) {
|
|
336
|
-
// ARROW DN
|
|
337
|
-
iNavDy = 1;
|
|
338
|
-
} else if (e.which === 37) {
|
|
339
|
-
// ARROW LEFT
|
|
340
|
-
iNavDx = -1;
|
|
341
|
-
} else if (e.which === 39) {
|
|
342
|
-
// ARROW RIGHT
|
|
343
|
-
iNavDx = 1;
|
|
344
|
-
}
|
|
345
|
-
if (iNavDx === 0 && iNavDy === 0) {
|
|
346
|
-
// no changes
|
|
347
|
-
return true;
|
|
348
|
-
} else {
|
|
349
|
-
if (!oCrosstab.hasLoadingPages()) {
|
|
350
|
-
that.moveCellFocus();
|
|
351
|
-
}
|
|
352
|
-
sap.zen.crosstab.utils.Utils.cancelEvent(e);
|
|
353
|
-
return false;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return true;
|
|
357
|
-
};
|
|
358
|
-
|
|
359
|
-
this.restoreFocusOnCell = function () {
|
|
360
|
-
if (!bEnabled) {
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
if (iFocusRow > -1 && iFocusCol > -1 && !oCrosstab.hasLoadingPages()) {
|
|
364
|
-
var oRestoreCell = oCrosstab.getTableCellWithSpans(iFocusRow, iFocusCol);
|
|
365
|
-
if (oRestoreCell && !oRestoreCell.isLoading()) {
|
|
366
|
-
this.disableCell(iOldFocusRow, iOldFocusCol);
|
|
367
|
-
this.navigateToCellAction(oRestoreCell, -1, -1);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
};
|
|
371
|
-
|
|
372
|
-
function focusNoScroll (oJqElement, oDomScrollDiv) {
|
|
373
|
-
var x = oDomScrollDiv.scrollLeft;
|
|
374
|
-
var y = oDomScrollDiv.scrollTop;
|
|
375
|
-
|
|
376
|
-
oJqElement.focus();
|
|
377
|
-
|
|
378
|
-
if (oDomScrollDiv.scrollLeft !== x) {
|
|
379
|
-
oDomScrollDiv.scrollLeft = x;
|
|
380
|
-
}
|
|
381
|
-
if (oDomScrollDiv.scrollTop !== y) {
|
|
382
|
-
oDomScrollDiv.scrollTop = y;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
// Actions to be carried out when cell is reached via keyboard navigation
|
|
387
|
-
this.navigateToCellAction = function (oCell, iSelectionStartPos, iSelectionEndPos) {
|
|
388
|
-
var oJqCell = null;
|
|
389
|
-
var oJqContentDiv = null;
|
|
390
|
-
var oDomScrollDiv = null;
|
|
391
|
-
var oJqTextContentDiv = null;
|
|
392
|
-
|
|
393
|
-
oJqCell = $(document.getElementById(oCell.getId()));
|
|
394
|
-
oJqCell.addClass("sapzencrosstab-CellFocus");
|
|
395
|
-
oJqContentDiv = $(document.getElementById(oCell.getId() + "_contentDiv"));
|
|
396
|
-
oJqTextContentDiv = oJqCell.find("#" + $.sap.encodeCSS(oCell.getId() + "_textContentDiv"));
|
|
397
|
-
|
|
398
|
-
if (!oCell.isEntryEnabled()) {
|
|
399
|
-
oDomScrollDiv = this.getFocusScrollDiv(oCell);
|
|
400
|
-
if (oJqTextContentDiv.length > 0) {
|
|
401
|
-
oJqContentDiv = oJqTextContentDiv;
|
|
402
|
-
}
|
|
403
|
-
if ($.browser.mozilla) {
|
|
404
|
-
focusNoScroll(oJqContentDiv, oDomScrollDiv);
|
|
405
|
-
}
|
|
406
|
-
// Text selection
|
|
407
|
-
var oDomContentDiv = oJqContentDiv[0];
|
|
408
|
-
if (oDomContentDiv && iSelectionStartPos === -1 && iSelectionEndPos === -1) {
|
|
409
|
-
sap.zen.crosstab.utils.Utils.selectTextInElement(oDomContentDiv);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
focusNoScroll(oJqContentDiv, oDomScrollDiv);
|
|
413
|
-
} else {
|
|
414
|
-
oEventHandler.provideInputEnabledCell(oCell, oCell.getId(), oJqContentDiv, iSelectionStartPos, iSelectionEndPos);
|
|
415
|
-
}
|
|
416
|
-
};
|
|
417
|
-
|
|
418
|
-
// Actions to be carried out when cell is moved away from via keyboard navigation
|
|
419
|
-
this.navigateFromCellAction = function (oCell) {
|
|
420
|
-
var oJqCell = $(document.getElementById(oCell.getId()));
|
|
421
|
-
// marked cell may have been scrolled out of displayed area
|
|
422
|
-
if (oJqCell.length > 0) {
|
|
423
|
-
oJqCell.removeClass("sapzencrosstab-CellFocus");
|
|
424
|
-
}
|
|
425
|
-
var oInputField = oJqCell.find("input");
|
|
426
|
-
oInputField.focusout();
|
|
427
|
-
};
|
|
428
|
-
|
|
429
|
-
// This is only called when user clicks a cell
|
|
430
|
-
this.focusNewCell = function (oCell, iSelectionStartPos, iSelectionEndPos) {
|
|
431
|
-
if (!bEnabled) {
|
|
432
|
-
return false;
|
|
433
|
-
}
|
|
434
|
-
if (!oCell) {
|
|
435
|
-
return false;
|
|
436
|
-
}
|
|
437
|
-
var bHasScrolled = false;
|
|
438
|
-
if (iFocusRow > -1 && iFocusCol > -1) {
|
|
439
|
-
this.disableCell(iFocusRow, iFocusCol);
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
iFocusRow = oCell.getTableRow();
|
|
443
|
-
iFocusCol = oCell.getTableCol();
|
|
444
|
-
iOldFocusRow = iFocusRow;
|
|
445
|
-
iOldFocusCol = iFocusCol;
|
|
446
|
-
|
|
447
|
-
var oVScrollbar = oCrosstab.getVScrollbar();
|
|
448
|
-
var oHScrollbar = oCrosstab.getHScrollbar();
|
|
449
|
-
|
|
450
|
-
if (oVScrollbar || oHScrollbar) {
|
|
451
|
-
// row adjustment
|
|
452
|
-
if (oVScrollbar) {
|
|
453
|
-
bHasScrolled = this.scrollCellIntoFocus(oCell, true, false, null);
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
this.navigateToCellAction(oCell, iSelectionStartPos, iSelectionEndPos);
|
|
457
|
-
return bHasScrolled;
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
this.scrollToCell = function (oCell) {
|
|
461
|
-
var iDataRow = oCell.getTableRow() - oCrosstab.getTableFixedColHeaderRowCnt();
|
|
462
|
-
var iDataCol = oCell.getTableCol() - oCrosstab.getTableFixedRowHeaderColCnt();
|
|
463
|
-
|
|
464
|
-
var bVScroll = iDataRow < oCrosstab.getRenderStartRow()
|
|
465
|
-
|| iDataRow > (oCrosstab.getRenderStartRow() + oCrosstab.getRenderRowCnt());
|
|
466
|
-
|
|
467
|
-
var bHScroll = false;
|
|
468
|
-
if (oCell.getArea().isDataArea() || oCell.getArea().isColHeaderArea()) {
|
|
469
|
-
bHScroll = iDataCol < oCrosstab.getRenderStartCol()
|
|
470
|
-
|| iDataCol > (oCrosstab.getRenderStartCol() + oCrosstab.getRenderColCnt());
|
|
471
|
-
}
|
|
472
|
-
if (oCrosstab.getVScrollbar() && bVScroll) {
|
|
473
|
-
oCrosstab.scrollVertical(oCell.getTableRow() - oCrosstab.getTableFixedColHeaderRowCnt());
|
|
474
|
-
}
|
|
475
|
-
if (oCrosstab.getHScrollbar() && oCell.getArea().isDataArea() && bHScroll) {
|
|
476
|
-
oCrosstab.scrollHorizontal(oCell.getTableCol() - oCrosstab.getTableFixedRowHeaderColCnt());
|
|
477
|
-
}
|
|
478
|
-
};
|
|
479
|
-
|
|
480
|
-
this.disableCell = function (iTableRow, iTableCol) {
|
|
481
|
-
var oCell = null;
|
|
482
|
-
if (iTableRow > -1 && iTableRow > -1) {
|
|
483
|
-
oCell = oCrosstab.getTableCellWithSpans(iTableRow, iTableCol);
|
|
484
|
-
if (oCell && !oCell.isLoading()) {
|
|
485
|
-
// deactivate old cell in any case
|
|
486
|
-
this.navigateFromCellAction(oCell);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
};
|
|
490
|
-
|
|
491
|
-
this.moveCellFocus = function () {
|
|
492
|
-
if (!bEnabled) {
|
|
493
|
-
return;
|
|
494
|
-
}
|
|
495
|
-
// take given oCell when defined, otherwise operate using the deltas.
|
|
496
|
-
// For delta handling, a cell must be focused
|
|
497
|
-
// ASSUMPTION: we only move in steps with abs(step) = 1, i. e. +1 and -1!
|
|
498
|
-
var oNewCell = null;
|
|
499
|
-
var iScrollToCol = -1;
|
|
500
|
-
var iScrollToRow = -1;
|
|
501
|
-
|
|
502
|
-
var iMaxRow = oCrosstab.getTableRowCnt() - 1;
|
|
503
|
-
var iMaxCol = oCrosstab.getTableColCnt() - 1;
|
|
504
|
-
var iMinRow = oCrosstab.getTableFixedColHeaderRowCnt();
|
|
505
|
-
|
|
506
|
-
iOldFocusRow = iFocusRow;
|
|
507
|
-
iOldFocusCol = iFocusCol;
|
|
508
|
-
|
|
509
|
-
var bNewLine = false;
|
|
510
|
-
var bUserSelected = false;
|
|
511
|
-
|
|
512
|
-
var oCurrentCell = oCrosstab.getTableCellWithSpans(iOldFocusRow, iOldFocusCol);
|
|
513
|
-
if (oCurrentCell && !oCrosstab.hasLoadingPages()) {
|
|
514
|
-
// this is needed if somebody focused a cell and then scrolls away from it so it no longer is in the DOM
|
|
515
|
-
// When a key is pressed, this cell must be brought back into the DOM and
|
|
516
|
-
// navigation again starts from there.
|
|
517
|
-
// Hence, do this only if a key event was registered, not a click to a new cell
|
|
518
|
-
if (iNavDx !== 0 || iNavDy !== 0) {
|
|
519
|
-
this.scrollToCell(oCurrentCell);
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
if (iNavDy < 0) {
|
|
524
|
-
if (oCurrentCell.getTableRow() === iMinRow) {
|
|
525
|
-
return;
|
|
526
|
-
}
|
|
527
|
-
} else if (iNavDy > 0) {
|
|
528
|
-
if ((oCurrentCell.getTableRow() + oCurrentCell.getRowSpan() - 1) === iMaxRow) {
|
|
529
|
-
return;
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
this.disableCell(oCurrentCell.getTableRow(), oCurrentCell.getTableCol());
|
|
534
|
-
|
|
535
|
-
if (iFocusRow > -1 && iFocusCol > -1) {
|
|
536
|
-
if (iNavDx === 0 && iNavDy === 0) {
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
var iNewFocusRow = iFocusRow;
|
|
540
|
-
var iNewFocusCol = iFocusCol;
|
|
541
|
-
if (iNavDx !== 0) {
|
|
542
|
-
// horizontal movement
|
|
543
|
-
if (iNavDx > 0) {
|
|
544
|
-
// moving forward
|
|
545
|
-
iNewFocusCol = oCurrentCell.getTableCol() + oCurrentCell.getColSpan() + iNavDx - 1;
|
|
546
|
-
if (iNewFocusCol > iMaxCol) {
|
|
547
|
-
if (iNewFocusRow < iMaxRow) {
|
|
548
|
-
iNewFocusRow++;
|
|
549
|
-
iNewFocusCol = 0;
|
|
550
|
-
iScrollToCol = 0;
|
|
551
|
-
bNewLine = true;
|
|
552
|
-
} else {
|
|
553
|
-
iNewFocusCol = iMaxCol;
|
|
554
|
-
iNewFocusRow = iMaxRow;
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
} else {
|
|
558
|
-
// moving backward
|
|
559
|
-
iNewFocusCol = oCurrentCell.getTableCol();
|
|
560
|
-
iNewFocusCol--;
|
|
561
|
-
if (iNewFocusCol >= 0) {
|
|
562
|
-
var oPreviousCellInRow = oCrosstab.getTableCellWithSpans(iNewFocusRow, iNewFocusCol);
|
|
563
|
-
if (!oPreviousCellInRow) {
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
if (oPreviousCellInRow.isLoading()) {
|
|
567
|
-
return;
|
|
568
|
-
}
|
|
569
|
-
// get the actual col if the cell had a colSpan
|
|
570
|
-
iNewFocusCol = oPreviousCellInRow.getTableCol();
|
|
571
|
-
} else {
|
|
572
|
-
if (iNewFocusRow > iMinRow) {
|
|
573
|
-
iNewFocusRow--;
|
|
574
|
-
iNewFocusCol = iMaxCol;
|
|
575
|
-
iScrollToCol = iMaxCol;
|
|
576
|
-
if (iNewFocusRow < oDataArea.getRenderStartRow() + iMinRow) {
|
|
577
|
-
// scrolling is 0-based with regard to data area
|
|
578
|
-
iScrollToRow = iNewFocusRow - iMinRow;
|
|
579
|
-
}
|
|
580
|
-
bNewLine = true;
|
|
581
|
-
} else {
|
|
582
|
-
iNewFocusCol = 0;
|
|
583
|
-
iNewFocusRow = iMinRow;
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
// when moving horizontally, first check if the cell can be found searching the same row.
|
|
588
|
-
oNewCell = oCrosstab.getTableCellWithSpans(iNewFocusRow, iNewFocusCol);
|
|
589
|
-
if (oNewCell.isLoading()) {
|
|
590
|
-
return;
|
|
591
|
-
}
|
|
592
|
-
if (oCurrentCell) {
|
|
593
|
-
if (oCurrentCell.getArea() !== oNewCell.getArea() && iScrollToCol === -1) {
|
|
594
|
-
// transition from header to data area and vice versa when free selection has taken place and no
|
|
595
|
-
// other scrollToCol was commanded
|
|
596
|
-
iScrollToCol = 0;
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
} else if (iNavDy !== 0) {
|
|
600
|
-
if (iNavDy > 0) {
|
|
601
|
-
// moving down
|
|
602
|
-
iNewFocusRow = Math.min(oCurrentCell.getTableRow() + oCurrentCell.getRowSpan() + iNavDy - 1,
|
|
603
|
-
iMaxRow);
|
|
604
|
-
} else if (iNavDy < 0) {
|
|
605
|
-
iNewFocusRow = Math.max(oCurrentCell.getTableRow() + iNavDy, iMinRow);
|
|
606
|
-
}
|
|
607
|
-
oNewCell = oCrosstab.getTableCellWithSpans(iNewFocusRow, iNewFocusCol);
|
|
608
|
-
if (oNewCell.isLoading()) {
|
|
609
|
-
return;
|
|
610
|
-
}
|
|
611
|
-
// vertical movement will handle the same as a click -> position to top of cell
|
|
612
|
-
iNewFocusRow = oNewCell.getTableRow();
|
|
613
|
-
// handle as user selection
|
|
614
|
-
bUserSelected = true;
|
|
615
|
-
}
|
|
616
|
-
// set the actual values only if we come here.
|
|
617
|
-
// may bail out before due to loading cells present
|
|
618
|
-
iFocusRow = iNewFocusRow;
|
|
619
|
-
iFocusCol = iNewFocusCol;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
if (oNewCell) {
|
|
623
|
-
// scrolling due to wrap events in horizontal scrolling
|
|
624
|
-
if (iScrollToRow >= 0) {
|
|
625
|
-
oCrosstab.scrollVertical(iScrollToRow);
|
|
626
|
-
}
|
|
627
|
-
if (iScrollToCol >= 0) {
|
|
628
|
-
oCrosstab.scrollHorizontal(iScrollToCol);
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
this.scrollCellIntoFocus(oNewCell, bUserSelected, bNewLine, oCurrentCell);
|
|
632
|
-
this.navigateToCellAction(oNewCell, -1, -1);
|
|
633
|
-
}
|
|
634
|
-
};
|
|
635
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
* (c) Copyright 2009-2024 SAP SE. All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Initialization Code and shared classes of library sap.zen.crosstab.
|
|
8
|
-
*/
|
|
9
|
-
sap.ui.define([
|
|
10
|
-
"sap/ui/core/Core", // sap.ui.getCore()
|
|
11
|
-
"sap/ui/core/library" // library dependency
|
|
12
|
-
], function() {
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Design Studio Crosstab library. NOT INTENDED FOR STANDALONE USAGE.
|
|
16
|
-
*
|
|
17
|
-
* @namespace
|
|
18
|
-
* @name sap.zen.crosstab
|
|
19
|
-
* @public
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
// delegate further initialization of this library to the Core
|
|
23
|
-
sap.ui.getCore().initLibrary({
|
|
24
|
-
name : "sap.zen.crosstab",
|
|
25
|
-
dependencies : ["sap.ui.core"],
|
|
26
|
-
types: [],
|
|
27
|
-
interfaces: [],
|
|
28
|
-
controls: [
|
|
29
|
-
"sap.zen.crosstab.Crosstab",
|
|
30
|
-
"sap.zen.crosstab.DataCell",
|
|
31
|
-
"sap.zen.crosstab.HeaderCell"
|
|
32
|
-
],
|
|
33
|
-
elements: [],
|
|
34
|
-
version: "1.84.33"
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
return sap.zen.crosstab;
|
|
38
|
-
});
|