@progress/telerik-jquery-report-viewer 21.24.130 → 22.24.514
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/README.md +1 -1
- package/dist/cjs/accessibility.js +218 -0
- package/dist/cjs/binder.js +172 -0
- package/dist/cjs/command.js +32 -0
- package/dist/cjs/commandSet.js +167 -0
- package/dist/cjs/controller.js +1207 -0
- package/dist/cjs/documentMapArea.js +168 -0
- package/dist/cjs/domUtils.js +50 -0
- package/dist/cjs/enums.js +52 -0
- package/dist/cjs/event-emitter.js +17 -0
- package/dist/cjs/events.js +23 -0
- package/dist/cjs/globalSettings.js +9 -0
- package/dist/cjs/history.js +131 -0
- package/dist/cjs/index.js +58 -0
- package/dist/cjs/jqueryThrottleDebounce.js +48 -0
- package/dist/cjs/kendo-jquery.js +4 -0
- package/dist/cjs/mainMenu.js +332 -0
- package/dist/cjs/mem-storage.js +44 -0
- package/dist/cjs/pagesArea.js +641 -0
- package/dist/cjs/parameterValidators.js +167 -0
- package/dist/cjs/parameters.js +921 -0
- package/dist/cjs/parametersArea.js +502 -0
- package/dist/cjs/perspectives.js +138 -0
- package/dist/cjs/print.js +166 -0
- package/dist/cjs/report-viewer/report-viewer-settings.js +138 -0
- package/dist/cjs/reportViewer.js +654 -0
- package/dist/cjs/scroll.js +537 -0
- package/dist/cjs/search.js +634 -0
- package/dist/cjs/sendEmail.js +435 -0
- package/dist/cjs/service-client-sentinel.js +52 -0
- package/dist/cjs/serviceClient.js +405 -0
- package/dist/cjs/sideMenu.js +225 -0
- package/dist/cjs/sr.js +164 -0
- package/dist/cjs/stringResources.js +11 -0
- package/dist/cjs/telerikReportViewer.kendo.js +60196 -0
- package/dist/cjs/telerikReportViewer.kendo.min.js +19776 -0
- package/dist/cjs/template-cache.js +39 -0
- package/dist/cjs/touch.js +86 -0
- package/dist/cjs/uiController.js +142 -0
- package/dist/cjs/uiFreezeCoordinator.js +281 -0
- package/dist/cjs/utils.js +492 -0
- package/dist/es/accessibility.js +214 -0
- package/dist/es/binder.js +168 -0
- package/dist/es/command.js +28 -0
- package/dist/es/commandSet.js +163 -0
- package/dist/es/controller.js +1203 -0
- package/dist/es/documentMapArea.js +164 -0
- package/dist/es/domUtils.js +43 -0
- package/dist/es/enums.js +41 -0
- package/dist/es/event-emitter.js +13 -0
- package/dist/es/events.js +19 -0
- package/dist/es/globalSettings.js +5 -0
- package/dist/es/history.js +127 -0
- package/dist/es/index.js +24 -0
- package/dist/es/jqueryThrottleDebounce.js +46 -0
- package/dist/es/kendo-jquery.js +1 -0
- package/dist/es/mainMenu.js +328 -0
- package/dist/es/mem-storage.js +40 -0
- package/dist/es/pagesArea.js +637 -0
- package/dist/es/parameterValidators.js +163 -0
- package/dist/es/parameters.js +916 -0
- package/dist/es/parametersArea.js +498 -0
- package/dist/es/perspectives.js +134 -0
- package/dist/es/print.js +162 -0
- package/dist/es/report-viewer/report-viewer-settings.js +134 -0
- package/dist/es/reportViewer.js +650 -0
- package/dist/es/scroll.js +533 -0
- package/dist/es/search.js +630 -0
- package/dist/es/sendEmail.js +431 -0
- package/dist/es/service-client-sentinel.js +48 -0
- package/dist/es/serviceClient.js +401 -0
- package/dist/es/sideMenu.js +221 -0
- package/dist/es/sr.js +162 -0
- package/dist/es/stringResources.js +7 -0
- package/dist/es/telerikReportViewer.kendo.js +60194 -0
- package/dist/es/telerikReportViewer.kendo.min.js +19774 -0
- package/dist/es/template-cache.js +35 -0
- package/dist/es/touch.js +82 -0
- package/dist/es/uiController.js +138 -0
- package/dist/es/uiFreezeCoordinator.js +277 -0
- package/dist/es/utils.js +447 -0
- package/dist/font/font-icons.css +4 -4
- package/dist/font/font-icons.min.css +3 -3
- package/dist/js/telerikReportViewer.js +8574 -8249
- package/dist/js/telerikReportViewer.min.js +1 -17
- package/dist/js/telerikReportViewer.stringResources.js +166 -173
- package/dist/styles/telerikReportViewer.css +1 -1
- package/dist/styles/telerikReportViewer.min.css +1 -1
- package/dist/templates/telerikReportViewerTemplate-FA.html +3 -3
- package/dist/templates/telerikReportViewerTemplate.html +3 -3
- package/package.json +13 -7
- /package/dist/font/{ReportingIcons-18.0.24.130.ttf → ReportingIcons-18.1.24.514.ttf} +0 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
5
|
+
var utils = require('./utils.js');
|
6
|
+
|
7
|
+
const TemplateCache = function() {
|
8
|
+
var cache = {};
|
9
|
+
return {
|
10
|
+
load: function(url, serviceUrl, client) {
|
11
|
+
var p = cache[url];
|
12
|
+
if (!p) {
|
13
|
+
cache[url] = p = client.get(url).then(function(html) {
|
14
|
+
var templates = {};
|
15
|
+
var styleSheets = [];
|
16
|
+
var baseUri = utils.rTrim(serviceUrl, "\\/") + "/";
|
17
|
+
html = utils.replaceAll(html, "{service}/", baseUri);
|
18
|
+
html = utils.replaceAll(html, "{service}", baseUri);
|
19
|
+
var viewerTemplate = $("<div></div>").html(html);
|
20
|
+
utils.each(viewerTemplate.find("template"), function(index, e) {
|
21
|
+
var $e = $(e);
|
22
|
+
templates[$e.attr("id")] = utils.trim($e.html(), "\n ");
|
23
|
+
});
|
24
|
+
utils.each(viewerTemplate.find("link"), function(index, e) {
|
25
|
+
styleSheets.push(utils.trim(e.outerHTML, "\n "));
|
26
|
+
});
|
27
|
+
styleSheets = utils.filterUniqueLastOccurance(styleSheets);
|
28
|
+
return {
|
29
|
+
templates,
|
30
|
+
styleSheets
|
31
|
+
};
|
32
|
+
});
|
33
|
+
}
|
34
|
+
return p;
|
35
|
+
}
|
36
|
+
};
|
37
|
+
}();
|
38
|
+
|
39
|
+
exports.TemplateCache = TemplateCache;
|
@@ -0,0 +1,86 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
5
|
+
function TouchBehavior(dom, options) {
|
6
|
+
var startDistance;
|
7
|
+
var ignoreTouch;
|
8
|
+
init(dom);
|
9
|
+
function init(element) {
|
10
|
+
if (typeof $.fn.kendoTouch === "function") {
|
11
|
+
try {
|
12
|
+
$(element).mousedown(function() {
|
13
|
+
ignoreTouch = true;
|
14
|
+
}).mouseup(function() {
|
15
|
+
ignoreTouch = false;
|
16
|
+
}).kendoTouch({
|
17
|
+
multiTouch: true,
|
18
|
+
enableSwipe: true,
|
19
|
+
swipe: function(e) {
|
20
|
+
if (!ignoreTouch) {
|
21
|
+
onSwipe(e);
|
22
|
+
}
|
23
|
+
},
|
24
|
+
gesturestart: function(e) {
|
25
|
+
if (!ignoreTouch) {
|
26
|
+
onGestureStart(e);
|
27
|
+
}
|
28
|
+
},
|
29
|
+
gestureend: function(e) {
|
30
|
+
if (!ignoreTouch) {
|
31
|
+
onGestureEnd(e);
|
32
|
+
}
|
33
|
+
},
|
34
|
+
gesturechange: function(e) {
|
35
|
+
if (!ignoreTouch) {
|
36
|
+
onGestureChange(e);
|
37
|
+
}
|
38
|
+
},
|
39
|
+
doubletap: function(e) {
|
40
|
+
if (!ignoreTouch) {
|
41
|
+
onDoubleTap(e);
|
42
|
+
}
|
43
|
+
},
|
44
|
+
touchstart: function(e) {
|
45
|
+
if (!ignoreTouch) {
|
46
|
+
fire("touchstart");
|
47
|
+
}
|
48
|
+
}
|
49
|
+
});
|
50
|
+
} catch (e) {
|
51
|
+
console.error("Instantiation of Kendo Touch threw an exception", e);
|
52
|
+
throw e;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
function onDoubleTap(e) {
|
57
|
+
fire("doubletap", e);
|
58
|
+
}
|
59
|
+
function onGestureStart(e) {
|
60
|
+
startDistance = kendo.touchDelta(e.touches[0], e.touches[1]).distance;
|
61
|
+
}
|
62
|
+
function onGestureEnd(e) {
|
63
|
+
}
|
64
|
+
function onGestureChange(e) {
|
65
|
+
var current = kendo.touchDelta(e.touches[0], e.touches[1]).distance;
|
66
|
+
onPinch({
|
67
|
+
distance: current,
|
68
|
+
lastDistance: startDistance
|
69
|
+
});
|
70
|
+
startDistance = current;
|
71
|
+
}
|
72
|
+
function onSwipe(e) {
|
73
|
+
fire("swipe", e);
|
74
|
+
}
|
75
|
+
function onPinch(e) {
|
76
|
+
fire("pinch", e);
|
77
|
+
}
|
78
|
+
function fire(func, args) {
|
79
|
+
var handler = options[func];
|
80
|
+
if (typeof handler === "function") {
|
81
|
+
handler(args);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
exports.TouchBehavior = TouchBehavior;
|
@@ -0,0 +1,142 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
5
|
+
var enums = require('./enums.js');
|
6
|
+
|
7
|
+
function UIController(options) {
|
8
|
+
var stateFlags = {
|
9
|
+
ExportInProgress: 1 << 0,
|
10
|
+
PrintInProgress: 1 << 1,
|
11
|
+
RenderInProgress: 1 << 2
|
12
|
+
};
|
13
|
+
function getState(flags) {
|
14
|
+
return (state & flags) != 0;
|
15
|
+
}
|
16
|
+
function setState(flags, value) {
|
17
|
+
if (value) {
|
18
|
+
state |= flags;
|
19
|
+
} else {
|
20
|
+
state &= ~flags;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
var controller = options.controller;
|
24
|
+
var historyManager = options.history;
|
25
|
+
var state = 0;
|
26
|
+
var refreshUI;
|
27
|
+
var commands = options.commands;
|
28
|
+
if (!controller) {
|
29
|
+
throw "No controller (telerikReporting.ReportViewerController) has been specified.";
|
30
|
+
}
|
31
|
+
function getDocumentMapState() {
|
32
|
+
var args = {};
|
33
|
+
controller.getDocumentMapState(args);
|
34
|
+
return args;
|
35
|
+
}
|
36
|
+
function getParametersAreaState() {
|
37
|
+
var args = {};
|
38
|
+
controller.getParametersAreaState(args);
|
39
|
+
return args;
|
40
|
+
}
|
41
|
+
function getSearchDialogState() {
|
42
|
+
var args = {};
|
43
|
+
controller.getSearchDialogState(args);
|
44
|
+
return args;
|
45
|
+
}
|
46
|
+
function getSendEmailDialogState() {
|
47
|
+
var args = {};
|
48
|
+
controller.getSendEmailDialogState(args);
|
49
|
+
return args;
|
50
|
+
}
|
51
|
+
function updateUI() {
|
52
|
+
if (!refreshUI) {
|
53
|
+
refreshUI = true;
|
54
|
+
window.setTimeout(function() {
|
55
|
+
try {
|
56
|
+
updateUICore();
|
57
|
+
} finally {
|
58
|
+
refreshUI = false;
|
59
|
+
}
|
60
|
+
}, 10);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
function updateUICore() {
|
64
|
+
var rs = controller.getReportSource();
|
65
|
+
var pageCount = controller.getPageCount();
|
66
|
+
var currentPageNumber = controller.getCurrentPageNumber();
|
67
|
+
var hasReport = rs && rs.report;
|
68
|
+
var hasPages = hasReport && pageCount > 0;
|
69
|
+
var nextPage = hasPages && currentPageNumber < pageCount;
|
70
|
+
var prevPage = hasPages && currentPageNumber > 1;
|
71
|
+
var hasPage = hasPages && currentPageNumber;
|
72
|
+
var documentMapState = getDocumentMapState();
|
73
|
+
var parametersAreaState = getParametersAreaState();
|
74
|
+
var searchDialogState = getSearchDialogState();
|
75
|
+
var sendEmailDialogState = getSendEmailDialogState();
|
76
|
+
var renderInProgress = getState(stateFlags.RenderInProgress);
|
77
|
+
var printInProgress = getState(stateFlags.PrintInProgress);
|
78
|
+
var exportInProgress = getState(stateFlags.ExportInProgress);
|
79
|
+
commands.goToFirstPage.enabled(prevPage);
|
80
|
+
commands.goToPrevPage.enabled(prevPage);
|
81
|
+
commands.stopRendering.enabled(hasReport && renderInProgress);
|
82
|
+
commands.goToLastPage.enabled(nextPage);
|
83
|
+
commands.goToNextPage.enabled(nextPage);
|
84
|
+
commands.goToPage.enabled(hasPages);
|
85
|
+
commands.print.enabled(hasPages && !renderInProgress && !printInProgress);
|
86
|
+
commands.export.enabled(hasPages && !renderInProgress && !exportInProgress);
|
87
|
+
commands.refresh.enabled(hasReport);
|
88
|
+
commands.historyBack.enabled(historyManager && historyManager.canMoveBack());
|
89
|
+
commands.historyForward.enabled(historyManager && historyManager.canMoveForward());
|
90
|
+
commands.toggleDocumentMap.enabled(hasReport && documentMapState.enabled).checked(documentMapState.enabled && documentMapState.visible);
|
91
|
+
commands.toggleParametersArea.enabled(hasReport && parametersAreaState.enabled).checked(parametersAreaState.enabled && parametersAreaState.visible);
|
92
|
+
commands.togglePrintPreview.enabled(hasPages).checked(controller.getViewMode() == enums.ViewModes.PRINT_PREVIEW);
|
93
|
+
commands.pageMode.enabled(hasPages).checked(controller.getPageMode() == enums.PageModes.CONTINUOUS_SCROLL);
|
94
|
+
commands.zoom.enabled(hasPage);
|
95
|
+
commands.zoomIn.enabled(hasPage);
|
96
|
+
commands.zoomOut.enabled(hasPage);
|
97
|
+
commands.toggleZoomMode.enabled(hasPage).checked(controller.getScaleMode() == enums.ScaleModes.FIT_PAGE || controller.getScaleMode() == enums.ScaleModes.FIT_PAGE_WIDTH);
|
98
|
+
commands.toggleSearchDialog.enabled(hasPages).checked(searchDialogState.visible);
|
99
|
+
commands.toggleSendEmailDialog.enabled(hasPages).checked(sendEmailDialogState.visible);
|
100
|
+
controller.updateUI(null);
|
101
|
+
controller.pageNumberChange(currentPageNumber);
|
102
|
+
controller.pageCountChange(pageCount);
|
103
|
+
}
|
104
|
+
controller.setParametersAreaVisible(updateUI);
|
105
|
+
controller.setDocumentMapVisible(updateUI);
|
106
|
+
controller.updateUIInternal(updateUI);
|
107
|
+
controller.setSearchDialogVisible(updateUI);
|
108
|
+
controller.setSendEmailDialogVisible(updateUI);
|
109
|
+
controller.scaleModeChanged(updateUI);
|
110
|
+
controller.currentPageChanged(updateUI);
|
111
|
+
controller.beforeLoadReport(function() {
|
112
|
+
setState(stateFlags.RenderInProgress, true);
|
113
|
+
updateUI();
|
114
|
+
});
|
115
|
+
controller.reportLoadProgress(updateUI);
|
116
|
+
controller.reportLoadComplete(function() {
|
117
|
+
setState(stateFlags.RenderInProgress, false);
|
118
|
+
updateUI();
|
119
|
+
});
|
120
|
+
controller.reportSourceChanged(updateUI);
|
121
|
+
controller.viewModeChanged(updateUI);
|
122
|
+
controller.pageModeChanged(function() {
|
123
|
+
updateUI();
|
124
|
+
});
|
125
|
+
controller.setUIState(function(event, args) {
|
126
|
+
setState(stateFlags[args.operationName], args.inProgress);
|
127
|
+
updateUI();
|
128
|
+
});
|
129
|
+
controller.error(function() {
|
130
|
+
setState(stateFlags.ExportInProgress, false);
|
131
|
+
setState(stateFlags.PrintInProgress, false);
|
132
|
+
setState(stateFlags.RenderInProgress, false);
|
133
|
+
updateUI();
|
134
|
+
});
|
135
|
+
controller.renderingStopped(function() {
|
136
|
+
setState(stateFlags.RenderInProgress, false);
|
137
|
+
updateUI();
|
138
|
+
});
|
139
|
+
updateUI();
|
140
|
+
}
|
141
|
+
|
142
|
+
exports.UIController = UIController;
|
@@ -0,0 +1,281 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
5
|
+
var utils = require('./utils.js');
|
6
|
+
|
7
|
+
var UIFreezeCoordinator = {
|
8
|
+
$placeholder: null,
|
9
|
+
$scrollableContainer: null,
|
10
|
+
itemsInitialState: {},
|
11
|
+
// Holds all items initial position per container
|
12
|
+
xFrozenAreasBounds: {},
|
13
|
+
//Holds the bounds of the frozen areas by X per container
|
14
|
+
yFrozenAreasBounds: {},
|
15
|
+
//Holds the bounds of the frozen areas by Y per container
|
16
|
+
freezeMaxZIndex: {},
|
17
|
+
zIndex: 1,
|
18
|
+
freezeBGColor: {},
|
19
|
+
// Holds default background-color value per container
|
20
|
+
currentlyfreezedContainer: {
|
21
|
+
vertical: {},
|
22
|
+
horizontal: {}
|
23
|
+
},
|
24
|
+
//Holds whether freezing has been applied per container.
|
25
|
+
isInitialize: false,
|
26
|
+
scaleFactor: null,
|
27
|
+
/**
|
28
|
+
* Initialize the uiFreezeCoordinator object
|
29
|
+
* Takes one parameter
|
30
|
+
* - $placeholder - PageArea jQuery DOM element
|
31
|
+
*/
|
32
|
+
init: function($placeholder) {
|
33
|
+
this.$placeholder = $placeholder;
|
34
|
+
this.$scrollableContainer = $placeholder.find(".trv-page-container");
|
35
|
+
if (this.isInitialize) {
|
36
|
+
this.reset($placeholder);
|
37
|
+
}
|
38
|
+
this._attachToScrollEvent();
|
39
|
+
this.isInitialize = true;
|
40
|
+
},
|
41
|
+
reset: function($placeholder) {
|
42
|
+
this.$placeholder = $placeholder;
|
43
|
+
this.$scrollableContainer = $placeholder.find(".trv-page-container");
|
44
|
+
this.itemsInitialState = {};
|
45
|
+
this.xFrozenAreasBounds = {};
|
46
|
+
this.yFrozenAreasBounds = {};
|
47
|
+
this.currentlyfreezedContainer = {
|
48
|
+
vertical: {},
|
49
|
+
horizontal: {}
|
50
|
+
};
|
51
|
+
},
|
52
|
+
setScaleFactor: function(scale) {
|
53
|
+
this.scaleFactor = scale;
|
54
|
+
},
|
55
|
+
/**
|
56
|
+
* Initializing scroll listener
|
57
|
+
*/
|
58
|
+
_attachToScrollEvent: function() {
|
59
|
+
var thisInstance = this;
|
60
|
+
this.$scrollableContainer.scroll(function updateFreezeUIOnScroll() {
|
61
|
+
var $freezeItems = thisInstance.$scrollableContainer.find("div[data-sticky-id]");
|
62
|
+
if ($freezeItems.length) {
|
63
|
+
var tableIDs = $freezeItems.map(function(index2, $element) {
|
64
|
+
return $($element).attr("data-sticky-id");
|
65
|
+
}).get();
|
66
|
+
var uniqueIDs = tableIDs.filter(function(item, index2) {
|
67
|
+
return index2 === tableIDs.indexOf(item);
|
68
|
+
});
|
69
|
+
var scrollableContainerScrollTop = thisInstance.$scrollableContainer.scrollTop();
|
70
|
+
var scrollableContainerScrollLeft = thisInstance.$scrollableContainer.scrollLeft();
|
71
|
+
for (var index = 0; index < uniqueIDs.length; index++) {
|
72
|
+
var freezeItemsContainerID = uniqueIDs[index];
|
73
|
+
if (!thisInstance.itemsInitialState[freezeItemsContainerID]) {
|
74
|
+
thisInstance._saveFreezeItemsInitialState(freezeItemsContainerID);
|
75
|
+
}
|
76
|
+
thisInstance._updateFreezeItemsOnScroll(
|
77
|
+
freezeItemsContainerID,
|
78
|
+
scrollableContainerScrollTop,
|
79
|
+
scrollableContainerScrollLeft
|
80
|
+
);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
});
|
84
|
+
},
|
85
|
+
_saveFreezeItemsInitialState: function(freezeItemsContainerID) {
|
86
|
+
var $allFreezeItems = $("[data-sticky-direction][data-sticky-id='" + freezeItemsContainerID + "']");
|
87
|
+
var $freezeActions = $("[data-reporting-action][data-sticky-id='" + freezeItemsContainerID + "']");
|
88
|
+
var yAreaBounds;
|
89
|
+
var xAreaBounds;
|
90
|
+
this.itemsInitialState[freezeItemsContainerID] = {};
|
91
|
+
this.freezeBGColor[freezeItemsContainerID] = $("[data-id='" + freezeItemsContainerID + "']").attr("data-sticky-bg-color");
|
92
|
+
for (var index = 0; index < $allFreezeItems.length; index++) {
|
93
|
+
var $item = $($allFreezeItems[index]);
|
94
|
+
var scrollDirection = $item.attr("data-sticky-direction");
|
95
|
+
var itemID = $item.attr("data-id");
|
96
|
+
var itemPosition = $item.position();
|
97
|
+
var scaledItemPosition = { top: itemPosition.top / this.scaleFactor, left: itemPosition.left / this.scaleFactor };
|
98
|
+
var itemBounds = utils.rectangle(scaledItemPosition.left, scaledItemPosition.top, $item.outerWidth(true) * this.scaleFactor, $item.outerHeight(true) * this.scaleFactor);
|
99
|
+
switch (scrollDirection) {
|
100
|
+
case "Vertical":
|
101
|
+
yAreaBounds = yAreaBounds ? yAreaBounds.union(itemBounds) : itemBounds;
|
102
|
+
break;
|
103
|
+
case "Horizontal":
|
104
|
+
xAreaBounds = xAreaBounds ? xAreaBounds.union(itemBounds) : itemBounds;
|
105
|
+
break;
|
106
|
+
}
|
107
|
+
this._saveFreezeItemInitialState(freezeItemsContainerID, $item, itemID, scaledItemPosition);
|
108
|
+
}
|
109
|
+
this.freezeMaxZIndex[freezeItemsContainerID] = $freezeActions.length ? $freezeActions.css("zIndex") : this.zIndex;
|
110
|
+
this.yFrozenAreasBounds[freezeItemsContainerID] = yAreaBounds;
|
111
|
+
this.xFrozenAreasBounds[freezeItemsContainerID] = xAreaBounds;
|
112
|
+
},
|
113
|
+
/**
|
114
|
+
* Save the freeze UI item initial position based on the wrapper element and current page
|
115
|
+
* - freezeItemsContainerID - string. A parent/wrapper element identifier
|
116
|
+
* - $item - JQuery DOM element of the freezed item
|
117
|
+
* - itemID - string. A ID of the freeze UI item
|
118
|
+
* - position - object. Contains the top and left values
|
119
|
+
*/
|
120
|
+
_saveFreezeItemInitialState: function(freezeItemsContainerID, $item, itemID, position) {
|
121
|
+
var itemBgColor = $item.css("background-color");
|
122
|
+
var hasInitialBgColor = this._hasSetBgColor(itemBgColor);
|
123
|
+
var itemState = {
|
124
|
+
top: position.top,
|
125
|
+
left: position.left,
|
126
|
+
zIndex: $item.css("zIndex"),
|
127
|
+
hasBgColor: hasInitialBgColor
|
128
|
+
};
|
129
|
+
this.itemsInitialState[freezeItemsContainerID][itemID] = itemState;
|
130
|
+
},
|
131
|
+
_updateFreezeItemsOnScroll: function(freezeItemsContainerID, scrollableContainerScrollTop, scrollableContainerScrollLeft) {
|
132
|
+
var $elementWrapper = $("div[data-id='" + freezeItemsContainerID + "']");
|
133
|
+
if (this._isInScrollVisibleArea($elementWrapper)) {
|
134
|
+
var $pageContainer = $elementWrapper.closest(".trv-report-page");
|
135
|
+
var pageContainerPosition = $pageContainer.position();
|
136
|
+
var pageContainerMargin = parseFloat($pageContainer.css("margin-top"));
|
137
|
+
var pageContainerTopOffset = parseFloat($pageContainer.css("padding-top"));
|
138
|
+
var pageContainerLeftOffset = parseFloat($pageContainer.css("padding-left"));
|
139
|
+
var pageContainerBorderTopWidth = parseFloat($pageContainer.css("border-top-width"));
|
140
|
+
var pageContainerBorderLeftWidth = parseFloat($pageContainer.css("border-left-width"));
|
141
|
+
var $rowHeaders = $("[data-sticky-direction*='Horizontal'][data-sticky-id='" + freezeItemsContainerID + "']");
|
142
|
+
var $colHeaders = $("[data-sticky-direction*='Vertical'][data-sticky-id='" + freezeItemsContainerID + "']");
|
143
|
+
var hasFixRow = $rowHeaders.length > 0;
|
144
|
+
var hasFixColumn = $colHeaders.length > 0;
|
145
|
+
var elementWrapperPosition = $elementWrapper.position();
|
146
|
+
var elementWrapperTopPosition = elementWrapperPosition.top + pageContainerPosition.top + pageContainerMargin + pageContainerTopOffset + pageContainerBorderTopWidth;
|
147
|
+
var elementWrapperLeftPosition = elementWrapperPosition.left + pageContainerLeftOffset + pageContainerBorderLeftWidth;
|
148
|
+
var verticalMoveOffset = scrollableContainerScrollTop - elementWrapperTopPosition;
|
149
|
+
var horizontalMoveOffset = scrollableContainerScrollLeft - elementWrapperLeftPosition;
|
150
|
+
if (hasFixColumn && verticalMoveOffset > 0) {
|
151
|
+
if (scrollableContainerScrollTop <= $elementWrapper.outerHeight() * this.scaleFactor + elementWrapperTopPosition - this.yFrozenAreasBounds[freezeItemsContainerID].height) {
|
152
|
+
this.currentlyfreezedContainer.vertical[freezeItemsContainerID] = true;
|
153
|
+
this._updateUIElementsPosition($colHeaders, "top", verticalMoveOffset / this.scaleFactor, freezeItemsContainerID);
|
154
|
+
}
|
155
|
+
} else {
|
156
|
+
if (this.currentlyfreezedContainer.vertical[freezeItemsContainerID]) {
|
157
|
+
delete this.currentlyfreezedContainer.vertical[freezeItemsContainerID];
|
158
|
+
this._updateUIElementsPosition($colHeaders, "top", -1, freezeItemsContainerID);
|
159
|
+
}
|
160
|
+
}
|
161
|
+
if (hasFixRow && horizontalMoveOffset > 0) {
|
162
|
+
if (scrollableContainerScrollLeft <= $elementWrapper.outerWidth() * this.scaleFactor + elementWrapperLeftPosition - this.xFrozenAreasBounds[freezeItemsContainerID].width) {
|
163
|
+
this.currentlyfreezedContainer.horizontal[freezeItemsContainerID] = true;
|
164
|
+
this._updateUIElementsPosition($rowHeaders, "left", horizontalMoveOffset / this.scaleFactor, freezeItemsContainerID);
|
165
|
+
}
|
166
|
+
} else {
|
167
|
+
if (this.currentlyfreezedContainer.horizontal[freezeItemsContainerID]) {
|
168
|
+
delete this.currentlyfreezedContainer.horizontal[freezeItemsContainerID];
|
169
|
+
this._updateUIElementsPosition($rowHeaders, "left", -1, freezeItemsContainerID);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
} else {
|
173
|
+
if (this.currentlyfreezedContainer.horizontal[freezeItemsContainerID] || this.currentlyfreezedContainer.vertical[freezeItemsContainerID]) {
|
174
|
+
this._resetToDefaultPosition(freezeItemsContainerID);
|
175
|
+
}
|
176
|
+
}
|
177
|
+
},
|
178
|
+
/**
|
179
|
+
* Move all freeze items to their initial position
|
180
|
+
* Takes one parameters
|
181
|
+
* - freezeItemsContainerID - string. A parent/wrapper element identifier
|
182
|
+
*/
|
183
|
+
_resetToDefaultPosition: function(freezeItemsContainerID) {
|
184
|
+
var $rowHeaders = $("[data-sticky-direction*='Horizontal'][data-sticky-id='" + freezeItemsContainerID + "']");
|
185
|
+
var $colHeaders = $("[data-sticky-direction*='Vertical'][data-sticky-id='" + freezeItemsContainerID + "']");
|
186
|
+
this._updateUIElementsPosition($colHeaders, "top", -1, freezeItemsContainerID);
|
187
|
+
this._updateUIElementsPosition($rowHeaders, "left", -1, freezeItemsContainerID);
|
188
|
+
delete this.currentlyfreezedContainer.horizontal[freezeItemsContainerID];
|
189
|
+
delete this.currentlyfreezedContainer.vertical[freezeItemsContainerID];
|
190
|
+
},
|
191
|
+
/**
|
192
|
+
* Update the freeze elements position
|
193
|
+
* Takes four parameters
|
194
|
+
* - targetElements -Array. Collection of DOM element, that has a freeze attribute
|
195
|
+
* - position - string. Indicates which position property to be updated - top or left
|
196
|
+
* - offset - integer. The value of the increase that should be applied.
|
197
|
+
* If it is negative number, should not move the items and it should set their initial position
|
198
|
+
* - freezeItemsContainerID - string. A parent/wrapper element identifier
|
199
|
+
*/
|
200
|
+
_updateUIElementsPosition: function(targetElements, position, offset, freezeItemsContainerID) {
|
201
|
+
for (var index = 0; index < targetElements.length; index++) {
|
202
|
+
var $item = $(targetElements[index]);
|
203
|
+
var itemFreezeDirection = $item.attr("data-sticky-direction");
|
204
|
+
var isFrozenBothDirection = itemFreezeDirection.indexOf(",") > 0;
|
205
|
+
var itemID = $item.attr("data-id");
|
206
|
+
var itemInitialState = this.itemsInitialState[freezeItemsContainerID][itemID];
|
207
|
+
var itemNewPostion = itemInitialState[position];
|
208
|
+
var initialZIndex = itemInitialState["zIndex"];
|
209
|
+
var hasInitialBgColor = itemInitialState["hasBgColor"];
|
210
|
+
var zIndexValue = 1;
|
211
|
+
var maxZIndex = this.freezeMaxZIndex[freezeItemsContainerID] ? this.freezeMaxZIndex[freezeItemsContainerID] : zIndexValue;
|
212
|
+
if (isFrozenBothDirection) {
|
213
|
+
zIndexValue = initialZIndex !== "auto" ? initialZIndex : maxZIndex + 2;
|
214
|
+
} else {
|
215
|
+
zIndexValue = initialZIndex !== "auto" ? initialZIndex + 1 : maxZIndex;
|
216
|
+
}
|
217
|
+
var newStyleRules = {
|
218
|
+
"z-index": zIndexValue
|
219
|
+
};
|
220
|
+
if (offset >= 0) {
|
221
|
+
itemNewPostion = itemNewPostion + offset;
|
222
|
+
} else {
|
223
|
+
newStyleRules["z-index"] = initialZIndex;
|
224
|
+
}
|
225
|
+
if (!hasInitialBgColor) {
|
226
|
+
this._applyBgColorOnScroll($item, isFrozenBothDirection, hasInitialBgColor, offset >= 0, freezeItemsContainerID);
|
227
|
+
}
|
228
|
+
newStyleRules[position] = itemNewPostion + "px";
|
229
|
+
$item.css(newStyleRules);
|
230
|
+
}
|
231
|
+
},
|
232
|
+
_applyBgColorOnScroll: function($item, isItemFrozenBothDirection, hasInitialBgColor, shouldApplyBGColor, freezeItemsContainerID) {
|
233
|
+
if ($item.is("img")) {
|
234
|
+
return true;
|
235
|
+
}
|
236
|
+
if (isItemFrozenBothDirection && this._isFrozen(freezeItemsContainerID) && !hasInitialBgColor) {
|
237
|
+
$item.css("background-color", this.freezeBGColor[freezeItemsContainerID]);
|
238
|
+
return true;
|
239
|
+
}
|
240
|
+
if (shouldApplyBGColor) {
|
241
|
+
$item.css("background-color", this.freezeBGColor[freezeItemsContainerID]);
|
242
|
+
} else {
|
243
|
+
$item.css("background-color", "initial");
|
244
|
+
}
|
245
|
+
},
|
246
|
+
_hasSetBgColor: function(bgColorValue) {
|
247
|
+
return utils.getColorAlphaValue(bgColorValue) > 0;
|
248
|
+
},
|
249
|
+
_isFrozen: function(freezeItemsContainerID) {
|
250
|
+
return this.currentlyfreezedContainer.horizontal[freezeItemsContainerID] || this.currentlyfreezedContainer.vertical[freezeItemsContainerID];
|
251
|
+
},
|
252
|
+
/**
|
253
|
+
* Checks if an UI element is in the visible part of the scrollable container
|
254
|
+
* Takes one parameters
|
255
|
+
* - $element - JQuery DOM element
|
256
|
+
*/
|
257
|
+
_isInScrollVisibleArea: function($element) {
|
258
|
+
var $page = $element.closest(".trv-report-page");
|
259
|
+
var elementPosition = $element.position();
|
260
|
+
return this._isVisibleVertically($element, $page, elementPosition) && this._isVisibleHorizontally($element, $page, elementPosition);
|
261
|
+
},
|
262
|
+
_isVisibleHorizontally: function($element, $page, elementPosition) {
|
263
|
+
var pageLeftOffset = parseFloat($page.css("padding-left"));
|
264
|
+
var scrollableContainerLeftScrollPosition = this.$scrollableContainer.scrollLeft();
|
265
|
+
var scrollableContainerWidth = this.$scrollableContainer.width();
|
266
|
+
var elementWidth = $element.outerWidth(true) * this.scaleFactor;
|
267
|
+
var elementLeftOffset = elementPosition.left + pageLeftOffset;
|
268
|
+
return elementLeftOffset > scrollableContainerLeftScrollPosition - elementWidth && elementLeftOffset < scrollableContainerLeftScrollPosition + elementWidth + scrollableContainerWidth;
|
269
|
+
},
|
270
|
+
_isVisibleVertically: function($element, $page, elementPosition) {
|
271
|
+
var pageTopOffset = parseFloat($page.css("padding-top"));
|
272
|
+
var pagePosition = $page.position();
|
273
|
+
var scrollableContainerTopScrollPosition = this.$scrollableContainer.scrollTop();
|
274
|
+
var scrollableContainerHeight = this.$scrollableContainer.height();
|
275
|
+
var elementHeight = $element.outerHeight(true) * this.scaleFactor;
|
276
|
+
var elementTopOffset = elementPosition.top + pageTopOffset + pagePosition.top;
|
277
|
+
return elementTopOffset > scrollableContainerTopScrollPosition - elementHeight && elementTopOffset < scrollableContainerTopScrollPosition + elementHeight + scrollableContainerHeight;
|
278
|
+
}
|
279
|
+
};
|
280
|
+
|
281
|
+
exports.UIFreezeCoordinator = UIFreezeCoordinator;
|