@elderbyte/ngx-starter 18.12.4 → 18.12.6
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/esm2022/lib/common/data/data-context/indexed-entities.mjs +13 -2
- package/esm2022/lib/common/selection/selection-model.mjs +4 -3
- package/esm2022/lib/components/data-view/common/selection/data-context-selection.directive.mjs +4 -2
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-anchor-controller.mjs +21 -0
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-calendar-controller.mjs +24 -0
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-controller.mjs +43 -0
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-form-controller.mjs +69 -0
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-select-controller.mjs +117 -0
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-shift-controller.mjs +44 -0
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +87 -130
- package/esm2022/lib/components/time/elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive.mjs +41 -0
- package/esm2022/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.mjs +144 -0
- package/esm2022/lib/components/time/elder-interval-picker/manager/interval-picker-state-manager.mjs +93 -0
- package/esm2022/lib/components/time/elder-interval-picker/model/anchor-state.mjs +54 -0
- package/esm2022/lib/components/time/elder-interval-picker/model/interval-state.mjs +37 -0
- package/esm2022/lib/components/time/elder-interval-picker/model/smart-shift-state.mjs +10 -0
- package/esm2022/lib/components/time/elder-interval-picker/presenter/interval-picker-presenter.mjs +96 -0
- package/esm2022/lib/components/time/elder-interval-picker/util/interval-picker-util.mjs +194 -0
- package/esm2022/lib/components/time/elder-time.module.mjs +5 -5
- package/fesm2022/elderbyte-ngx-starter.mjs +789 -892
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/components/time/elder-interval-picker/controller/interval-anchor-controller.d.ts +9 -0
- package/lib/components/time/elder-interval-picker/controller/interval-calendar-controller.d.ts +7 -0
- package/lib/components/time/elder-interval-picker/controller/interval-controller.d.ts +35 -0
- package/lib/components/time/elder-interval-picker/controller/interval-form-controller.d.ts +12 -0
- package/lib/components/time/elder-interval-picker/controller/interval-select-controller.d.ts +22 -0
- package/lib/components/time/elder-interval-picker/controller/interval-shift-controller.d.ts +13 -0
- package/lib/components/time/elder-interval-picker/elder-interval-picker.component.d.ts +26 -34
- package/lib/components/time/elder-interval-picker/{elder-interval-picker-binding.directive.d.ts → interval-picker-binding/elder-interval-picker-binding.directive.d.ts} +3 -4
- package/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.d.ts +37 -0
- package/lib/components/time/elder-interval-picker/manager/interval-picker-state-manager.d.ts +46 -0
- package/lib/components/time/elder-interval-picker/model/anchor-state.d.ts +20 -0
- package/lib/components/time/elder-interval-picker/model/interval-state.d.ts +16 -0
- package/lib/components/time/elder-interval-picker/model/smart-shift-state.d.ts +8 -0
- package/lib/components/time/elder-interval-picker/presenter/interval-picker-presenter.d.ts +30 -0
- package/lib/components/time/elder-interval-picker/util/interval-picker-util.d.ts +20 -0
- package/lib/components/time/elder-time.module.d.ts +4 -4
- package/package.json +1 -1
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker-binding.directive.mjs +0 -40
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker-toggle/elder-interval-picker-toggle.component.mjs +0 -202
- package/esm2022/lib/components/time/elder-interval-picker/model/interval-picker-model-editor.mjs +0 -284
- package/esm2022/lib/components/time/elder-interval-picker/model/interval-picker-model.mjs +0 -445
- package/esm2022/lib/components/time/elder-interval-picker/model/plain-date-interval-message-renderer.mjs +0 -37
- package/esm2022/lib/components/time/elder-interval-picker/model/plain-temporal-duration-message-renderer.mjs +0 -25
- package/lib/components/time/elder-interval-picker/elder-interval-picker-toggle/elder-interval-picker-toggle.component.d.ts +0 -55
- package/lib/components/time/elder-interval-picker/model/interval-picker-model-editor.d.ts +0 -77
- package/lib/components/time/elder-interval-picker/model/interval-picker-model.d.ts +0 -113
- package/lib/components/time/elder-interval-picker/model/plain-date-interval-message-renderer.d.ts +0 -7
- package/lib/components/time/elder-interval-picker/model/plain-temporal-duration-message-renderer.d.ts +0 -4
|
@@ -1,445 +0,0 @@
|
|
|
1
|
-
import { computed, effect, EventEmitter, Injectable, signal, untracked } from '@angular/core';
|
|
2
|
-
import { DateRange } from '@angular/material/datepicker';
|
|
3
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
4
|
-
import { Temporal } from '@js-temporal/polyfill';
|
|
5
|
-
import { Interval } from '../../../../common/time/interval';
|
|
6
|
-
import { TemporalPlainDateInterval } from '../../../../common/time/temporal-plain-date-interval';
|
|
7
|
-
import { TemporalUtil } from '../../../../common/time/temporal-util';
|
|
8
|
-
import { TimeUtil } from '../../../../common/time/time-util';
|
|
9
|
-
import { IntervalPickerModelEditor } from './interval-picker-model-editor';
|
|
10
|
-
import { PlainDateIntervalMessageRenderer } from './plain-date-interval-message-renderer';
|
|
11
|
-
import { PlainTemporalDurationMessageRenderer } from './plain-temporal-duration-message-renderer';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
const defaultCalendarMode = 'days';
|
|
14
|
-
export class IntervalPickerModel {
|
|
15
|
-
/***************************************************************************
|
|
16
|
-
* *
|
|
17
|
-
* Constructor *
|
|
18
|
-
* *
|
|
19
|
-
**************************************************************************/
|
|
20
|
-
constructor() {
|
|
21
|
-
/***************************************************************************
|
|
22
|
-
* *
|
|
23
|
-
* Fields *
|
|
24
|
-
* *
|
|
25
|
-
**************************************************************************/
|
|
26
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
27
|
-
this._dateChangeEmitter = new EventEmitter();
|
|
28
|
-
this.calendarMode = signal(defaultCalendarMode);
|
|
29
|
-
this._startDate = signal(null);
|
|
30
|
-
this._endDate = signal(null);
|
|
31
|
-
this._startTime = signal(Temporal.PlainTime.from('00:00'));
|
|
32
|
-
this._endTime = signal(Temporal.PlainTime.from('00:00'));
|
|
33
|
-
// Anchor
|
|
34
|
-
this.baseReferenceDate = signal(Temporal.Now.plainDateISO());
|
|
35
|
-
this.baseReferenceTime = signal(Temporal.Now.plainTimeISO());
|
|
36
|
-
this.fixedAnchorDate = signal(null);
|
|
37
|
-
this.fixedAnchorTime = signal(Temporal.PlainTime.from('00:00'));
|
|
38
|
-
this.isEmittingOnChange = signal(true);
|
|
39
|
-
this.isUpdatingIntervalOnAnchorChange = signal(false);
|
|
40
|
-
this._isInitialized = false;
|
|
41
|
-
this.isFixedAnchorDateSet = computed(() => {
|
|
42
|
-
return !!this.fixedAnchorDate();
|
|
43
|
-
});
|
|
44
|
-
this.anchorDate = computed(() => {
|
|
45
|
-
if (this.fixedAnchorDate()) {
|
|
46
|
-
return this.fixedAnchorDate();
|
|
47
|
-
}
|
|
48
|
-
return this.baseReferenceDate();
|
|
49
|
-
});
|
|
50
|
-
this.anchorTime = computed(() => {
|
|
51
|
-
if (this.fixedAnchorDate() && this.fixedAnchorTime()) {
|
|
52
|
-
return this.fixedAnchorTime();
|
|
53
|
-
}
|
|
54
|
-
return this.baseReferenceTime();
|
|
55
|
-
});
|
|
56
|
-
this.anchorDateTime = computed(() => {
|
|
57
|
-
return this.anchorDate().toPlainDateTime(this.anchorTime());
|
|
58
|
-
});
|
|
59
|
-
this.dateRange = computed(() => {
|
|
60
|
-
if (!this.isStartAndEndDatesSet()) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
return new TemporalPlainDateInterval(this.startDate(), this.endDate());
|
|
64
|
-
});
|
|
65
|
-
this.dateRangeForCalendar = computed(() => {
|
|
66
|
-
if (!this.isStartAndEndDatesSet()) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
const startDate = TemporalUtil.getJSDateFromPlainDateTime(this.startDate());
|
|
70
|
-
const endDate = TemporalUtil.getJSDateFromPlainDateTime(this.endDate());
|
|
71
|
-
return new DateRange(startDate, endDate);
|
|
72
|
-
});
|
|
73
|
-
this.isStartAndEndDatesEmpty = computed(() => {
|
|
74
|
-
return !this.startDate() && !this.endDate();
|
|
75
|
-
});
|
|
76
|
-
this.isStartAndEndDatesSet = computed(() => {
|
|
77
|
-
return !!(this.startDate() && this.endDate());
|
|
78
|
-
});
|
|
79
|
-
this.isRangeNotSet = computed(() => {
|
|
80
|
-
return !this.isStartAndEndDatesSet();
|
|
81
|
-
});
|
|
82
|
-
this.startDateTime = computed(() => {
|
|
83
|
-
if (!this.startDate()) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
if (this.startTime()) {
|
|
87
|
-
return this.startDate().toPlainDateTime(this.startTime());
|
|
88
|
-
}
|
|
89
|
-
return this.startDate();
|
|
90
|
-
});
|
|
91
|
-
this.endDateTime = computed(() => {
|
|
92
|
-
if (!this.endDate()) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
if (this.endTime()) {
|
|
96
|
-
return this.endDate().toPlainDateTime(this.endTime());
|
|
97
|
-
}
|
|
98
|
-
return this.endDate();
|
|
99
|
-
});
|
|
100
|
-
this.startDateAsJSDate = computed(() => {
|
|
101
|
-
if (!this.startDate()) {
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
return TemporalUtil.getJSDateFromPlainDateTime(this.startDate());
|
|
105
|
-
});
|
|
106
|
-
this.endDateAsJSDate = computed(() => {
|
|
107
|
-
if (!this.endDate()) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
return TemporalUtil.getJSDateFromPlainDateTime(this.endDate());
|
|
111
|
-
});
|
|
112
|
-
this.startDateTimeAsJSDate = computed(() => {
|
|
113
|
-
if (!this.startDateTime()) {
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
return TemporalUtil.getJSDateFromPlainDateTime(this.startDateTime());
|
|
117
|
-
});
|
|
118
|
-
this.endDateTimeAsJSDate = computed(() => {
|
|
119
|
-
if (!this.endDateTime()) {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
return TemporalUtil.getJSDateFromPlainDateTime(this.endDateTime());
|
|
123
|
-
});
|
|
124
|
-
this.viewIntervalMessage = computed(() => PlainDateIntervalMessageRenderer.toMessage(this.calendarMode(), this.dateRange()));
|
|
125
|
-
this.deltaHumanReadable = computed(() => {
|
|
126
|
-
if (this.isStartAndEndDatesEmpty()) {
|
|
127
|
-
return '';
|
|
128
|
-
}
|
|
129
|
-
const duration = this.deltaAsTemporalDuration(this.startDateTime(), this.endDateTime());
|
|
130
|
-
return PlainTemporalDurationMessageRenderer.toMessage(duration);
|
|
131
|
-
});
|
|
132
|
-
this.getStartTimeString = computed(() => {
|
|
133
|
-
return TemporalUtil.getHtmlTimeStringFromPlainTime(this.startTime());
|
|
134
|
-
});
|
|
135
|
-
this.getEndTimeString = computed(() => {
|
|
136
|
-
return TemporalUtil.getHtmlTimeStringFromPlainTime(this.endTime());
|
|
137
|
-
});
|
|
138
|
-
this.getAnchorTimeString = computed(() => {
|
|
139
|
-
return TemporalUtil.getHtmlTimeStringFromPlainTime(this.fixedAnchorTime());
|
|
140
|
-
});
|
|
141
|
-
this.getAnchorPointAsLocaleDate = computed(() => {
|
|
142
|
-
const anchorPoint = this.fixedAnchorDate();
|
|
143
|
-
if (!anchorPoint) {
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
const jsDate = TemporalUtil.getJSDateFromPlainDateTime(anchorPoint);
|
|
147
|
-
const localeDate = TimeUtil.dateToLocalDate(jsDate);
|
|
148
|
-
return localeDate;
|
|
149
|
-
});
|
|
150
|
-
this.startDateHtmlString = computed(() => {
|
|
151
|
-
return TemporalUtil.getHtmlDateString(this.startDateTime());
|
|
152
|
-
});
|
|
153
|
-
this.endDateHtmlString = computed(() => {
|
|
154
|
-
return TemporalUtil.getHtmlDateString(this.endDateTime());
|
|
155
|
-
});
|
|
156
|
-
this.isStartTimeSetAndNotMidnight = computed(() => {
|
|
157
|
-
if (!this.startTime()) {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
return (this.startTime().hour !== 0 || this.startTime().minute !== 0 || this.startTime().second !== 0);
|
|
161
|
-
});
|
|
162
|
-
this.isEndTimeSetAndNotMidnight = computed(() => {
|
|
163
|
-
if (!this.endTime()) {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
return this.endTime().hour !== 0 || this.endTime().minute !== 0 || this.endTime().second !== 0;
|
|
167
|
-
});
|
|
168
|
-
this.isFixedAnchorTimeSetAndNotMidnight = computed(() => {
|
|
169
|
-
if (!this.fixedAnchorTime()) {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
return (this.fixedAnchorTime().hour !== 0 ||
|
|
173
|
-
this.fixedAnchorTime().minute !== 0 ||
|
|
174
|
-
this.fixedAnchorTime().second !== 0);
|
|
175
|
-
});
|
|
176
|
-
this.editor = new IntervalPickerModelEditor(this);
|
|
177
|
-
effect(() => {
|
|
178
|
-
const startDateTime = this.startDateTime();
|
|
179
|
-
const endDateTime = this.endDateTime();
|
|
180
|
-
if (this.isEmittingOnChange()) {
|
|
181
|
-
this.emitMainDates(); // TODO Only emit if changed
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
/***************************************************************************
|
|
186
|
-
* *
|
|
187
|
-
* Properties *
|
|
188
|
-
* *
|
|
189
|
-
**************************************************************************/
|
|
190
|
-
startDate() {
|
|
191
|
-
return this._startDate();
|
|
192
|
-
}
|
|
193
|
-
endDate() {
|
|
194
|
-
return this._endDate();
|
|
195
|
-
}
|
|
196
|
-
startTime() {
|
|
197
|
-
return this._startTime();
|
|
198
|
-
}
|
|
199
|
-
endTime() {
|
|
200
|
-
return this._endTime();
|
|
201
|
-
}
|
|
202
|
-
/***************************************************************************
|
|
203
|
-
* *
|
|
204
|
-
* Public API *
|
|
205
|
-
* *
|
|
206
|
-
**************************************************************************/
|
|
207
|
-
setInitialized() {
|
|
208
|
-
this._isInitialized = true;
|
|
209
|
-
}
|
|
210
|
-
setStartDate(value) {
|
|
211
|
-
const current = untracked(this._startDate);
|
|
212
|
-
if (!TemporalUtil.equalPlainDates(current, value)) {
|
|
213
|
-
this._startDate.set(value);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
setEndDate(value) {
|
|
217
|
-
const current = untracked(this._endDate);
|
|
218
|
-
if (!TemporalUtil.equalPlainDates(current, value)) {
|
|
219
|
-
this._endDate.set(value);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
setStartTime(value) {
|
|
223
|
-
const current = untracked(this._startTime);
|
|
224
|
-
if (!TemporalUtil.equalPlainTimes(current, value)) {
|
|
225
|
-
this._startTime.set(value);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
setEndTime(value) {
|
|
229
|
-
const current = untracked(this._endTime);
|
|
230
|
-
if (!TemporalUtil.equalPlainTimes(current, value)) {
|
|
231
|
-
this._endTime.set(value);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
setStartDateFromHtmlString(htmlString) {
|
|
235
|
-
const date = TemporalUtil.getPlainDateFromHtmlDateString(htmlString);
|
|
236
|
-
if (!date) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
this.calendarMode.set('days');
|
|
240
|
-
this.setStartDate(date);
|
|
241
|
-
}
|
|
242
|
-
setEndDateFromHtmlString(htmlString) {
|
|
243
|
-
const date = TemporalUtil.getPlainDateFromHtmlDateString(htmlString);
|
|
244
|
-
if (!date) {
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
this.calendarMode.set('days');
|
|
248
|
-
this.setEndDate(date);
|
|
249
|
-
}
|
|
250
|
-
setInterval(value) {
|
|
251
|
-
this.setDateTimesFromElderInterval(value);
|
|
252
|
-
}
|
|
253
|
-
setAnchorDateTime(value) {
|
|
254
|
-
this.setAnchorDateTimeFromJsDate(value);
|
|
255
|
-
}
|
|
256
|
-
setupEventEmitter(e) {
|
|
257
|
-
this._dateChangeEmitter = e;
|
|
258
|
-
}
|
|
259
|
-
setStartTimeFromString(timeStr) {
|
|
260
|
-
const time = TemporalUtil.getPlainTimeFromHtmlTimeString(timeStr);
|
|
261
|
-
if (time) {
|
|
262
|
-
this.setStartTime(time);
|
|
263
|
-
}
|
|
264
|
-
if (!untracked(this._startDate)) {
|
|
265
|
-
this.setStartDate(Temporal.Now.plainDateISO());
|
|
266
|
-
}
|
|
267
|
-
this.calendarMode.set('days');
|
|
268
|
-
}
|
|
269
|
-
setEndTimeFromString(timeStr) {
|
|
270
|
-
const time = TemporalUtil.getPlainTimeFromHtmlTimeString(timeStr);
|
|
271
|
-
if (time) {
|
|
272
|
-
this.setEndTime(time);
|
|
273
|
-
}
|
|
274
|
-
if (!untracked(this._endDate)) {
|
|
275
|
-
this.setEndDate(Temporal.Now.plainDateISO());
|
|
276
|
-
}
|
|
277
|
-
this.calendarMode.set('days');
|
|
278
|
-
}
|
|
279
|
-
resetCalendarMode() {
|
|
280
|
-
this.calendarMode.set(defaultCalendarMode);
|
|
281
|
-
}
|
|
282
|
-
setAnchorDateTimeFromJsDate(dateTime) {
|
|
283
|
-
if (!dateTime) {
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
const date = TemporalUtil.getPlainDateFromJSDate(dateTime);
|
|
287
|
-
const time = TemporalUtil.getPlainTimeFromJSDate(dateTime);
|
|
288
|
-
this.fixedAnchorDate.set(date);
|
|
289
|
-
this.fixedAnchorTime.set(time);
|
|
290
|
-
}
|
|
291
|
-
setFixedAnchorPointToStartDateTime() {
|
|
292
|
-
if (!this.startDate()) {
|
|
293
|
-
this.resetFixedAnchorPoint();
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
if (this.startDate()) {
|
|
297
|
-
this.fixedAnchorDate.set(this.startDate());
|
|
298
|
-
}
|
|
299
|
-
if (this.startTime()) {
|
|
300
|
-
this.fixedAnchorTime.set(this.startTime());
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
setFixedAnchorPointToEndDateTime() {
|
|
304
|
-
if (!this.endDate()) {
|
|
305
|
-
this.resetFixedAnchorPoint();
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
if (this.endDate()) {
|
|
309
|
-
this.fixedAnchorDate.set(this.endDate());
|
|
310
|
-
}
|
|
311
|
-
if (this.endTime()) {
|
|
312
|
-
this.fixedAnchorTime.set(this.endTime());
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
resetFixedAnchorPoint() {
|
|
316
|
-
this.fixedAnchorDate.set(null);
|
|
317
|
-
this.fixedAnchorTime.set(Temporal.PlainTime.from('00:00'));
|
|
318
|
-
if (this.isUpdatingIntervalOnAnchorChange() && this.isStartAndEndDatesSet()) {
|
|
319
|
-
this.shiftRangeEndToToday();
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
setAnchorDateFromForm(dateArg) {
|
|
323
|
-
if (!dateArg) {
|
|
324
|
-
this.fixedAnchorDate.set(null);
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
const jsDate = TimeUtil.localDateToDate(dateArg);
|
|
328
|
-
const plainDate = TemporalUtil.getPlainDateFromJSDate(jsDate);
|
|
329
|
-
if (!plainDate) {
|
|
330
|
-
this.log.warn('Invalid date', plainDate);
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
this.fixedAnchorDate.set(plainDate);
|
|
334
|
-
if (!this.isUpdatingIntervalOnAnchorChange()) {
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
if (this.fixedAnchorDate()) {
|
|
338
|
-
this.editor.shiftSelectionToAnchorDate();
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
clearStartDateTime() {
|
|
342
|
-
this.setStartDate(null);
|
|
343
|
-
this.setStartTime(null);
|
|
344
|
-
}
|
|
345
|
-
clearEndDateTime() {
|
|
346
|
-
this.setEndDate(null);
|
|
347
|
-
this.setEndTime(null);
|
|
348
|
-
}
|
|
349
|
-
clearStartTime() {
|
|
350
|
-
this.setStartTime(null);
|
|
351
|
-
}
|
|
352
|
-
clearEndTime() {
|
|
353
|
-
this.setEndTime(null);
|
|
354
|
-
}
|
|
355
|
-
resetFixedAnchorTime() {
|
|
356
|
-
this.fixedAnchorTime.set(Temporal.PlainTime.from('00:00'));
|
|
357
|
-
}
|
|
358
|
-
setAnchorTimeFromForm(htmlString) {
|
|
359
|
-
const time = TemporalUtil.getPlainTimeFromHtmlTimeString(htmlString);
|
|
360
|
-
if (!time) {
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
if (!this.fixedAnchorDate()) {
|
|
364
|
-
this.fixedAnchorDate.set(Temporal.Now.plainDateISO());
|
|
365
|
-
}
|
|
366
|
-
this.fixedAnchorTime.set(time);
|
|
367
|
-
if (!this.isUpdatingIntervalOnAnchorChange()) {
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
if (this.fixedAnchorTime()) {
|
|
371
|
-
this.editor.shiftSelectionToAnchorTime();
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
emitMainDates() {
|
|
375
|
-
if (!this._isInitialized) {
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
const interval = this.createElderInterval();
|
|
379
|
-
this._dateChangeEmitter.emit(interval);
|
|
380
|
-
}
|
|
381
|
-
/***************************************************************************
|
|
382
|
-
* *
|
|
383
|
-
* Private methods *
|
|
384
|
-
* *
|
|
385
|
-
**************************************************************************/
|
|
386
|
-
setDateTimesFromElderInterval(interval) {
|
|
387
|
-
if (!interval) {
|
|
388
|
-
this.setStartDate(null);
|
|
389
|
-
this.setEndDate(null);
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
|
-
if (interval.start) {
|
|
393
|
-
const startDateAsJSDate = TimeUtil.date(interval.start);
|
|
394
|
-
this.setStartDate(TemporalUtil.getPlainDateFromJSDate(startDateAsJSDate));
|
|
395
|
-
this.setStartTime(TemporalUtil.getPlainTimeFromJSDate(startDateAsJSDate));
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
this.setStartDate(null);
|
|
399
|
-
}
|
|
400
|
-
if (interval.end) {
|
|
401
|
-
const endDateAsJSDate = TimeUtil.date(interval.end);
|
|
402
|
-
this.setEndDate(TemporalUtil.getPlainDateFromJSDate(endDateAsJSDate));
|
|
403
|
-
this.setEndTime(TemporalUtil.getPlainTimeFromJSDate(endDateAsJSDate));
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
this.setEndDate(null);
|
|
407
|
-
}
|
|
408
|
-
this.log.debug('Applied interval to picker model:', interval);
|
|
409
|
-
}
|
|
410
|
-
createElderInterval() {
|
|
411
|
-
let start, end = null;
|
|
412
|
-
if (this.startDateTime()) {
|
|
413
|
-
const jsDate = TemporalUtil.getJSDateFromPlainDateTime(this.startDateTime());
|
|
414
|
-
start = TimeUtil.instant(jsDate);
|
|
415
|
-
}
|
|
416
|
-
if (this.endDateTime()) {
|
|
417
|
-
const jsDate = TemporalUtil.getJSDateFromPlainDateTime(this.endDateTime());
|
|
418
|
-
end = TimeUtil.instant(jsDate);
|
|
419
|
-
}
|
|
420
|
-
if (!start && !end) {
|
|
421
|
-
return new Interval(null, null);
|
|
422
|
-
}
|
|
423
|
-
return new Interval(start, end);
|
|
424
|
-
}
|
|
425
|
-
shiftRangeEndToToday() {
|
|
426
|
-
if (!this.isStartAndEndDatesSet()) {
|
|
427
|
-
return;
|
|
428
|
-
}
|
|
429
|
-
const duration = this.startDate().until(this.endDate());
|
|
430
|
-
this.setEndDate(Temporal.Now.plainDateISO());
|
|
431
|
-
this.setStartDate(this.endDate().subtract(duration));
|
|
432
|
-
}
|
|
433
|
-
deltaAsTemporalDuration(startDateTime, endDateTime) {
|
|
434
|
-
if (!startDateTime || !endDateTime) {
|
|
435
|
-
return null;
|
|
436
|
-
}
|
|
437
|
-
return startDateTime.until(endDateTime);
|
|
438
|
-
}
|
|
439
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: IntervalPickerModel, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
440
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: IntervalPickerModel }); }
|
|
441
|
-
}
|
|
442
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: IntervalPickerModel, decorators: [{
|
|
443
|
-
type: Injectable
|
|
444
|
-
}], ctorParameters: () => [] });
|
|
445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtcGlja2VyLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy90aW1lL2VsZGVyLWludGVydmFsLXBpY2tlci9tb2RlbC9pbnRlcnZhbC1waWNrZXItbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQTtBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFBOztBQUdqRyxNQUFNLG1CQUFtQixHQUFpQixNQUFNLENBQUE7QUFHaEQsTUFBTSxPQUFPLG1CQUFtQjtJQXNNOUI7Ozs7Z0ZBSTRFO0lBRTVFO1FBM01BOzs7O29GQUk0RTtRQUUzRCxRQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJ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QyxDQUFBO0lBQ3RELENBQUM7SUFFTyx1QkFBdUIsQ0FDN0IsYUFBMEQsRUFDMUQsV0FBd0Q7UUFFeEQsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN6QyxDQUFDOzhHQTFnQlUsbUJBQW1CO2tIQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInXG5pbXBvcnQgeyBMb2dnZXJGYWN0b3J5IH0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInXG5pbXBvcnQgeyBMb2NhbERhdGUgfSBmcm9tICdAanMtam9kYS9jb3JlJ1xuaW1wb3J0IHsgVGVtcG9yYWwgfSBmcm9tICdAanMtdGVtcG9yYWwvcG9seWZpbGwnXG5pbXBvcnQgeyBJbnRlcnZhbCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi90aW1lL2ludGVydmFsJ1xuaW1wb3J0IHsgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi90aW1lL3RlbXBvcmFsLXBsYWluLWRhdGUtaW50ZXJ2YWwnXG5pbXBvcnQgeyBUZW1wb3JhbFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90ZW1wb3JhbC11dGlsJ1xuaW1wb3J0IHsgVGltZVV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90aW1lLXV0aWwnXG5pbXBvcnQgeyBJbnRlcnZhbFBpY2tlck1vZGVsRWRpdG9yIH0gZnJvbSAnLi9pbnRlcnZhbC1waWNrZXItbW9kZWwtZWRpdG9yJ1xuaW1wb3J0IHsgUGxhaW5EYXRlSW50ZXJ2YWxNZXNzYWdlUmVuZGVyZXIgfSBmcm9tICcuL3BsYWluLWRhdGUtaW50ZXJ2YWwtbWVzc2FnZS1yZW5kZXJlcidcbmltcG9ydCB7IFBsYWluVGVtcG9yYWxEdXJhdGlvbk1lc3NhZ2VSZW5kZXJlciB9IGZyb20gJy4vcGxhaW4tdGVtcG9yYWwtZHVyYXRpb24tbWVzc2FnZS1yZW5kZXJlcidcblxuZXhwb3J0IHR5cGUgQ2FsZW5kYXJNb2RlID0gJ2RheXMnIHwgJ3dlZWtzJyB8ICdtb250aHMnIHwgJ3F1YXJ0ZXJzJyB8ICd5ZWFycydcbmNvbnN0IGRlZmF1bHRDYWxlbmRhck1vZGU6IENhbGVuZGFyTW9kZSA9ICdkYXlzJ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW50ZXJ2YWxQaWNrZXJNb2RlbCB7XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKVxuXG4gIHByaXZhdGUgX2RhdGVDaGFuZ2VFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJbnRlcnZhbD4oKVxuXG4gIHJlYWRvbmx5IGNhbGVuZGFyTW9kZSA9IHNpZ25hbDxDYWxlbmRhck1vZGU+KGRlZmF1bHRDYWxlbmRhck1vZGUpXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnREYXRlID0gc2lnbmFsPFRlbXBvcmFsLlBsYWluRGF0ZT4obnVsbClcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5kRGF0ZSA9IHNpZ25hbDxUZW1wb3JhbC5QbGFpbkRhdGU+KG51bGwpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZSA9IHNpZ25hbChUZW1wb3JhbC5QbGFpblRpbWUuZnJvbSgnMDA6MDAnKSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5kVGltZSA9IHNpZ25hbChUZW1wb3JhbC5QbGFpblRpbWUuZnJvbSgnMDA6MDAnKSlcblxuICAvLyBBbmNob3JcbiAgcmVhZG9ubHkgYmFzZVJlZmVyZW5jZURhdGUgPSBzaWduYWwoVGVtcG9yYWwuTm93LnBsYWluRGF0ZUlTTygpKVxuICByZWFkb25seSBiYXNlUmVmZXJlbmNlVGltZSA9IHNpZ25hbChUZW1wb3JhbC5Ob3cucGxhaW5UaW1lSVNPKCkpXG4gIHJlYWRvbmx5IGZpeGVkQW5jaG9yRGF0ZSA9IHNpZ25hbDxUZW1wb3JhbC5QbGFpbkRhdGU+KG51bGwpXG4gIHJlYWRvbmx5IGZpeGVkQW5jaG9yVGltZSA9IHNpZ25hbChUZW1wb3JhbC5QbGFpblRpbWUuZnJvbSgnMDA6MDAnKSlcblxuICByZWFkb25seSBpc0VtaXR0aW5nT25DaGFuZ2UgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSlcbiAgcmVhZG9ubHkgaXNVcGRhdGluZ0ludGVydmFsT25BbmNob3JDaGFuZ2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpXG5cbiAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlXG5cbiAgcmVhZG9ubHkgaXNGaXhlZEFuY2hvckRhdGVTZXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5maXhlZEFuY2hvckRhdGUoKVxuICB9KVxuXG4gIHJlYWRvbmx5IGFuY2hvckRhdGUgPSBjb21wdXRlZDxUZW1wb3JhbC5QbGFpbkRhdGU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5maXhlZEFuY2hvckRhdGUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZml4ZWRBbmNob3JEYXRlKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYmFzZVJlZmVyZW5jZURhdGUoKVxuICB9KVxuXG4gIHJlYWRvbmx5IGFuY2hvclRpbWUgPSBjb21wdXRlZDxUZW1wb3JhbC5QbGFpblRpbWU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5maXhlZEFuY2hvckRhdGUoKSAmJiB0aGlzLmZpeGVkQW5jaG9yVGltZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5maXhlZEFuY2hvclRpbWUoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlUmVmZXJlbmNlVGltZSgpXG4gIH0pXG5cbiAgcmVhZG9ubHkgYW5jaG9yRGF0ZVRpbWUgPSBjb21wdXRlZDxUZW1wb3JhbC5QbGFpbkRhdGVUaW1lPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYW5jaG9yRGF0ZSgpLnRvUGxhaW5EYXRlVGltZSh0aGlzLmFuY2hvclRpbWUoKSlcbiAgfSlcblxuICByZWFkb25seSBkYXRlUmFuZ2UgPSBjb21wdXRlZDxUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1N0YXJ0QW5kRW5kRGF0ZXNTZXQoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsKHRoaXMuc3RhcnREYXRlKCksIHRoaXMuZW5kRGF0ZSgpKVxuICB9KVxuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZUZvckNhbGVuZGFyID0gY29tcHV0ZWQ8RGF0ZVJhbmdlPERhdGU+IHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1N0YXJ0QW5kRW5kRGF0ZXNTZXQoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgY29uc3Qgc3RhcnREYXRlID0gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKHRoaXMuc3RhcnREYXRlKCkpXG4gICAgY29uc3QgZW5kRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZSh0aGlzLmVuZERhdGUoKSlcbiAgICByZXR1cm4gbmV3IERhdGVSYW5nZShzdGFydERhdGUsIGVuZERhdGUpXG4gIH0pXG5cbiAgcmVhZG9ubHkgaXNTdGFydEFuZEVuZERhdGVzRW1wdHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgcmV0dXJuICF0aGlzLnN0YXJ0RGF0ZSgpICYmICF0aGlzLmVuZERhdGUoKVxuICB9KVxuXG4gIHJlYWRvbmx5IGlzU3RhcnRBbmRFbmREYXRlc1NldCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICByZXR1cm4gISEodGhpcy5zdGFydERhdGUoKSAmJiB0aGlzLmVuZERhdGUoKSlcbiAgfSlcblxuICByZWFkb25seSBpc1JhbmdlTm90U2V0ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHJldHVybiAhdGhpcy5pc1N0YXJ0QW5kRW5kRGF0ZXNTZXQoKVxuICB9KVxuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZVRpbWUgPSBjb21wdXRlZDxUZW1wb3JhbC5QbGFpbkRhdGUgfCBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lPigoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBpZiAodGhpcy5zdGFydFRpbWUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnREYXRlKCkudG9QbGFpbkRhdGVUaW1lKHRoaXMuc3RhcnRUaW1lKCkpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZSgpXG4gIH0pXG5cbiAgcmVhZG9ubHkgZW5kRGF0ZVRpbWUgPSBjb21wdXRlZDxUZW1wb3JhbC5QbGFpbkRhdGUgfCBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lPigoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kVGltZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmREYXRlKCkudG9QbGFpbkRhdGVUaW1lKHRoaXMuZW5kVGltZSgpKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbmREYXRlKClcbiAgfSlcblxuICByZWFkb25seSBzdGFydERhdGVBc0pTRGF0ZSA9IGNvbXB1dGVkPERhdGUgfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKHRoaXMuc3RhcnREYXRlKCkpXG4gIH0pXG5cbiAgcmVhZG9ubHkgZW5kRGF0ZUFzSlNEYXRlID0gY29tcHV0ZWQ8RGF0ZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKHRoaXMuZW5kRGF0ZSgpKVxuICB9KVxuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZVRpbWVBc0pTRGF0ZSA9IGNvbXB1dGVkPERhdGUgfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZVRpbWUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZSh0aGlzLnN0YXJ0RGF0ZVRpbWUoKSlcbiAgfSlcblxuICByZWFkb25seSBlbmREYXRlVGltZUFzSlNEYXRlID0gY29tcHV0ZWQ8RGF0ZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZW5kRGF0ZVRpbWUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZSh0aGlzLmVuZERhdGVUaW1lKCkpXG4gIH0pXG5cbiAgcmVhZG9ubHkgdmlld0ludGVydmFsTWVzc2FnZSA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT5cbiAgICBQbGFpbkRhdGVJbnRlcnZhbE1lc3NhZ2VSZW5kZXJlci50b01lc3NhZ2UodGhpcy5jYWxlbmRhck1vZGUoKSwgdGhpcy5kYXRlUmFuZ2UoKSlcbiAgKVxuXG4gIHJlYWRvbmx5IGRlbHRhSHVtYW5SZWFkYWJsZSA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzU3RhcnRBbmRFbmREYXRlc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuZGVsdGFBc1RlbXBvcmFsRHVyYXRpb24odGhpcy5zdGFydERhdGVUaW1lKCksIHRoaXMuZW5kRGF0ZVRpbWUoKSlcbiAgICByZXR1cm4gUGxhaW5UZW1wb3JhbER1cmF0aW9uTWVzc2FnZVJlbmRlcmVyLnRvTWVzc2FnZShkdXJhdGlvbilcbiAgfSlcblxuICByZWFkb25seSBnZXRTdGFydFRpbWVTdHJpbmcgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEh0bWxUaW1lU3RyaW5nRnJvbVBsYWluVGltZSh0aGlzLnN0YXJ0VGltZSgpKVxuICB9KVxuXG4gIHJlYWRvbmx5IGdldEVuZFRpbWVTdHJpbmcgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEh0bWxUaW1lU3RyaW5nRnJvbVBsYWluVGltZSh0aGlzLmVuZFRpbWUoKSlcbiAgfSlcblxuICByZWFkb25seSBnZXRBbmNob3JUaW1lU3RyaW5nID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgcmV0dXJuIFRlbXBvcmFsVXRpbC5nZXRIdG1sVGltZVN0cmluZ0Zyb21QbGFpblRpbWUodGhpcy5maXhlZEFuY2hvclRpbWUoKSlcbiAgfSlcblxuICByZWFkb25seSBnZXRBbmNob3JQb2ludEFzTG9jYWxlRGF0ZSA9IGNvbXB1dGVkPExvY2FsRGF0ZT4oKCkgPT4ge1xuICAgIGNvbnN0IGFuY2hvclBvaW50ID0gdGhpcy5maXhlZEFuY2hvckRhdGUoKVxuICAgIGlmICghYW5jaG9yUG9pbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGpzRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZShhbmNob3JQb2ludClcbiAgICBjb25zdCBsb2NhbGVEYXRlID0gVGltZVV0aWwuZGF0ZVRvTG9jYWxEYXRlKGpzRGF0ZSlcbiAgICByZXR1cm4gbG9jYWxlRGF0ZVxuICB9KVxuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZUh0bWxTdHJpbmcgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEh0bWxEYXRlU3RyaW5nKHRoaXMuc3RhcnREYXRlVGltZSgpKVxuICB9KVxuXG4gIHJlYWRvbmx5IGVuZERhdGVIdG1sU3RyaW5nID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgcmV0dXJuIFRlbXBvcmFsVXRpbC5nZXRIdG1sRGF0ZVN0cmluZyh0aGlzLmVuZERhdGVUaW1lKCkpXG4gIH0pXG5cbiAgcmVhZG9ubHkgaXNTdGFydFRpbWVTZXRBbmROb3RNaWRuaWdodCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRUaW1lKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zdGFydFRpbWUoKS5ob3VyICE9PSAwIHx8IHRoaXMuc3RhcnRUaW1lKCkubWludXRlICE9PSAwIHx8IHRoaXMuc3RhcnRUaW1lKCkuc2Vjb25kICE9PSAwXG4gICAgKVxuICB9KVxuXG4gIHJlYWRvbmx5IGlzRW5kVGltZVNldEFuZE5vdE1pZG5pZ2h0ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGlmICghdGhpcy5lbmRUaW1lKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbmRUaW1lKCkuaG91ciAhPT0gMCB8fCB0aGlzLmVuZFRpbWUoKS5taW51dGUgIT09IDAgfHwgdGhpcy5lbmRUaW1lKCkuc2Vjb25kICE9PSAwXG4gIH0pXG5cbiAgcmVhZG9ubHkgaXNGaXhlZEFuY2hvclRpbWVTZXRBbmROb3RNaWRuaWdodCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZml4ZWRBbmNob3JUaW1lKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maXhlZEFuY2hvclRpbWUoKS5ob3VyICE9PSAwIHx8XG4gICAgICB0aGlzLmZpeGVkQW5jaG9yVGltZSgpLm1pbnV0ZSAhPT0gMCB8fFxuICAgICAgdGhpcy5maXhlZEFuY2hvclRpbWUoKS5zZWNvbmQgIT09IDBcbiAgICApXG4gIH0pXG5cbiAgcHVibGljIHJlYWRvbmx5IGVkaXRvcjogSW50ZXJ2YWxQaWNrZXJNb2RlbEVkaXRvclxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZWRpdG9yID0gbmV3IEludGVydmFsUGlja2VyTW9kZWxFZGl0b3IodGhpcylcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGVUaW1lID0gdGhpcy5zdGFydERhdGVUaW1lKClcbiAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gdGhpcy5lbmREYXRlVGltZSgpXG5cbiAgICAgIGlmICh0aGlzLmlzRW1pdHRpbmdPbkNoYW5nZSgpKSB7XG4gICAgICAgIHRoaXMuZW1pdE1haW5EYXRlcygpIC8vIFRPRE8gT25seSBlbWl0IGlmIGNoYW5nZWRcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHN0YXJ0RGF0ZSgpOiBUZW1wb3JhbC5QbGFpbkRhdGUge1xuICAgIHJldHVybiB0aGlzLl9zdGFydERhdGUoKVxuICB9XG5cbiAgcHVibGljIGVuZERhdGUoKTogVGVtcG9yYWwuUGxhaW5EYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kRGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgc3RhcnRUaW1lKCk6IFRlbXBvcmFsLlBsYWluVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZSgpXG4gIH1cblxuICBwdWJsaWMgZW5kVGltZSgpOiBUZW1wb3JhbC5QbGFpblRpbWUge1xuICAgIHJldHVybiB0aGlzLl9lbmRUaW1lKClcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzZXRJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZVxuICB9XG5cbiAgcHVibGljIHNldFN0YXJ0RGF0ZSh2YWx1ZTogVGVtcG9yYWwuUGxhaW5EYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZCh0aGlzLl9zdGFydERhdGUpXG4gICAgaWYgKCFUZW1wb3JhbFV0aWwuZXF1YWxQbGFpbkRhdGVzKGN1cnJlbnQsIHZhbHVlKSkge1xuICAgICAgdGhpcy5fc3RhcnREYXRlLnNldCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RW5kRGF0ZSh2YWx1ZTogVGVtcG9yYWwuUGxhaW5EYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZCh0aGlzLl9lbmREYXRlKVxuICAgIGlmICghVGVtcG9yYWxVdGlsLmVxdWFsUGxhaW5EYXRlcyhjdXJyZW50LCB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2VuZERhdGUuc2V0KHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTdGFydFRpbWUodmFsdWU6IFRlbXBvcmFsLlBsYWluVGltZSk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB1bnRyYWNrZWQodGhpcy5fc3RhcnRUaW1lKVxuICAgIGlmICghVGVtcG9yYWxVdGlsLmVxdWFsUGxhaW5UaW1lcyhjdXJyZW50LCB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3N0YXJ0VGltZS5zZXQodmFsdWUpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVuZFRpbWUodmFsdWU6IFRlbXBvcmFsLlBsYWluVGltZSk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB1bnRyYWNrZWQodGhpcy5fZW5kVGltZSlcbiAgICBpZiAoIVRlbXBvcmFsVXRpbC5lcXVhbFBsYWluVGltZXMoY3VycmVudCwgdmFsdWUpKSB7XG4gICAgICB0aGlzLl9lbmRUaW1lLnNldCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICBzZXRTdGFydERhdGVGcm9tSHRtbFN0cmluZyhodG1sU3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gVGVtcG9yYWxVdGlsLmdldFBsYWluRGF0ZUZyb21IdG1sRGF0ZVN0cmluZyhodG1sU3RyaW5nKVxuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJNb2RlLnNldCgnZGF5cycpXG4gICAgdGhpcy5zZXRTdGFydERhdGUoZGF0ZSlcbiAgfVxuXG4gIHNldEVuZERhdGVGcm9tSHRtbFN0cmluZyhodG1sU3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gVGVtcG9yYWxVdGlsLmdldFBsYWluRGF0ZUZyb21IdG1sRGF0ZVN0cmluZyhodG1sU3RyaW5nKVxuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJNb2RlLnNldCgnZGF5cycpXG4gICAgdGhpcy5zZXRFbmREYXRlKGRhdGUpXG4gIH1cblxuICBwdWJsaWMgc2V0SW50ZXJ2YWwodmFsdWU6IEludGVydmFsKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlVGltZXNGcm9tRWxkZXJJbnRlcnZhbCh2YWx1ZSlcbiAgfVxuXG4gIHB1YmxpYyBzZXRBbmNob3JEYXRlVGltZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2V0QW5jaG9yRGF0ZVRpbWVGcm9tSnNEYXRlKHZhbHVlKVxuICB9XG5cbiAgc2V0dXBFdmVudEVtaXR0ZXIoZTogRXZlbnRFbWl0dGVyPEludGVydmFsPik6IHZvaWQge1xuICAgIHRoaXMuX2RhdGVDaGFuZ2VFbWl0dGVyID0gZVxuICB9XG5cbiAgc2V0U3RhcnRUaW1lRnJvbVN0cmluZyh0aW1lU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lID0gVGVtcG9yYWxVdGlsLmdldFBsYWluVGltZUZyb21IdG1sVGltZVN0cmluZyh0aW1lU3RyKVxuICAgIGlmICh0aW1lKSB7XG4gICAgICB0aGlzLnNldFN0YXJ0VGltZSh0aW1lKVxuICAgIH1cbiAgICBpZiAoIXVudHJhY2tlZCh0aGlzLl9zdGFydERhdGUpKSB7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShUZW1wb3JhbC5Ob3cucGxhaW5EYXRlSVNPKCkpXG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJNb2RlLnNldCgnZGF5cycpXG4gIH1cblxuICBzZXRFbmRUaW1lRnJvbVN0cmluZyh0aW1lU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lID0gVGVtcG9yYWxVdGlsLmdldFBsYWluVGltZUZyb21IdG1sVGltZVN0cmluZyh0aW1lU3RyKVxuXG4gICAgaWYgKHRpbWUpIHtcbiAgICAgIHRoaXMuc2V0RW5kVGltZSh0aW1lKVxuICAgIH1cblxuICAgIGlmICghdW50cmFja2VkKHRoaXMuX2VuZERhdGUpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUoVGVtcG9yYWwuTm93LnBsYWluRGF0ZUlTTygpKVxuICAgIH1cblxuICAgIHRoaXMuY2FsZW5kYXJNb2RlLnNldCgnZGF5cycpXG4gIH1cblxuICByZXNldENhbGVuZGFyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGVuZGFyTW9kZS5zZXQoZGVmYXVsdENhbGVuZGFyTW9kZSlcbiAgfVxuXG4gIHNldEFuY2hvckRhdGVUaW1lRnJvbUpzRGF0ZShkYXRlVGltZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICghZGF0ZVRpbWUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBkYXRlID0gVGVtcG9yYWxVdGlsLmdldFBsYWluRGF0ZUZyb21KU0RhdGUoZGF0ZVRpbWUpXG4gICAgY29uc3QgdGltZSA9IFRlbXBvcmFsVXRpbC5nZXRQbGFpblRpbWVGcm9tSlNEYXRlKGRhdGVUaW1lKVxuICAgIHRoaXMuZml4ZWRBbmNob3JEYXRlLnNldChkYXRlKVxuICAgIHRoaXMuZml4ZWRBbmNob3JUaW1lLnNldCh0aW1lKVxuICB9XG5cbiAgc2V0Rml4ZWRBbmNob3JQb2ludFRvU3RhcnREYXRlVGltZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHRoaXMucmVzZXRGaXhlZEFuY2hvclBvaW50KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgdGhpcy5maXhlZEFuY2hvckRhdGUuc2V0KHRoaXMuc3RhcnREYXRlKCkpXG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXJ0VGltZSgpKSB7XG4gICAgICB0aGlzLmZpeGVkQW5jaG9yVGltZS5zZXQodGhpcy5zdGFydFRpbWUoKSlcbiAgICB9XG4gIH1cblxuICBzZXRGaXhlZEFuY2hvclBvaW50VG9FbmREYXRlVGltZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSgpKSB7XG4gICAgICB0aGlzLnJlc2V0Rml4ZWRBbmNob3JQb2ludCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kRGF0ZSgpKSB7XG4gICAgICB0aGlzLmZpeGVkQW5jaG9yRGF0ZS5zZXQodGhpcy5lbmREYXRlKCkpXG4gICAgfVxuICAgIGlmICh0aGlzLmVuZFRpbWUoKSkge1xuICAgICAgdGhpcy5maXhlZEFuY2hvclRpbWUuc2V0KHRoaXMuZW5kVGltZSgpKVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0Rml4ZWRBbmNob3JQb2ludCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpeGVkQW5jaG9yRGF0ZS5zZXQobnVsbClcbiAgICB0aGlzLmZpeGVkQW5jaG9yVGltZS5zZXQoVGVtcG9yYWwuUGxhaW5UaW1lLmZyb20oJzAwOjAwJykpXG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZ0ludGVydmFsT25BbmNob3JDaGFuZ2UoKSAmJiB0aGlzLmlzU3RhcnRBbmRFbmREYXRlc1NldCgpKSB7XG4gICAgICB0aGlzLnNoaWZ0UmFuZ2VFbmRUb1RvZGF5KClcbiAgICB9XG4gIH1cblxuICBzZXRBbmNob3JEYXRlRnJvbUZvcm0oZGF0ZUFyZzogTG9jYWxEYXRlKTogdm9pZCB7XG4gICAgaWYgKCFkYXRlQXJnKSB7XG4gICAgICB0aGlzLmZpeGVkQW5jaG9yRGF0ZS5zZXQobnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGpzRGF0ZSA9IFRpbWVVdGlsLmxvY2FsRGF0ZVRvRGF0ZShkYXRlQXJnKVxuICAgIGNvbnN0IHBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXRQbGFpbkRhdGVGcm9tSlNEYXRlKGpzRGF0ZSlcblxuICAgIGlmICghcGxhaW5EYXRlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCdJbnZhbGlkIGRhdGUnLCBwbGFpbkRhdGUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZpeGVkQW5jaG9yRGF0ZS5zZXQocGxhaW5EYXRlKVxuXG4gICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdJbnRlcnZhbE9uQW5jaG9yQ2hhbmdlKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLmZpeGVkQW5jaG9yRGF0ZSgpKSB7XG4gICAgICB0aGlzLmVkaXRvci5zaGlmdFNlbGVjdGlvblRvQW5jaG9yRGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgY2xlYXJTdGFydERhdGVUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhcnREYXRlKG51bGwpXG4gICAgdGhpcy5zZXRTdGFydFRpbWUobnVsbClcbiAgfVxuXG4gIGNsZWFyRW5kRGF0ZVRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFbmREYXRlKG51bGwpXG4gICAgdGhpcy5zZXRFbmRUaW1lKG51bGwpXG4gIH1cblxuICBjbGVhclN0YXJ0VGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXJ0VGltZShudWxsKVxuICB9XG5cbiAgY2xlYXJFbmRUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RW5kVGltZShudWxsKVxuICB9XG5cbiAgcmVzZXRGaXhlZEFuY2hvclRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5maXhlZEFuY2hvclRpbWUuc2V0KFRlbXBvcmFsLlBsYWluVGltZS5mcm9tKCcwMDowMCcpKVxuICB9XG5cbiAgc2V0QW5jaG9yVGltZUZyb21Gb3JtKGh0bWxTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWUgPSBUZW1wb3JhbFV0aWwuZ2V0UGxhaW5UaW1lRnJvbUh0bWxUaW1lU3RyaW5nKGh0bWxTdHJpbmcpXG4gICAgaWYgKCF0aW1lKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZml4ZWRBbmNob3JEYXRlKCkpIHtcbiAgICAgIHRoaXMuZml4ZWRBbmNob3JEYXRlLnNldChUZW1wb3JhbC5Ob3cucGxhaW5EYXRlSVNPKCkpXG4gICAgfVxuXG4gICAgdGhpcy5maXhlZEFuY2hvclRpbWUuc2V0KHRpbWUpXG5cbiAgICBpZiAoIXRoaXMuaXNVcGRhdGluZ0ludGVydmFsT25BbmNob3JDaGFuZ2UoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZml4ZWRBbmNob3JUaW1lKCkpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNoaWZ0U2VsZWN0aW9uVG9BbmNob3JUaW1lKClcbiAgICB9XG4gIH1cblxuICBlbWl0TWFpbkRhdGVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5jcmVhdGVFbGRlckludGVydmFsKClcbiAgICB0aGlzLl9kYXRlQ2hhbmdlRW1pdHRlci5lbWl0KGludGVydmFsKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBzZXREYXRlVGltZXNGcm9tRWxkZXJJbnRlcnZhbChpbnRlcnZhbDogSW50ZXJ2YWwpOiB2b2lkIHtcbiAgICBpZiAoIWludGVydmFsKSB7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShudWxsKVxuICAgICAgdGhpcy5zZXRFbmREYXRlKG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaW50ZXJ2YWwuc3RhcnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZUFzSlNEYXRlID0gVGltZVV0aWwuZGF0ZShpbnRlcnZhbC5zdGFydClcbiAgICAgIHRoaXMuc2V0U3RhcnREYXRlKFRlbXBvcmFsVXRpbC5nZXRQbGFpbkRhdGVGcm9tSlNEYXRlKHN0YXJ0RGF0ZUFzSlNEYXRlKSlcbiAgICAgIHRoaXMuc2V0U3RhcnRUaW1lKFRlbXBvcmFsVXRpbC5nZXRQbGFpblRpbWVGcm9tSlNEYXRlKHN0YXJ0RGF0ZUFzSlNEYXRlKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGFydERhdGUobnVsbClcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJ2YWwuZW5kKSB7XG4gICAgICBjb25zdCBlbmREYXRlQXNKU0RhdGUgPSBUaW1lVXRpbC5kYXRlKGludGVydmFsLmVuZClcbiAgICAgIHRoaXMuc2V0RW5kRGF0ZShUZW1wb3JhbFV0aWwuZ2V0UGxhaW5EYXRlRnJvbUpTRGF0ZShlbmREYXRlQXNKU0RhdGUpKVxuICAgICAgdGhpcy5zZXRFbmRUaW1lKFRlbXBvcmFsVXRpbC5nZXRQbGFpblRpbWVGcm9tSlNEYXRlKGVuZERhdGVBc0pTRGF0ZSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RW5kRGF0ZShudWxsKVxuICAgIH1cblxuICAgIHRoaXMubG9nLmRlYnVnKCdBcHBsaWVkIGludGVydmFsIHRvIHBpY2tlciBtb2RlbDonLCBpbnRlcnZhbClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWxkZXJJbnRlcnZhbCgpOiBJbnRlcnZhbCB7XG4gICAgbGV0IHN0YXJ0LFxuICAgICAgZW5kID0gbnVsbFxuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZVRpbWUoKSkge1xuICAgICAgY29uc3QganNEYXRlID0gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKHRoaXMuc3RhcnREYXRlVGltZSgpKVxuICAgICAgc3RhcnQgPSBUaW1lVXRpbC5pbnN0YW50KGpzRGF0ZSlcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kRGF0ZVRpbWUoKSkge1xuICAgICAgY29uc3QganNEYXRlID0gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKHRoaXMuZW5kRGF0ZVRpbWUoKSlcbiAgICAgIGVuZCA9IFRpbWVVdGlsLmluc3RhbnQoanNEYXRlKVxuICAgIH1cbiAgICBpZiAoIXN0YXJ0ICYmICFlbmQpIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwobnVsbCwgbnVsbClcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbChzdGFydCwgZW5kKVxuICB9XG5cbiAgcHJpdmF0ZSBzaGlmdFJhbmdlRW5kVG9Ub2RheSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdGFydEFuZEVuZERhdGVzU2V0KCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuc3RhcnREYXRlKCkudW50aWwodGhpcy5lbmREYXRlKCkpXG4gICAgdGhpcy5zZXRFbmREYXRlKFRlbXBvcmFsLk5vdy5wbGFpbkRhdGVJU08oKSlcbiAgICB0aGlzLnNldFN0YXJ0RGF0ZSh0aGlzLmVuZERhdGUoKS5zdWJ0cmFjdChkdXJhdGlvbikpXG4gIH1cblxuICBwcml2YXRlIGRlbHRhQXNUZW1wb3JhbER1cmF0aW9uKFxuICAgIHN0YXJ0RGF0ZVRpbWU6IFRlbXBvcmFsLlBsYWluRGF0ZSB8IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWUsXG4gICAgZW5kRGF0ZVRpbWU6IFRlbXBvcmFsLlBsYWluRGF0ZSB8IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWVcbiAgKTogVGVtcG9yYWwuRHVyYXRpb24ge1xuICAgIGlmICghc3RhcnREYXRlVGltZSB8fCAhZW5kRGF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBzdGFydERhdGVUaW1lLnVudGlsKGVuZERhdGVUaW1lKVxuICB9XG59XG4iXX0=
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { TemporalUtil } from '../../../../common/time/temporal-util';
|
|
2
|
-
export class PlainDateIntervalMessageRenderer {
|
|
3
|
-
static toMessage(mode, dateInterval) {
|
|
4
|
-
if (!dateInterval) {
|
|
5
|
-
return '-';
|
|
6
|
-
}
|
|
7
|
-
const startDate = dateInterval.start;
|
|
8
|
-
const endDate = dateInterval.end;
|
|
9
|
-
switch (mode) {
|
|
10
|
-
case 'years':
|
|
11
|
-
return `1y (${startDate.year})`;
|
|
12
|
-
case 'quarters':
|
|
13
|
-
return `Q${TemporalUtil.getQuarterForDate(startDate)}, ${startDate.year}`;
|
|
14
|
-
case 'months':
|
|
15
|
-
return `1m (${startDate.monthCode}, ${startDate.year})`;
|
|
16
|
-
case 'weeks':
|
|
17
|
-
return `1w (CW ${this.calendarWeek(startDate)}, ${endDate.year})`;
|
|
18
|
-
case 'days':
|
|
19
|
-
return `${this.dateRangeInDays(dateInterval)}d`;
|
|
20
|
-
default:
|
|
21
|
-
return '?';
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
static calendarWeek(date) {
|
|
25
|
-
if (!date) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
return date.weekOfYear;
|
|
29
|
-
}
|
|
30
|
-
static dateRangeInDays(dateInterval) {
|
|
31
|
-
if (!dateInterval) {
|
|
32
|
-
return 0;
|
|
33
|
-
}
|
|
34
|
-
return dateInterval.getDurationInDays();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhaW4tZGF0ZS1pbnRlcnZhbC1tZXNzYWdlLXJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy90aW1lL2VsZGVyLWludGVydmFsLXBpY2tlci9tb2RlbC9wbGFpbi1kYXRlLWludGVydmFsLW1lc3NhZ2UtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBR3BFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFrQixFQUFFLFlBQXVDO1FBQ2pGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFBO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUE7UUFFaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssT0FBTztnQkFDVixPQUFPLE9BQU8sU0FBUyxDQUFDLElBQUksR0FBRyxDQUFBO1lBQ2pDLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUMzRSxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxPQUFPLFNBQVMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLElBQUksR0FBRyxDQUFBO1lBQ3pELEtBQUssT0FBTztnQkFDVixPQUFPLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUE7WUFDbkUsS0FBSyxNQUFNO2dCQUNULE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUE7WUFDakQ7Z0JBQ0UsT0FBTyxHQUFHLENBQUE7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBd0I7UUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQXVDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsQ0FBQTtRQUNWLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQ3pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBvcmFsIH0gZnJvbSAnQGpzLXRlbXBvcmFsL3BvbHlmaWxsJ1xuaW1wb3J0IHsgQ2FsZW5kYXJNb2RlIH0gZnJvbSAnLi9pbnRlcnZhbC1waWNrZXItbW9kZWwnXG5pbXBvcnQgeyBUZW1wb3JhbFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90ZW1wb3JhbC11dGlsJ1xuaW1wb3J0IHsgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi90aW1lL3RlbXBvcmFsLXBsYWluLWRhdGUtaW50ZXJ2YWwnXG5cbmV4cG9ydCBjbGFzcyBQbGFpbkRhdGVJbnRlcnZhbE1lc3NhZ2VSZW5kZXJlciB7XG4gIHB1YmxpYyBzdGF0aWMgdG9NZXNzYWdlKG1vZGU6IENhbGVuZGFyTW9kZSwgZGF0ZUludGVydmFsOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVJbnRlcnZhbCkge1xuICAgICAgcmV0dXJuICctJ1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGVJbnRlcnZhbC5zdGFydFxuICAgIGNvbnN0IGVuZERhdGUgPSBkYXRlSW50ZXJ2YWwuZW5kXG5cbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgIGNhc2UgJ3llYXJzJzpcbiAgICAgICAgcmV0dXJuIGAxeSAoJHtzdGFydERhdGUueWVhcn0pYFxuICAgICAgY2FzZSAncXVhcnRlcnMnOlxuICAgICAgICByZXR1cm4gYFEke1RlbXBvcmFsVXRpbC5nZXRRdWFydGVyRm9yRGF0ZShzdGFydERhdGUpfSwgJHtzdGFydERhdGUueWVhcn1gXG4gICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICByZXR1cm4gYDFtICgke3N0YXJ0RGF0ZS5tb250aENvZGV9LCAke3N0YXJ0RGF0ZS55ZWFyfSlgXG4gICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIHJldHVybiBgMXcgKENXICR7dGhpcy5jYWxlbmRhcldlZWsoc3RhcnREYXRlKX0sICR7ZW5kRGF0ZS55ZWFyfSlgXG4gICAgICBjYXNlICdkYXlzJzpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZGF0ZVJhbmdlSW5EYXlzKGRhdGVJbnRlcnZhbCl9ZGBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnPydcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjYWxlbmRhcldlZWsoZGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlKTogbnVtYmVyIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBkYXRlLndlZWtPZlllYXJcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRhdGVSYW5nZUluRGF5cyhkYXRlSW50ZXJ2YWw6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwpOiBudW1iZXIge1xuICAgIGlmICghZGF0ZUludGVydmFsKSB7XG4gICAgICByZXR1cm4gMFxuICAgIH1cbiAgICByZXR1cm4gZGF0ZUludGVydmFsLmdldER1cmF0aW9uSW5EYXlzKClcbiAgfVxufVxuIl19
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export class PlainTemporalDurationMessageRenderer {
|
|
2
|
-
static toMessage(duration) {
|
|
3
|
-
if (!duration) {
|
|
4
|
-
return '∞';
|
|
5
|
-
}
|
|
6
|
-
const tmp = [];
|
|
7
|
-
if (duration.days) {
|
|
8
|
-
tmp.push(`${duration.days}d`);
|
|
9
|
-
}
|
|
10
|
-
if (duration.hours) {
|
|
11
|
-
tmp.push(`${duration.hours}h`);
|
|
12
|
-
}
|
|
13
|
-
if (duration.minutes) {
|
|
14
|
-
tmp.push(`${duration.minutes}min`);
|
|
15
|
-
}
|
|
16
|
-
if (duration.seconds) {
|
|
17
|
-
tmp.push(`${duration.seconds}s`);
|
|
18
|
-
}
|
|
19
|
-
if (!tmp.length) {
|
|
20
|
-
return '0s';
|
|
21
|
-
}
|
|
22
|
-
return tmp.join(', ');
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhaW4tdGVtcG9yYWwtZHVyYXRpb24tbWVzc2FnZS1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvdGltZS9lbGRlci1pbnRlcnZhbC1waWNrZXIvbW9kZWwvcGxhaW4tdGVtcG9yYWwtZHVyYXRpb24tbWVzc2FnZS1yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sb0NBQW9DO0lBQ3hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBMkI7UUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBQ2QsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wb3JhbCB9IGZyb20gJ0Bqcy10ZW1wb3JhbC9wb2x5ZmlsbCdcblxuZXhwb3J0IGNsYXNzIFBsYWluVGVtcG9yYWxEdXJhdGlvbk1lc3NhZ2VSZW5kZXJlciB7XG4gIHB1YmxpYyBzdGF0aWMgdG9NZXNzYWdlKGR1cmF0aW9uOiBUZW1wb3JhbC5EdXJhdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgcmV0dXJuICfiiJ4nXG4gICAgfVxuICAgIGNvbnN0IHRtcCA9IFtdXG4gICAgaWYgKGR1cmF0aW9uLmRheXMpIHtcbiAgICAgIHRtcC5wdXNoKGAke2R1cmF0aW9uLmRheXN9ZGApXG4gICAgfVxuICAgIGlmIChkdXJhdGlvbi5ob3Vycykge1xuICAgICAgdG1wLnB1c2goYCR7ZHVyYXRpb24uaG91cnN9aGApXG4gICAgfVxuICAgIGlmIChkdXJhdGlvbi5taW51dGVzKSB7XG4gICAgICB0bXAucHVzaChgJHtkdXJhdGlvbi5taW51dGVzfW1pbmApXG4gICAgfVxuICAgIGlmIChkdXJhdGlvbi5zZWNvbmRzKSB7XG4gICAgICB0bXAucHVzaChgJHtkdXJhdGlvbi5zZWNvbmRzfXNgKVxuICAgIH1cblxuICAgIGlmICghdG1wLmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcwcydcbiAgICB9XG5cbiAgICByZXR1cm4gdG1wLmpvaW4oJywgJylcbiAgfVxufVxuIl19
|