@vgip/meta-ui 1.1.7 → 1.2.3
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/{esm2015/lib/common/fieldNormalizer/boolean.js → esm2020/lib/common/fieldNormalizer/boolean.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/datetime.js → esm2020/lib/common/fieldNormalizer/datetime.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/index.js → esm2020/lib/common/fieldNormalizer/index.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/number.js → esm2020/lib/common/fieldNormalizer/number.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/options.js → esm2020/lib/common/fieldNormalizer/options.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/radio.js → esm2020/lib/common/fieldNormalizer/radio.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/reference.js → esm2020/lib/common/fieldNormalizer/reference.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/richtext.js → esm2020/lib/common/fieldNormalizer/richtext.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/string.js → esm2020/lib/common/fieldNormalizer/string.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/text.js → esm2020/lib/common/fieldNormalizer/text.mjs} +0 -0
- package/{esm2015/lib/common/fieldNormalizer/uniqueNameFilter.js → esm2020/lib/common/fieldNormalizer/uniqueNameFilter.mjs} +0 -0
- package/esm2020/lib/common/metaAutofocus.directive.mjs +35 -0
- package/esm2020/lib/common/metaIcons.pipe.mjs +29 -0
- package/esm2020/lib/common/metaModel.pipe.mjs +25 -0
- package/esm2020/lib/common/metaNormalizer.mjs +309 -0
- package/esm2020/lib/common/metaStripHtml.pipe.mjs +22 -0
- package/{esm2015/lib/common/utils/colorThemes.js → esm2020/lib/common/utils/colorThemes.mjs} +0 -0
- package/{esm2015/lib/common/utils/indexedDbStore/index.js → esm2020/lib/common/utils/indexedDbStore/index.mjs} +0 -0
- package/esm2020/lib/common/utils/relativeTimeBuilder.mjs +49 -0
- package/{esm2015/lib/common/utils/templateBuilder.js → esm2020/lib/common/utils/templateBuilder.mjs} +0 -0
- package/esm2020/lib/field.mjs +2175 -0
- package/esm2020/lib/fieldAbstract.mjs +198 -0
- package/esm2020/lib/fieldBoolean/index.mjs +51 -0
- package/esm2020/lib/fieldDatetime/index.mjs +337 -0
- package/esm2020/lib/fieldInput/index.mjs +444 -0
- package/esm2020/lib/fieldRadio/index.mjs +87 -0
- package/esm2020/lib/fieldRichtext/index.mjs +85 -0
- package/esm2020/lib/fieldText/index.mjs +65 -0
- package/esm2020/lib/fieldUnknown/index.mjs +19 -0
- package/esm2020/lib/index.mjs +165 -0
- package/esm2020/lib/services/metaContext/index.mjs +35 -0
- package/esm2020/lib/services/metaMsg/index.mjs +84 -0
- package/esm2020/lib/services/metaReference/index.mjs +94 -0
- package/esm2020/lib/services/metaResource/index.mjs +139 -0
- package/esm2020/lib/services/metaResource/metaHttpClient.mjs +64 -0
- package/esm2020/lib/services/metaTracker/index.mjs +31 -0
- package/esm2020/lib/services/resourceDrafts/index.mjs +68 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/{esm2015/vgip-meta-ui.js → esm2020/vgip-meta-ui.mjs} +0 -0
- package/fesm2015/vgip-meta-ui.mjs +5207 -0
- package/fesm2015/vgip-meta-ui.mjs.map +1 -0
- package/fesm2020/vgip-meta-ui.mjs +5207 -0
- package/fesm2020/vgip-meta-ui.mjs.map +1 -0
- package/lib/common/metaAutofocus.directive.d.ts +3 -0
- package/lib/common/metaIcons.pipe.d.ts +3 -0
- package/lib/common/metaModel.pipe.d.ts +3 -0
- package/lib/common/metaStripHtml.pipe.d.ts +3 -0
- package/lib/field.d.ts +260 -1
- package/lib/fieldAbstract.d.ts +3 -0
- package/lib/fieldBoolean/index.d.ts +3 -0
- package/lib/fieldDatetime/index.d.ts +3 -0
- package/lib/fieldInput/index.d.ts +3 -0
- package/lib/fieldRadio/index.d.ts +3 -0
- package/lib/fieldRichtext/index.d.ts +3 -0
- package/lib/fieldText/index.d.ts +3 -0
- package/lib/fieldUnknown/index.d.ts +3 -0
- package/lib/index.d.ts +28 -8
- package/lib/services/metaContext/index.d.ts +3 -0
- package/lib/services/metaMsg/index.d.ts +3 -0
- package/lib/services/metaReference/index.d.ts +3 -0
- package/lib/services/metaResource/index.d.ts +3 -0
- package/lib/services/metaResource/metaHttpClient.d.ts +3 -0
- package/lib/services/metaTracker/index.d.ts +3 -0
- package/lib/services/resourceDrafts/index.d.ts +3 -0
- package/package.json +19 -7
- package/vgip-meta-ui.d.ts +1 -0
- package/bundles/vgip-meta-ui.umd.js +0 -6370
- package/bundles/vgip-meta-ui.umd.js.map +0 -1
- package/esm2015/lib/common/metaAutofocus.directive.js +0 -35
- package/esm2015/lib/common/metaIcons.pipe.js +0 -28
- package/esm2015/lib/common/metaModel.pipe.js +0 -22
- package/esm2015/lib/common/metaNormalizer.js +0 -311
- package/esm2015/lib/common/metaStripHtml.pipe.js +0 -18
- package/esm2015/lib/common/utils/relativeTimeBuilder.js +0 -51
- package/esm2015/lib/field.js +0 -157
- package/esm2015/lib/fieldAbstract.js +0 -195
- package/esm2015/lib/fieldBoolean/index.js +0 -50
- package/esm2015/lib/fieldComposite/index.js +0 -41
- package/esm2015/lib/fieldDatetime/index.js +0 -334
- package/esm2015/lib/fieldInput/index.js +0 -444
- package/esm2015/lib/fieldList/index.js +0 -68
- package/esm2015/lib/fieldRadio/index.js +0 -85
- package/esm2015/lib/fieldReference/index.js +0 -817
- package/esm2015/lib/fieldRichtext/index.js +0 -82
- package/esm2015/lib/fieldSelect/index.js +0 -448
- package/esm2015/lib/fieldText/index.js +0 -66
- package/esm2015/lib/fieldUnknown/index.js +0 -16
- package/esm2015/lib/index.js +0 -105
- package/esm2015/lib/layout/index.js +0 -155
- package/esm2015/lib/refDialog/index.js +0 -133
- package/esm2015/lib/resource/index.js +0 -428
- package/esm2015/lib/resourceCard/index.js +0 -56
- package/esm2015/lib/services/metaContext/index.js +0 -34
- package/esm2015/lib/services/metaMsg/index.js +0 -86
- package/esm2015/lib/services/metaReference/index.js +0 -98
- package/esm2015/lib/services/metaResource/index.js +0 -141
- package/esm2015/lib/services/metaResource/metaHttpClient.js +0 -65
- package/esm2015/lib/services/metaTracker/index.js +0 -30
- package/esm2015/lib/services/resourceDrafts/index.js +0 -70
- package/fesm2015/vgip-meta-ui.js +0 -5272
- package/fesm2015/vgip-meta-ui.js.map +0 -1
- package/lib/fieldComposite/index.d.ts +0 -8
- package/lib/fieldList/index.d.ts +0 -10
- package/lib/fieldReference/index.d.ts +0 -69
- package/lib/fieldSelect/index.d.ts +0 -38
- package/lib/layout/index.d.ts +0 -35
- package/lib/refDialog/index.d.ts +0 -30
- package/lib/resource/index.d.ts +0 -55
- package/lib/resourceCard/index.d.ts +0 -15
- package/vgip-meta-ui.metadata.json +0 -1
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: Alexander.Vangelov@vonage.com
|
|
3
|
+
* @Date: 2019-09-19 17:35:09
|
|
4
|
+
* @Last Modified by: Alexander.Vangelov@vonage.com
|
|
5
|
+
* @Last Modified time: 2020-05-12 17:45:46
|
|
6
|
+
*/
|
|
7
|
+
import { Component } from '@angular/core';
|
|
8
|
+
import { ControlContainer, NgForm } from '@angular/forms';
|
|
9
|
+
import { FieldAbstract } from '../fieldAbstract';
|
|
10
|
+
// import { IMetaFieldInut } from '../definitions/fields/IMetaFieldInput';
|
|
11
|
+
import { templateBuilder } from '../common/utils/templateBuilder';
|
|
12
|
+
import { relativeTimeBuilder } from '../common/utils/relativeTimeBuilder';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../services/metaContext";
|
|
15
|
+
import * as i2 from "@angular/common";
|
|
16
|
+
import * as i3 from "@angular/forms";
|
|
17
|
+
import * as i4 from "../common/metaModel.pipe";
|
|
18
|
+
// import { MetaValidations } from '../common/decorators/metaValidations.decorator';
|
|
19
|
+
export class FieldInput extends FieldAbstract {
|
|
20
|
+
constructor(metaContext) {
|
|
21
|
+
super();
|
|
22
|
+
this.metaContext = metaContext;
|
|
23
|
+
this.clickout = (event) => {
|
|
24
|
+
if (event.target.className === 'Vlt-dropdown__link' && this.elementRef.nativeElement.contains(event.target)) {
|
|
25
|
+
this.focus();
|
|
26
|
+
// this.dismissDropdown();
|
|
27
|
+
// this.parent[this.meta.name] = event.target.textContent;
|
|
28
|
+
}
|
|
29
|
+
else if (event.target !== this.input && event.target.className !== 'Vlt-dropdown__title') {
|
|
30
|
+
this.dismissDropdown();
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.focus();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
this.keydown = (event) => {
|
|
37
|
+
switch (event.key) {
|
|
38
|
+
case 'ArrowDown': {
|
|
39
|
+
if (['datetime', 'time', 'date', 'datetime-local'].indexOf(this.meta.subtype || this.meta.type) !== -1) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
this.showDropdown();
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
if (typeof (this.activeSuggestionIndex) === 'undefined') {
|
|
45
|
+
this.activeSuggestionIndex = 0;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.activeSuggestionIndex++;
|
|
49
|
+
if (this.activeSuggestionIndex >= this.suggestions.length) {
|
|
50
|
+
this.activeSuggestionIndex = 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case 'ArrowUp': {
|
|
56
|
+
if (['datetime', 'time', 'date', 'datetime-local'].indexOf(this.meta.subtype || this.meta.type) !== -1) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
this.showDropdown();
|
|
60
|
+
event.preventDefault();
|
|
61
|
+
if (typeof (this.activeSuggestionIndex) === 'undefined') {
|
|
62
|
+
this.activeSuggestionIndex = this.suggestions.length - 1;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.activeSuggestionIndex--;
|
|
66
|
+
if (this.activeSuggestionIndex < 0) {
|
|
67
|
+
this.activeSuggestionIndex = this.suggestions.length - 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case 'Space':
|
|
73
|
+
case 'Enter': {
|
|
74
|
+
if (typeof (this.activeSuggestionIndex) !== 'undefined') {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
event.stopPropagation();
|
|
77
|
+
this.onSuggestionSelect(event, this.suggestions[this.activeSuggestionIndex]);
|
|
78
|
+
delete this.activeSuggestionIndex;
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case 'Escape': {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
event.stopPropagation();
|
|
85
|
+
this.dismissDropdown();
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
default: {
|
|
89
|
+
setTimeout(() => {
|
|
90
|
+
if (!this.model) {
|
|
91
|
+
delete this.activeSuggestionIndex;
|
|
92
|
+
delete this.asyncSuggestions;
|
|
93
|
+
}
|
|
94
|
+
else if (typeof (this.model) === 'string') {
|
|
95
|
+
this.asyncSuggestions = (this.meta.suggestions || []).filter((s) => {
|
|
96
|
+
const suggestionText = (s.id || s.value || s || '').toLowerCase();
|
|
97
|
+
return suggestionText.indexOf(this.model.toLowerCase()) !== -1;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
ngOnInit() {
|
|
106
|
+
this.multiple = (this.meta.type === 'multistring') || this.meta.multiple;
|
|
107
|
+
// console.log('FieldInput init', this.meta.name);
|
|
108
|
+
this.validationAttributes = ['pattern', 'required', 'minlength', 'maxlength', 'min', 'max', 'step'];
|
|
109
|
+
if (this.meta.picklist) { // just for test! all metadata should be transformed to v3 protocol
|
|
110
|
+
this.meta.suggestions = (this.meta.picklist || []).map((s) => s.label);
|
|
111
|
+
}
|
|
112
|
+
if (this.meta.type === 'number') {
|
|
113
|
+
if (this.meta.subtype === 'float' && !this.meta.step) {
|
|
114
|
+
this.meta.step = '0.01';
|
|
115
|
+
}
|
|
116
|
+
this.meta.subtype = 'number';
|
|
117
|
+
}
|
|
118
|
+
if (['date', 'time', 'datetime'].indexOf(this.meta.type) !== -1) {
|
|
119
|
+
this.meta.subtype = this.meta.type;
|
|
120
|
+
if (this.meta.type === 'datetime') {
|
|
121
|
+
this.meta.subtype = 'datetime-local';
|
|
122
|
+
}
|
|
123
|
+
delete this.multiple; // no multiple support for timestamps
|
|
124
|
+
}
|
|
125
|
+
this.showClear = !this.multiple && [
|
|
126
|
+
'', 'string', 'url', 'email', 'password', 'tel', 'date', 'datetime-local', 'time'
|
|
127
|
+
].indexOf(this.meta.subtype || '') !== -1;
|
|
128
|
+
const origValue = this.parent[this.meta.name];
|
|
129
|
+
Object.defineProperty(this.parent, this.meta.name, {
|
|
130
|
+
set: (value) => {
|
|
131
|
+
if (this.multiple) {
|
|
132
|
+
if (typeof (value) !== 'undefined') {
|
|
133
|
+
const values = (value instanceof Array) ? value : [value];
|
|
134
|
+
this.model = [];
|
|
135
|
+
for (let v of values) {
|
|
136
|
+
if (!this.model) {
|
|
137
|
+
this.model = [];
|
|
138
|
+
}
|
|
139
|
+
if (typeof (v) === 'object' && v !== null) {
|
|
140
|
+
v = v.id || v.value;
|
|
141
|
+
}
|
|
142
|
+
this.model.push(v);
|
|
143
|
+
}
|
|
144
|
+
this.value = this.model;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
if (typeof (value) !== 'undefined'
|
|
149
|
+
&& !(value === null && ((typeof (this.meta.type) === 'undefined') || ['string', 'number'].indexOf(this.meta.type) !== -1))) {
|
|
150
|
+
if (this.meta.type === 'number' && typeof (value) === 'string') {
|
|
151
|
+
value = parseInt(value, 10);
|
|
152
|
+
}
|
|
153
|
+
else if (typeof (value) === 'object' && value !== null) {
|
|
154
|
+
value = value.id || value.value;
|
|
155
|
+
}
|
|
156
|
+
if (['datetime', 'date', 'datetime-local'].indexOf(this.meta.subtype || this.meta.type) !== -1 && value) {
|
|
157
|
+
try {
|
|
158
|
+
let date;
|
|
159
|
+
if ((typeof (value) === 'number')) {
|
|
160
|
+
date = new Date(parseInt(value, 10));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
if ('date' === (this.meta.subtype || this.meta.type)) {
|
|
164
|
+
date = new Date(Date.parse(value));
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
date = new Date(Date.parse(`${value}Z`) + (new Date().getTimezoneOffset() * 60000));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (typeof (value) === 'number') {
|
|
171
|
+
switch (this.meta.subtype || this.meta.type) {
|
|
172
|
+
case 'datetime-local':
|
|
173
|
+
case 'datetime': {
|
|
174
|
+
this.model = `${date.getFullYear()}-${('00' + (date.getMonth() + 1)).slice(-2)}-${('00' + date.getDate()).slice(-2)}`;
|
|
175
|
+
this.model += `T${('00' + date.getHours()).slice(-2)}:${('00' + date.getMinutes()).slice(-2)}`;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case 'date': {
|
|
179
|
+
this.model = date.toISOString().split('T')[0];
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (this.meta.valueType === 'string') {
|
|
185
|
+
if ((this.meta.subtype || this.meta.type) === 'date') {
|
|
186
|
+
this.value = date.toISOString().split('T')[0];
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
this.value = date.toISOString();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
if ((this.meta.subtype || this.meta.type) === 'date') {
|
|
194
|
+
date.setFullYear(date.getUTCFullYear());
|
|
195
|
+
date.setMonth(date.getUTCMonth());
|
|
196
|
+
date.setDate(date.getUTCDate());
|
|
197
|
+
date.setMinutes(0);
|
|
198
|
+
date.setHours(0);
|
|
199
|
+
date.setSeconds(0);
|
|
200
|
+
date.setMilliseconds(0);
|
|
201
|
+
}
|
|
202
|
+
this.value = date.getTime();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
console.error('Date parse error', e.message, `"${value}"`, `(${typeof (value)})`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if ('time' === (this.meta.subtype || this.meta.type)) {
|
|
210
|
+
try {
|
|
211
|
+
let date;
|
|
212
|
+
if (typeof (value) === 'number') {
|
|
213
|
+
date = new Date(parseInt(value, 10));
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
date = new Date(Date.parse(new Date().toISOString().replace(/T.*Z/, `T${value}Z`)) + (new Date().getTimezoneOffset() * 60000));
|
|
217
|
+
}
|
|
218
|
+
this.model = date.toTimeString().split(' ')[0];
|
|
219
|
+
this.value = date.getTime();
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
console.error('Date parse error', e.message, `"${value}"`, `(${typeof (value)})`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
if (!value && (typeof (this.prevModel) === 'string') && this.isPersistedParent) {
|
|
227
|
+
value = '';
|
|
228
|
+
}
|
|
229
|
+
this.model = value;
|
|
230
|
+
this.value = value;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
delete this.model;
|
|
235
|
+
delete this.value;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
this.meta.$optional = this.isOptional;
|
|
239
|
+
},
|
|
240
|
+
get: () => this.value,
|
|
241
|
+
enumerable: this.sendToServer,
|
|
242
|
+
configurable: true
|
|
243
|
+
});
|
|
244
|
+
if (typeof (origValue) !== 'undefined') {
|
|
245
|
+
this.parent[this.meta.name] = origValue;
|
|
246
|
+
}
|
|
247
|
+
const d = this.meta.default || this.meta.defaultValue;
|
|
248
|
+
if (d && typeof (this.model) === 'undefined') {
|
|
249
|
+
if (this.multiple) {
|
|
250
|
+
this.parent[this.meta.name] = [];
|
|
251
|
+
if (d.length) {
|
|
252
|
+
for (const dv of this.default) { // TODO ???
|
|
253
|
+
const defaultValueItem = (typeof (dv) === 'string' || dv === null) ? dv : (dv.id || dv.value);
|
|
254
|
+
if (defaultValueItem || defaultValueItem === 0) {
|
|
255
|
+
this.parent[this.meta.name].push(defaultValueItem);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
const defaultValue = (typeof (d) === 'string') ? d : (d.id || d.value);
|
|
262
|
+
if (defaultValue || defaultValue === 0) {
|
|
263
|
+
if (/^(date|time)/.test(this.meta.subtype) && typeof (defaultValue) === 'string') {
|
|
264
|
+
this.parent[this.meta.name] = relativeTimeBuilder(this.meta.subtype, defaultValue, this.validations.step);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
if (this.meta.type === 'string' && defaultValue) {
|
|
268
|
+
this.parent[this.meta.name] = templateBuilder(this.metaContext, defaultValue);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
this.parent[this.meta.name] = defaultValue;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
onActivated(ev) {
|
|
279
|
+
this.input = ev.srcElement;
|
|
280
|
+
if (!this.dropdown) {
|
|
281
|
+
this.dropdown = ev.srcElement.parentNode.parentNode;
|
|
282
|
+
}
|
|
283
|
+
this.showDropdown();
|
|
284
|
+
}
|
|
285
|
+
clear(ev) {
|
|
286
|
+
delete this.model;
|
|
287
|
+
delete this.activeSuggestionIndex;
|
|
288
|
+
delete this.asyncSuggestions;
|
|
289
|
+
this.onModelChange(this.model);
|
|
290
|
+
if (ev) {
|
|
291
|
+
ev.preventDefault();
|
|
292
|
+
ev.stopPropagation();
|
|
293
|
+
this.focus();
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
onBlur(ev) {
|
|
298
|
+
let internalControl = false;
|
|
299
|
+
if (ev.relatedTarget) {
|
|
300
|
+
if (!this.elementRef.nativeElement.contains(ev.relatedTarget)) {
|
|
301
|
+
this.dismissDropdown();
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
internalControl = true;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (this.keyListenerActive && !internalControl) {
|
|
308
|
+
this.input.removeEventListener('keydown', this.keydown);
|
|
309
|
+
setTimeout(() => {
|
|
310
|
+
if (!this.keyListenerActive) {
|
|
311
|
+
document.removeEventListener('click', this.clickout);
|
|
312
|
+
}
|
|
313
|
+
}, 400);
|
|
314
|
+
delete this.keyListenerActive;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
onAdd(ev) {
|
|
318
|
+
console.log('onAdd', this.addText);
|
|
319
|
+
if (this.addText) {
|
|
320
|
+
if ((this.model || []).indexOf(this.addText) === -1) {
|
|
321
|
+
this.onSuggestionSelect(ev, this.addText);
|
|
322
|
+
if (!this.meta.suggestions) {
|
|
323
|
+
this.meta.suggestions = [];
|
|
324
|
+
}
|
|
325
|
+
this.meta.suggestions.unshift(this.addText);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
ev.preventDefault();
|
|
329
|
+
ev.stopPropagation();
|
|
330
|
+
this.focus();
|
|
331
|
+
}
|
|
332
|
+
delete this.addText;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
remove(ev, item) {
|
|
336
|
+
ev.preventDefault();
|
|
337
|
+
ev.stopPropagation();
|
|
338
|
+
const optionIndex = this.model.indexOf(item);
|
|
339
|
+
if (optionIndex !== -1) {
|
|
340
|
+
this.model.splice(optionIndex, 1);
|
|
341
|
+
if (!this.model.length) {
|
|
342
|
+
delete this.model;
|
|
343
|
+
delete this.value;
|
|
344
|
+
}
|
|
345
|
+
this.onModelChange(this.model);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
onSuggestionSelect(ev, suggestion) {
|
|
349
|
+
if (!suggestion) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
ev.preventDefault();
|
|
353
|
+
ev.stopPropagation();
|
|
354
|
+
this.focus();
|
|
355
|
+
let suggestionValue = suggestion.id || suggestion.value || suggestion;
|
|
356
|
+
if (typeof (suggestionValue) === 'string') {
|
|
357
|
+
if (/^(date|time)/.test(this.meta.subtype)) {
|
|
358
|
+
suggestionValue = relativeTimeBuilder(this.meta.subtype, suggestionValue, this.validations.step);
|
|
359
|
+
}
|
|
360
|
+
else if (this.meta.type === 'string') {
|
|
361
|
+
suggestionValue = templateBuilder(this.metaContext, suggestionValue);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
suggestionValue = suggestion;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (this.multiple) {
|
|
368
|
+
if (!this.model) {
|
|
369
|
+
this.model = [];
|
|
370
|
+
}
|
|
371
|
+
let existingItemIndex = this.model.indexOf(suggestionValue);
|
|
372
|
+
if (existingItemIndex === -1) {
|
|
373
|
+
this.model.push(suggestionValue);
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
this.model.splice(existingItemIndex, 1);
|
|
377
|
+
existingItemIndex = undefined;
|
|
378
|
+
}
|
|
379
|
+
this.onModelChange(this.model);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
this.dismissDropdown();
|
|
383
|
+
this.model = suggestionValue;
|
|
384
|
+
this.onModelChange(suggestionValue);
|
|
385
|
+
this.activeSuggestionIndex = this.suggestions.indexOf(suggestion);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
textToSpeech() { }
|
|
389
|
+
dismissDropdown(event) {
|
|
390
|
+
if (event) {
|
|
391
|
+
this.focus();
|
|
392
|
+
}
|
|
393
|
+
if (this.dropdown) {
|
|
394
|
+
this.dropdown.classList.remove('Vlt-dropdown--expanded');
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
ensureDropdownIsVisible() {
|
|
398
|
+
setTimeout(() => {
|
|
399
|
+
const holder = this.dropdown.closest('.Vlt-card__content');
|
|
400
|
+
const el = this.elementRef.nativeElement.querySelector('.Vlt-dropdown__panel');
|
|
401
|
+
if (el) {
|
|
402
|
+
const elRect = el.getBoundingClientRect();
|
|
403
|
+
const holderRect = holder.getBoundingClientRect();
|
|
404
|
+
if (holderRect.top + holderRect.height < elRect.top + elRect.height) {
|
|
405
|
+
el.scrollIntoView({ block: 'end' });
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}, 400);
|
|
409
|
+
}
|
|
410
|
+
showDropdown() {
|
|
411
|
+
if (this.meta.suggestions && this.meta.suggestions.length) {
|
|
412
|
+
this.dropdown.classList.add('Vlt-dropdown--expanded');
|
|
413
|
+
this.ensureDropdownIsVisible();
|
|
414
|
+
}
|
|
415
|
+
if (!this.keyListenerActive) {
|
|
416
|
+
this.input.addEventListener('keydown', this.keydown);
|
|
417
|
+
setTimeout(() => {
|
|
418
|
+
document.addEventListener('click', this.clickout);
|
|
419
|
+
}, 200);
|
|
420
|
+
this.keyListenerActive = true;
|
|
421
|
+
}
|
|
422
|
+
if (typeof (this.activeSuggestionIndex) === 'undefined') {
|
|
423
|
+
if (this.model && this.suggestions.length) {
|
|
424
|
+
for (let suggestionIndex = 0; suggestionIndex < this.suggestions.length; suggestionIndex++) {
|
|
425
|
+
if (this.model === this.suggestions[suggestionIndex]) {
|
|
426
|
+
this.activeSuggestionIndex = suggestionIndex;
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
delete this.activeSuggestionIndex;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
get suggestions() {
|
|
435
|
+
return this.asyncSuggestions || this.meta.suggestions || [];
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
FieldInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldInput, deps: [{ token: i1.MetaContextService }], target: i0.ɵɵFactoryTarget.Component });
|
|
439
|
+
FieldInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldInput, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>{{model}}</div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (f | metaModel ).touched), 'multiple': multiple, 'has-value': f.value, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\">\n {{item}}\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-input Vlt-dropdown\" style='display: block;'>\n <label class='wrapper'>\n <input class='main model' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [required]='validations.required' [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [step]='validations.step' [disabled]='disabled' [readonly]=\"readonly\" [(ngModel)]='model' (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name' [type]=\"multiple ? 'hidden' : (meta.subtype || 'text')\" placeholder=\" \" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <input *ngIf='multiple' class='main' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [(ngModel)]='addText' [ngModelOptions]=\"{ standalone: true }\" [type]=\"meta.subtype || 'text'\" [disabled]='disabled' [readonly]='readonly' placeholder=\"+Add\" (keydown.enter)='onAdd($event)' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span class='Vlt-black' *ngIf='model && multiple'>({{model.length}})</span></label>\n </label>\n <div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && showClear' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n <!-- <div *ngIf=\"!meta.subtype || meta.subtype == 'text'\" class=\"Vlt-composite__append Vlt-composite__append--icon\" style='bottom: 7px; right: 10px; padding: 3px; width: initial; height: initial; cursor: pointer;'>\n <div *ngIf=\"!meta.type || meta.type === 'string'\" class=\"Vlt-composite__icon\" (click)='textToSpeech()'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-microphone\"/></svg>\n </div>\n </div> -->\n <div *ngIf=\"suggestions.length\" class=\"Vlt-dropdown__panel\">\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area suggestions\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 13px;'>\n Suggestions\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='dropdown' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': (activeSuggestionIndex === i) }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link\" style='padding: 0;'>\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label [title]='suggestion.label || suggestion'>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(suggestion) !== -1'/>\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{suggestion.label || suggestion}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>\n {{suggestion.label || suggestion}}\n </div>\n </div>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\">Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((f | metaModel ).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required. </span>\n <span *ngIf=\"f.errors.minlength\">Must be longer than {{validations.minlength}} characters. </span>\n <span *ngIf=\"f.errors.maxlength\">Must be lest than {{validations.maxlength}} characters. </span>\n <span *ngIf=\"f.errors.pattern\">{{ validations.pattern.text || \"Should match '\"+validations.pattern+\"' pattern.\" }}. </span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input{padding-right:40px;text-overflow:ellipsis}@media screen and (-webkit-min-device-pixel-ratio: 0){.Vlt-form__element--big .Vlt-input input{line-height:20px}}.Vlt-form__element--big .Vlt-input input:disabled{cursor:not-allowed}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover input,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) input,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container.creatable{margin-right:62px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;max-height:140px;padding:6px 4px 0 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value input{border-top:0;border-top-left-radius:0;border-top-right-radius:0;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error input{border-color:#f25a6b;background:var(--vgip-meta-input-bg-color)}label.Vlt-truncate{padding-right:42px}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:10px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "metaModel": i4.MetaModelPipe }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldInput, decorators: [{
|
|
441
|
+
type: Component,
|
|
442
|
+
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>{{model}}</div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (f | metaModel ).touched), 'multiple': multiple, 'has-value': f.value, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\">\n {{item}}\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-input Vlt-dropdown\" style='display: block;'>\n <label class='wrapper'>\n <input class='main model' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [required]='validations.required' [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [step]='validations.step' [disabled]='disabled' [readonly]=\"readonly\" [(ngModel)]='model' (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name' [type]=\"multiple ? 'hidden' : (meta.subtype || 'text')\" placeholder=\" \" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <input *ngIf='multiple' class='main' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [(ngModel)]='addText' [ngModelOptions]=\"{ standalone: true }\" [type]=\"meta.subtype || 'text'\" [disabled]='disabled' [readonly]='readonly' placeholder=\"+Add\" (keydown.enter)='onAdd($event)' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span class='Vlt-black' *ngIf='model && multiple'>({{model.length}})</span></label>\n </label>\n <div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && showClear' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n <!-- <div *ngIf=\"!meta.subtype || meta.subtype == 'text'\" class=\"Vlt-composite__append Vlt-composite__append--icon\" style='bottom: 7px; right: 10px; padding: 3px; width: initial; height: initial; cursor: pointer;'>\n <div *ngIf=\"!meta.type || meta.type === 'string'\" class=\"Vlt-composite__icon\" (click)='textToSpeech()'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-microphone\"/></svg>\n </div>\n </div> -->\n <div *ngIf=\"suggestions.length\" class=\"Vlt-dropdown__panel\">\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area suggestions\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 13px;'>\n Suggestions\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='dropdown' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': (activeSuggestionIndex === i) }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link\" style='padding: 0;'>\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label [title]='suggestion.label || suggestion'>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(suggestion) !== -1'/>\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{suggestion.label || suggestion}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>\n {{suggestion.label || suggestion}}\n </div>\n </div>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\">Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((f | metaModel ).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required. </span>\n <span *ngIf=\"f.errors.minlength\">Must be longer than {{validations.minlength}} characters. </span>\n <span *ngIf=\"f.errors.maxlength\">Must be lest than {{validations.maxlength}} characters. </span>\n <span *ngIf=\"f.errors.pattern\">{{ validations.pattern.text || \"Should match '\"+validations.pattern+\"' pattern.\" }}. </span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input{padding-right:40px;text-overflow:ellipsis}@media screen and (-webkit-min-device-pixel-ratio: 0){.Vlt-form__element--big .Vlt-input input{line-height:20px}}.Vlt-form__element--big .Vlt-input input:disabled{cursor:not-allowed}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover input,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) input,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container.creatable{margin-right:62px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;max-height:140px;padding:6px 4px 0 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value input{border-top:0;border-top-left-radius:0;border-top-right-radius:0;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error input{border-color:#f25a6b;background:var(--vgip-meta-input-bg-color)}label.Vlt-truncate{padding-right:42px}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:10px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"] }]
|
|
443
|
+
}], ctorParameters: function () { return [{ type: i1.MetaContextService }]; } });
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRJbnB1dC9pbmRleC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZElucHV0L3ZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCwwRUFBMEU7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7QUFHMUUsb0ZBQW9GO0FBT3BGLE1BQU0sT0FBTyxVQUFXLFNBQVEsYUFBYTtJQVUzQyxZQUFxQixXQUErQjtRQUNsRCxLQUFLLEVBQUUsQ0FBQztRQURXLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQXFVNUMsYUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMzRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsMEJBQTBCO2dCQUMxQiwwREFBMEQ7YUFFM0Q7aUJBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUsscUJBQXFCLEVBQUU7Z0JBQzFGLElBQUks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bnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBARGF0ZTogMjAxOS0wOS0xOSAxNzozNTowOVxuICogQExhc3QgTW9kaWZpZWQgYnk6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDIwLTA1LTEyIDE3OjQ1OjQ2XG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRmllbGRBYnN0cmFjdCB9IGZyb20gJy4uL2ZpZWxkQWJzdHJhY3QnO1xuLy8gaW1wb3J0IHsgSU1ldGFGaWVsZEludXQgfSBmcm9tICcuLi9kZWZpbml0aW9ucy9maWVsZHMvSU1ldGFGaWVsZElucHV0JztcbmltcG9ydCB7IHRlbXBsYXRlQnVpbGRlciB9IGZyb20gJy4uL2NvbW1vbi91dGlscy90ZW1wbGF0ZUJ1aWxkZXInO1xuaW1wb3J0IHsgcmVsYXRpdmVUaW1lQnVpbGRlciB9IGZyb20gJy4uL2NvbW1vbi91dGlscy9yZWxhdGl2ZVRpbWVCdWlsZGVyJztcbmltcG9ydCB7IE1ldGFDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFDb250ZXh0JztcblxuLy8gaW1wb3J0IHsgTWV0YVZhbGlkYXRpb25zIH0gZnJvbSAnLi4vY29tbW9uL2RlY29yYXRvcnMvbWV0YVZhbGlkYXRpb25zLmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkSW5wdXQgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaW5wdXQ6IGFueTtcbiAgZHJvcGRvd246IGFueTtcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHZhbHVlOiBhbnk7XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICBhZGRUZXh0O1xuICBzaG93Q2xlYXI6IGJvb2xlYW47XG4gIGFzeW5jU3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tdWx0aXBsZSA9ICh0aGlzLm1ldGEudHlwZSA9PT0gJ211bHRpc3RyaW5nJykgfHwgdGhpcy5tZXRhLm11bHRpcGxlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdGaWVsZElucHV0IGluaXQnLCB0aGlzLm1ldGEubmFtZSk7XG4gICAgdGhpcy52YWxpZGF0aW9uQXR0cmlidXRlcyA9IFsncGF0dGVybicsICdyZXF1aXJlZCcsICdtaW5sZW5ndGgnLCAnbWF4bGVuZ3RoJywgJ21pbicsICdtYXgnLCAnc3RlcCddO1xuICAgIGlmICh0aGlzLm1ldGEucGlja2xpc3QpIHsgLy8ganVzdCBmb3IgdGVzdCEgYWxsIG1ldGFkYXRhIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byB2MyBwcm90b2NvbFxuICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zID0gKHRoaXMubWV0YS5waWNrbGlzdCB8fCBbXSkubWFwKChzKSA9PiBzLmxhYmVsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWV0YS50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHRoaXMubWV0YS5zdWJ0eXBlID09PSAnZmxvYXQnICYmICF0aGlzLm1ldGEuc3RlcCkge1xuICAgICAgICB0aGlzLm1ldGEuc3RlcCA9ICcwLjAxJztcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0YS5zdWJ0eXBlID0gJ251bWJlcic7XG4gICAgfVxuICAgIGlmIChbJ2RhdGUnLCAndGltZScsICdkYXRldGltZSddLmluZGV4T2YodGhpcy5tZXRhLnR5cGUpICE9PSAtMSkge1xuICAgICAgdGhpcy5tZXRhLnN1YnR5cGUgPSB0aGlzLm1ldGEudHlwZTtcbiAgICAgIGlmICh0aGlzLm1ldGEudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICB0aGlzLm1ldGEuc3VidHlwZSA9ICdkYXRldGltZS1sb2NhbCc7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5tdWx0aXBsZTsgLy8gbm8gbXVsdGlwbGUgc3VwcG9ydCBmb3IgdGltZXN0YW1wc1xuICAgIH1cbiAgICB0aGlzLnNob3dDbGVhciA9ICF0aGlzLm11bHRpcGxlICYmIFtcbiAgICAgICcnLCAnc3RyaW5nJywgJ3VybCcsICdlbWFpbCcsICdwYXNzd29yZCcsICd0ZWwnLCAnZGF0ZScsICdkYXRldGltZS1sb2NhbCcsICd0aW1lJ1xuICAgIF0uaW5kZXhPZih0aGlzLm1ldGEuc3VidHlwZSB8fCAnJykgIT09IC0xO1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YodmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHYpID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdiA9IHYuaWQgfHwgdi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2godik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgIT09ICd1bmRlZmluZWQnIFxuICAgICAgICAgICAgJiYgISh2YWx1ZSA9PT0gbnVsbCAmJiAoKHR5cGVvZih0aGlzLm1ldGEudHlwZSkgPT09ICd1bmRlZmluZWQnKSB8fCBbJ3N0cmluZycsICdudW1iZXInXS5pbmRleE9mKHRoaXMubWV0YS50eXBlKSAhPT0gLTEpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWV0YS50eXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YodmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmlkIHx8IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFsnZGF0ZXRpbWUnLCAnZGF0ZScsICdkYXRldGltZS1sb2NhbCddLmluZGV4T2YodGhpcy5tZXRhLnN1YnR5cGUgfHwgdGhpcy5tZXRhLnR5cGUpICE9PSAtMSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRlOiBEYXRlO1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mICh2YWx1ZSkgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHZhbHVlIGFzIGFueSwgMTApKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKCdkYXRlJyA9PT0gKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoYCR7dmFsdWV9WmApICsgKG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5tZXRhLnN1YnR5cGUgfHwgdGhpcy5tZXRhLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZXRpbWUtbG9jYWwnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRldGltZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keygnMDAnICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpKS5zbGljZSgtMil9LSR7KCcwMCcgKyBkYXRlLmdldERhdGUoKSkuc2xpY2UoLTIpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCArPSBgVCR7KCcwMCcgKyBkYXRlLmdldEhvdXJzKCkpLnNsaWNlKC0yKX06JHsoJzAwJyArIGRhdGUuZ2V0TWludXRlcygpKS5zbGljZSgtMil9YDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzoge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRhLnZhbHVlVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5tZXRhLnN1YnR5cGUgfHwgdGhpcy5tZXRhLnR5cGUpID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKDApO1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKDApO1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFNlY29uZHMoMCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhdGUgcGFyc2UgZXJyb3InLCBlLm1lc3NhZ2UsIGBcIiR7dmFsdWV9XCJgLCBgKCR7dHlwZW9mICh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCd0aW1lJyA9PT0gKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRlOiBEYXRlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShwYXJzZUludCh2YWx1ZSBhcyBhbnksIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgRGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvVC4qWi8sIGBUJHt2YWx1ZX1aYCkpICsgKG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGRhdGUudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEYXRlIHBhcnNlIGVycm9yJywgZS5tZXNzYWdlLCBgXCIke3ZhbHVlfVwiYCwgYCgke3R5cGVvZiAodmFsdWUpfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiAodHlwZW9mKHRoaXMucHJldk1vZGVsKSA9PT0gJ3N0cmluZycpICYmIHRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZihvcmlnVmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBkID0gdGhpcy5tZXRhLmRlZmF1bHQgfHwgdGhpcy5tZXRhLmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoZCAmJiB0eXBlb2YodGhpcy5tb2RlbCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBbXTtcbiAgICAgICAgaWYgKGQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkdiBvZiB0aGlzLmRlZmF1bHQpIHsgLy8gVE9ETyA/Pz9cbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUl0ZW0gPSAodHlwZW9mIChkdikgPT09ICdzdHJpbmcnIHx8IGR2ID09PSBudWxsKSA/IGR2IDogKGR2LmlkIHx8IGR2LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVJdGVtIHx8IGRlZmF1bHRWYWx1ZUl0ZW0gPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLnB1c2goZGVmYXVsdFZhbHVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAodHlwZW9mIChkKSA9PT0gJ3N0cmluZycpID8gZCA6IChkLmlkIHx8IGQudmFsdWUpO1xuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgIGlmICgvXihkYXRlfHRpbWUpLy50ZXN0KHRoaXMubWV0YS5zdWJ0eXBlKSAmJiB0eXBlb2YoZGVmYXVsdFZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHJlbGF0aXZlVGltZUJ1aWxkZXIodGhpcy5tZXRhLnN1YnR5cGUsIGRlZmF1bHRWYWx1ZSwgdGhpcy52YWxpZGF0aW9ucy5zdGVwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMubWV0YS50eXBlID09PSAnc3RyaW5nJyAmJiBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gdGVtcGxhdGVCdWlsZGVyKHRoaXMubWV0YUNvbnRleHQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25BY3RpdmF0ZWQoZXYpIHtcbiAgICB0aGlzLmlucHV0ID0gZXYuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMuZHJvcGRvd24gPSBldi5zcmNFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgfVxuXG4gIGNsZWFyKGV2Pykge1xuICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICBkZWxldGUgdGhpcy5hc3luY1N1Z2dlc3Rpb25zO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICBpZiAoZXYpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBsZXQgaW50ZXJuYWxDb250cm9sID0gZmFsc2U7XG4gICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsQ29udHJvbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUxpc3RlbmVyQWN0aXZlICYmICFpbnRlcm5hbENvbnRyb2wpIHtcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSwgNDAwKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmtleUxpc3RlbmVyQWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIG9uQWRkKGV2KSB7XG4gICAgY29uc29sZS5sb2coJ29uQWRkJywgdGhpcy5hZGRUZXh0KTtcbiAgICBpZiAodGhpcy5hZGRUZXh0KSB7XG4gICAgICBpZiAoKHRoaXMubW9kZWwgfHwgW10pLmluZGV4T2YodGhpcy5hZGRUZXh0KSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25TZWxlY3QoZXYsIHRoaXMuYWRkVGV4dCk7XG4gICAgICAgIGlmICghdGhpcy5tZXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zLnVuc2hpZnQodGhpcy5hZGRUZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5hZGRUZXh0O1xuICAgIH1cbiAgfVxuICByZW1vdmUoZXYsIGl0ZW0pIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChvcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VnZ2VzdGlvblNlbGVjdChldiwgc3VnZ2VzdGlvbikge1xuICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBsZXQgc3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbi5pZCB8fCBzdWdnZXN0aW9uLnZhbHVlIHx8IHN1Z2dlc3Rpb247XG4gICAgaWYgKHR5cGVvZihzdWdnZXN0aW9uVmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKC9eKGRhdGV8dGltZSkvLnRlc3QodGhpcy5tZXRhLnN1YnR5cGUpKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZSA9IHJlbGF0aXZlVGltZUJ1aWxkZXIodGhpcy5tZXRhLnN1YnR5cGUsIHN1Z2dlc3Rpb25WYWx1ZSwgdGhpcy52YWxpZGF0aW9ucy5zdGVwKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBzdWdnZXN0aW9uVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBsZXQgZXhpc3RpbmdJdGVtSW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2Yoc3VnZ2VzdGlvblZhbHVlKTtcbiAgICAgIGlmIChleGlzdGluZ0l0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHN1Z2dlc3Rpb25WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShleGlzdGluZ0l0ZW1JbmRleCwgMSk7XG4gICAgICAgIGV4aXN0aW5nSXRlbUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgdGhpcy5tb2RlbCA9IHN1Z2dlc3Rpb25WYWx1ZTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZShzdWdnZXN0aW9uVmFsdWUpO1xuICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmluZGV4T2Yoc3VnZ2VzdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdGV4dFRvU3BlZWNoKCkgeyB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuZHJvcGRvd24uY2xvc2VzdCgnLlZsdC1jYXJkX19jb250ZW50Jyk7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3BhbmVsJyk7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGhvbGRlclJlY3QgPSBob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnZW5kJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wZG93bigpIHtcbiAgICBpZiAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zICYmIHRoaXMubWV0YS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZih0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdGhpcy5zdWdnZXN0aW9uc1tzdWdnZXN0aW9uSW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSA9PT0gJ1ZsdC1kcm9wZG93bl9fbGluaycgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgLy8gdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIC8vIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGV2ZW50LnRhcmdldC50ZXh0Q29udGVudDtcblxuICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0ICYmIGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICdWbHQtZHJvcGRvd25fX3RpdGxlJykge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICBpZiAoWydkYXRldGltZScsICd0aW1lJywgJ2RhdGUnLCAnZGF0ZXRpbWUtbG9jYWwnXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSAhPT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgaWYgKFsnZGF0ZXRpbWUnLCAndGltZScsICdkYXRlJywgJ2RhdGV0aW1lLWxvY2FsJ10uaW5kZXhPZih0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZih0aGlzLm1vZGVsKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uVGV4dCA9IChzLmlkIHx8IHMudmFsdWUgfHwgcyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25UZXh0LmluZGV4T2YodGhpcy5tb2RlbC50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBnZXQgc3VnZ2VzdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyB8fCB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW107XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1wcmV2aWV3JyAqbmdJZj0ncHJldmlldyAmJiBtb2RlbCc+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1sYWJlbCc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz57e21vZGVsfX08L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIXByZXZpZXcnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnQgVmx0LWZvcm1fX2VsZW1lbnQtLWJpZ1wiIFtuZ0NsYXNzXT1cInsnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGYgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSwgJ211bHRpcGxlJzogbXVsdGlwbGUsICdoYXMtdmFsdWUnOiBmLnZhbHVlLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJz5cbiAgICAgIDxkaXYgKm5nRm9yPSdsZXQgaXRlbSBvZiBtb2RlbCcgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAgVmx0LWJhZGdlLS1sYXJnZSBrZWVwLWZvY3VzXCI+XG4gICAgICAgIHt7aXRlbX19XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJWbHQtYmFkZ2VfX2Rpc21pc3Mga2VlcC1mb2N1c1wiIChjbGljayk9J3JlbW92ZSgkZXZlbnQsIGl0ZW0pJz48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIlZsdC1pbnB1dCBWbHQtZHJvcGRvd25cIiBzdHlsZT0nZGlzcGxheTogYmxvY2s7Jz5cbiAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgPGlucHV0IGNsYXNzPSdtYWluIG1vZGVsJyBbcGF0dGVybl09XCJ2YWxpZGF0aW9ucy5wYXR0ZXJuID8gdmFsaWRhdGlvbnMucGF0dGVybi52YWx1ZSB8fCB2YWxpZGF0aW9ucy5wYXR0ZXJuIDogbnVsbFwiIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBbbWlubGVuZ3RoXT0ndmFsaWRhdGlvbnMubWlubGVuZ3RoJyBbbWF4bGVuZ3RoXT0ndmFsaWRhdGlvbnMubWF4bGVuZ3RoJyBbbWluXT0ndmFsaWRhdGlvbnMubWluJyBbbWF4XT0ndmFsaWRhdGlvbnMubWF4JyBbc3RlcF09J3ZhbGlkYXRpb25zLnN0ZXAnIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbKG5nTW9kZWwpXT0nbW9kZWwnIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnIFt0eXBlXT1cIm11bHRpcGxlID8gJ2hpZGRlbicgOiAobWV0YS5zdWJ0eXBlIHx8ICd0ZXh0JylcIiBwbGFjZWhvbGRlcj1cIiBcIiAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJy8+XG4gICAgICA8aW5wdXQgKm5nSWY9J211bHRpcGxlJyBjbGFzcz0nbWFpbicgW3BhdHRlcm5dPVwidmFsaWRhdGlvbnMucGF0dGVybiA/IHZhbGlkYXRpb25zLnBhdHRlcm4udmFsdWUgfHwgdmFsaWRhdGlvbnMucGF0dGVybiA6IG51bGxcIiBbbWlubGVuZ3RoXT0ndmFsaWRhdGlvbnMubWlubGVuZ3RoJyBbbWF4bGVuZ3RoXT0ndmFsaWRhdGlvbnMubWF4bGVuZ3RoJyBbbWluXT0ndmFsaWRhdGlvbnMubWluJyBbbWF4XT0ndmFsaWRhdGlvbnMubWF4JyBbKG5nTW9kZWwpXT0nYWRkVGV4dCcgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgW3R5cGVdPVwibWV0YS5zdWJ0eXBlIHx8ICd0ZXh0J1wiIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbcmVhZG9ubHldPSdyZWFkb25seScgcGxhY2Vob2xkZXI9XCIrQWRkXCIgKGtleWRvd24uZW50ZXIpPSdvbkFkZCgkZXZlbnQpJyAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJy8+XG4gICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJyAqbmdJZj0nbW9kZWwgJiYgbXVsdGlwbGUnPih7e21vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz0nVmx0LWNvbXBvc2l0ZV9fYXBwZW5kIHJpZ2h0LWFjdGlvbnMnPlxuICAgICAgPGRpdiAqbmdJZj0nbW9kZWwgJiYgc2hvd0NsZWFyJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J2NsZWFyKCRldmVudCknPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIvPjwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFtZXRhLnN1YnR5cGUgfHwgbWV0YS5zdWJ0eXBlID09ICd0ZXh0J1wiIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kIFZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIHN0eWxlPSdib3R0b206IDdweDsgcmlnaHQ6IDEwcHg7IHBhZGRpbmc6IDNweDsgd2lkdGg6IGluaXRpYWw7IGhlaWdodDogaW5pdGlhbDsgY3Vyc29yOiBwb2ludGVyOyc+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIW1ldGEudHlwZSB8fCBtZXRhLnR5cGUgPT09ICdzdHJpbmcnXCIgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCIgKGNsaWNrKT0ndGV4dFRvU3BlZWNoKCknPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1taWNyb3Bob25lXCIvPjwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzdWdnZXN0aW9ucy5sZW5ndGhcIiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50IFZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQtLXNjcm9sbC1hcmVhIHN1Z2dlc3Rpb25zXCI+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fdGl0bGVcIiBzdHlsZT0ncGFkZGluZy1sZWZ0OiAxM3B4Oyc+XG4gICAgICAgICAgU3VnZ2VzdGlvbnNcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19jbG9zZSBWbHQtd2hpdGVcIiAoY2xpY2spPSdkaXNtaXNzRHJvcGRvd24oJGV2ZW50KSc+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSdkcm9wZG93bicgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3Njcm9sbFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IChhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGkpIH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleCcgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmtcIiBzdHlsZT0ncGFkZGluZzogMDsnPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWNoZWNrYm94XCIgc3R5bGU9J3dpZHRoOiAxMDAlOyc+XG4gICAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsIHx8IHN1Z2dlc3Rpb24nPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09J21vZGVsICYmIG1vZGVsLmluZGV4T2Yoc3VnZ2VzdGlvbikgIT09IC0xJy8+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlZsdC1jaGVja2JveF9faWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAge3tzdWdnZXN0aW9uLmxhYmVsIHx8IHN1Z2dlc3Rpb259fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIHN0eWxlPSdwYWRkaW5nOiAxMnB4IDIwcHg7Jz5cbiAgICAgICAgICAgICAge3tzdWdnZXN0aW9uLmxhYmVsIHx8IHN1Z2dlc3Rpb259fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrIFZsdC1kcm9wZG93bl9fYmxvY2stLW5vd3JhcFwiIHN0eWxlPSdwYWRkaW5nOiA4cHggMTZweCAxNnB4Oyc+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPSdjbGVhcigkZXZlbnQpJyB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLW91dGxpbmVcIj5DbGVhciBhbGw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9J2Rpc21pc3NEcm9wZG93bigkZXZlbnQpJyB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXNtYWxsXCI+RG9uZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHNtYWxsICpuZ0lmPSdmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoKGYgfCBtZXRhTW9kZWwgKS50b3VjaGVkICYmIGtleUxpc3RlbmVyQWN0aXZlKSknIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkLiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1pbmxlbmd0aFwiPk11c3QgYmUgbG9uZ2VyIHRoYW4ge3t2YWxpZGF0aW9ucy5taW5sZW5ndGh9fSBjaGFyYWN0ZXJzLiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1heGxlbmd0aFwiPk11c3QgYmUgbGVzdCB0aGFuIHt7dmFsaWRhdGlvbnMubWF4bGVuZ3RofX0gY2hhcmFjdGVycy4mbmJzcDs8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5wYXR0ZXJuXCI+e3sgdmFsaWRhdGlvbnMucGF0dGVybi50ZXh0IHx8IFwiU2hvdWxkIG1hdGNoICdcIit2YWxpZGF0aW9ucy5wYXR0ZXJuK1wiJyBwYXR0ZXJuLlwiIH19LiZuYnNwOzwvc3Bhbj5cbiAgPC9zbWFsbD5cbiAgPHNtYWxsICpuZ0lmPSdtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGludH19PC9zbWFsbD5cbjwvZGl2PlxuIl19
|