@ms-atlas-module/datastudio-datafactory 0.1.36

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.

Potentially problematic release.


This version of @ms-atlas-module/datastudio-datafactory might be problematic. Click here for more details.

Files changed (111) hide show
  1. package/_generated/ClientResources.js +1549 -0
  2. package/_generated/Framework.js +97 -0
  3. package/_generated/Svg.js +201 -0
  4. package/bootstrapper/BreadcrumbsKnockoutBinding.js +25 -0
  5. package/bootstrapper/CSS/Callout.css +43 -0
  6. package/bootstrapper/CSS/Common.css +22 -0
  7. package/bootstrapper/CSS/FormFields.css +133 -0
  8. package/bootstrapper/CSS/InlineBlock.css +34 -0
  9. package/bootstrapper/CSS/ParameterGroups.css +77 -0
  10. package/bootstrapper/CSS/Pivot.css +25 -0
  11. package/bootstrapper/CSS/Wizard.css +197 -0
  12. package/bootstrapper/CalloutBinding.js +52 -0
  13. package/bootstrapper/CollapsibleKnockoutBinding.js +70 -0
  14. package/bootstrapper/CopyBinding.js +150 -0
  15. package/bootstrapper/FilterFlyoutKnockoutBinding.js +114 -0
  16. package/bootstrapper/FormFields.js +397 -0
  17. package/bootstrapper/InlineBlockBinding.js +69 -0
  18. package/bootstrapper/JQueryUIBindings.js +152 -0
  19. package/bootstrapper/KnockoutBindings.js +635 -0
  20. package/bootstrapper/LoadingBinding.js +54 -0
  21. package/bootstrapper/MonacoEditorKnockoutBinding.js +67 -0
  22. package/bootstrapper/ParameterGroupsBinding.js +289 -0
  23. package/bootstrapper/PivotKnockoutBinding.js +61 -0
  24. package/bootstrapper/StatusCalendarFlyoutKnockoutBinding.js +398 -0
  25. package/bootstrapper/StatusCalendarKnockoutBinding.js +107 -0
  26. package/bootstrapper/TelemetryKnockoutBinding.js +68 -0
  27. package/bootstrapper/WinJSButtonKnockoutBinding.js +72 -0
  28. package/bootstrapper/WinJSKnockoutBindings.js +49 -0
  29. package/bootstrapper/WizardBinding.js +611 -0
  30. package/bootstrapper/startup.js +29 -0
  31. package/libs/VivaGraphControl/Content/CSS/Graph.css +157 -0
  32. package/libs/VivaGraphControl/Content/CSS/LightTheme.css +699 -0
  33. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Base/Base.TriggerableLifetimeManager.js +190 -0
  34. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Base/Base.js +647 -0
  35. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Base/Image.js +113 -0
  36. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Base/KnockoutExtensions.js +1064 -0
  37. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/DockedBalloon.js +18 -0
  38. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/Animation.js +192 -0
  39. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/Commands/MoveNodes.js +83 -0
  40. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/Geometry.js +167 -0
  41. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/GraphEntityViewModel.js +260 -0
  42. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/GraphViewModel.js +338 -0
  43. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/GraphWidget.Constants.js +178 -0
  44. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/GraphWidget.js +5190 -0
  45. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/MouseCapture.js +148 -0
  46. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Controls/Visualization/Graph/SvgUtils.js +164 -0
  47. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Util/Detection.js +658 -0
  48. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Util/Resize.js +241 -0
  49. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Util/Util.Private.js +236 -0
  50. package/libs/VivaGraphControl/Content/Scripts/Viva.Controls/Util/Util.js +905 -0
  51. package/libs/WinJS/WinJs.min.js +61909 -0
  52. package/libs/WinJS/ui-light.css +8500 -0
  53. package/package.json +15 -0
  54. package/scripts/AppContext.js +262 -0
  55. package/scripts/ExposureControl.js +11 -0
  56. package/scripts/Framework/Model/ActivityWindowCache.js +390 -0
  57. package/scripts/Framework/Model/ArmDataFactoryCache.js +77 -0
  58. package/scripts/Framework/Model/Contracts/Activity.js +83 -0
  59. package/scripts/Framework/Model/Contracts/ActivityWindow.js +185 -0
  60. package/scripts/Framework/Model/Contracts/BaseEncodable.js +106 -0
  61. package/scripts/Framework/Model/Contracts/Common.js +19 -0
  62. package/scripts/Framework/Model/Contracts/DataArtifact.js +100 -0
  63. package/scripts/Framework/Model/Contracts/Diagram.js +9 -0
  64. package/scripts/Framework/Model/Contracts/Encodable.js +113 -0
  65. package/scripts/Framework/Model/Contracts/Gateway.js +98 -0
  66. package/scripts/Framework/Model/Contracts/LinkedService.js +200 -0
  67. package/scripts/Framework/Model/Contracts/Pipeline.js +197 -0
  68. package/scripts/Framework/Model/DataCache.js +105 -0
  69. package/scripts/Framework/Model/DataFactoryCache.js +24 -0
  70. package/scripts/Framework/Model/Filter.js +186 -0
  71. package/scripts/Framework/Model/Helpers/ActivityWindowHelper.js +185 -0
  72. package/scripts/Framework/Model/MonitoringView.js +40 -0
  73. package/scripts/Framework/Shared/Constants.js +27 -0
  74. package/scripts/Framework/Shared/DataConstants.js +61 -0
  75. package/scripts/Framework/Shared/Disposable.js +53 -0
  76. package/scripts/Framework/Shared/IconResources.js +59 -0
  77. package/scripts/Framework/Shared/Resources/IbizaSvgs.js +241 -0
  78. package/scripts/Framework/Shared/TypeDeclarations.js +4 -0
  79. package/scripts/Framework/Telemetry/Telemetry.js +78 -0
  80. package/scripts/Framework/UI/Breadcrumbs.js +84 -0
  81. package/scripts/Framework/UI/Command.js +231 -0
  82. package/scripts/Framework/UI/ContextMenu.js +80 -0
  83. package/scripts/Framework/UI/Loader.js +11 -0
  84. package/scripts/Framework/UI/Menu.js +65 -0
  85. package/scripts/Framework/UI/PanelMessage.js +25 -0
  86. package/scripts/Framework/UI/Refresh.js +70 -0
  87. package/scripts/Framework/UI/Spinner.js +61 -0
  88. package/scripts/Framework/UI/StatusCalendar.js +1070 -0
  89. package/scripts/Framework/UI/Toolbar.js +84 -0
  90. package/scripts/Framework/Util/Datetime.js +258 -0
  91. package/scripts/Framework/Util/Log.js +10 -0
  92. package/scripts/Framework/Util/ResourceIdUtil.js +56 -0
  93. package/scripts/Framework/Util/Security.js +73 -0
  94. package/scripts/Framework/Util/Util.js +332 -0
  95. package/scripts/Framework/Views/HoverFlyout.js +92 -0
  96. package/scripts/Handlers/ErrorHandler.js +176 -0
  97. package/scripts/Handlers/MessageHandler.js +115 -0
  98. package/scripts/Handlers/MonitoringViewHandler.js +199 -0
  99. package/scripts/Handlers/RoutingHandler.js +364 -0
  100. package/scripts/Handlers/WinJSHandlers.js +265 -0
  101. package/scripts/MonitoringViewContext.js +75 -0
  102. package/scripts/Services/AzureInsightsService.js +162 -0
  103. package/scripts/Services/AzureResourceManagerService.js +869 -0
  104. package/scripts/Services/BaseService.js +232 -0
  105. package/scripts/Services/DataFactoryService.js +204 -0
  106. package/scripts/Services/HDInsightArmService.js +59 -0
  107. package/scripts/ViewContext.js +9 -0
  108. package/stylesheets/main.css +1042 -0
  109. package/views/Edit/DateTimeFilterViewModel.js +211 -0
  110. package/views/Edit/FilterViewModel.js +131 -0
  111. package/views/Shared/ProvisioningState.js +11 -0
@@ -0,0 +1,1070 @@
1
+ var __extends =
2
+ (this && this.__extends) ||
3
+ function (d, b) {
4
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
5
+ function __() {
6
+ this.constructor = d;
7
+ }
8
+ d.prototype =
9
+ b === null ? Object.create(b) : ((__.prototype = b.prototype), new __());
10
+ };
11
+ define([
12
+ "require",
13
+ "exports",
14
+ "../Util/Datetime",
15
+ "../Shared/Disposable",
16
+ "./Command",
17
+ "../../../_generated/Svg",
18
+ "./Loader",
19
+ "../Util/Log",
20
+ "../Util/Util",
21
+ "text!./Templates/StatusCalendar.html",
22
+ ], function (
23
+ require,
24
+ exports,
25
+ Datetime,
26
+ Disposable,
27
+ Command,
28
+ Svg,
29
+ Loader,
30
+ Log,
31
+ Util
32
+ ) {
33
+ "use strict";
34
+ var logger = Log.getLogger({
35
+ loggerName: "StatusCalendar",
36
+ });
37
+ var prevDirectionString = "prev";
38
+ var nextDirectionString = "next";
39
+ var genericLayoutTypeString = "Generic";
40
+ var numberOfRowsInMinuteCalendar = 12;
41
+ var numberOfRowsInHourCalendar = 7;
42
+ var numberOfYearsToShowInARow = 3;
43
+ var numberOfRowsInYearCalendar = 4;
44
+ exports.numberOfDatesInGenericCalendar = 10;
45
+ exports.numberOfDatesInGenericRow = 4;
46
+ var numberOfWeeksInARow = 4;
47
+ var numberOfWeeksInCalendar = 10;
48
+ var numberOfMonthsInARow = 3;
49
+ exports.maxNumberOfSlotsInARow = 24;
50
+ exports.maxNumberOfSlotsInACalendar = 24 * 7;
51
+ exports.maxNumberOfSlotsInARowMap = {};
52
+ exports.maxNumberOfSlotsInARowMap[Datetime.TimeUnit.Minute] = 4;
53
+ exports.maxNumberOfSlotsInARowMap[Datetime.TimeUnit.Hour] = 24;
54
+ exports.maxNumberOfSlotsInARowMap[Datetime.TimeUnit.Day] = 7;
55
+ exports.maxNumberOfSlotsInARowMap[Datetime.TimeUnit.Week] = 4;
56
+ exports.maxNumberOfSlotsInARowMap[Datetime.TimeUnit.Month] = 3;
57
+ exports.maxNumberOfSlotsInARowMap[Datetime.TimeUnit.Year] = 4;
58
+ exports.StatusBoxState = {
59
+ success: "success",
60
+ failed: "failed",
61
+ inprogress: "inprogress",
62
+ waiting: "waiting",
63
+ missing: "missing",
64
+ };
65
+ (function (StatusCalendarUpdateResultEnum) {
66
+ StatusCalendarUpdateResultEnum[
67
+ (StatusCalendarUpdateResultEnum["complete"] = 0)
68
+ ] = "complete";
69
+ StatusCalendarUpdateResultEnum[
70
+ (StatusCalendarUpdateResultEnum["aborted"] = 1)
71
+ ] = "aborted";
72
+ StatusCalendarUpdateResultEnum[
73
+ (StatusCalendarUpdateResultEnum["failed"] = 2)
74
+ ] = "failed";
75
+ })(
76
+ exports.StatusCalendarUpdateResultEnum ||
77
+ (exports.StatusCalendarUpdateResultEnum = {})
78
+ );
79
+ var StatusCalendarUpdateResultEnum = exports.StatusCalendarUpdateResultEnum;
80
+ exports.UpdateResultString = {};
81
+ exports.UpdateResultString[StatusCalendarUpdateResultEnum.complete] =
82
+ "complete";
83
+ exports.UpdateResultString[StatusCalendarUpdateResultEnum.aborted] =
84
+ "aborted";
85
+ exports.UpdateResultString[StatusCalendarUpdateResultEnum.failed] = "failed";
86
+ var StatusCalendarPage = (function (_super) {
87
+ __extends(StatusCalendarPage, _super);
88
+ function StatusCalendarPage(lifetimeManager) {
89
+ _super.call(this, lifetimeManager);
90
+ this.statusBoxRows = ko.observableArray([]);
91
+ this.rowLabels = ko.observableArray([]);
92
+ this.colLabels = ko.observableArray([]);
93
+ this.rowSeparatorCount = ko.observable(0);
94
+ this.dateRange = null;
95
+ this.loading = ko.observable(Loader.LoadingState.BlockingUiLoading);
96
+ this.pageHeader = ko.observable();
97
+ }
98
+ StatusCalendarPage.prototype.calculateLabelsAndSeparator = function (
99
+ statusBoxes,
100
+ frequency,
101
+ interval,
102
+ isGeneric
103
+ ) {
104
+ var rowLabels = [];
105
+ var colLabels = [];
106
+ var pageHeader = "";
107
+ this.rowSeparatorCount(0);
108
+ var firstDate = statusBoxes[0][0].date;
109
+ var lastDate =
110
+ statusBoxes[statusBoxes.length - 1][statusBoxes[0].length - 1].date;
111
+ var headerSeparator = "{0} - {1}";
112
+ if (isGeneric) {
113
+ for (var i = 0; i < statusBoxes.length; i++) {
114
+ rowLabels.push(
115
+ Datetime.fullDate.format(statusBoxes[i][0].date.getTime())
116
+ );
117
+ }
118
+ this.rowSeparatorCount(1);
119
+ } else {
120
+ switch (frequency) {
121
+ case Datetime.TimeUnit.Minute:
122
+ for (var i = 0; i < statusBoxes[0].length; i++) {
123
+ colLabels.push(":" + i * interval);
124
+ }
125
+ for (var i = 0; i < statusBoxes.length; i++) {
126
+ rowLabels.push(
127
+ Datetime.shortHour.format(statusBoxes[i][0].date.getTime())
128
+ );
129
+ }
130
+ this.rowSeparatorCount(1);
131
+ pageHeader = getConciseDateRangeLabel(firstDate, lastDate);
132
+ break;
133
+ case Datetime.TimeUnit.Hour:
134
+ var nCols = statusBoxes[0].length;
135
+ var colIncrements = 1;
136
+ for (var i = 6; i >= 1; i--) {
137
+ if (nCols % i === 0) {
138
+ colIncrements = statusBoxes[0].length / i;
139
+ break;
140
+ }
141
+ }
142
+ for (var i = 0; i < nCols; i += colIncrements) {
143
+ var tempUTCHours = (((i * 24) / nCols + 11) % 12) + 1;
144
+ var colLabel = null;
145
+ if (tempUTCHours === 12) {
146
+ colLabel = tempUTCHours.toString() + (i === 0 ? "AM" : "PM");
147
+ } else {
148
+ colLabel = tempUTCHours.toString();
149
+ }
150
+ colLabels.push(colLabel);
151
+ }
152
+ for (var i = 0; i < statusBoxes.length; i += 1) {
153
+ rowLabels.push(
154
+ Datetime.shortDate.format(statusBoxes[i][0].date.getTime())
155
+ );
156
+ }
157
+ this.rowSeparatorCount(1);
158
+ pageHeader = getConciseDateRangeLabel(firstDate, lastDate);
159
+ break;
160
+ case Datetime.TimeUnit.Day:
161
+ statusBoxes.forEach(function (rowStatusBox) {
162
+ rowStatusBox.forEach(function (statusBox) {
163
+ statusBox.boxLabel = statusBox.date.getUTCDate().toString();
164
+ });
165
+ });
166
+ statusBoxes[0].forEach(function (statusBox) {
167
+ colLabels.push(
168
+ Datetime.narowWeekday.format(statusBox.date.getTime())
169
+ );
170
+ });
171
+ pageHeader = Datetime.shortMonthYear.format(
172
+ firstDate.getTime() +
173
+ Datetime.timeUnitToMilliseconds[Datetime.TimeUnit.Week]
174
+ );
175
+ break;
176
+ case Datetime.TimeUnit.Week:
177
+ for (var i = 0; i < statusBoxes.length; i++) {
178
+ var weekStart = statusBoxes[i][0].date;
179
+ var weekEnd = new Date(
180
+ weekStart.getTime() +
181
+ (7 - 1) *
182
+ Datetime.timeUnitToMilliseconds[Datetime.TimeUnit.Day]
183
+ );
184
+ rowLabels.push(getConciseDateRangeLabel(weekStart, weekEnd));
185
+ if (i === statusBoxes.length - 1) {
186
+ pageHeader = getConciseDateRangeLabel(
187
+ statusBoxes[0][0].date,
188
+ weekEnd
189
+ );
190
+ }
191
+ }
192
+ this.rowSeparatorCount(1);
193
+ break;
194
+ case Datetime.TimeUnit.Month:
195
+ statusBoxes.forEach(function (rowStatusBox) {
196
+ rowStatusBox.forEach(function (statusBox) {
197
+ statusBox.boxLabel = Datetime.shortMonth.format(
198
+ statusBox.date.getTime()
199
+ );
200
+ });
201
+ });
202
+ pageHeader = Datetime.fullYear.format(firstDate.getTime());
203
+ break;
204
+ case Datetime.TimeUnit.Year:
205
+ statusBoxes.forEach(function (rowStatusBox) {
206
+ rowStatusBox.forEach(function (statusBox) {
207
+ statusBox.boxLabel = Datetime.fullYear.format(
208
+ statusBox.date.getTime()
209
+ );
210
+ });
211
+ });
212
+ pageHeader = headerSeparator.format(
213
+ Datetime.fullYear.format(firstDate.getTime()),
214
+ Datetime.fullYear.format(lastDate.getTime())
215
+ );
216
+ break;
217
+ default:
218
+ logger.logError("Unexpected switch statement value: " + frequency);
219
+ break;
220
+ }
221
+ }
222
+ this.rowLabels(rowLabels);
223
+ this.colLabels(colLabels);
224
+ if (isGeneric) {
225
+ this.pageHeader("");
226
+ } else {
227
+ this.pageHeader(pageHeader);
228
+ }
229
+ };
230
+ StatusCalendarPage.prototype.updateHiglightedNodeSubscription = function (
231
+ pageData,
232
+ highlightedNodes
233
+ ) {
234
+ if (this._highlightedNodesSubscription) {
235
+ this._highlightedNodesSubscription.dispose();
236
+ }
237
+ if (highlightedNodes) {
238
+ this._lifetimeManager.registerForDispose(
239
+ Util.subscribeAndCall(
240
+ highlightedNodes,
241
+ function (highlightedNodesLocal) {
242
+ var pageDateMap = {};
243
+ pageData.forEach(function (statusBoxRow) {
244
+ statusBoxRow.forEach(function (statusBox) {
245
+ pageDateMap[statusBox.date.getTime()] = statusBox;
246
+ statusBox.highlight = null;
247
+ });
248
+ });
249
+ highlightedNodesLocal.forEach(function (highlightedNode) {
250
+ var statusBox = pageDateMap[highlightedNode];
251
+ if (statusBox) {
252
+ statusBox.highlight = ko.observable(true);
253
+ }
254
+ });
255
+ }
256
+ )
257
+ );
258
+ }
259
+ };
260
+ StatusCalendarPage.prototype.clean = function () {
261
+ this.statusBoxRows([]);
262
+ };
263
+ return StatusCalendarPage;
264
+ })(Disposable.ChildDisposable);
265
+ exports.StatusCalendarPage = StatusCalendarPage;
266
+ var StatusCalendar = (function (_super) {
267
+ __extends(StatusCalendar, _super);
268
+ function StatusCalendar(lifetimeManager, statusCalendarConfig) {
269
+ var _this = this;
270
+ _super.call(this, lifetimeManager);
271
+ this.loading = ko.observable(Loader.LoadingState.BlockingUiLoading);
272
+ this.header = ko.observable();
273
+ this.subHeader = ko.observable();
274
+ this.footer = ko.observable();
275
+ this.type = ko.observable();
276
+ this.pages = ko.observableArray();
277
+ this.nextButtonOptions = null;
278
+ this.previousButtonOptions = null;
279
+ this._currentUpdateLifetimeManager = null;
280
+ this._updateConfig = null;
281
+ this._refreshId = 0;
282
+ this.selectedDate = ko.observable();
283
+ this._lifetimeManager = lifetimeManager.createChildLifetime();
284
+ this.nextButtonOptions = new Command.ObservableCommand({
285
+ icon: Svg.rightarrow,
286
+ onclick: function () {
287
+ _this.navigatePage(nextDirectionString);
288
+ },
289
+ name: "next",
290
+ label: ClientResources.nextButtonText,
291
+ tooltip: ClientResources.nextButtonText,
292
+ });
293
+ this.previousButtonOptions = new Command.ObservableCommand({
294
+ icon: Svg.leftarrow,
295
+ onclick: function () {
296
+ _this.navigatePage(prevDirectionString);
297
+ },
298
+ name: "previous",
299
+ label: ClientResources.previousButtonText,
300
+ tooltip: ClientResources.previousButtonText,
301
+ });
302
+ var pages = [];
303
+ for (var i = 0; i < statusCalendarConfig.size; i++) {
304
+ var page = new StatusCalendarPage(this._lifetimeManager);
305
+ pages.push(page);
306
+ }
307
+ this.pages(pages);
308
+ }
309
+ StatusCalendar.prototype.navigatePage = function (direction) {
310
+ var _this = this;
311
+ if (this.loading() !== Loader.LoadingState.Ready) {
312
+ return;
313
+ }
314
+ this.loading(Loader.LoadingState.Loading);
315
+ var currentRefreshId = this._refreshId;
316
+ var baseDate = null;
317
+ if (direction === prevDirectionString) {
318
+ baseDate = getBaseDate(
319
+ this.pages()[0].dateRange,
320
+ this._updateConfig.frequency,
321
+ this._updateConfig.interval,
322
+ this._updateConfig.isGeneric,
323
+ false
324
+ );
325
+ } else if (direction === nextDirectionString) {
326
+ var pages = this.pages();
327
+ baseDate = getBaseDate(
328
+ pages[pages.length - 1].dateRange,
329
+ this._updateConfig.frequency,
330
+ this._updateConfig.interval,
331
+ this._updateConfig.isGeneric,
332
+ true
333
+ );
334
+ }
335
+ if (baseDate) {
336
+ var newPage_1 = new StatusCalendarPage(this._lifetimeManager);
337
+ var dateRange_1 = getStartEndDateRange(
338
+ baseDate,
339
+ this._updateConfig.frequency,
340
+ this._updateConfig.interval,
341
+ this._updateConfig.isGeneric,
342
+ true
343
+ );
344
+ this._updateConfig.pageCallback(dateRange_1).then(
345
+ function (statusBoxes) {
346
+ if (currentRefreshId !== _this._refreshId) {
347
+ return;
348
+ }
349
+ var pageData = [];
350
+ try {
351
+ pageData = sanitizeIncomingData(
352
+ statusBoxes,
353
+ dateRange_1,
354
+ _this._updateConfig.frequency,
355
+ _this._updateConfig.interval,
356
+ _this._updateConfig.isGeneric,
357
+ true
358
+ );
359
+ newPage_1.dateRange = getPageDateRange(
360
+ pageData,
361
+ _this._updateConfig.frequency,
362
+ _this._updateConfig.interval
363
+ );
364
+ } catch (ex) {
365
+ _this.enterFailedState();
366
+ return;
367
+ }
368
+ newPage_1.calculateLabelsAndSeparator(
369
+ pageData,
370
+ _this._updateConfig.frequency,
371
+ _this._updateConfig.interval,
372
+ _this._updateConfig.isGeneric
373
+ );
374
+ newPage_1.updateHiglightedNodeSubscription(
375
+ pageData,
376
+ _this._updateConfig.highlightedDates
377
+ );
378
+ newPage_1.statusBoxRows(pageData);
379
+ var pages = _this.pages().slice();
380
+ if (direction === prevDirectionString) {
381
+ pages.pop().dispose();
382
+ pages.unshift(newPage_1);
383
+ } else if (direction === nextDirectionString) {
384
+ pages.shift().dispose();
385
+ pages.push(newPage_1);
386
+ }
387
+ _this.pages(pages);
388
+ _this.disableCalendarNavigationIfOutsideOfRange(
389
+ pages,
390
+ _this._updateConfig.dateRange
391
+ );
392
+ _this.loading(Loader.LoadingState.Ready);
393
+ },
394
+ function (reason) {
395
+ _this.enterFailedState();
396
+ logger.logError(reason.responseText);
397
+ }
398
+ );
399
+ }
400
+ };
401
+ StatusCalendar.prototype.update = function (updateConfig) {
402
+ var _this = this;
403
+ this.loading(Loader.LoadingState.BlockingUiLoading);
404
+ var currentRefreshId = ++this._refreshId;
405
+ var deferred = Q.defer();
406
+ if (this._currentUpdateLifetimeManager) {
407
+ this._currentUpdateLifetimeManager.dispose();
408
+ }
409
+ this._currentUpdateLifetimeManager =
410
+ this._lifetimeManager.createChildLifetime();
411
+ this._updateConfig = updateConfig;
412
+ this.header(updateConfig.header);
413
+ this.subHeader(updateConfig.subHeader);
414
+ this.footer(updateConfig.footer);
415
+ this.selectedDate(null);
416
+ var baseDate = updateConfig.baseDate;
417
+ updateConfig.isGeneric = hasGenericCalendar(
418
+ updateConfig.frequency,
419
+ updateConfig.interval
420
+ );
421
+ this.pages().forEach(function (page) {
422
+ page.dateRange = getStartEndDateRange(
423
+ baseDate,
424
+ updateConfig.frequency,
425
+ updateConfig.interval,
426
+ updateConfig.isGeneric,
427
+ true
428
+ );
429
+ baseDate = new Date(page.dateRange.startDate.getTime() - 1);
430
+ });
431
+ var combinedDateRange = {
432
+ startDate: this.pages()[0].dateRange.startDate,
433
+ endDate: this.pages()[this.pages().length - 1].dateRange.endDate,
434
+ };
435
+ updateConfig.pageCallback(combinedDateRange).then(
436
+ function (statusBoxes) {
437
+ if (currentRefreshId !== _this._refreshId) {
438
+ deferred.reject({
439
+ result: StatusCalendarUpdateResultEnum.aborted,
440
+ });
441
+ }
442
+ for (var i = 0; i < _this.pages().length; i++) {
443
+ var page = _this.pages()[i];
444
+ var pageData = [];
445
+ try {
446
+ pageData = sanitizeIncomingData(
447
+ statusBoxes,
448
+ page.dateRange,
449
+ updateConfig.frequency,
450
+ updateConfig.interval,
451
+ updateConfig.isGeneric,
452
+ true
453
+ );
454
+ page.dateRange = getPageDateRange(
455
+ pageData,
456
+ updateConfig.frequency,
457
+ updateConfig.interval
458
+ );
459
+ } catch (ex) {
460
+ _this.enterFailedState();
461
+ deferred.reject({
462
+ result: StatusCalendarUpdateResultEnum.failed,
463
+ reason: ex,
464
+ });
465
+ return;
466
+ }
467
+ page.calculateLabelsAndSeparator(
468
+ pageData,
469
+ updateConfig.frequency,
470
+ updateConfig.interval,
471
+ updateConfig.isGeneric
472
+ );
473
+ page.updateHiglightedNodeSubscription(
474
+ pageData,
475
+ updateConfig.highlightedDates
476
+ );
477
+ page.statusBoxRows(pageData);
478
+ }
479
+ _this.loading(Loader.LoadingState.Ready);
480
+ _this.disableCalendarNavigationIfOutsideOfRange(
481
+ _this.pages(),
482
+ _this._updateConfig.dateRange
483
+ );
484
+ deferred.resolve({
485
+ result: StatusCalendarUpdateResultEnum.complete,
486
+ });
487
+ },
488
+ function (reason) {
489
+ _this.enterFailedState();
490
+ deferred.reject({
491
+ result: StatusCalendarUpdateResultEnum.failed,
492
+ reason: reason,
493
+ });
494
+ }
495
+ );
496
+ this.cleanCurrentState();
497
+ if (updateConfig.isGeneric) {
498
+ this.type(genericLayoutTypeString);
499
+ } else {
500
+ this.type(updateConfig.frequency);
501
+ }
502
+ return deferred.promise;
503
+ };
504
+ StatusCalendar.prototype.updateSelection = function (selectedDate) {
505
+ if (!selectedDate) {
506
+ this.selectedDate(null);
507
+ return;
508
+ }
509
+ this.selectedDate(selectedDate);
510
+ };
511
+ StatusCalendar.prototype.enterFailedState = function () {
512
+ this.loading(Loader.LoadingState.Failed);
513
+ this.cleanCurrentState();
514
+ };
515
+ StatusCalendar.prototype.cleanCurrentState = function () {
516
+ this.pages().forEach(function (page) {
517
+ page.clean();
518
+ });
519
+ };
520
+ StatusCalendar.prototype.disableCalendarNavigationIfOutsideOfRange =
521
+ function (pages, dateRange) {
522
+ this.previousButtonOptions.disabled(false);
523
+ this.nextButtonOptions.disabled(false);
524
+ if (!dateRange) {
525
+ return;
526
+ }
527
+ var startDate = pages[0].dateRange.startDate;
528
+ var endDate = pages[pages.length - 1].dateRange.endDate;
529
+ if (startDate.getTime() <= dateRange.startDate.getTime()) {
530
+ this.previousButtonOptions.disabled(true);
531
+ }
532
+ if (dateRange.endDate.getTime() < endDate.getTime()) {
533
+ this.nextButtonOptions.disabled(true);
534
+ }
535
+ };
536
+ StatusCalendar.prototype.dispose = function () {
537
+ this._lifetimeManager.dispose();
538
+ };
539
+ StatusCalendar.template = require("text!./Templates/StatusCalendar.html");
540
+ StatusCalendar.statusCalendars = {};
541
+ return StatusCalendar;
542
+ })(Disposable.ChildDisposable);
543
+ exports.StatusCalendar = StatusCalendar;
544
+ exports.timeScales = [
545
+ { unit: Datetime.TimeUnit.Minute, scaleFactor: 60 },
546
+ { unit: Datetime.TimeUnit.Hour, scaleFactor: 24 },
547
+ { unit: Datetime.TimeUnit.Day, scaleFactor: 7 },
548
+ { unit: Datetime.TimeUnit.Week, scaleFactor: -1 },
549
+ { unit: Datetime.TimeUnit.Month, scaleFactor: 12 },
550
+ { unit: Datetime.TimeUnit.Year, scaleFactor: -1 },
551
+ ];
552
+ exports.timeScaleMap = {};
553
+ exports.timeScales.forEach(function (timeScale) {
554
+ exports.timeScaleMap[timeScale.unit] = timeScale;
555
+ });
556
+ function findCorrectFrequencyAndInterval(frequency, interval) {
557
+ for (var i = 0; i < exports.timeScales.length; i++) {
558
+ var timeUnit = exports.timeScales[i];
559
+ if (timeUnit.unit === frequency) {
560
+ if (timeUnit.scaleFactor === -1) {
561
+ } else {
562
+ if (interval < timeUnit.scaleFactor) {
563
+ if (!(timeUnit.scaleFactor % interval === 0)) {
564
+ }
565
+ } else {
566
+ if (interval % timeUnit.scaleFactor === 0) {
567
+ frequency = exports.timeScales[i + 1].unit;
568
+ interval /= timeUnit.scaleFactor;
569
+ }
570
+ }
571
+ }
572
+ }
573
+ }
574
+ return [frequency, interval];
575
+ }
576
+ exports.findCorrectFrequencyAndInterval = findCorrectFrequencyAndInterval;
577
+ function getGapInMillis(frequency, interval) {
578
+ return Datetime.timeUnitToMilliseconds[frequency] * interval;
579
+ }
580
+ exports.getGapInMillis = getGapInMillis;
581
+ function getStartEndDateRange(
582
+ date,
583
+ frequency,
584
+ interval,
585
+ isGeneric,
586
+ fullCalendar
587
+ ) {
588
+ var startDate = null;
589
+ var endDate = null;
590
+ var dateMoment = moment.utc(date.getTime());
591
+ if (isGeneric) {
592
+ endDate = dateMoment.add(1, Datetime.TimeUnit.Millisecond).valueOf();
593
+ startDate = dateMoment
594
+ .subtract(
595
+ interval *
596
+ (fullCalendar
597
+ ? exports.numberOfDatesInGenericCalendar
598
+ : exports.numberOfDatesInGenericRow),
599
+ frequency
600
+ )
601
+ .valueOf();
602
+ return {
603
+ startDate: new Date(startDate),
604
+ endDate: new Date(endDate),
605
+ };
606
+ }
607
+ if (!fullCalendar) {
608
+ switch (frequency) {
609
+ case Datetime.TimeUnit.Minute:
610
+ case Datetime.TimeUnit.Hour:
611
+ var intervalMillis =
612
+ Datetime.timeUnitToMilliseconds[frequency] * interval;
613
+ endDate =
614
+ Math.floor(date.getTime() / intervalMillis) * intervalMillis +
615
+ intervalMillis;
616
+ var gap =
617
+ exports.timeScaleMap[frequency].scaleFactor *
618
+ Datetime.timeUnitToMilliseconds[frequency];
619
+ startDate = endDate - gap;
620
+ break;
621
+ case Datetime.TimeUnit.Day:
622
+ endDate = getStartOfNextTimeUnit(
623
+ dateMoment,
624
+ Datetime.TimeUnit.Day
625
+ ).valueOf();
626
+ startDate = dateMoment
627
+ .subtract(
628
+ exports.timeScaleMap[frequency].scaleFactor,
629
+ Datetime.TimeUnit.Day
630
+ )
631
+ .valueOf();
632
+ break;
633
+ case Datetime.TimeUnit.Week:
634
+ endDate = getStartOfNextTimeUnit(
635
+ dateMoment,
636
+ Datetime.TimeUnit.Week
637
+ ).valueOf();
638
+ startDate = dateMoment
639
+ .subtract(numberOfWeeksInARow, Datetime.TimeUnit.Week)
640
+ .valueOf();
641
+ break;
642
+ case Datetime.TimeUnit.Month:
643
+ endDate = getStartOfNextTimeUnit(
644
+ dateMoment,
645
+ Datetime.TimeUnit.Month
646
+ ).valueOf();
647
+ startDate = dateMoment
648
+ .subtract(numberOfMonthsInARow, Datetime.TimeUnit.Month)
649
+ .valueOf();
650
+ break;
651
+ case Datetime.TimeUnit.Year:
652
+ endDate = getStartOfNextTimeUnit(
653
+ dateMoment,
654
+ Datetime.TimeUnit.Year
655
+ ).valueOf();
656
+ startDate = dateMoment
657
+ .subtract(numberOfYearsToShowInARow, Datetime.TimeUnit.Year)
658
+ .valueOf();
659
+ break;
660
+ default:
661
+ logger.logError("Unexpected switch statement value: " + frequency);
662
+ break;
663
+ }
664
+ } else {
665
+ switch (frequency) {
666
+ case Datetime.TimeUnit.Minute:
667
+ endDate = getStartOfNextTimeUnit(
668
+ dateMoment,
669
+ Datetime.TimeUnit.Hour
670
+ ).valueOf();
671
+ startDate = dateMoment
672
+ .subtract(numberOfRowsInMinuteCalendar, Datetime.TimeUnit.Hour)
673
+ .valueOf();
674
+ break;
675
+ case Datetime.TimeUnit.Hour:
676
+ endDate = getStartOfNextTimeUnit(
677
+ dateMoment,
678
+ Datetime.TimeUnit.Day
679
+ ).valueOf();
680
+ startDate = dateMoment
681
+ .subtract(numberOfRowsInHourCalendar, Datetime.TimeUnit.Day)
682
+ .valueOf();
683
+ break;
684
+ case Datetime.TimeUnit.Day:
685
+ var nextMonthStartMoment = getStartOfNextTimeUnit(
686
+ dateMoment.clone(),
687
+ Datetime.TimeUnit.Month
688
+ );
689
+ var nextMonthMillis = nextMonthStartMoment.valueOf();
690
+ if (
691
+ nextMonthStartMoment.startOf(Datetime.TimeUnit.Week).valueOf() !==
692
+ nextMonthMillis
693
+ ) {
694
+ nextMonthStartMoment.add(1, Datetime.TimeUnit.Week);
695
+ }
696
+ endDate = nextMonthStartMoment.valueOf();
697
+ startDate = dateMoment
698
+ .startOf(Datetime.TimeUnit.Month)
699
+ .startOf(Datetime.TimeUnit.Week)
700
+ .valueOf();
701
+ break;
702
+ case Datetime.TimeUnit.Week:
703
+ endDate = getStartOfNextTimeUnit(
704
+ dateMoment,
705
+ Datetime.TimeUnit.Week
706
+ ).valueOf();
707
+ startDate = dateMoment
708
+ .subtract(numberOfWeeksInCalendar, Datetime.TimeUnit.Week)
709
+ .valueOf();
710
+ break;
711
+ case Datetime.TimeUnit.Month:
712
+ endDate = getStartOfNextTimeUnit(
713
+ dateMoment,
714
+ Datetime.TimeUnit.Year
715
+ ).valueOf();
716
+ startDate = dateMoment.subtract(1, Datetime.TimeUnit.Year).valueOf();
717
+ break;
718
+ case Datetime.TimeUnit.Year:
719
+ endDate = getStartOfNextTimeUnit(
720
+ dateMoment,
721
+ Datetime.TimeUnit.Year
722
+ ).valueOf();
723
+ startDate = dateMoment
724
+ .subtract(
725
+ numberOfYearsToShowInARow * numberOfRowsInYearCalendar,
726
+ Datetime.TimeUnit.Year
727
+ )
728
+ .valueOf();
729
+ break;
730
+ default:
731
+ logger.logError("Unexpected switch statement value: " + frequency);
732
+ break;
733
+ }
734
+ }
735
+ return {
736
+ startDate: new Date(startDate),
737
+ endDate: new Date(endDate),
738
+ };
739
+ }
740
+ exports.getStartEndDateRange = getStartEndDateRange;
741
+ function sanitizeIncomingData(
742
+ data,
743
+ dateRange,
744
+ frequency,
745
+ interval,
746
+ isGeneric,
747
+ isFullCalendar
748
+ ) {
749
+ var sanitizedData = [];
750
+ var _a = getGridSizeForFrequencyInterval(
751
+ dateRange,
752
+ frequency,
753
+ interval,
754
+ isGeneric,
755
+ isFullCalendar
756
+ ),
757
+ nCols = _a.nCols,
758
+ nRows = _a.nRows;
759
+ var firstKnownDate = data.length > 0 ? data[0].date : dateRange.endDate;
760
+ var curMoment = moment.utc(firstKnownDate);
761
+ var getMissingStatusBox = function (millis) {
762
+ return {
763
+ date: new Date(millis),
764
+ status: ko.observable(exports.StatusBoxState.missing),
765
+ };
766
+ };
767
+ curMoment.subtract(interval, frequency);
768
+ while (curMoment.valueOf() >= dateRange.startDate.getTime()) {
769
+ sanitizedData.push(getMissingStatusBox(curMoment.valueOf()));
770
+ curMoment.subtract(interval, frequency);
771
+ }
772
+ sanitizedData.reverse();
773
+ curMoment = moment.utc(
774
+ lowerBoundDate(firstKnownDate, dateRange.startDate, frequency, interval)
775
+ );
776
+ var dataIndex = 0,
777
+ dataLength = data.length;
778
+ dataIndex = lowerBoundIndex(data, curMoment.toDate());
779
+ while (curMoment.valueOf() < dateRange.endDate.getTime()) {
780
+ var addMissingStatusBox = true;
781
+ for (; dataIndex < dataLength; dataIndex++) {
782
+ var dataItemMillis = data[dataIndex].date.getTime();
783
+ if (dataItemMillis === curMoment.valueOf()) {
784
+ sanitizedData.push(data[dataIndex]);
785
+ dataIndex++;
786
+ addMissingStatusBox = false;
787
+ break;
788
+ } else if (dataItemMillis > curMoment.valueOf()) {
789
+ addMissingStatusBox = true;
790
+ break;
791
+ } else if (dataItemMillis < curMoment.valueOf()) {
792
+ logger.logInfo(
793
+ "Unxepected dataItem. The date value of {0} is less than the expected value {1} for {2}.".format(
794
+ data[dataIndex].date.toISOString(),
795
+ curMoment.toISOString(),
796
+ JSON.stringify(data[dataIndex])
797
+ )
798
+ );
799
+ }
800
+ }
801
+ if (addMissingStatusBox) {
802
+ sanitizedData.push(getMissingStatusBox(curMoment.valueOf()));
803
+ }
804
+ curMoment.add(interval, frequency);
805
+ }
806
+ var returnData = [];
807
+ for (var i = 0; i < nRows; i++) {
808
+ if ((i + 1) * nCols <= sanitizedData.length) {
809
+ returnData.push(sanitizedData.slice(i * nCols, (i + 1) * nCols));
810
+ } else {
811
+ logger.logError(
812
+ "The grid size is different than the size of data generated for {0}, {1}, {2}, {3}; grid: nCols {4}, nRows{5}".format(
813
+ JSON.stringify(dateRange),
814
+ frequency,
815
+ interval,
816
+ isFullCalendar,
817
+ nCols,
818
+ nRows
819
+ )
820
+ );
821
+ break;
822
+ }
823
+ }
824
+ return returnData;
825
+ }
826
+ exports.sanitizeIncomingData = sanitizeIncomingData;
827
+ function getGridSizeForFrequencyInterval(
828
+ dateRange,
829
+ frequency,
830
+ interval,
831
+ isGeneric,
832
+ isFullCalendar
833
+ ) {
834
+ if (isGeneric) {
835
+ if (isFullCalendar) {
836
+ return {
837
+ nCols: 1,
838
+ nRows: exports.numberOfDatesInGenericCalendar,
839
+ };
840
+ } else {
841
+ return {
842
+ nCols: exports.numberOfDatesInGenericRow,
843
+ nRows: 1,
844
+ };
845
+ }
846
+ }
847
+ var nCols = null,
848
+ nRows = null;
849
+ switch (frequency) {
850
+ case Datetime.TimeUnit.Minute:
851
+ case Datetime.TimeUnit.Hour:
852
+ case Datetime.TimeUnit.Day:
853
+ nCols = exports.timeScaleMap[frequency].scaleFactor / interval;
854
+ if (isFullCalendar) {
855
+ nRows =
856
+ (dateRange.endDate.getTime() - dateRange.startDate.getTime()) /
857
+ (Datetime.timeUnitToMilliseconds[frequency] *
858
+ exports.timeScaleMap[frequency].scaleFactor);
859
+ } else {
860
+ nRows = 1;
861
+ }
862
+ break;
863
+ case Datetime.TimeUnit.Week:
864
+ if (isFullCalendar) {
865
+ nRows = numberOfWeeksInCalendar;
866
+ nCols = 1;
867
+ } else {
868
+ nRows = 1;
869
+ nCols = numberOfWeeksInARow;
870
+ }
871
+ break;
872
+ case Datetime.TimeUnit.Month:
873
+ nCols = numberOfMonthsInARow;
874
+ nRows = isFullCalendar ? 12 / numberOfMonthsInARow : 1;
875
+ break;
876
+ case Datetime.TimeUnit.Year:
877
+ nCols = numberOfYearsToShowInARow;
878
+ nRows = isFullCalendar ? numberOfRowsInYearCalendar : 1;
879
+ break;
880
+ default:
881
+ logger.logError("Unexpected switch statement value: " + frequency);
882
+ break;
883
+ }
884
+ return {
885
+ nCols: nCols,
886
+ nRows: nRows,
887
+ };
888
+ }
889
+ function hasGenericCalendar(frequency, interval) {
890
+ var isGeneric = false;
891
+ switch (frequency) {
892
+ case Datetime.TimeUnit.Minute:
893
+ case Datetime.TimeUnit.Hour:
894
+ if (exports.timeScaleMap[frequency].scaleFactor % interval !== 0) {
895
+ isGeneric = true;
896
+ }
897
+ break;
898
+ case Datetime.TimeUnit.Week:
899
+ case Datetime.TimeUnit.Day:
900
+ case Datetime.TimeUnit.Month:
901
+ case Datetime.TimeUnit.Year:
902
+ if (interval !== 1) {
903
+ isGeneric = true;
904
+ }
905
+ break;
906
+ default:
907
+ logger.logError(
908
+ "hasGenericCalendar: Unexpected switch statement value: " + frequency
909
+ );
910
+ break;
911
+ }
912
+ return isGeneric;
913
+ }
914
+ exports.hasGenericCalendar = hasGenericCalendar;
915
+ function getBaseDate(dateRange, frequency, interval, isGeneric, next) {
916
+ var newBaseDate = null;
917
+ var curDate = null;
918
+ if (!next) {
919
+ if (isGeneric) {
920
+ return new Date(dateRange.startDate.getTime() - 1);
921
+ } else {
922
+ return moment
923
+ .utc(dateRange.startDate)
924
+ .subtract(interval, frequency)
925
+ .toDate();
926
+ }
927
+ }
928
+ if (isGeneric) {
929
+ return moment
930
+ .utc(dateRange.endDate)
931
+ .add(interval * exports.numberOfDatesInGenericCalendar, frequency)
932
+ .subtract(1, Datetime.TimeUnit.Millisecond)
933
+ .toDate();
934
+ }
935
+ curDate = new Date(dateRange.endDate.getTime());
936
+ switch (frequency) {
937
+ case Datetime.TimeUnit.Minute:
938
+ newBaseDate = new Date(
939
+ curDate.getTime() +
940
+ (numberOfRowsInMinuteCalendar - 1) *
941
+ Datetime.timeUnitToMilliseconds[Datetime.TimeUnit.Hour]
942
+ );
943
+ break;
944
+ case Datetime.TimeUnit.Hour:
945
+ newBaseDate = new Date(
946
+ curDate.getTime() +
947
+ (numberOfRowsInHourCalendar - 1) *
948
+ Datetime.timeUnitToMilliseconds[Datetime.TimeUnit.Day]
949
+ );
950
+ break;
951
+ case Datetime.TimeUnit.Week:
952
+ newBaseDate = new Date(
953
+ curDate.getTime() +
954
+ (numberOfWeeksInCalendar - 1) *
955
+ Datetime.timeUnitToMilliseconds[Datetime.TimeUnit.Week]
956
+ );
957
+ break;
958
+ case Datetime.TimeUnit.Day:
959
+ case Datetime.TimeUnit.Month:
960
+ newBaseDate = moment.utc(curDate).add(1, frequency).toDate();
961
+ break;
962
+ case Datetime.TimeUnit.Year:
963
+ newBaseDate = moment
964
+ .utc(curDate)
965
+ .add(
966
+ numberOfYearsToShowInARow * numberOfRowsInYearCalendar - 1,
967
+ Datetime.TimeUnit.Year
968
+ )
969
+ .toDate();
970
+ break;
971
+ default:
972
+ logger.logError("Unexpected switch statement value: " + frequency);
973
+ break;
974
+ }
975
+ return newBaseDate;
976
+ }
977
+ exports.getBaseDate = getBaseDate;
978
+ function getConciseDateRangeLabel(firstDate, lastDate) {
979
+ var label = "";
980
+ var headerSeparator = "{0} - {1}";
981
+ if (firstDate.getUTCFullYear() === lastDate.getUTCFullYear()) {
982
+ if (firstDate.getUTCMonth() === lastDate.getUTCMonth()) {
983
+ if (firstDate.getUTCDate() === lastDate.getUTCDate()) {
984
+ label = Datetime.format1.format(firstDate.getTime());
985
+ } else {
986
+ label =
987
+ Datetime.shortMonth.format(firstDate.getTime()) +
988
+ " " +
989
+ headerSeparator.format(
990
+ firstDate.getUTCDate(),
991
+ lastDate.getUTCDate()
992
+ ) +
993
+ " " +
994
+ firstDate.getUTCFullYear();
995
+ }
996
+ } else {
997
+ label =
998
+ headerSeparator.format(
999
+ Datetime.shortDayMonth.format(firstDate.getTime()),
1000
+ Datetime.shortDayMonth.format(lastDate.getTime())
1001
+ ) +
1002
+ " " +
1003
+ firstDate.getUTCFullYear();
1004
+ }
1005
+ } else {
1006
+ label = headerSeparator.format(
1007
+ Datetime.fullDate.format(firstDate.getTime()),
1008
+ Datetime.fullDate.format(lastDate.getTime())
1009
+ );
1010
+ }
1011
+ return label;
1012
+ }
1013
+ function getStartOfNextTimeUnit(currentMoment, timeUnit) {
1014
+ return currentMoment.add(1, timeUnit).startOf(timeUnit);
1015
+ }
1016
+ function getPageDateRange(pageData, frequency, interval) {
1017
+ if (pageData.length > 0 && pageData[0].length > 0) {
1018
+ return {
1019
+ startDate: new Date(pageData[0][0].date.getTime()),
1020
+ endDate: moment
1021
+ .utc(pageData[pageData.length - 1][pageData[0].length - 1].date)
1022
+ .add(interval, frequency)
1023
+ .toDate(),
1024
+ };
1025
+ } else {
1026
+ return null;
1027
+ }
1028
+ }
1029
+ function lowerBoundDate(curDate, lowerBound, frequency, interval) {
1030
+ var curMoment = moment.utc(curDate),
1031
+ lowerBoundMillis = lowerBound.getTime(),
1032
+ bestLowerBound = curDate.getTime();
1033
+ var start = 0,
1034
+ end = 100000,
1035
+ mid = 0;
1036
+ while (start <= end) {
1037
+ mid = Math.floor((start + end) / 2);
1038
+ var tempMoment = curMoment
1039
+ .clone()
1040
+ .add(mid * interval, frequency)
1041
+ .valueOf();
1042
+ if (tempMoment >= lowerBoundMillis) {
1043
+ bestLowerBound = tempMoment;
1044
+ end = mid - 1;
1045
+ } else {
1046
+ start = mid + 1;
1047
+ }
1048
+ }
1049
+ return new Date(bestLowerBound);
1050
+ }
1051
+ function lowerBoundIndex(data, lowerBound) {
1052
+ var lowerBoundMillis = lowerBound.getTime(),
1053
+ bestLowerBound = data.length;
1054
+ var start = 0,
1055
+ end = data.length - 1,
1056
+ mid = 0;
1057
+ while (start <= end) {
1058
+ mid = Math.floor((start + end) / 2);
1059
+ var tempDate = data[mid].date.getTime();
1060
+ if (tempDate >= lowerBoundMillis) {
1061
+ bestLowerBound = mid;
1062
+ end = mid - 1;
1063
+ } else {
1064
+ start = mid + 1;
1065
+ }
1066
+ }
1067
+ return bestLowerBound;
1068
+ }
1069
+ });
1070
+ //# sourceMappingURL=StatusCalendar.js.map