@progress/telerik-jquery-report-viewer 21.24.305 → 22.24.514

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