@glowgreen/gg-questionnaire-v2 0.0.1
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/bundles/glowgreen-gg-questionnaire-v2.umd.js +2102 -0
- package/bundles/glowgreen-gg-questionnaire-v2.umd.js.map +1 -0
- package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js +2 -0
- package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js.map +1 -0
- package/esm2015/glowgreen-gg-questionnaire-v2.js +11 -0
- package/esm2015/lib/enums/condition-relationship.enum.js +11 -0
- package/esm2015/lib/enums/condition-type.enum.js +15 -0
- package/esm2015/lib/enums/input-type.enum.js +20 -0
- package/esm2015/lib/enums/question-type.enum.js +17 -0
- package/esm2015/lib/enums/repeater-question-type.enum.js +11 -0
- package/esm2015/lib/enums/validation-type.enum.js +15 -0
- package/esm2015/lib/gg-questionnaire-v2.module.js +41 -0
- package/esm2015/lib/interfaces/attachment.js +15 -0
- package/esm2015/lib/interfaces/checklist-item.js +15 -0
- package/esm2015/lib/interfaces/condition-group.js +15 -0
- package/esm2015/lib/interfaces/condition.js +17 -0
- package/esm2015/lib/interfaces/question.js +41 -0
- package/esm2015/lib/interfaces/questionnaire-options.js +21 -0
- package/esm2015/lib/interfaces/questionnaire.js +15 -0
- package/esm2015/lib/interfaces/repeater-question.js +27 -0
- package/esm2015/lib/interfaces/section.js +19 -0
- package/esm2015/lib/interfaces/select-option.js +15 -0
- package/esm2015/lib/interfaces/validator.js +15 -0
- package/esm2015/lib/services/filter.service.js +258 -0
- package/esm2015/lib/services/form-constructor.service.js +245 -0
- package/esm2015/lib/services/questionnaire.service.js +644 -0
- package/esm2015/public_api.js +16 -0
- package/esm5/glowgreen-gg-questionnaire-v2.js +11 -0
- package/esm5/lib/enums/condition-relationship.enum.js +11 -0
- package/esm5/lib/enums/condition-type.enum.js +15 -0
- package/esm5/lib/enums/input-type.enum.js +20 -0
- package/esm5/lib/enums/question-type.enum.js +17 -0
- package/esm5/lib/enums/repeater-question-type.enum.js +11 -0
- package/esm5/lib/enums/validation-type.enum.js +15 -0
- package/esm5/lib/gg-questionnaire-v2.module.js +49 -0
- package/esm5/lib/interfaces/attachment.js +15 -0
- package/esm5/lib/interfaces/checklist-item.js +15 -0
- package/esm5/lib/interfaces/condition-group.js +15 -0
- package/esm5/lib/interfaces/condition.js +17 -0
- package/esm5/lib/interfaces/question.js +41 -0
- package/esm5/lib/interfaces/questionnaire-options.js +21 -0
- package/esm5/lib/interfaces/questionnaire.js +15 -0
- package/esm5/lib/interfaces/repeater-question.js +27 -0
- package/esm5/lib/interfaces/section.js +19 -0
- package/esm5/lib/interfaces/select-option.js +15 -0
- package/esm5/lib/interfaces/validator.js +15 -0
- package/esm5/lib/services/filter.service.js +445 -0
- package/esm5/lib/services/form-constructor.service.js +460 -0
- package/esm5/lib/services/questionnaire.service.js +943 -0
- package/esm5/public_api.js +16 -0
- package/fesm2015/glowgreen-gg-questionnaire-v2.js +1194 -0
- package/fesm2015/glowgreen-gg-questionnaire-v2.js.map +1 -0
- package/fesm5/glowgreen-gg-questionnaire-v2.js +1897 -0
- package/fesm5/glowgreen-gg-questionnaire-v2.js.map +1 -0
- package/glowgreen-gg-questionnaire-v2.d.ts +6 -0
- package/glowgreen-gg-questionnaire-v2.metadata.json +1 -0
- package/lib/enums/condition-relationship.enum.d.ts +4 -0
- package/lib/enums/condition-type.enum.d.ts +8 -0
- package/lib/enums/input-type.enum.d.ts +13 -0
- package/lib/enums/question-type.enum.d.ts +10 -0
- package/lib/enums/repeater-question-type.enum.d.ts +4 -0
- package/lib/enums/validation-type.enum.d.ts +8 -0
- package/lib/gg-questionnaire-v2.module.d.ts +5 -0
- package/lib/interfaces/attachment.d.ts +4 -0
- package/lib/interfaces/checklist-item.d.ts +4 -0
- package/lib/interfaces/condition-group.d.ts +6 -0
- package/lib/interfaces/condition.d.ts +6 -0
- package/lib/interfaces/question.d.ts +24 -0
- package/lib/interfaces/questionnaire-options.d.ts +7 -0
- package/lib/interfaces/questionnaire.d.ts +5 -0
- package/lib/interfaces/repeater-question.d.ts +15 -0
- package/lib/interfaces/section.d.ts +8 -0
- package/lib/interfaces/select-option.d.ts +4 -0
- package/lib/interfaces/validator.d.ts +5 -0
- package/lib/services/filter.service.d.ts +62 -0
- package/lib/services/form-constructor.service.d.ts +78 -0
- package/lib/services/questionnaire.service.d.ts +163 -0
- package/package.json +21 -0
- package/public_api.d.ts +17 -0
|
@@ -0,0 +1,943 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import * as tslib_1 from "tslib";
|
|
6
|
+
import { Injectable, Inject, EventEmitter } from '@angular/core';
|
|
7
|
+
import { FormConstructorService } from './form-constructor.service';
|
|
8
|
+
import { FormArray } from '@angular/forms';
|
|
9
|
+
import * as _ from 'lodash';
|
|
10
|
+
import { QuestionType } from '../enums/question-type.enum';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "./form-constructor.service";
|
|
13
|
+
var QuestionnaireService = /** @class */ (function () {
|
|
14
|
+
function QuestionnaireService(formConstuctor, options) {
|
|
15
|
+
this.formConstuctor = formConstuctor;
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.dataChangedEvent = new EventEmitter();
|
|
18
|
+
this.skippable = false;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Loads a questionnaire from data.
|
|
22
|
+
* @param questionnaire The questionnaire data to load, often parsed JSON from the editor.
|
|
23
|
+
* @param savedState The saved state of the questionnaire, often from localstorage.
|
|
24
|
+
* @returns null
|
|
25
|
+
* @author Will Poulson
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Loads a questionnaire from data.
|
|
29
|
+
* @author Will Poulson
|
|
30
|
+
* @param {?} questionnaire The questionnaire data to load, often parsed JSON from the editor.
|
|
31
|
+
* @param {?=} savedState The saved state of the questionnaire, often from localstorage.
|
|
32
|
+
* @return {?} null
|
|
33
|
+
*/
|
|
34
|
+
QuestionnaireService.prototype.loadQuestionnaire = /**
|
|
35
|
+
* Loads a questionnaire from data.
|
|
36
|
+
* @author Will Poulson
|
|
37
|
+
* @param {?} questionnaire The questionnaire data to load, often parsed JSON from the editor.
|
|
38
|
+
* @param {?=} savedState The saved state of the questionnaire, often from localstorage.
|
|
39
|
+
* @return {?} null
|
|
40
|
+
*/
|
|
41
|
+
function (questionnaire, savedState) {
|
|
42
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
43
|
+
var e_1, _a, e_2, _b, newData, _c, _d, section, _e, _f, question, control;
|
|
44
|
+
return tslib_1.__generator(this, function (_g) {
|
|
45
|
+
switch (_g.label) {
|
|
46
|
+
case 0:
|
|
47
|
+
this.originalQuestionnaire = _.cloneDeep(questionnaire);
|
|
48
|
+
this.currentQuestionnaire = _.cloneDeep(questionnaire);
|
|
49
|
+
if (savedState && Object.keys(savedState).length > 0) {
|
|
50
|
+
newData = this.formConstuctor.generateFormsForQuestionnaire(_.cloneDeep(this.originalQuestionnaire), this.currentQuestionnaireForm, true);
|
|
51
|
+
this.formConstuctor.constructRepeaterFromsFromState(savedState, newData.sections, newData.forms);
|
|
52
|
+
this.currentQuestionnaireForm = newData.forms;
|
|
53
|
+
this.currentQuestionnaireForm.patchValue(savedState);
|
|
54
|
+
}
|
|
55
|
+
return [4 /*yield*/, this.updateQuestionnaire(savedState)];
|
|
56
|
+
case 1:
|
|
57
|
+
_g.sent();
|
|
58
|
+
try {
|
|
59
|
+
for (_c = tslib_1.__values(this.currentQuestionnaire.sections), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
60
|
+
section = _d.value;
|
|
61
|
+
try {
|
|
62
|
+
for (_e = tslib_1.__values(section.questions), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
63
|
+
question = _f.value;
|
|
64
|
+
control = this.currentQuestionnaireForm.get([section.name, question.name]);
|
|
65
|
+
if (!control.value && question.defaultValue) {
|
|
66
|
+
control.setValue(question.defaultValue);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
71
|
+
finally {
|
|
72
|
+
try {
|
|
73
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
74
|
+
}
|
|
75
|
+
finally { if (e_2) throw e_2.error; }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
80
|
+
finally {
|
|
81
|
+
try {
|
|
82
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
83
|
+
}
|
|
84
|
+
finally { if (e_1) throw e_1.error; }
|
|
85
|
+
}
|
|
86
|
+
if (this.options.skipToFirstSection) {
|
|
87
|
+
this.currentSectionName = Object.keys(this.currentQuestionnaireForm.controls)[0];
|
|
88
|
+
}
|
|
89
|
+
if (this.options.skipToFirstQuestion) {
|
|
90
|
+
this.currentQuestionName = Object.keys(this.currentSection.formGroup.controls)[0];
|
|
91
|
+
}
|
|
92
|
+
return [2 /*return*/];
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Updates the current questionnaire, used when a value is updated to check conditions.
|
|
99
|
+
* @param savedState The saved state of the questionnaire, often from localstorage.
|
|
100
|
+
* @returns null
|
|
101
|
+
* @author Will Poulson
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* Updates the current questionnaire, used when a value is updated to check conditions.
|
|
105
|
+
* @author Will Poulson
|
|
106
|
+
* @param {?=} savedState The saved state of the questionnaire, often from localstorage.
|
|
107
|
+
* @return {?} null
|
|
108
|
+
*/
|
|
109
|
+
QuestionnaireService.prototype.updateQuestionnaire = /**
|
|
110
|
+
* Updates the current questionnaire, used when a value is updated to check conditions.
|
|
111
|
+
* @author Will Poulson
|
|
112
|
+
* @param {?=} savedState The saved state of the questionnaire, often from localstorage.
|
|
113
|
+
* @return {?} null
|
|
114
|
+
*/
|
|
115
|
+
function (savedState) {
|
|
116
|
+
var _this = this;
|
|
117
|
+
/** @type {?} */
|
|
118
|
+
var newData = this.formConstuctor.generateFormsForQuestionnaire(_.cloneDeep(this.originalQuestionnaire), this.currentQuestionnaireForm);
|
|
119
|
+
this.currentQuestionnaireForm = newData.forms;
|
|
120
|
+
this.currentQuestionnaire.sections = newData.sections;
|
|
121
|
+
if (savedState && Object.keys(savedState).length > 0) {
|
|
122
|
+
this.currentQuestionnaireForm.patchValue(savedState);
|
|
123
|
+
}
|
|
124
|
+
if (this.questionnaireValueChangeSubscription) {
|
|
125
|
+
this.questionnaireValueChangeSubscription.unsubscribe();
|
|
126
|
+
}
|
|
127
|
+
if (this.questionValueChangeSubscription) {
|
|
128
|
+
this.questionValueChangeSubscription.unsubscribe();
|
|
129
|
+
}
|
|
130
|
+
this.questionnaireValueChangeSubscription = this.currentQuestionnaireForm.valueChanges.subscribe((/**
|
|
131
|
+
* @return {?}
|
|
132
|
+
*/
|
|
133
|
+
function () {
|
|
134
|
+
_this.dataChangedEvent.emit();
|
|
135
|
+
_this.updateQuestionnaire(_this.currentQuestionnaireForm.getRawValue());
|
|
136
|
+
}));
|
|
137
|
+
if (this.currentQuestion) {
|
|
138
|
+
this.questionValueChangeSubscription = this.currentQuestion.formControl.valueChanges.subscribe((/**
|
|
139
|
+
* @return {?}
|
|
140
|
+
*/
|
|
141
|
+
function () {
|
|
142
|
+
_this.clearFields(_this.currentQuestion.data.clearfields);
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
};
|
|
147
|
+
Object.defineProperty(QuestionnaireService.prototype, "isValid", {
|
|
148
|
+
get: /**
|
|
149
|
+
* @return {?}
|
|
150
|
+
*/
|
|
151
|
+
function () {
|
|
152
|
+
return this.currentQuestionnaireForm.valid;
|
|
153
|
+
},
|
|
154
|
+
enumerable: true,
|
|
155
|
+
configurable: true
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* @param {?} name
|
|
159
|
+
* @return {?}
|
|
160
|
+
*/
|
|
161
|
+
QuestionnaireService.prototype.sectionValid = /**
|
|
162
|
+
* @param {?} name
|
|
163
|
+
* @return {?}
|
|
164
|
+
*/
|
|
165
|
+
function (name) {
|
|
166
|
+
return this.currentQuestionnaireForm.get(name).valid;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Clears all the fields parsed
|
|
170
|
+
* @param clearfields An array of strings, paths to clear.
|
|
171
|
+
* @author Will Poulson
|
|
172
|
+
*/
|
|
173
|
+
/**
|
|
174
|
+
* Clears all the fields parsed
|
|
175
|
+
* @author Will Poulson
|
|
176
|
+
* @private
|
|
177
|
+
* @param {?} clearfields An array of strings, paths to clear.
|
|
178
|
+
* @return {?}
|
|
179
|
+
*/
|
|
180
|
+
QuestionnaireService.prototype.clearFields = /**
|
|
181
|
+
* Clears all the fields parsed
|
|
182
|
+
* @author Will Poulson
|
|
183
|
+
* @private
|
|
184
|
+
* @param {?} clearfields An array of strings, paths to clear.
|
|
185
|
+
* @return {?}
|
|
186
|
+
*/
|
|
187
|
+
function (clearfields) {
|
|
188
|
+
var e_3, _a;
|
|
189
|
+
if (!clearfields || clearfields.length === 0) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
for (var clearfields_1 = tslib_1.__values(clearfields), clearfields_1_1 = clearfields_1.next(); !clearfields_1_1.done; clearfields_1_1 = clearfields_1.next()) {
|
|
194
|
+
var clearfield = clearfields_1_1.value;
|
|
195
|
+
/** @type {?} */
|
|
196
|
+
var control = this.currentQuestionnaireForm.get(clearfield);
|
|
197
|
+
if (control) {
|
|
198
|
+
control.reset(undefined);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
203
|
+
finally {
|
|
204
|
+
try {
|
|
205
|
+
if (clearfields_1_1 && !clearfields_1_1.done && (_a = clearfields_1.return)) _a.call(clearfields_1);
|
|
206
|
+
}
|
|
207
|
+
finally { if (e_3) throw e_3.error; }
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Unloads the current questionnaire.
|
|
212
|
+
* Useful when exiting a questionnaire page or completing a questionnaire.
|
|
213
|
+
* @author Will Poulson
|
|
214
|
+
*/
|
|
215
|
+
/**
|
|
216
|
+
* Unloads the current questionnaire.
|
|
217
|
+
* Useful when exiting a questionnaire page or completing a questionnaire.
|
|
218
|
+
* @author Will Poulson
|
|
219
|
+
* @return {?}
|
|
220
|
+
*/
|
|
221
|
+
QuestionnaireService.prototype.unloadQuestionnaire = /**
|
|
222
|
+
* Unloads the current questionnaire.
|
|
223
|
+
* Useful when exiting a questionnaire page or completing a questionnaire.
|
|
224
|
+
* @author Will Poulson
|
|
225
|
+
* @return {?}
|
|
226
|
+
*/
|
|
227
|
+
function () {
|
|
228
|
+
this.originalQuestionnaire = undefined;
|
|
229
|
+
this.currentQuestionnaireForm = undefined;
|
|
230
|
+
this.currentQuestionnaire = undefined;
|
|
231
|
+
this.currentSectionName = undefined;
|
|
232
|
+
this.currentQuestionName = undefined;
|
|
233
|
+
};
|
|
234
|
+
Object.defineProperty(QuestionnaireService.prototype, "currentSection", {
|
|
235
|
+
/**
|
|
236
|
+
* Gets the current selected section.
|
|
237
|
+
* @returns An object containing the section data and the related form group.
|
|
238
|
+
* @author Will Poulson
|
|
239
|
+
*/
|
|
240
|
+
get: /**
|
|
241
|
+
* Gets the current selected section.
|
|
242
|
+
* @author Will Poulson
|
|
243
|
+
* @return {?} An object containing the section data and the related form group.
|
|
244
|
+
*/
|
|
245
|
+
function () {
|
|
246
|
+
var _this = this;
|
|
247
|
+
if (!this.currentSectionName) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
/** @type {?} */
|
|
251
|
+
var data = this.currentQuestionnaire.sections.find((/**
|
|
252
|
+
* @param {?} x
|
|
253
|
+
* @return {?}
|
|
254
|
+
*/
|
|
255
|
+
function (x) {
|
|
256
|
+
return x.name === _this.currentSectionName;
|
|
257
|
+
}));
|
|
258
|
+
if (!data) {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
data: data,
|
|
263
|
+
formGroup: (/** @type {?} */ (this.currentQuestionnaireForm.get(data.name)))
|
|
264
|
+
};
|
|
265
|
+
},
|
|
266
|
+
enumerable: true,
|
|
267
|
+
configurable: true
|
|
268
|
+
});
|
|
269
|
+
Object.defineProperty(QuestionnaireService.prototype, "availableSections", {
|
|
270
|
+
/**
|
|
271
|
+
* Gets all the avaialble sections.
|
|
272
|
+
* @returns An array of all avaialble sections.
|
|
273
|
+
* @author Will Poulson
|
|
274
|
+
*/
|
|
275
|
+
get: /**
|
|
276
|
+
* Gets all the avaialble sections.
|
|
277
|
+
* @author Will Poulson
|
|
278
|
+
* @return {?} An array of all avaialble sections.
|
|
279
|
+
*/
|
|
280
|
+
function () {
|
|
281
|
+
if (!this.currentQuestionnaire || !this.currentQuestionnaire.sections) {
|
|
282
|
+
return [];
|
|
283
|
+
}
|
|
284
|
+
return this.currentQuestionnaire.sections;
|
|
285
|
+
},
|
|
286
|
+
enumerable: true,
|
|
287
|
+
configurable: true
|
|
288
|
+
});
|
|
289
|
+
Object.defineProperty(QuestionnaireService.prototype, "currentData", {
|
|
290
|
+
/**
|
|
291
|
+
* Gets the current data for the entire questionnaire.
|
|
292
|
+
* @returns An object of data.
|
|
293
|
+
* @author Will Poulson
|
|
294
|
+
*/
|
|
295
|
+
get: /**
|
|
296
|
+
* Gets the current data for the entire questionnaire.
|
|
297
|
+
* @author Will Poulson
|
|
298
|
+
* @return {?} An object of data.
|
|
299
|
+
*/
|
|
300
|
+
function () {
|
|
301
|
+
return this.currentQuestionnaireForm.getRawValue();
|
|
302
|
+
},
|
|
303
|
+
enumerable: true,
|
|
304
|
+
configurable: true
|
|
305
|
+
});
|
|
306
|
+
Object.defineProperty(QuestionnaireService.prototype, "currentQuestion", {
|
|
307
|
+
/**
|
|
308
|
+
* Gets the current selected question.
|
|
309
|
+
* @returns An object containing the question data and the related form control.
|
|
310
|
+
* @author Will Poulson
|
|
311
|
+
*/
|
|
312
|
+
get: /**
|
|
313
|
+
* Gets the current selected question.
|
|
314
|
+
* @author Will Poulson
|
|
315
|
+
* @return {?} An object containing the question data and the related form control.
|
|
316
|
+
*/
|
|
317
|
+
function () {
|
|
318
|
+
var _this = this;
|
|
319
|
+
if (!this.currentQuestionName) {
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
/** @type {?} */
|
|
323
|
+
var data = this.currentSection.data.questions.find((/**
|
|
324
|
+
* @param {?} x
|
|
325
|
+
* @return {?}
|
|
326
|
+
*/
|
|
327
|
+
function (x) {
|
|
328
|
+
return x.name === _this.currentQuestionName;
|
|
329
|
+
}));
|
|
330
|
+
if (!data) {
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
data: data,
|
|
335
|
+
formControl: (/** @type {?} */ (this.currentSection.formGroup.get(data.name)))
|
|
336
|
+
};
|
|
337
|
+
},
|
|
338
|
+
enumerable: true,
|
|
339
|
+
configurable: true
|
|
340
|
+
});
|
|
341
|
+
/**
|
|
342
|
+
* Navigates to the next question.
|
|
343
|
+
* If there is no question to navigate to it will reject with a out of bounds exception.
|
|
344
|
+
* If allowSkipRequiredField is false then it will reject if the current question is invalid.
|
|
345
|
+
* If emitSectionFinishEvent is true then it will emit an event if it's navigating past the length of questions.
|
|
346
|
+
* @returns A promise which will resolve when the question has been navigated to.
|
|
347
|
+
* @author Will Poulson
|
|
348
|
+
*/
|
|
349
|
+
/**
|
|
350
|
+
* Navigates to the next question.
|
|
351
|
+
* If there is no question to navigate to it will reject with a out of bounds exception.
|
|
352
|
+
* If allowSkipRequiredField is false then it will reject if the current question is invalid.
|
|
353
|
+
* If emitSectionFinishEvent is true then it will emit an event if it's navigating past the length of questions.
|
|
354
|
+
* @author Will Poulson
|
|
355
|
+
* @return {?} A promise which will resolve when the question has been navigated to.
|
|
356
|
+
*/
|
|
357
|
+
QuestionnaireService.prototype.nextQuestion = /**
|
|
358
|
+
* Navigates to the next question.
|
|
359
|
+
* If there is no question to navigate to it will reject with a out of bounds exception.
|
|
360
|
+
* If allowSkipRequiredField is false then it will reject if the current question is invalid.
|
|
361
|
+
* If emitSectionFinishEvent is true then it will emit an event if it's navigating past the length of questions.
|
|
362
|
+
* @author Will Poulson
|
|
363
|
+
* @return {?} A promise which will resolve when the question has been navigated to.
|
|
364
|
+
*/
|
|
365
|
+
function () {
|
|
366
|
+
var _this = this;
|
|
367
|
+
return new Promise((/**
|
|
368
|
+
* @param {?} resolve
|
|
369
|
+
* @param {?} reject
|
|
370
|
+
* @return {?}
|
|
371
|
+
*/
|
|
372
|
+
function (resolve, reject) {
|
|
373
|
+
if (!_this.options.allowSkipRequiredField) {
|
|
374
|
+
if (!_this.currentQuestion.formControl.valid) {
|
|
375
|
+
return reject('Current question is invalid');
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
_this.getCurrentQuestionIndex().then((/**
|
|
379
|
+
* @param {?} currentIndex
|
|
380
|
+
* @return {?}
|
|
381
|
+
*/
|
|
382
|
+
function (currentIndex) {
|
|
383
|
+
/** @type {?} */
|
|
384
|
+
var newIndex = currentIndex + 1;
|
|
385
|
+
_this.navigateToQuestion(newIndex).then((/**
|
|
386
|
+
* @return {?}
|
|
387
|
+
*/
|
|
388
|
+
function () {
|
|
389
|
+
return resolve();
|
|
390
|
+
})).catch((/**
|
|
391
|
+
* @param {?} error
|
|
392
|
+
* @return {?}
|
|
393
|
+
*/
|
|
394
|
+
function (error) {
|
|
395
|
+
return reject(error);
|
|
396
|
+
}));
|
|
397
|
+
})).catch((/**
|
|
398
|
+
* @param {?} error
|
|
399
|
+
* @return {?}
|
|
400
|
+
*/
|
|
401
|
+
function (error) {
|
|
402
|
+
return reject(error);
|
|
403
|
+
}));
|
|
404
|
+
}));
|
|
405
|
+
};
|
|
406
|
+
/**
|
|
407
|
+
* Navigates to the previous question.
|
|
408
|
+
* If there is no question to navigate to it will reject with a out of bounds exception.
|
|
409
|
+
* If allowNavigateBackwards is false then it will reject.
|
|
410
|
+
* @returns A promise which will resolve when the question has been navigated to.
|
|
411
|
+
* @author Will Poulson
|
|
412
|
+
*/
|
|
413
|
+
/**
|
|
414
|
+
* Navigates to the previous question.
|
|
415
|
+
* If there is no question to navigate to it will reject with a out of bounds exception.
|
|
416
|
+
* If allowNavigateBackwards is false then it will reject.
|
|
417
|
+
* @author Will Poulson
|
|
418
|
+
* @return {?} A promise which will resolve when the question has been navigated to.
|
|
419
|
+
*/
|
|
420
|
+
QuestionnaireService.prototype.prevQuestion = /**
|
|
421
|
+
* Navigates to the previous question.
|
|
422
|
+
* If there is no question to navigate to it will reject with a out of bounds exception.
|
|
423
|
+
* If allowNavigateBackwards is false then it will reject.
|
|
424
|
+
* @author Will Poulson
|
|
425
|
+
* @return {?} A promise which will resolve when the question has been navigated to.
|
|
426
|
+
*/
|
|
427
|
+
function () {
|
|
428
|
+
var _this = this;
|
|
429
|
+
return new Promise((/**
|
|
430
|
+
* @param {?} resolve
|
|
431
|
+
* @param {?} reject
|
|
432
|
+
* @return {?}
|
|
433
|
+
*/
|
|
434
|
+
function (resolve, reject) {
|
|
435
|
+
if (!_this.options.allowNavigateBackwards) {
|
|
436
|
+
return reject('This questionnaire does not allow for backwards navigation');
|
|
437
|
+
}
|
|
438
|
+
_this.getCurrentQuestionIndex().then((/**
|
|
439
|
+
* @param {?} currentIndex
|
|
440
|
+
* @return {?}
|
|
441
|
+
*/
|
|
442
|
+
function (currentIndex) {
|
|
443
|
+
/** @type {?} */
|
|
444
|
+
var newIndex = currentIndex - 1;
|
|
445
|
+
_this.navigateToQuestion(newIndex).then((/**
|
|
446
|
+
* @return {?}
|
|
447
|
+
*/
|
|
448
|
+
function () {
|
|
449
|
+
return resolve();
|
|
450
|
+
})).catch((/**
|
|
451
|
+
* @param {?} error
|
|
452
|
+
* @return {?}
|
|
453
|
+
*/
|
|
454
|
+
function (error) {
|
|
455
|
+
return reject(error);
|
|
456
|
+
}));
|
|
457
|
+
})).catch((/**
|
|
458
|
+
* @param {?} error
|
|
459
|
+
* @return {?}
|
|
460
|
+
*/
|
|
461
|
+
function (error) {
|
|
462
|
+
return reject(error);
|
|
463
|
+
}));
|
|
464
|
+
}));
|
|
465
|
+
};
|
|
466
|
+
/**
|
|
467
|
+
* Gets the current questions index.
|
|
468
|
+
* @returns A promise which resolves a number.
|
|
469
|
+
* @author Will Poulson
|
|
470
|
+
*/
|
|
471
|
+
/**
|
|
472
|
+
* Gets the current questions index.
|
|
473
|
+
* @author Will Poulson
|
|
474
|
+
* @private
|
|
475
|
+
* @return {?} A promise which resolves a number.
|
|
476
|
+
*/
|
|
477
|
+
QuestionnaireService.prototype.getCurrentQuestionIndex = /**
|
|
478
|
+
* Gets the current questions index.
|
|
479
|
+
* @author Will Poulson
|
|
480
|
+
* @private
|
|
481
|
+
* @return {?} A promise which resolves a number.
|
|
482
|
+
*/
|
|
483
|
+
function () {
|
|
484
|
+
var _this = this;
|
|
485
|
+
return new Promise((/**
|
|
486
|
+
* @param {?} resolve
|
|
487
|
+
* @param {?} reject
|
|
488
|
+
* @return {?}
|
|
489
|
+
*/
|
|
490
|
+
function (resolve, reject) {
|
|
491
|
+
/** @type {?} */
|
|
492
|
+
var currentIndex = _this.currentSection.data.questions.indexOf(_this.currentQuestion.data);
|
|
493
|
+
if (currentIndex === -1) {
|
|
494
|
+
return reject('Could not find current question');
|
|
495
|
+
}
|
|
496
|
+
return resolve(currentIndex);
|
|
497
|
+
}));
|
|
498
|
+
};
|
|
499
|
+
/**
|
|
500
|
+
* Checks a question is in bounds then navigates to it.
|
|
501
|
+
* @param index The index to navigate to.
|
|
502
|
+
* @returns A promise which will resolve when the question has been navigated to.
|
|
503
|
+
* @author Will Poulson
|
|
504
|
+
*/
|
|
505
|
+
/**
|
|
506
|
+
* Checks a question is in bounds then navigates to it.
|
|
507
|
+
* @author Will Poulson
|
|
508
|
+
* @param {?} index The index to navigate to.
|
|
509
|
+
* @return {?} A promise which will resolve when the question has been navigated to.
|
|
510
|
+
*/
|
|
511
|
+
QuestionnaireService.prototype.navigateToQuestion = /**
|
|
512
|
+
* Checks a question is in bounds then navigates to it.
|
|
513
|
+
* @author Will Poulson
|
|
514
|
+
* @param {?} index The index to navigate to.
|
|
515
|
+
* @return {?} A promise which will resolve when the question has been navigated to.
|
|
516
|
+
*/
|
|
517
|
+
function (index) {
|
|
518
|
+
var _this = this;
|
|
519
|
+
return new Promise((/**
|
|
520
|
+
* @param {?} resolve
|
|
521
|
+
* @param {?} reject
|
|
522
|
+
* @return {?}
|
|
523
|
+
*/
|
|
524
|
+
function (resolve, reject) {
|
|
525
|
+
if (_this.currentSection.data.questions.length - 1 < index || index < 0) {
|
|
526
|
+
return reject('Out of bounds exception');
|
|
527
|
+
}
|
|
528
|
+
_this.currentQuestionName = _this.currentSection.data.questions[index].name;
|
|
529
|
+
return resolve();
|
|
530
|
+
}));
|
|
531
|
+
};
|
|
532
|
+
/**
|
|
533
|
+
* Navigates to the next section.
|
|
534
|
+
* @returns A promise which will resolve when the section has been navigated to.
|
|
535
|
+
* @author Will Poulson
|
|
536
|
+
*/
|
|
537
|
+
/**
|
|
538
|
+
* Navigates to the next section.
|
|
539
|
+
* @author Will Poulson
|
|
540
|
+
* @return {?} A promise which will resolve when the section has been navigated to.
|
|
541
|
+
*/
|
|
542
|
+
QuestionnaireService.prototype.nextSection = /**
|
|
543
|
+
* Navigates to the next section.
|
|
544
|
+
* @author Will Poulson
|
|
545
|
+
* @return {?} A promise which will resolve when the section has been navigated to.
|
|
546
|
+
*/
|
|
547
|
+
function () {
|
|
548
|
+
var _this = this;
|
|
549
|
+
return new Promise((/**
|
|
550
|
+
* @param {?} resolve
|
|
551
|
+
* @param {?} reject
|
|
552
|
+
* @return {?}
|
|
553
|
+
*/
|
|
554
|
+
function (resolve, reject) {
|
|
555
|
+
_this.getCurrentSectionIndex().then((/**
|
|
556
|
+
* @param {?} currentIndex
|
|
557
|
+
* @return {?}
|
|
558
|
+
*/
|
|
559
|
+
function (currentIndex) {
|
|
560
|
+
/** @type {?} */
|
|
561
|
+
var newIndex = currentIndex + 1;
|
|
562
|
+
_this.navigateToSection(newIndex).then((/**
|
|
563
|
+
* @return {?}
|
|
564
|
+
*/
|
|
565
|
+
function () {
|
|
566
|
+
return resolve();
|
|
567
|
+
})).catch((/**
|
|
568
|
+
* @param {?} error
|
|
569
|
+
* @return {?}
|
|
570
|
+
*/
|
|
571
|
+
function (error) {
|
|
572
|
+
return reject(error);
|
|
573
|
+
}));
|
|
574
|
+
})).catch((/**
|
|
575
|
+
* @param {?} error
|
|
576
|
+
* @return {?}
|
|
577
|
+
*/
|
|
578
|
+
function (error) {
|
|
579
|
+
return reject(error);
|
|
580
|
+
}));
|
|
581
|
+
}));
|
|
582
|
+
};
|
|
583
|
+
/**
|
|
584
|
+
* Navigates to the previous section.
|
|
585
|
+
* @returns A promise which will resolve when the section has been navigated to.
|
|
586
|
+
* @author Will Poulson
|
|
587
|
+
*/
|
|
588
|
+
/**
|
|
589
|
+
* Navigates to the previous section.
|
|
590
|
+
* @author Will Poulson
|
|
591
|
+
* @return {?} A promise which will resolve when the section has been navigated to.
|
|
592
|
+
*/
|
|
593
|
+
QuestionnaireService.prototype.prevSection = /**
|
|
594
|
+
* Navigates to the previous section.
|
|
595
|
+
* @author Will Poulson
|
|
596
|
+
* @return {?} A promise which will resolve when the section has been navigated to.
|
|
597
|
+
*/
|
|
598
|
+
function () {
|
|
599
|
+
var _this = this;
|
|
600
|
+
return new Promise((/**
|
|
601
|
+
* @param {?} resolve
|
|
602
|
+
* @param {?} reject
|
|
603
|
+
* @return {?}
|
|
604
|
+
*/
|
|
605
|
+
function (resolve, reject) {
|
|
606
|
+
_this.getCurrentSectionIndex().then((/**
|
|
607
|
+
* @param {?} currentIndex
|
|
608
|
+
* @return {?}
|
|
609
|
+
*/
|
|
610
|
+
function (currentIndex) {
|
|
611
|
+
/** @type {?} */
|
|
612
|
+
var newIndex = currentIndex - 1;
|
|
613
|
+
_this.navigateToQuestion(newIndex).then((/**
|
|
614
|
+
* @return {?}
|
|
615
|
+
*/
|
|
616
|
+
function () {
|
|
617
|
+
return resolve();
|
|
618
|
+
})).catch((/**
|
|
619
|
+
* @param {?} error
|
|
620
|
+
* @return {?}
|
|
621
|
+
*/
|
|
622
|
+
function (error) {
|
|
623
|
+
return reject(error);
|
|
624
|
+
}));
|
|
625
|
+
})).catch((/**
|
|
626
|
+
* @param {?} error
|
|
627
|
+
* @return {?}
|
|
628
|
+
*/
|
|
629
|
+
function (error) {
|
|
630
|
+
return reject(error);
|
|
631
|
+
}));
|
|
632
|
+
}));
|
|
633
|
+
};
|
|
634
|
+
/**
|
|
635
|
+
* Gets the current section index.
|
|
636
|
+
* @returns A promise which resolves a number.
|
|
637
|
+
* @author Will Poulson
|
|
638
|
+
*/
|
|
639
|
+
/**
|
|
640
|
+
* Gets the current section index.
|
|
641
|
+
* @author Will Poulson
|
|
642
|
+
* @private
|
|
643
|
+
* @return {?} A promise which resolves a number.
|
|
644
|
+
*/
|
|
645
|
+
QuestionnaireService.prototype.getCurrentSectionIndex = /**
|
|
646
|
+
* Gets the current section index.
|
|
647
|
+
* @author Will Poulson
|
|
648
|
+
* @private
|
|
649
|
+
* @return {?} A promise which resolves a number.
|
|
650
|
+
*/
|
|
651
|
+
function () {
|
|
652
|
+
var _this = this;
|
|
653
|
+
return new Promise((/**
|
|
654
|
+
* @param {?} resolve
|
|
655
|
+
* @param {?} reject
|
|
656
|
+
* @return {?}
|
|
657
|
+
*/
|
|
658
|
+
function (resolve, reject) {
|
|
659
|
+
/** @type {?} */
|
|
660
|
+
var currentIndex = _this.currentQuestionnaire.sections.indexOf(_this.currentSection.data);
|
|
661
|
+
if (currentIndex === -1) {
|
|
662
|
+
return reject('Could not find current section');
|
|
663
|
+
}
|
|
664
|
+
return resolve(currentIndex);
|
|
665
|
+
}));
|
|
666
|
+
};
|
|
667
|
+
/**
|
|
668
|
+
* Checks a section is in bounds then navigates to it.
|
|
669
|
+
* @param index The index to navigate to.
|
|
670
|
+
* @returns A promise which will resolve when the section has been navigated to.
|
|
671
|
+
* @author Will Poulson
|
|
672
|
+
*/
|
|
673
|
+
/**
|
|
674
|
+
* Checks a section is in bounds then navigates to it.
|
|
675
|
+
* @author Will Poulson
|
|
676
|
+
* @param {?} index The index to navigate to.
|
|
677
|
+
* @return {?} A promise which will resolve when the section has been navigated to.
|
|
678
|
+
*/
|
|
679
|
+
QuestionnaireService.prototype.navigateToSection = /**
|
|
680
|
+
* Checks a section is in bounds then navigates to it.
|
|
681
|
+
* @author Will Poulson
|
|
682
|
+
* @param {?} index The index to navigate to.
|
|
683
|
+
* @return {?} A promise which will resolve when the section has been navigated to.
|
|
684
|
+
*/
|
|
685
|
+
function (index) {
|
|
686
|
+
var _this = this;
|
|
687
|
+
return new Promise((/**
|
|
688
|
+
* @param {?} resolve
|
|
689
|
+
* @param {?} reject
|
|
690
|
+
* @return {?}
|
|
691
|
+
*/
|
|
692
|
+
function (resolve, reject) {
|
|
693
|
+
if (_this.currentQuestionnaire.sections.length - 1 < index || index < 0) {
|
|
694
|
+
return reject('Out of bounds exception');
|
|
695
|
+
}
|
|
696
|
+
_this.currentSectionName = _this.currentQuestionnaire.sections[index].name;
|
|
697
|
+
return resolve();
|
|
698
|
+
}));
|
|
699
|
+
};
|
|
700
|
+
/**
|
|
701
|
+
* Answers the current question with the parsed value.
|
|
702
|
+
* @param answer The value to answer the question with.
|
|
703
|
+
* @author Will Poulson
|
|
704
|
+
*/
|
|
705
|
+
/**
|
|
706
|
+
* Answers the current question with the parsed value.
|
|
707
|
+
* @author Will Poulson
|
|
708
|
+
* @param {?} answer The value to answer the question with.
|
|
709
|
+
* @param {?=} sendToNextQuestion
|
|
710
|
+
* @return {?}
|
|
711
|
+
*/
|
|
712
|
+
QuestionnaireService.prototype.answerCurrentQuestion = /**
|
|
713
|
+
* Answers the current question with the parsed value.
|
|
714
|
+
* @author Will Poulson
|
|
715
|
+
* @param {?} answer The value to answer the question with.
|
|
716
|
+
* @param {?=} sendToNextQuestion
|
|
717
|
+
* @return {?}
|
|
718
|
+
*/
|
|
719
|
+
function (answer, sendToNextQuestion) {
|
|
720
|
+
var _this = this;
|
|
721
|
+
this.currentQuestion.formControl.setValue(answer);
|
|
722
|
+
if (sendToNextQuestion && this.skippable) { // Timeout to prevent skipping glitch.
|
|
723
|
+
this.skippable = false;
|
|
724
|
+
setTimeout((/**
|
|
725
|
+
* @return {?}
|
|
726
|
+
*/
|
|
727
|
+
function () {
|
|
728
|
+
_this.nextQuestion();
|
|
729
|
+
_this.skippable = true;
|
|
730
|
+
}), 150);
|
|
731
|
+
}
|
|
732
|
+
};
|
|
733
|
+
/**
|
|
734
|
+
* Adds a repeater item to the current question.
|
|
735
|
+
* Current question must be of type Repeater.
|
|
736
|
+
* @returns A promise which resolves when the repeater item has been added.
|
|
737
|
+
* @author Will Poulson
|
|
738
|
+
*/
|
|
739
|
+
/**
|
|
740
|
+
* Adds a repeater item to the current question.
|
|
741
|
+
* Current question must be of type Repeater.
|
|
742
|
+
* @author Will Poulson
|
|
743
|
+
* @return {?} A promise which resolves when the repeater item has been added.
|
|
744
|
+
*/
|
|
745
|
+
QuestionnaireService.prototype.addRepeaterItem = /**
|
|
746
|
+
* Adds a repeater item to the current question.
|
|
747
|
+
* Current question must be of type Repeater.
|
|
748
|
+
* @author Will Poulson
|
|
749
|
+
* @return {?} A promise which resolves when the repeater item has been added.
|
|
750
|
+
*/
|
|
751
|
+
function () {
|
|
752
|
+
var _this = this;
|
|
753
|
+
return new Promise((/**
|
|
754
|
+
* @param {?} resolve
|
|
755
|
+
* @param {?} reject
|
|
756
|
+
* @return {?}
|
|
757
|
+
*/
|
|
758
|
+
function (resolve, reject) {
|
|
759
|
+
if (_this.currentQuestion.data.type !== QuestionType.Repeater) {
|
|
760
|
+
return reject("Current question isn't a repeater");
|
|
761
|
+
}
|
|
762
|
+
/** @type {?} */
|
|
763
|
+
var repeaterForm = _this.formConstuctor.generateFormsForRepeater(_this.currentQuestion.data);
|
|
764
|
+
if (!repeaterForm) {
|
|
765
|
+
return reject("Repeater template failed to generate. May be due to the repeater having no items in the editor.");
|
|
766
|
+
}
|
|
767
|
+
if (!(_this.currentQuestion.formControl instanceof FormArray)) {
|
|
768
|
+
return reject("The current questions control isn't of type FormArray");
|
|
769
|
+
}
|
|
770
|
+
_this.currentQuestion.formControl.push(repeaterForm);
|
|
771
|
+
return resolve();
|
|
772
|
+
}));
|
|
773
|
+
};
|
|
774
|
+
/**
|
|
775
|
+
* Removes a repeater item on the current question.
|
|
776
|
+
* Current question must be of type Repeater.
|
|
777
|
+
* @param index The index at which to remove.
|
|
778
|
+
* @returns A promise which resolves when the repeater item has been removed.
|
|
779
|
+
* @author Will Poulson
|
|
780
|
+
*/
|
|
781
|
+
/**
|
|
782
|
+
* Removes a repeater item on the current question.
|
|
783
|
+
* Current question must be of type Repeater.
|
|
784
|
+
* @author Will Poulson
|
|
785
|
+
* @param {?} index The index at which to remove.
|
|
786
|
+
* @return {?} A promise which resolves when the repeater item has been removed.
|
|
787
|
+
*/
|
|
788
|
+
QuestionnaireService.prototype.removeRepeaterItem = /**
|
|
789
|
+
* Removes a repeater item on the current question.
|
|
790
|
+
* Current question must be of type Repeater.
|
|
791
|
+
* @author Will Poulson
|
|
792
|
+
* @param {?} index The index at which to remove.
|
|
793
|
+
* @return {?} A promise which resolves when the repeater item has been removed.
|
|
794
|
+
*/
|
|
795
|
+
function (index) {
|
|
796
|
+
var _this = this;
|
|
797
|
+
return new Promise((/**
|
|
798
|
+
* @param {?} resolve
|
|
799
|
+
* @param {?} reject
|
|
800
|
+
* @return {?}
|
|
801
|
+
*/
|
|
802
|
+
function (resolve, reject) {
|
|
803
|
+
if (_this.currentQuestion.data.type !== QuestionType.Repeater) {
|
|
804
|
+
return reject("Current question isn't a repeater");
|
|
805
|
+
}
|
|
806
|
+
if (!(_this.currentQuestion.formControl instanceof FormArray)) {
|
|
807
|
+
return reject("The current questions control isn't of type FormArray");
|
|
808
|
+
}
|
|
809
|
+
_this.currentQuestion.formControl.removeAt(index);
|
|
810
|
+
return resolve();
|
|
811
|
+
}));
|
|
812
|
+
};
|
|
813
|
+
/**
|
|
814
|
+
* Returns the display text for a given repeater item
|
|
815
|
+
* @param index The index at which to get the label for.
|
|
816
|
+
* @returns A string which is the display text.
|
|
817
|
+
* @author Will Poulson
|
|
818
|
+
*/
|
|
819
|
+
/**
|
|
820
|
+
* Returns the display text for a given repeater item
|
|
821
|
+
* @author Will Poulson
|
|
822
|
+
* @param {?} index The index at which to get the label for.
|
|
823
|
+
* @return {?} A string which is the display text.
|
|
824
|
+
*/
|
|
825
|
+
QuestionnaireService.prototype.getRepeaterItemLabel = /**
|
|
826
|
+
* Returns the display text for a given repeater item
|
|
827
|
+
* @author Will Poulson
|
|
828
|
+
* @param {?} index The index at which to get the label for.
|
|
829
|
+
* @return {?} A string which is the display text.
|
|
830
|
+
*/
|
|
831
|
+
function (index) {
|
|
832
|
+
var e_4, _a;
|
|
833
|
+
if (!this.currentQuestion.formControl || !(this.currentQuestion.formControl instanceof FormArray)) {
|
|
834
|
+
return '';
|
|
835
|
+
}
|
|
836
|
+
/** @type {?} */
|
|
837
|
+
var repeaterItem = this.currentQuestion.formControl.controls[index];
|
|
838
|
+
if (!repeaterItem) {
|
|
839
|
+
return '';
|
|
840
|
+
}
|
|
841
|
+
/** @type {?} */
|
|
842
|
+
var template = this.currentQuestion.data.repeaterDisplayName;
|
|
843
|
+
/** @type {?} */
|
|
844
|
+
var splitTemplate = template.split(' ');
|
|
845
|
+
/** @type {?} */
|
|
846
|
+
var displayArray = [];
|
|
847
|
+
try {
|
|
848
|
+
for (var splitTemplate_1 = tslib_1.__values(splitTemplate), splitTemplate_1_1 = splitTemplate_1.next(); !splitTemplate_1_1.done; splitTemplate_1_1 = splitTemplate_1.next()) {
|
|
849
|
+
var templateItem = splitTemplate_1_1.value;
|
|
850
|
+
if (templateItem.match(/\[.*?\]/)) {
|
|
851
|
+
/** @type {?} */
|
|
852
|
+
var path = templateItem.replace(/[\[\]']+/g, '');
|
|
853
|
+
/** @type {?} */
|
|
854
|
+
var item = repeaterItem.get(path);
|
|
855
|
+
/** @type {?} */
|
|
856
|
+
var value = item.value ? item.value : '?';
|
|
857
|
+
displayArray.push(value);
|
|
858
|
+
}
|
|
859
|
+
else {
|
|
860
|
+
displayArray.push(templateItem);
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
865
|
+
finally {
|
|
866
|
+
try {
|
|
867
|
+
if (splitTemplate_1_1 && !splitTemplate_1_1.done && (_a = splitTemplate_1.return)) _a.call(splitTemplate_1);
|
|
868
|
+
}
|
|
869
|
+
finally { if (e_4) throw e_4.error; }
|
|
870
|
+
}
|
|
871
|
+
/** @type {?} */
|
|
872
|
+
var display = displayArray.join(' ');
|
|
873
|
+
return display;
|
|
874
|
+
};
|
|
875
|
+
QuestionnaireService.decorators = [
|
|
876
|
+
{ type: Injectable, args: [{
|
|
877
|
+
providedIn: 'root'
|
|
878
|
+
},] }
|
|
879
|
+
];
|
|
880
|
+
/** @nocollapse */
|
|
881
|
+
QuestionnaireService.ctorParameters = function () { return [
|
|
882
|
+
{ type: FormConstructorService },
|
|
883
|
+
{ type: undefined, decorators: [{ type: Inject, args: ['options',] }] }
|
|
884
|
+
]; };
|
|
885
|
+
/** @nocollapse */ QuestionnaireService.ngInjectableDef = i0.defineInjectable({ factory: function QuestionnaireService_Factory() { return new QuestionnaireService(i0.inject(i1.FormConstructorService), i0.inject("options")); }, token: QuestionnaireService, providedIn: "root" });
|
|
886
|
+
return QuestionnaireService;
|
|
887
|
+
}());
|
|
888
|
+
export { QuestionnaireService };
|
|
889
|
+
if (false) {
|
|
890
|
+
/** @type {?} */
|
|
891
|
+
QuestionnaireService.prototype.dataChangedEvent;
|
|
892
|
+
/**
|
|
893
|
+
* @type {?}
|
|
894
|
+
* @private
|
|
895
|
+
*/
|
|
896
|
+
QuestionnaireService.prototype.originalQuestionnaire;
|
|
897
|
+
/**
|
|
898
|
+
* @type {?}
|
|
899
|
+
* @private
|
|
900
|
+
*/
|
|
901
|
+
QuestionnaireService.prototype.currentQuestionnaire;
|
|
902
|
+
/**
|
|
903
|
+
* @type {?}
|
|
904
|
+
* @private
|
|
905
|
+
*/
|
|
906
|
+
QuestionnaireService.prototype.currentQuestionnaireForm;
|
|
907
|
+
/**
|
|
908
|
+
* @type {?}
|
|
909
|
+
* @private
|
|
910
|
+
*/
|
|
911
|
+
QuestionnaireService.prototype.currentSectionName;
|
|
912
|
+
/**
|
|
913
|
+
* @type {?}
|
|
914
|
+
* @private
|
|
915
|
+
*/
|
|
916
|
+
QuestionnaireService.prototype.currentQuestionName;
|
|
917
|
+
/**
|
|
918
|
+
* @type {?}
|
|
919
|
+
* @private
|
|
920
|
+
*/
|
|
921
|
+
QuestionnaireService.prototype.questionnaireValueChangeSubscription;
|
|
922
|
+
/**
|
|
923
|
+
* @type {?}
|
|
924
|
+
* @private
|
|
925
|
+
*/
|
|
926
|
+
QuestionnaireService.prototype.questionValueChangeSubscription;
|
|
927
|
+
/**
|
|
928
|
+
* @type {?}
|
|
929
|
+
* @private
|
|
930
|
+
*/
|
|
931
|
+
QuestionnaireService.prototype.skippable;
|
|
932
|
+
/**
|
|
933
|
+
* @type {?}
|
|
934
|
+
* @private
|
|
935
|
+
*/
|
|
936
|
+
QuestionnaireService.prototype.formConstuctor;
|
|
937
|
+
/**
|
|
938
|
+
* @type {?}
|
|
939
|
+
* @private
|
|
940
|
+
*/
|
|
941
|
+
QuestionnaireService.prototype.options;
|
|
942
|
+
}
|
|
943
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdsb3dncmVlbi9nZy1xdWVzdGlvbm5haXJlLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRSxPQUFPLEVBQThCLFNBQVMsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBSXBGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBRTNEO0lBbUJFLDhCQUNVLGNBQXNDLEVBQ25CLE9BQTZCO1FBRGhELG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQWpCbkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFhN0QsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUt0QixDQUFDO0lBRUw7Ozs7OztPQU1HOzs7Ozs7OztJQUNVLGdEQUFpQjs7Ozs7OztJQUE5QixVQUErQixhQUE0QixFQUFFLFVBQW1COzs7Ozs7d0JBQzlFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFFdkQsSUFBSSxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM5QyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIs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QUFFLEVBQUUsQ0FBQzs7d0JBQzVDLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQzs7d0JBQzdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHO29CQUMzQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDTCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNqQzthQUNGOzs7Ozs7Ozs7O1lBRUssT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3RDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O2dCQWxlRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQVpRLHNCQUFzQjtnREErQjFCLE1BQU0sU0FBQyxTQUFTOzs7K0JBaENyQjtDQThlQyxBQW5lRCxJQW1lQztTQWhlWSxvQkFBb0I7OztJQUMvQixnREFBcUU7Ozs7O0lBRXJFLHFEQUE2Qzs7Ozs7SUFFN0Msb0RBQTRDOzs7OztJQUM1Qyx3REFBNEM7Ozs7O0lBRTVDLGtEQUFtQzs7Ozs7SUFDbkMsbURBQW9DOzs7OztJQUVwQyxvRUFBMkQ7Ozs7O0lBQzNELCtEQUFzRDs7Ozs7SUFFdEQseUNBQTBCOzs7OztJQUd4Qiw4Q0FBOEM7Ozs7O0lBQzlDLHVDQUF3RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLWNvbnN0cnVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVlc3Rpb25uYWlyZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlY3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9ubmFpcmUtb3B0aW9ucyc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlU2VydmljZSB7XG4gIHB1YmxpYyBkYXRhQ2hhbmdlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgb3JpZ2luYWxRdWVzdGlvbm5haXJlOiBRdWVzdGlvbm5haXJlO1xuXG4gIHByaXZhdGUgY3VycmVudFF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9ubmFpcmU7XG4gIHByaXZhdGUgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXA7XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VjdGlvbk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBjdXJyZW50UXVlc3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBxdWVzdGlvbm5haXJlVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBza2lwcGFibGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1Db25zdHVjdG9yOiBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ29wdGlvbnMnKSBwcml2YXRlIG9wdGlvbnM6IFF1ZXN0aW9ubmFpcmVPcHRpb25zXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgcXVlc3Rpb25uYWlyZSBmcm9tIGRhdGEuXG4gICAqIEBwYXJhbSBxdWVzdGlvbm5haXJlIFRoZSBxdWVzdGlvbm5haXJlIGRhdGEgdG8gbG9hZCwgb2Z0ZW4gcGFyc2VkIEpTT04gZnJvbSB0aGUgZWRpdG9yLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgb2YgdGhlIHF1ZXN0aW9ubmFpcmUsIG9mdGVuIGZyb20gbG9jYWxzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBudWxsXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFF1ZXN0aW9ubmFpcmUocXVlc3Rpb25uYWlyZTogUXVlc3Rpb25uYWlyZSwgc2F2ZWRTdGF0ZT86IE9iamVjdCk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUgPSBfLmNsb25lRGVlcChxdWVzdGlvbm5haXJlKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlID0gXy5jbG9uZURlZXAocXVlc3Rpb25uYWlyZSk7XG5cbiAgICBpZiAoc2F2ZWRTdGF0ZSAmJiBPYmplY3Qua2V5cyhzYXZlZFN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5mb3JtQ29uc3R1Y3Rvci5nZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICAgICAgXy5jbG9uZURlZXAodGhpcy5vcmlnaW5hbFF1ZXN0aW9ubmFpcmUpLFxuICAgICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybUNvbnN0dWN0b3IuY29uc3RydWN0UmVwZWF0ZXJGcm9tc0Zyb21TdGF0ZShzYXZlZFN0YXRlLCBuZXdEYXRhLnNlY3Rpb25zLCBuZXdEYXRhLmZvcm1zKTtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID0gbmV3RGF0YS5mb3JtcztcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnBhdGNoVmFsdWUoc2F2ZWRTdGF0ZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVRdWVzdGlvbm5haXJlKHNhdmVkU3RhdGUpO1xuXG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSk7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSAmJiBxdWVzdGlvbi5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNraXBUb0ZpcnN0U2VjdGlvbikge1xuICAgICAgdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5jb250cm9scylbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5za2lwVG9GaXJzdFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLmN1cnJlbnRTZWN0aW9uLmZvcm1Hcm91cC5jb250cm9scylbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgcXVlc3Rpb25uYWlyZSwgdXNlZCB3aGVuIGEgdmFsdWUgaXMgdXBkYXRlZCB0byBjaGVjayBjb25kaXRpb25zLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgb2YgdGhlIHF1ZXN0aW9ubmFpcmUsIG9mdGVuIGZyb20gbG9jYWxzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBudWxsXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlUXVlc3Rpb25uYWlyZShzYXZlZFN0YXRlPzogT2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5mb3JtQ29uc3R1Y3Rvci5nZW5lcmF0ZUZvcm1zRm9yUXVlc3Rpb25uYWlyZShcbiAgICAgIF8uY2xvbmVEZWVwKHRoaXMub3JpZ2luYWxRdWVzdGlvbm5haXJlKSxcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtXG4gICAgKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA9IG5ld0RhdGEuZm9ybXM7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucyA9IG5ld0RhdGEuc2VjdGlvbnM7XG5cbiAgICBpZiAoc2F2ZWRTdGF0ZSAmJiBPYmplY3Qua2V5cyhzYXZlZFN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5wYXRjaFZhbHVlKHNhdmVkU3RhdGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXN0aW9ubmFpcmVWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhQ2hhbmdlZEV2ZW50LmVtaXQoKTtcbiAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25uYWlyZSh0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWVsZHModGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YS5jbGVhcmZpZWxkcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLnZhbGlkO1xuICB9XG5cbiAgcHVibGljIHNlY3Rpb25WYWxpZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KG5hbWUpLnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgdGhlIGZpZWxkcyBwYXJzZWRcbiAgICogQHBhcmFtIGNsZWFyZmllbGRzIEFuIGFycmF5IG9mIHN0cmluZ3MsIHBhdGhzIHRvIGNsZWFyLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckZpZWxkcyhjbGVhcmZpZWxkczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmICghY2xlYXJmaWVsZHMgfHwgY2xlYXJmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGVhcmZpZWxkIG9mIGNsZWFyZmllbGRzKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KGNsZWFyZmllbGQpO1xuXG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sLnJlc2V0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVubG9hZHMgdGhlIGN1cnJlbnQgcXVlc3Rpb25uYWlyZS5cbiAgICogVXNlZnVsIHdoZW4gZXhpdGluZyBhIHF1ZXN0aW9ubmFpcmUgcGFnZSBvciBjb21wbGV0aW5nIGEgcXVlc3Rpb25uYWlyZS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyB1bmxvYWRRdWVzdGlvbm5haXJlKCkge1xuICAgIHRoaXMub3JpZ2luYWxRdWVzdGlvbm5haXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgc2VjdGlvbi5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlY3Rpb24gZGF0YSBhbmQgdGhlIHJlbGF0ZWQgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlY3Rpb24oKTogeyBkYXRhOiBTZWN0aW9uOyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jdXJyZW50U2VjdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmZpbmQoKHgpID0+IHtcbiAgICAgIHJldHVybiB4Lm5hbWUgPT09IHRoaXMuY3VycmVudFNlY3Rpb25OYW1lO1xuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGZvcm1Hcm91cDogdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KGRhdGEubmFtZSkgYXMgRm9ybUdyb3VwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCB0aGUgYXZhaWFsYmxlIHNlY3Rpb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgYXZhaWFsYmxlIHNlY3Rpb25zLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBhdmFpbGFibGVTZWN0aW9ucygpOiBBcnJheTxTZWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlIHx8ICF0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGF0YSBmb3IgdGhlIGVudGlyZSBxdWVzdGlvbm5haXJlLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgZGF0YS5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldFJhd1ZhbHVlKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHNlbGVjdGVkIHF1ZXN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcXVlc3Rpb24gZGF0YSBhbmQgdGhlIHJlbGF0ZWQgZm9ybSBjb250cm9sLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UXVlc3Rpb24oKTogeyBkYXRhOiBRdWVzdGlvbjsgZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDsgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jdXJyZW50UXVlc3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5maW5kKCh4KSA9PiB7XG4gICAgICByZXR1cm4geC5uYW1lID09PSB0aGlzLmN1cnJlbnRRdWVzdGlvbk5hbWU7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZm9ybUNvbnRyb2w6IHRoaXMuY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmdldChkYXRhLm5hbWUpIGFzIEFic3RyYWN0Q29udHJvbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IHF1ZXN0aW9uLlxuICAgKiBJZiB0aGVyZSBpcyBubyBxdWVzdGlvbiB0byBuYXZpZ2F0ZSB0byBpdCB3aWxsIHJlamVjdCB3aXRoIGEgb3V0IG9mIGJvdW5kcyBleGNlcHRpb24uXG4gICAqIElmIGFsbG93U2tpcFJlcXVpcmVkRmllbGQgaXMgZmFsc2UgdGhlbiBpdCB3aWxsIHJlamVjdCBpZiB0aGUgY3VycmVudCBxdWVzdGlvbiBpcyBpbnZhbGlkLlxuICAgKiBJZiBlbWl0U2VjdGlvbkZpbmlzaEV2ZW50IGlzIHRydWUgdGhlbiBpdCB3aWxsIGVtaXQgYW4gZXZlbnQgaWYgaXQncyBuYXZpZ2F0aW5nIHBhc3QgdGhlIGxlbmd0aCBvZiBxdWVzdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgcXVlc3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5leHRRdWVzdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dTa2lwUmVxdWlyZWRGaWVsZCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdCgnQ3VycmVudCBxdWVzdGlvbiBpcyBpbnZhbGlkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5nZXRDdXJyZW50UXVlc3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUXVlc3Rpb24obmV3SW5kZXgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgcXVlc3Rpb24uXG4gICAqIElmIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIHRvIG5hdmlnYXRlIHRvIGl0IHdpbGwgcmVqZWN0IHdpdGggYSBvdXQgb2YgYm91bmRzIGV4Y2VwdGlvbi5cbiAgICogSWYgYWxsb3dOYXZpZ2F0ZUJhY2t3YXJkcyBpcyBmYWxzZSB0aGVuIGl0IHdpbGwgcmVqZWN0LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBwcmV2UXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93TmF2aWdhdGVCYWNrd2FyZHMpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnVGhpcyBxdWVzdGlvbm5haXJlIGRvZXMgbm90IGFsbG93IGZvciBiYWNrd2FyZHMgbmF2aWdhdGlvbicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEN1cnJlbnRRdWVzdGlvbkluZGV4KCkudGhlbigoY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY3VycmVudEluZGV4IC0gMTtcblxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9RdWVzdGlvbihuZXdJbmRleCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBxdWVzdGlvbnMgaW5kZXguXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBhIG51bWJlci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFF1ZXN0aW9uSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5pbmRleE9mKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCdDb3VsZCBub3QgZmluZCBjdXJyZW50IHF1ZXN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGN1cnJlbnRJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGEgcXVlc3Rpb24gaXMgaW4gYm91bmRzIHRoZW4gbmF2aWdhdGVzIHRvIGl0LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHF1ZXN0aW9uIGhhcyBiZWVuIG5hdmlnYXRlZCB0by5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUXVlc3Rpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhLnF1ZXN0aW9ucy5sZW5ndGggLSAxIDwgaW5kZXggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ091dCBvZiBib3VuZHMgZXhjZXB0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uTmFtZSA9IHRoaXMuY3VycmVudFNlY3Rpb24uZGF0YS5xdWVzdGlvbnNbaW5kZXhdLm5hbWU7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBzZWN0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNlY3Rpb24gaGFzIGJlZW4gbmF2aWdhdGVkIHRvLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIG5leHRTZWN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWN0aW9uSW5kZXgoKS50aGVuKChjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9TZWN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHNlY3Rpb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgc2VjdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgcHJldlNlY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFNlY3Rpb25JbmRleCgpLnRoZW4oKGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1F1ZXN0aW9uKG5ld0luZGV4KS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHNlY3Rpb24gaW5kZXguXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBhIG51bWJlci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFNlY3Rpb25JbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRRdWVzdGlvbm5haXJlLnNlY3Rpb25zLmluZGV4T2YodGhpcy5jdXJyZW50U2VjdGlvbi5kYXRhKTtcblxuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgnQ291bGQgbm90IGZpbmQgY3VycmVudCBzZWN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGN1cnJlbnRJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGEgc2VjdGlvbiBpcyBpbiBib3VuZHMgdGhlbiBuYXZpZ2F0ZXMgdG8gaXQuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gbmF2aWdhdGUgdG8uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgd2hlbiB0aGUgc2VjdGlvbiBoYXMgYmVlbiBuYXZpZ2F0ZWQgdG8uXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGVUb1NlY3Rpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9ucy5sZW5ndGggLSAxIDwgaW5kZXggfHwgaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoJ091dCBvZiBib3VuZHMgZXhjZXB0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudFNlY3Rpb25OYW1lID0gdGhpcy5jdXJyZW50UXVlc3Rpb25uYWlyZS5zZWN0aW9uc1tpbmRleF0ubmFtZTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGUgY3VycmVudCBxdWVzdGlvbiB3aXRoIHRoZSBwYXJzZWQgdmFsdWUuXG4gICAqIEBwYXJhbSBhbnN3ZXIgVGhlIHZhbHVlIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gd2l0aC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBhbnN3ZXJDdXJyZW50UXVlc3Rpb24oYW5zd2VyOiBhbnksIHNlbmRUb05leHRRdWVzdGlvbj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbnN3ZXIpO1xuICAgIGlmIChzZW5kVG9OZXh0UXVlc3Rpb24gJiYgdGhpcy5za2lwcGFibGUpIHsgLy8gVGltZW91dCB0byBwcmV2ZW50IHNraXBwaW5nIGdsaXRjaC5cbiAgICAgIHRoaXMuc2tpcHBhYmxlID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5uZXh0UXVlc3Rpb24oKTtcbiAgICAgICAgdGhpcy5za2lwcGFibGUgPSB0cnVlO1xuICAgICAgfSwgMTUwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlcGVhdGVyIGl0ZW0gdG8gdGhlIGN1cnJlbnQgcXVlc3Rpb24uXG4gICAqIEN1cnJlbnQgcXVlc3Rpb24gbXVzdCBiZSBvZiB0eXBlIFJlcGVhdGVyLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiB0aGUgcmVwZWF0ZXIgaXRlbSBoYXMgYmVlbiBhZGRlZC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBhZGRSZXBlYXRlckl0ZW0oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbi5kYXRhLnR5cGUgIT09IFF1ZXN0aW9uVHlwZS5SZXBlYXRlcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBDdXJyZW50IHF1ZXN0aW9uIGlzbid0IGEgcmVwZWF0ZXJgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcGVhdGVyRm9ybSA9IHRoaXMuZm9ybUNvbnN0dWN0b3IuZ2VuZXJhdGVGb3Jtc0ZvclJlcGVhdGVyKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEpO1xuXG4gICAgICBpZiAoIXJlcGVhdGVyRm9ybSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBSZXBlYXRlciB0ZW1wbGF0ZSBmYWlsZWQgdG8gZ2VuZXJhdGUuIE1heSBiZSBkdWUgdG8gdGhlIHJlcGVhdGVyIGhhdmluZyBubyBpdGVtcyBpbiB0aGUgZWRpdG9yLmApO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICghKHRoaXMuY3VycmVudFF1ZXN0aW9uLmZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGBUaGUgY3VycmVudCBxdWVzdGlvbnMgY29udHJvbCBpc24ndCBvZiB0eXBlIEZvcm1BcnJheWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5wdXNoKHJlcGVhdGVyRm9ybSk7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZXBlYXRlciBpdGVtIG9uIHRoZSBjdXJyZW50IHF1ZXN0aW9uLlxuICAgKiBDdXJyZW50IHF1ZXN0aW9uIG11c3QgYmUgb2YgdHlwZSBSZXBlYXRlci5cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBhdCB3aGljaCB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIHRoZSByZXBlYXRlciBpdGVtIGhhcyBiZWVuIHJlbW92ZWQuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUmVwZWF0ZXJJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uLmRhdGEudHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoYEN1cnJlbnQgcXVlc3Rpb24gaXNuJ3QgYSByZXBlYXRlcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoISh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChgVGhlIGN1cnJlbnQgcXVlc3Rpb25zIGNvbnRyb2wgaXNuJ3Qgb2YgdHlwZSBGb3JtQXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkaXNwbGF5IHRleHQgZm9yIGEgZ2l2ZW4gcmVwZWF0ZXIgaXRlbVxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGF0IHdoaWNoIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZyB3aGljaCBpcyB0aGUgZGlzcGxheSB0ZXh0LlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHVibGljIGdldFJlcGVhdGVySXRlbUxhYmVsKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jdXJyZW50UXVlc3Rpb24uZm9ybUNvbnRyb2wgfHwgISh0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCByZXBlYXRlckl0ZW0gPSB0aGlzLmN1cnJlbnRRdWVzdGlvbi5mb3JtQ29udHJvbC5jb250cm9sc1tpbmRleF07XG5cbiAgICBpZiAoIXJlcGVhdGVySXRlbSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jdXJyZW50UXVlc3Rpb24uZGF0YS5yZXBlYXRlckRpc3BsYXlOYW1lO1xuICAgIGNvbnN0IHNwbGl0VGVtcGxhdGUgPSB0ZW1wbGF0ZS5zcGxpdCgnICcpO1xuXG4gICAgY29uc3QgZGlzcGxheUFycmF5ID0gW107XG4gICAgZm9yIChjb25zdCB0ZW1wbGF0ZUl0ZW0gb2Ygc3BsaXRUZW1wbGF0ZSkge1xuICAgICAgaWYgKHRlbXBsYXRlSXRlbS5tYXRjaCgvXFxbLio/XFxdLykpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRlbXBsYXRlSXRlbS5yZXBsYWNlKC9bXFxbXFxdJ10rL2csICcnKTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlcGVhdGVySXRlbS5nZXQocGF0aCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiAnPyc7XG4gICAgICAgIGRpc3BsYXlBcnJheS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXlBcnJheS5wdXNoKHRlbXBsYXRlSXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGxheSA9IGRpc3BsYXlBcnJheS5qb2luKCcgJyk7XG4gICAgcmV0dXJuIGRpc3BsYXk7XG4gIH1cbn1cbiJdfQ==
|