@esfaenza/forms-and-validations 18.2.2 → 19.2.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/fesm2022/esfaenza-forms-and-validations.mjs +153 -153
- package/fesm2022/esfaenza-forms-and-validations.mjs.map +1 -1
- package/lib/forms/base-form-control.d.ts +1 -1
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +2 -2
- package/lib/forms/form-time/form-time.component.d.ts +2 -2
- package/lib/validations/base-validation.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/esfaenza-forms-and-validations.mjs +0 -5
- package/esm2022/lib/forms/base-form-control.mjs +0 -558
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +0 -22
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.mjs +0 -420
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +0 -21
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.mjs +0 -289
- package/esm2022/lib/forms/form-checkbox/form-checkbox.component.mjs +0 -74
- package/esm2022/lib/forms/form-date/form-date.component.mjs +0 -69
- package/esm2022/lib/forms/form-datetime/form-datetime.component.mjs +0 -67
- package/esm2022/lib/forms/form-empty/form-empty.component.mjs +0 -30
- package/esm2022/lib/forms/form-error/form-error.component.mjs +0 -42
- package/esm2022/lib/forms/form-file/form-file.component.loc.mjs +0 -22
- package/esm2022/lib/forms/form-file/form-file.component.mjs +0 -175
- package/esm2022/lib/forms/form-info/form-info.component.mjs +0 -42
- package/esm2022/lib/forms/form-input/form-input.component.mjs +0 -83
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +0 -23
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.mjs +0 -163
- package/esm2022/lib/forms/form-select/form-select.component.loc.mjs +0 -21
- package/esm2022/lib/forms/form-select/form-select.component.mjs +0 -165
- package/esm2022/lib/forms/form-template/form-template.component.mjs +0 -77
- package/esm2022/lib/forms/form-textarea/form-textarea.component.mjs +0 -57
- package/esm2022/lib/forms/form-time/form-time.component.mjs +0 -115
- package/esm2022/lib/forms-and-validations.module.mjs +0 -213
- package/esm2022/lib/models/AppFile.mjs +0 -14
- package/esm2022/lib/models/ChangeEvent.mjs +0 -7
- package/esm2022/lib/models/FormsAndValidationsModuleConfig.mjs +0 -6
- package/esm2022/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +0 -89
- package/esm2022/lib/tokens.mjs +0 -8
- package/esm2022/lib/validations/base-validation.loc.mjs +0 -23
- package/esm2022/lib/validations/base-validation.mjs +0 -328
- package/esm2022/lib/validations/customValidators/CustomRequiredDirective.mjs +0 -41
- package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +0 -147
- package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +0 -240
- package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +0 -75
- package/esm2022/lib/validations/validation-date/validation-date.component.mjs +0 -183
- package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +0 -212
- package/esm2022/lib/validations/validation-input/validation-input.component.mjs +0 -222
- package/esm2022/lib/validations/validation-select/validation-select.component.mjs +0 -183
- package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +0 -78
- package/esm2022/public-api.mjs +0 -40
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { LocalizationService } from "@esfaenza/localizations";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Classe di localizzazione per il componente **FormAutocompleteComponent**
|
|
6
|
-
*/
|
|
7
|
-
export class FormAutocompleteComponentLoc extends LocalizationService {
|
|
8
|
-
/**
|
|
9
|
-
* @ignore
|
|
10
|
-
*/
|
|
11
|
-
constructor(injector) {
|
|
12
|
-
super(injector);
|
|
13
|
-
super.set("it->en", "Seleziona", ["Select"]);
|
|
14
|
-
}
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormAutocompleteComponentLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
16
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormAutocompleteComponentLoc }); }
|
|
17
|
-
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormAutocompleteComponentLoc, decorators: [{
|
|
19
|
-
type: Injectable
|
|
20
|
-
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXRvY29tcGxldGUuY29tcG9uZW50LmxvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zLWFuZC12YWxpZGF0aW9ucy9zcmMvbGliL2Zvcm1zL2Zvcm0tYXV0b2NvbXBsZXRlL2Zvcm0tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5sb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsbUJBQW1CO0lBRWpFOztPQUVHO0lBQ0gsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNoRCxDQUFDOytHQVRRLDRCQUE0QjttSEFBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGRpIGxvY2FsaXp6YXppb25lIHBlciBpbCBjb21wb25lbnRlICoqRm9ybUF1dG9jb21wbGV0ZUNvbXBvbmVudCoqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBGb3JtQXV0b2NvbXBsZXRlQ29tcG9uZW50TG9jIGV4dGVuZHMgTG9jYWxpemF0aW9uU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgc3VwZXIuc2V0KFwiaXQtPmVuXCIsIFwiU2VsZXppb25hXCIsIFtcIlNlbGVjdFwiXSlcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self } from "@angular/core";
|
|
3
|
-
import { NG_VALIDATORS } from "@angular/forms";
|
|
4
|
-
// Applicazione
|
|
5
|
-
import { BaseFormControl } from "../base-form-control";
|
|
6
|
-
import { LocalizationService } from "@esfaenza/localizations";
|
|
7
|
-
import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
|
|
8
|
-
//Localizzazione
|
|
9
|
-
import { FormAutocompleteComponentLoc } from "./form-autocomplete.component.loc";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@esfaenza/localizations";
|
|
12
|
-
import * as i2 from "@angular/forms";
|
|
13
|
-
import * as i3 from "@esfaenza/access-control";
|
|
14
|
-
import * as i4 from "@angular/common";
|
|
15
|
-
import * as i5 from "../../validations/validation-autocomplete/validation-autocomplete.component";
|
|
16
|
-
import * as i6 from "../../validations/validation-autocomplete-multi/validation-autocomplete-multi.component";
|
|
17
|
-
/** Componente di input che si auto-completa in base al valore attuale */
|
|
18
|
-
export class FormAutocompleteComponent extends BaseFormControl {
|
|
19
|
-
/** @ignore Costruttore */
|
|
20
|
-
constructor(cdr, lc, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE) {
|
|
21
|
-
super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
|
|
22
|
-
this.lc = lc;
|
|
23
|
-
/** Permette di specificare il testo della Label flottante material-style */
|
|
24
|
-
this.SelectLabel = "";
|
|
25
|
-
/** Funzione di ricerca che verrà chiamata dal componente */
|
|
26
|
-
this.SearchFunction = null;
|
|
27
|
-
/** Numero minimo di caratteri con cui cercare */
|
|
28
|
-
this.MinChars = 3;
|
|
29
|
-
/** Definisce che ad ogni selezione deve chiudere la tendina */
|
|
30
|
-
this.HideChoicesOnSelection = false;
|
|
31
|
-
/** Override del placeholder per select requried */
|
|
32
|
-
this.RequiredPlaceholder = null;
|
|
33
|
-
/** Indica se i controlli devono essere effettuati tenendo conto del Case o meno. Vale solo qualora la **Source** fosse fornita */
|
|
34
|
-
this.CaseSensitive = false;
|
|
35
|
-
/** Indica se usare la modalità multiselezione o no */
|
|
36
|
-
this.Multi = false;
|
|
37
|
-
/** Indica se usare la modalità multiselezione o no */
|
|
38
|
-
this.MultiElementsThreshold = 10;
|
|
39
|
-
/** Indica il fatto che non c'è una Source da cui scegliere */
|
|
40
|
-
this.UnboundMode = false;
|
|
41
|
-
/**
|
|
42
|
-
* Indica se ignorare il prossimo evento writeValue che normalmente dovrebbe richiedere la nuova source. Serve per quando l'utente seleziona un elemento:
|
|
43
|
-
* Subito dopo partirebbe un altro evento modelChange che ricaricherebbe nuovamente la source
|
|
44
|
-
*/
|
|
45
|
-
this.ignoreNextWriteValue = false;
|
|
46
|
-
/** Sorgente Bindata Filtrata in base al contenuto della casella di testo */
|
|
47
|
-
this.FilteredBoundSource = [];
|
|
48
|
-
this.timer = null;
|
|
49
|
-
this.maxCallsPerSecond = 4;
|
|
50
|
-
this.callsDoneThisThreeSeconds = 0;
|
|
51
|
-
//******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate
|
|
52
|
-
//TODO: spostarla in un metodo di utilità (esfaenza/extensions)
|
|
53
|
-
/** @ignore */
|
|
54
|
-
this.executionTimers = {};
|
|
55
|
-
}
|
|
56
|
-
/** @ignore */
|
|
57
|
-
writeValue(value) {
|
|
58
|
-
if (!value)
|
|
59
|
-
return;
|
|
60
|
-
if (this.SearchFunction && !this.UnboundMode) {
|
|
61
|
-
this.doSearchProtected(value, true, this.SearchFunctionContext, (t) => {
|
|
62
|
-
this.Source = t;
|
|
63
|
-
this.tryBindSourceDisplay();
|
|
64
|
-
setTimeout(() => { this.finalizeValue(value); });
|
|
65
|
-
});
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (!this.Multi)
|
|
69
|
-
this.finalizeValue(value);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Dato un valore verifica se può restituire le informazioni trovate in **Source** con id uguale a **value** o se deve restituire il valore in se
|
|
73
|
-
*
|
|
74
|
-
* @param {any} value Valore scritto nell'input di testo
|
|
75
|
-
*/
|
|
76
|
-
finalizeValue(value) {
|
|
77
|
-
var val = this.UnboundMode ? null : this.BoundSource.find(t => t.id == value);
|
|
78
|
-
this.propagateChange(val ? val.id : value);
|
|
79
|
-
// Alor... praticamente qui potrebbero arrivare degli switcheroni in cui il Model è uguale all'inizio e alla fine dello stack, per qualche motivo
|
|
80
|
-
// quindi per assicurarmi che il valore venga preso correttamente faccio il classico metti a null poi metti su
|
|
81
|
-
// Notare che mettere il modello a null scatena i writevalue ma tutti i writevalue che si collegao a questo giro dovrebbero essere NOOP su null
|
|
82
|
-
this.Model = null;
|
|
83
|
-
setTimeout(() => {
|
|
84
|
-
this.Model = val ? val.description : value;
|
|
85
|
-
this.EvaluatedModel = this.Model;
|
|
86
|
-
this.cdr.markForCheck();
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Quando viene scritto un nuovo valore bisogna controllare se per botta di culo fosse un id, in tal caso dev'essere rieffettuato il bind
|
|
91
|
-
* per mostrare solo la descrizione nell'autocomplete
|
|
92
|
-
*/
|
|
93
|
-
evaluateIdResearch(onFailure) {
|
|
94
|
-
let tmpModel = this.Model;
|
|
95
|
-
if (this.UnboundMode)
|
|
96
|
-
return;
|
|
97
|
-
if (!tmpModel || !this.SearchFunction) {
|
|
98
|
-
onFailure?.();
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
this.log("filtersource enqueue");
|
|
102
|
-
this.throttla("filtersource", () => {
|
|
103
|
-
this.log("filtersource fire");
|
|
104
|
-
this.doSearchProtected(tmpModel, true, this.SearchFunctionContext, (t) => {
|
|
105
|
-
if (t && t.length > 0) {
|
|
106
|
-
this.Source = t;
|
|
107
|
-
this.tryBindSourceDisplay();
|
|
108
|
-
if (!this.Multi)
|
|
109
|
-
setTimeout(() => { this.finalizeValue(tmpModel); });
|
|
110
|
-
else
|
|
111
|
-
this.cdr.markForCheck();
|
|
112
|
-
}
|
|
113
|
-
else
|
|
114
|
-
onFailure?.();
|
|
115
|
-
});
|
|
116
|
-
}, 400);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Evento di filtro della sorgente dati in base all'input utente
|
|
120
|
-
*
|
|
121
|
-
* @param {string} event Input utente
|
|
122
|
-
*/
|
|
123
|
-
filterSource(event) {
|
|
124
|
-
// Contorllo prima di tutto se è un ID. in caso contrario effettuo la ricerca
|
|
125
|
-
this.evaluateIdResearch(() => {
|
|
126
|
-
this.doFilterSource(event);
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
doFilterSource(event) {
|
|
130
|
-
if (this.UnboundMode)
|
|
131
|
-
return;
|
|
132
|
-
if (this.ignoreNextWriteValue) {
|
|
133
|
-
this.ignoreNextWriteValue = false;
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
// Quando filtro la source, se non devo ignorare l'evento devo comunque assicurarmi di impostare il valore selezionato a null
|
|
137
|
-
if (!this.Multi)
|
|
138
|
-
super.changed(null);
|
|
139
|
-
if (!event && this.MinChars == 0 && !this.SearchFunction) {
|
|
140
|
-
this.FilteredBoundSource = this.BoundSource;
|
|
141
|
-
this.cdr.markForCheck();
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
if (!event || event.length < this.MinChars) {
|
|
145
|
-
this.log("search event ignored: " + event);
|
|
146
|
-
this.FilteredBoundSource = [];
|
|
147
|
-
this.cdr.markForCheck();
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
if (!this.SearchFunction && (!this.Source || this.Source.length == 0))
|
|
151
|
-
throw "Impossibile filtrare gli elementi senza una funzione di ricerca che restituisca una lista di { id: string, description: string }";
|
|
152
|
-
if (this.SearchFunction) {
|
|
153
|
-
this.log("filtersource enqueue");
|
|
154
|
-
this.throttla("filtersource", () => {
|
|
155
|
-
this.log("filtersource fire");
|
|
156
|
-
this.doSearchProtected(event, false, this.SearchFunctionContext, (t) => {
|
|
157
|
-
this.log("filtersource received API response");
|
|
158
|
-
this.Source = t;
|
|
159
|
-
this.tryBindSourceDisplay();
|
|
160
|
-
// In questo caso è già filtrata dalla SearchFunction
|
|
161
|
-
this.FilteredBoundSource = this.BoundSource;
|
|
162
|
-
this.removeFilteredSourceOnDescriptionSelection();
|
|
163
|
-
this.cdr.markForCheck();
|
|
164
|
-
});
|
|
165
|
-
}, 400);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
this.throttla("filtersource", () => {
|
|
169
|
-
this.log("filtersource fire");
|
|
170
|
-
// In questo caso devo filtrare io in memoria
|
|
171
|
-
this.FilteredBoundSource = this.BoundSource.filter(t => (this.CaseSensitive && t.description.includes(event)) || (!this.CaseSensitive && t.description.toLowerCase().includes(event.toLowerCase())));
|
|
172
|
-
this.removeFilteredSourceOnDescriptionSelection();
|
|
173
|
-
this.cdr.markForCheck();
|
|
174
|
-
}, 100);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Permetto al massimo 4 chiamate ogni 3 secondi, se nell'arco di 3 secondi ci sono più di 4 chiamate, ignoro le eccedenti
|
|
178
|
-
doSearchProtected(search, byid, context, onRes) {
|
|
179
|
-
if (!this.timer) {
|
|
180
|
-
this.timer = setTimeout(() => {
|
|
181
|
-
this.callsDoneThisThreeSeconds = 0;
|
|
182
|
-
clearTimeout(this.timer);
|
|
183
|
-
this.timer = null;
|
|
184
|
-
}, 3000);
|
|
185
|
-
}
|
|
186
|
-
if (this.callsDoneThisThreeSeconds >= this.maxCallsPerSecond) {
|
|
187
|
-
this.log("Ignoring excessive calls");
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
this.callsDoneThisThreeSeconds++;
|
|
191
|
-
this.log("Search function being called...");
|
|
192
|
-
this.SearchFunction(search, byid, context).subscribe(t => {
|
|
193
|
-
onRes(t);
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
/** @ignore */
|
|
197
|
-
removeFilteredSourceOnDescriptionSelection() {
|
|
198
|
-
if (this.FilteredBoundSource.length == 1 && (this.FilteredBoundSource[0].description === this.Model) && !this.Multi) {
|
|
199
|
-
let model = this.BoundSource[0].id;
|
|
200
|
-
this.Model = model;
|
|
201
|
-
this.EvaluatedModel = this.BoundSource[0].description;
|
|
202
|
-
this.FilteredBoundSource = [];
|
|
203
|
-
setTimeout(() => { this.finalizeValue(model); });
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/** @ignore */
|
|
207
|
-
ngOnChanges(changes) {
|
|
208
|
-
let newSource = changes["Source"];
|
|
209
|
-
if (newSource) {
|
|
210
|
-
this.tryBindSourceDisplay();
|
|
211
|
-
// Prima assegnazione se cambia la source sotto (quindi se viene bindata direttamente da HTML)
|
|
212
|
-
if ((this.Model?.length || 0) >= this.MinChars && !this.SearchFunction)
|
|
213
|
-
this.FilteredBoundSource = this.BoundSource;
|
|
214
|
-
else
|
|
215
|
-
this.FilteredBoundSource = [];
|
|
216
|
-
this.cdr.markForCheck();
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/** @ignore Override che marca anche il prossimo evento di filterSource da ignorare */
|
|
220
|
-
changed(forcedValue = null, markForCheck = false) {
|
|
221
|
-
if (!this.Multi)
|
|
222
|
-
this.ignoreNextWriteValue = true;
|
|
223
|
-
if (forcedValue == "" && this.Multi)
|
|
224
|
-
this.Model = "";
|
|
225
|
-
var selecteds = forcedValue ? [forcedValue] : this.Model ? (this.Model.Multi ? this.Model.split(',') : [this.Model]) : [];
|
|
226
|
-
this.EvaluatedModel = selecteds.map(s => this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == s)?.description : this.UnboundMode ? s : "").join(', ');
|
|
227
|
-
super.changed(forcedValue, markForCheck);
|
|
228
|
-
}
|
|
229
|
-
/** @ignore */
|
|
230
|
-
onNotNullValueSet() { }
|
|
231
|
-
/** @ignore */
|
|
232
|
-
throttla(id, func, throttleTime) {
|
|
233
|
-
//Se ho la funzione che vuole eseguire ripulisco quel timeout
|
|
234
|
-
if (this.executionTimers[id])
|
|
235
|
-
clearTimeout(this.executionTimers[id]);
|
|
236
|
-
//Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi
|
|
237
|
-
this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);
|
|
238
|
-
}
|
|
239
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormAutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
240
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormAutocompleteComponent, selector: "form-autocomplete", inputs: { SelectLabel: "SelectLabel", SearchFunctionContext: "SearchFunctionContext", SearchFunction: "SearchFunction", MinChars: "MinChars", HideChoicesOnSelection: "HideChoicesOnSelection", RequiredPlaceholder: "RequiredPlaceholder", CaseSensitive: "CaseSensitive", Multi: "Multi", MultiElementsThreshold: "MultiElementsThreshold", UnboundMode: "UnboundMode" }, providers: [{ provide: LocalizationService, useClass: FormAutocompleteComponentLoc }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n<!-- Form-Model: {{Model}} -->\r\n<ng-template #controlTemplate>\r\n <val-autocomplete *ngIf=\"!Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\">\r\n </val-autocomplete>\r\n\r\n <val-autocomplete-multi *ngIf=\"Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [ChipThreshold]=\"MultiElementsThreshold\"\r\n [HideChoicesOnSelection]=\"HideChoicesOnSelection\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\"\r\n [UnboundMode]=\"UnboundMode\">\r\n\r\n </val-autocomplete-multi>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ValidationAutocompleteComponent, selector: "val-autocomplete", inputs: ["FilteredSource", "value", "label"], outputs: ["optionChange"] }, { kind: "component", type: i6.ValidationAutocompleteMultiComponent, selector: "val-autocomplete-multi", inputs: ["ChipThreshold", "FilteredSource", "UnboundMode", "value", "label", "HideChoicesOnSelection"], outputs: ["optionChange"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
241
|
-
}
|
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormAutocompleteComponent, decorators: [{
|
|
243
|
-
type: Component,
|
|
244
|
-
args: [{ selector: "form-autocomplete", providers: [{ provide: LocalizationService, useClass: FormAutocompleteComponentLoc }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n<!-- Form-Model: {{Model}} -->\r\n<ng-template #controlTemplate>\r\n <val-autocomplete *ngIf=\"!Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\">\r\n </val-autocomplete>\r\n\r\n <val-autocomplete-multi *ngIf=\"Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [ChipThreshold]=\"MultiElementsThreshold\"\r\n [HideChoicesOnSelection]=\"HideChoicesOnSelection\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\"\r\n [UnboundMode]=\"UnboundMode\">\r\n\r\n </val-autocomplete-multi>\r\n</ng-template>" }]
|
|
245
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: i2.NgControl, decorators: [{
|
|
246
|
-
type: Optional
|
|
247
|
-
}, {
|
|
248
|
-
type: Self
|
|
249
|
-
}] }, { type: Array, decorators: [{
|
|
250
|
-
type: Optional
|
|
251
|
-
}, {
|
|
252
|
-
type: Inject,
|
|
253
|
-
args: [NG_VALIDATORS]
|
|
254
|
-
}] }, { type: i3.AccessControlService, decorators: [{
|
|
255
|
-
type: Optional
|
|
256
|
-
}] }, { type: i3.ComponentContext, decorators: [{
|
|
257
|
-
type: Optional
|
|
258
|
-
}] }, { type: undefined, decorators: [{
|
|
259
|
-
type: Optional
|
|
260
|
-
}, {
|
|
261
|
-
type: Inject,
|
|
262
|
-
args: [ACO_CUSTOMKEY]
|
|
263
|
-
}] }, { type: undefined, decorators: [{
|
|
264
|
-
type: Optional
|
|
265
|
-
}, {
|
|
266
|
-
type: Inject,
|
|
267
|
-
args: [FAV_DEBUG_MODE]
|
|
268
|
-
}] }], propDecorators: { SelectLabel: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}], SearchFunctionContext: [{
|
|
271
|
-
type: Input
|
|
272
|
-
}], SearchFunction: [{
|
|
273
|
-
type: Input
|
|
274
|
-
}], MinChars: [{
|
|
275
|
-
type: Input
|
|
276
|
-
}], HideChoicesOnSelection: [{
|
|
277
|
-
type: Input
|
|
278
|
-
}], RequiredPlaceholder: [{
|
|
279
|
-
type: Input
|
|
280
|
-
}], CaseSensitive: [{
|
|
281
|
-
type: Input
|
|
282
|
-
}], Multi: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], MultiElementsThreshold: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], UnboundMode: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}] } });
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hdXRvY29tcGxldGUvZm9ybS1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hdXRvY29tcGxldGUvZm9ybS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQXFCLElBQUksRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUF3QixhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRixlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSTdELGdCQUFnQjtBQUNoQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7QUFFakYseUVBQXlFO0FBT3pFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxlQUFlO0lBeUMxRCwyQkFBMkI7SUFDM0IsWUFBWSxHQUFzQixFQUFTLEVBQXVCLEVBQXNCLFNBQW9CLEVBQXFDLFdBQXVCLEVBQWMsRUFBd0IsRUFBYyxVQUE0QixFQUFxQyxhQUFxQixFQUFzQyxjQUF1QjtRQUMzVyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUs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cG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBDaGFuZ2VEZXRlY3RvclJlZiwgU2VsZiwgU2ltcGxlQ2hhbmdlcywgSG9zdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBCYXNlRm9ybUNvbnRyb2wgfSBmcm9tIFwiLi4vYmFzZS1mb3JtLWNvbnRyb2xcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8vTG9jYWxpenphemlvbmVcclxuaW1wb3J0IHsgRm9ybUF1dG9jb21wbGV0ZUNvbXBvbmVudExvYyB9IGZyb20gXCIuL2Zvcm0tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbi8qKiBDb21wb25lbnRlIGRpIGlucHV0IGNoZSBzaSBhdXRvLWNvbXBsZXRhIGluIGJhc2UgYWwgdmFsb3JlIGF0dHVhbGUgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJmb3JtLWF1dG9jb21wbGV0ZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEZvcm1BdXRvY29tcGxldGVDb21wb25lbnRMb2MgfV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUF1dG9jb21wbGV0ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgc3BlY2lmaWNhcmUgaWwgdGVzdG8gZGVsbGEgTGFiZWwgZmxvdHRhbnRlIG1hdGVyaWFsLXN0eWxlICovXHJcbiAgICBASW5wdXQoKSBTZWxlY3RMYWJlbDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogQ29udGVzdG8gcGVyIGxhIGZ1bnppb25lIGRpIHJpY2VyY2EgKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaEZ1bmN0aW9uQ29udGV4dDogYW55O1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkaSByaWNlcmNhIGNoZSB2ZXJyw6AgY2hpYW1hdGEgZGFsIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaEZ1bmN0aW9uOiAoc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4sIGNvbnRleHQ/OiBhbnkpID0+IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT4gPSBudWxsO1xyXG5cclxuICAgIC8qKiBOdW1lcm8gbWluaW1vIGRpIGNhcmF0dGVyaSBjb24gY3VpIGNlcmNhcmUgKi9cclxuICAgIEBJbnB1dCgpIE1pbkNoYXJzOiBudW1iZXIgPSAzO1xyXG5cclxuICAgIC8qKiBEZWZpbmlzY2UgY2hlIGFkIG9nbmkgc2VsZXppb25lIGRldmUgY2hpdWRlcmUgbGEgdGVuZGluYSAqL1xyXG4gICAgQElucHV0KCkgSGlkZUNob2ljZXNPblNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBPdmVycmlkZSBkZWwgcGxhY2Vob2xkZXIgcGVyIHNlbGVjdCByZXF1cmllZCAqL1xyXG4gICAgQElucHV0KCkgUmVxdWlyZWRQbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGkgY29udHJvbGxpIGRldm9ubyBlc3NlcmUgZWZmZXR0dWF0aSB0ZW5lbmRvIGNvbnRvIGRlbCBDYXNlIG8gbWVuby4gVmFsZSBzb2xvIHF1YWxvcmEgbGEgKipTb3VyY2UqKiBmb3NzZSBmb3JuaXRhICovXHJcbiAgICBASW5wdXQoKSBDYXNlU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSB1c2FyZSBsYSBtb2RhbGl0w6AgbXVsdGlzZWxlemlvbmUgbyBubyAqL1xyXG4gICAgQElucHV0KCkgTXVsdGk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIHVzYXJlIGxhIG1vZGFsaXTDoCBtdWx0aXNlbGV6aW9uZSBvIG5vICovXHJcbiAgICBASW5wdXQoKSBNdWx0aUVsZW1lbnRzVGhyZXNob2xkOiBudW1iZXIgPSAxMDtcclxuXHJcbiAgICAvKiogSW5kaWNhIGlsIGZhdHRvIGNoZSBub24gYyfDqCB1bmEgU291cmNlIGRhIGN1aSBzY2VnbGllcmUgKi9cclxuICAgIEBJbnB1dCgpIFVuYm91bmRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWdub3JhcmUgaWwgcHJvc3NpbW8gZXZlbnRvIHdyaXRlVmFsdWUgY2hlIG5vcm1hbG1lbnRlIGRvdnJlYmJlIHJpY2hpZWRlcmUgbGEgbnVvdmEgc291cmNlLiBTZXJ2ZSBwZXIgcXVhbmRvIGwndXRlbnRlIHNlbGV6aW9uYSB1biBlbGVtZW50bzpcclxuICAgICAqIFN1Yml0byBkb3BvIHBhcnRpcmViYmUgdW4gYWx0cm8gZXZlbnRvIG1vZGVsQ2hhbmdlIGNoZSByaWNhcmljaGVyZWJiZSBudW92YW1lbnRlIGxhIHNvdXJjZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlnbm9yZU5leHRXcml0ZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFNvcmdlbnRlIEJpbmRhdGEgRmlsdHJhdGEgaW4gYmFzZSBhbCBjb250ZW51dG8gZGVsbGEgY2FzZWxsYSBkaSB0ZXN0byAqL1xyXG4gICAgcHVibGljIEZpbHRlcmVkQm91bmRTb3VyY2U6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgQE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBBcHBDb250ZXh0OiBDb21wb25lbnRDb250ZXh0LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDT19DVVNUT01LRVkpIEFDT19DVVNUT01LRVk6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgRkFWX0RFQlVHX01PREU6IGJvb2xlYW4pIHtcclxuICAgICAgICBzdXBlcihjZHIsIG5nQ29udHJvbCwgX3ZhbGlkYXRvcnMsIGFjLCBBcHBDb250ZXh0LCBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24gJiYgIXRoaXMuVW5ib3VuZE1vZGUpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZG9TZWFyY2hQcm90ZWN0ZWQodmFsdWUsIHRydWUsIHRoaXMuU2VhcmNoRnVuY3Rpb25Db250ZXh0LCAodCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Tb3VyY2UgPSB0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cnlCaW5kU291cmNlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuZmluYWxpemVWYWx1ZSh2YWx1ZSk7IH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLk11bHRpKVxyXG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplVmFsdWUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biB2YWxvcmUgdmVyaWZpY2Egc2UgcHXDsiByZXN0aXR1aXJlIGxlIGluZm9ybWF6aW9uaSB0cm92YXRlIGluICoqU291cmNlKiogY29uIGlkIHVndWFsZSBhICoqdmFsdWUqKiBvIHNlIGRldmUgcmVzdGl0dWlyZSBpbCB2YWxvcmUgaW4gc2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIFZhbG9yZSBzY3JpdHRvIG5lbGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5VbmJvdW5kTW9kZSA/IG51bGwgOiB0aGlzLkJvdW5kU291cmNlLmZpbmQodCA9PiB0LmlkID09IHZhbHVlKTtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWwgPyB2YWwuaWQgOiB2YWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIEFsb3IuLi4gcHJhdGljYW1lbnRlIHF1aSBwb3RyZWJiZXJvIGFycml2YXJlIGRlZ2xpIHN3aXRjaGVyb25pIGluIGN1aSBpbCBNb2RlbCDDqCB1Z3VhbGUgYWxsJ2luaXppbyBlIGFsbGEgZmluZSBkZWxsbyBzdGFjaywgcGVyIHF1YWxjaGUgbW90aXZvXHJcbiAgICAgICAgLy8gcXVpbmRpIHBlciBhc3NpY3VyYXJtaSBjaGUgaWwgdmFsb3JlIHZlbmdhIHByZXNvIGNvcnJldHRhbWVudGUgZmFjY2lvIGlsIGNsYXNzaWNvIG1ldHRpIGEgbnVsbCBwb2kgbWV0dGkgc3VcclxuICAgICAgICAvLyBOb3RhcmUgY2hlIG1ldHRlcmUgaWwgbW9kZWxsbyBhIG51bGwgc2NhdGVuYSBpIHdyaXRldmFsdWUgbWEgdHV0dGkgaSB3cml0ZXZhbHVlIGNoZSBzaSBjb2xsZWdhbyBhIHF1ZXN0byBnaXJvIGRvdnJlYmJlcm8gZXNzZXJlIE5PT1Agc3UgbnVsbFxyXG4gICAgICAgIHRoaXMuTW9kZWwgPSBudWxsO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLk1vZGVsID0gdmFsID8gdmFsLmRlc2NyaXB0aW9uIDogdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLk1vZGVsO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1YW5kbyB2aWVuZSBzY3JpdHRvIHVuIG51b3ZvIHZhbG9yZSBiaXNvZ25hIGNvbnRyb2xsYXJlIHNlIHBlciBib3R0YSBkaSBjdWxvIGZvc3NlIHVuIGlkLCBpbiB0YWwgY2FzbyBkZXYnZXNzZXJlIHJpZWZmZXR0dWF0byBpbCBiaW5kXHJcbiAgICAgKiBwZXIgbW9zdHJhcmUgc29sbyBsYSBkZXNjcml6aW9uZSBuZWxsJ2F1dG9jb21wbGV0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVJZFJlc2VhcmNoKG9uRmFpbHVyZTogRnVuY3Rpb24pIHtcclxuICAgICAgICBsZXQgdG1wTW9kZWwgPSB0aGlzLk1vZGVsO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKHRoaXMuVW5ib3VuZE1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKCF0bXBNb2RlbCB8fCAhdGhpcy5TZWFyY2hGdW5jdGlvbikge1xyXG4gICAgICAgICAgICBvbkZhaWx1cmU/LigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvZyhcImZpbHRlcnNvdXJjZSBlbnF1ZXVlXCIpO1xyXG4gICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhcImZpbHRlcnNvdXJjZSBmaXJlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmRvU2VhcmNoUHJvdGVjdGVkKHRtcE1vZGVsLCB0cnVlLCB0aGlzLlNlYXJjaEZ1bmN0aW9uQ29udGV4dCwgKHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0ICYmIHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU291cmNlID0gdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLk11bHRpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5maW5hbGl6ZVZhbHVlKHRtcE1vZGVsKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmU/LigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCA0MDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGRpIGZpbHRybyBkZWxsYSBzb3JnZW50ZSBkYXRpIGluIGJhc2UgYWxsJ2lucHV0IHV0ZW50ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgSW5wdXQgdXRlbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaWx0ZXJTb3VyY2UoZXZlbnQ6IHN0cmluZykge1xyXG5cclxuICAgICAgICAvLyBDb250b3JsbG8gcHJpbWEgZGkgdHV0dG8gc2Ugw6ggdW4gSUQuIGluIGNhc28gY29udHJhcmlvIGVmZmV0dHVvIGxhIHJpY2VyY2FcclxuICAgICAgICB0aGlzLmV2YWx1YXRlSWRSZXNlYXJjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9GaWx0ZXJTb3VyY2UoZXZlbnQpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZG9GaWx0ZXJTb3VyY2UoZXZlbnQ6IHN0cmluZyl7XHJcbiAgICAgICAgaWYgKHRoaXMuVW5ib3VuZE1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBRdWFuZG8gZmlsdHJvIGxhIHNvdXJjZSwgc2Ugbm9uIGRldm8gaWdub3JhcmUgbCdldmVudG8gZGV2byBjb211bnF1ZSBhc3NpY3VyYXJtaSBkaSBpbXBvc3RhcmUgaWwgdmFsb3JlIHNlbGV6aW9uYXRvIGEgbnVsbFxyXG4gICAgICAgIGlmICghdGhpcy5NdWx0aSlcclxuICAgICAgICAgICAgc3VwZXIuY2hhbmdlZChudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudCAmJiB0aGlzLk1pbkNoYXJzID09IDAgJiYgIXRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gdGhpcy5Cb3VuZFNvdXJjZTtcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQubGVuZ3RoIDwgdGhpcy5NaW5DaGFycykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhcInNlYXJjaCBldmVudCBpZ25vcmVkOiBcIiArIGV2ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuU2VhcmNoRnVuY3Rpb24gJiYgKCF0aGlzLlNvdXJjZSB8fCB0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCkpXHJcbiAgICAgICAgICAgIHRocm93IFwiSW1wb3NzaWJpbGUgZmlsdHJhcmUgZ2xpIGVsZW1lbnRpIHNlbnphIHVuYSBmdW56aW9uZSBkaSByaWNlcmNhIGNoZSByZXN0aXR1aXNjYSB1bmEgbGlzdGEgZGkgeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1cIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coXCJmaWx0ZXJzb3VyY2UgZW5xdWV1ZVwiKTtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhcImZpbHRlcnNvdXJjZSBmaXJlXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1NlYXJjaFByb3RlY3RlZChldmVudCwgZmFsc2UsIHRoaXMuU2VhcmNoRnVuY3Rpb25Db250ZXh0LCAodCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKFwiZmlsdGVyc291cmNlIHJlY2VpdmVkIEFQSSByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNvdXJjZSA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlCaW5kU291cmNlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHF1ZXN0byBjYXNvIMOoIGdpw6AgZmlsdHJhdGEgZGFsbGEgU2VhcmNoRnVuY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsdGVyZWRTb3VyY2VPbkRlc2NyaXB0aW9uU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCA0MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhcImZpbHRlcnNvdXJjZSBmaXJlXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gcXVlc3RvIGNhc28gZGV2byBmaWx0cmFyZSBpbyBpbiBtZW1vcmlhXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlLmZpbHRlcih0ID0+ICh0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi5pbmNsdWRlcyhldmVudCkpIHx8ICghdGhpcy5DYXNlU2Vuc2l0aXZlICYmIHQuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aW1lciA9IG51bGw7XHJcbiAgICBtYXhDYWxsc1BlclNlY29uZCA9IDQ7XHJcbiAgICBjYWxsc0RvbmVUaGlzVGhyZWVTZWNvbmRzID0gMDtcclxuXHJcbiAgICAvLyBQZXJtZXR0byBhbCBtYXNzaW1vIDQgY2hpYW1hdGUgb2duaSAzIHNlY29uZGksIHNlIG5lbGwnYXJjbyBkaSAzIHNlY29uZGkgY2kgc29ubyBwacO5IGRpIDQgY2hpYW1hdGUsIGlnbm9ybyBsZSBlY2NlZGVudGlcclxuICAgIHByaXZhdGUgZG9TZWFyY2hQcm90ZWN0ZWQoc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4sIGNvbnRleHQ/OiBhbnksIG9uUmVzPzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMudGltZXIpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsc0RvbmVUaGlzVGhyZWVTZWNvbmRzID0gMDtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbGxzRG9uZVRoaXNUaHJlZVNlY29uZHMgPj0gdGhpcy5tYXhDYWxsc1BlclNlY29uZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhcIklnbm9yaW5nIGV4Y2Vzc2l2ZSBjYWxsc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYWxsc0RvbmVUaGlzVGhyZWVTZWNvbmRzKys7XHJcbiAgICAgICAgdGhpcy5sb2coXCJTZWFyY2ggZnVuY3Rpb24gYmVpbmcgY2FsbGVkLi4uXCIpO1xyXG4gICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24oc2VhcmNoLCBieWlkLCBjb250ZXh0KS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgIG9uUmVzKHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUZpbHRlcmVkU291cmNlT25EZXNjcmlwdGlvblNlbGVjdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlLmxlbmd0aCA9PSAxICYmICh0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2VbMF0uZGVzY3JpcHRpb24gPT09IHRoaXMuTW9kZWwpICYmICF0aGlzLk11bHRpKSB7XHJcbiAgICAgICAgICAgIGxldCBtb2RlbCA9IHRoaXMuQm91bmRTb3VyY2VbMF0uaWRcclxuICAgICAgICAgICAgdGhpcy5Nb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZVswXS5kZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gW107XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmZpbmFsaXplVmFsdWUobW9kZWwpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgbGV0IG5ld1NvdXJjZSA9IGNoYW5nZXNbXCJTb3VyY2VcIl07XHJcbiAgICAgICAgaWYgKG5ld1NvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQcmltYSBhc3NlZ25hemlvbmUgc2UgY2FtYmlhIGxhIHNvdXJjZSBzb3R0byAocXVpbmRpIHNlIHZpZW5lIGJpbmRhdGEgZGlyZXR0YW1lbnRlIGRhIEhUTUwpXHJcbiAgICAgICAgICAgIGlmICgodGhpcy5Nb2RlbD8ubGVuZ3RoIHx8IDApID49IHRoaXMuTWluQ2hhcnMgJiYgIXRoaXMuU2VhcmNoRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBPdmVycmlkZSBjaGUgbWFyY2EgYW5jaGUgaWwgcHJvc3NpbW8gZXZlbnRvIGRpIGZpbHRlclNvdXJjZSBkYSBpZ25vcmFyZSAqL1xyXG4gICAgY2hhbmdlZChmb3JjZWRWYWx1ZTogYW55ID0gbnVsbCwgbWFya0ZvckNoZWNrOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuTXVsdGkpXHJcbiAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoZm9yY2VkVmFsdWUgPT0gXCJcIiAmJiB0aGlzLk11bHRpKVxyXG4gICAgICAgICAgICB0aGlzLk1vZGVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdmFyIHNlbGVjdGVkczogc3RyaW5nW10gPSBmb3JjZWRWYWx1ZSA/IFtmb3JjZWRWYWx1ZV0gOiB0aGlzLk1vZGVsID8gKHRoaXMuTW9kZWwuTXVsdGkgPyB0aGlzLk1vZGVsLnNwbGl0KCcsJykgOiBbdGhpcy5Nb2RlbF0pIDogW107XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHNlbGVjdGVkcy5tYXAocyA9PiB0aGlzLkJvdW5kU291cmNlICYmIHRoaXMuQm91bmRTb3VyY2UubGVuZ3RoID4gMCA/IHRoaXMuQm91bmRTb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gcyk/LmRlc2NyaXB0aW9uIDogdGhpcy5VbmJvdW5kTW9kZSA/IHMgOiBcIlwiKS5qb2luKCcsICcpO1xyXG5cclxuICAgICAgICBzdXBlci5jaGFuZ2VkKGZvcmNlZFZhbHVlLCBtYXJrRm9yQ2hlY2spO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkIHsgfVxyXG5cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKiogRnVuemlvbmUgZGkgdGhyb3R0bGluZyBwZXIgbm9uIHNwYW1tYXJlIHJpY2hpZXN0ZSBpbiBjYXNvIGRpIGFuaW1hemlvbmkgYXR0aXZhdGVcclxuICAgIC8vVE9ETzogc3Bvc3RhcmxhIGluIHVuIG1ldG9kbyBkaSB1dGlsaXTDoCAoZXNmYWVuemEvZXh0ZW5zaW9ucylcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSB0aHJvdHRsYShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSk7XHJcblxyXG4gICAgICAgIC8vUmljcmVvIGlsIHRpbWVvdXQgcGVyIGVzZWd1aXJlIHF1ZWxsYSBmdW56aW9uZSBkb3BvIHRocm90dGxlVGltZSBtaWxsaXNlY29uZGlcclxuICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYygpOyB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcbn0iLCI8IS0tIFVndWFsZSBpbiB0dXR0aSBpIGNvbXBvbmVudGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIUZvcm1MYXlvdXQgJiYgKCFEaXNwbGF5TW9kZSB8fCAoRGlzcGxheUxheW91dCAhPSAnaGlkZGVuJyAmJiBEaXNwbGF5Q29uZGl0aW9uKSlcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdmb3JtJ1wiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2lubGluZSdcIiBjbGFzcz1cImFwcC1pbmxpbmVcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCIgY2xhc3M9XCJ7e0Zvcm1Hcm91cENsYXNzICsgKExhc3QgPyAnIGFwcC1tYXJnaW4tYm90dG9tLTAgYXBwLW1hcmdpbi1yaWdodC0wICcgOiAnJykgKyAoRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBEaXNwbGF5TW9kZSA/ICgnIGFwcC1pbmxpbmUtYmxvY2sgJyArICghTGFzdCA/ICdhcHAtbWFyZ2luLXJpZ2h0LTEwJyA6ICcnKSkgOiAnIGZvcm0tZ3JvdXAgcm93Jyl9fVwiPlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC17eyhEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWJvbGQgYXBwLW1hcmdpbi1ib3R0b20tMCcgOiBMYWJlbENvbFdpZHRoKSArIChEaXNwbGF5TW9kZSA/ICcgYXBwLWJvbGQnIDogJyBtLXQtNScpIH19XCI+e3tMYWJlbH19e3tSZXF1aXJlZCAmJiAhRGlzcGxheU1vZGUgPyAnKicgOiAnJ319e3tMYWJlbCA/IFwiOlwiIDogXCJcIn19PC9sYWJlbD5cclxuICAgIDxzcGFuICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBJbmxpbmVTZXBhcmF0b3IgIT0gJydcIj57e0lubGluZVNlcGFyYXRvcn19PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0Rpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtaW5saW5lLWJsb2NrJyA6IElucHV0Q29sV2lkdGh9fVwiPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgIURpc3BsYXlNb2RlVGVtcGxhdGVcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TW9kZVRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkRpc3BsYXlNb2RlVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBFdmFsdWF0ZWRNb2RlbCB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbjwhLS0gRm9ybS1Nb2RlbDoge3tNb2RlbH19IC0tPlxyXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cclxuICAgIDx2YWwtYXV0b2NvbXBsZXRlICpuZ0lmPVwiIU11bHRpXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICAgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIlxyXG4gICAgICAgICAgICAgICBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICBbbGFiZWxdPVwiU2VsZWN0TGFiZWxcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiTW9kZWxcIlxyXG4gICAgICAgICAgICAgICBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiXHJcbiAgICAgICAgICAgICAgIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiZmlsdGVyU291cmNlKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiXHJcbiAgICAgICAgICAgICAgIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiXHJcbiAgICAgICAgICAgICAgIChvcHRpb25DaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiXHJcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgoUmVxdWlyZWRQbGFjZWhvbGRlciAhPSBudWxsID8gUmVxdWlyZWRQbGFjZWhvbGRlciA6ICgoJ1NlbGV6aW9uYScgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nKSkpIDogUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICBbdmFsaWRhdGlvbkZhaWxlZF09XCJGYWlsZWRWYWxpZGF0aW9uTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgIFtGaWx0ZXJlZFNvdXJjZV09XCJGaWx0ZXJlZEJvdW5kU291cmNlXCI+XHJcbiAgICA8L3ZhbC1hdXRvY29tcGxldGU+XHJcblxyXG4gICAgPHZhbC1hdXRvY29tcGxldGUtbXVsdGkgKm5nSWY9XCJNdWx0aVwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiXHJcbiAgICAgICAgICAgICAgIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCJcclxuICAgICAgICAgICAgICAgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgW2xhYmVsXT1cIlNlbGVjdExhYmVsXCJcclxuICAgICAgICAgICAgICAgW0NoaXBUaHJlc2hvbGRdPVwiTXVsdGlFbGVtZW50c1RocmVzaG9sZFwiXHJcbiAgICAgICAgICAgICAgIFtIaWRlQ2hvaWNlc09uU2VsZWN0aW9uXT1cIkhpZGVDaG9pY2VzT25TZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiTW9kZWxcIlxyXG4gICAgICAgICAgICAgICBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiXHJcbiAgICAgICAgICAgICAgIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiZmlsdGVyU291cmNlKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiXHJcbiAgICAgICAgICAgICAgIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiXHJcbiAgICAgICAgICAgICAgIChvcHRpb25DaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiXHJcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgoUmVxdWlyZWRQbGFjZWhvbGRlciAhPSBudWxsID8gUmVxdWlyZWRQbGFjZWhvbGRlciA6ICgoJ1NlbGV6aW9uYScgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nKSkpIDogUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICBbdmFsaWRhdGlvbkZhaWxlZF09XCJGYWlsZWRWYWxpZGF0aW9uTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgIFtGaWx0ZXJlZFNvdXJjZV09XCJGaWx0ZXJlZEJvdW5kU291cmNlXCJcclxuICAgICAgICAgICAgICAgW1VuYm91bmRNb2RlXT1cIlVuYm91bmRNb2RlXCI+XHJcblxyXG4gICAgPC92YWwtYXV0b2NvbXBsZXRlLW11bHRpPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { NG_VALIDATORS } from "@angular/forms";
|
|
3
|
-
import { Component, Inject, Optional, Self, ChangeDetectionStrategy, Input } from "@angular/core";
|
|
4
|
-
// Applicazione
|
|
5
|
-
import { BaseFormControl } from "../base-form-control";
|
|
6
|
-
import { ACO_CUSTOMKEY, FAV_DEBUG_MODE, FAV_SLIDER_MODE } from '../../tokens';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@esfaenza/localizations";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "@esfaenza/access-control";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
/** Componente rappresentante una checkbox */
|
|
13
|
-
export class FormCheckboxComponent extends BaseFormControl {
|
|
14
|
-
/** @ignore Costruttore */
|
|
15
|
-
constructor(lc, cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_SLIDER_MODE, FAV_DEBUG_MODE) {
|
|
16
|
-
super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
|
|
17
|
-
this.lc = lc;
|
|
18
|
-
this.FAV_SLIDER_MODE = FAV_SLIDER_MODE;
|
|
19
|
-
/** Mostra l'input checkbox con lo stile di uno slider */
|
|
20
|
-
this.SliderMode = null;
|
|
21
|
-
}
|
|
22
|
-
ngOnInit() {
|
|
23
|
-
super.ngOnInit();
|
|
24
|
-
if (this.SliderMode == null)
|
|
25
|
-
this.SliderMode = this.FAV_SLIDER_MODE;
|
|
26
|
-
}
|
|
27
|
-
/** @ignore */
|
|
28
|
-
writeValue(obj) {
|
|
29
|
-
obj = obj ? (obj === true || obj.toLowerCase() == "true") : false;
|
|
30
|
-
this.EvaluatedModel = this.lc.loc(obj ? 'Sì' : 'No');
|
|
31
|
-
super.writeValue(obj);
|
|
32
|
-
}
|
|
33
|
-
changed() {
|
|
34
|
-
this.EvaluatedModel = this.lc.loc(this.Model ? 'Sì' : 'No');
|
|
35
|
-
super.changed(null, false, true);
|
|
36
|
-
}
|
|
37
|
-
/** @ignore */
|
|
38
|
-
onNotNullValueSet() { }
|
|
39
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCheckboxComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_SLIDER_MODE, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormCheckboxComponent, selector: "form-checkbox", inputs: { SliderMode: "SliderMode" }, usesInheritance: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\" class=\"app-inline-block\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}:</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <ng-container *ngIf=\"SliderMode\">\r\n <label class=\"toggler-wrapper slider-checkbox\">\r\n <input [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\" >\r\n <div class=\"toggler-slider\">\r\n <div class=\"toggler-knob\"></div>\r\n </div>\r\n </label>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!SliderMode\">\r\n <input class=\"app-pointer\" [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\"/>\r\n </ng-container>\r\n</ng-template>", styles: [".toggler-wrapper{display:block;width:45px;height:25px;cursor:pointer;position:relative}.toggler-wrapper input[type=checkbox]{display:none}.toggler-wrapper input[type=checkbox]:checked+.toggler-slider{background-color:#007bff}.toggler-wrapper .toggler-slider{background-color:#ccc;position:absolute;border-radius:100px;top:0;left:0;width:100%;height:100%;-webkit-transition:all .3s ease;transition:all .3s ease}.toggler-wrapper .toggler-knob{position:absolute;-webkit-transition:all .3s ease;transition:all .3s ease}.slider-checkbox{margin-top:3px}.toggler-wrapper.slider-checkbox input[type=checkbox]:checked+.toggler-slider .toggler-knob{left:calc(100% - 22px)}.toggler-wrapper.slider-checkbox .toggler-slider:after{position:absolute;top:50%;right:-25px;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:75%;text-transform:uppercase;font-weight:500;opacity:.7}.toggler-wrapper.slider-checkbox .toggler-knob{width:19px;height:19px;border-radius:50%;left:3px;top:3px;background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
41
|
-
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCheckboxComponent, decorators: [{
|
|
43
|
-
type: Component,
|
|
44
|
-
args: [{ selector: "form-checkbox", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\" class=\"app-inline-block\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}:</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <ng-container *ngIf=\"SliderMode\">\r\n <label class=\"toggler-wrapper slider-checkbox\">\r\n <input [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\" >\r\n <div class=\"toggler-slider\">\r\n <div class=\"toggler-knob\"></div>\r\n </div>\r\n </label>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!SliderMode\">\r\n <input class=\"app-pointer\" [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\"/>\r\n </ng-container>\r\n</ng-template>", styles: [".toggler-wrapper{display:block;width:45px;height:25px;cursor:pointer;position:relative}.toggler-wrapper input[type=checkbox]{display:none}.toggler-wrapper input[type=checkbox]:checked+.toggler-slider{background-color:#007bff}.toggler-wrapper .toggler-slider{background-color:#ccc;position:absolute;border-radius:100px;top:0;left:0;width:100%;height:100%;-webkit-transition:all .3s ease;transition:all .3s ease}.toggler-wrapper .toggler-knob{position:absolute;-webkit-transition:all .3s ease;transition:all .3s ease}.slider-checkbox{margin-top:3px}.toggler-wrapper.slider-checkbox input[type=checkbox]:checked+.toggler-slider .toggler-knob{left:calc(100% - 22px)}.toggler-wrapper.slider-checkbox .toggler-slider:after{position:absolute;top:50%;right:-25px;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:75%;text-transform:uppercase;font-weight:500;opacity:.7}.toggler-wrapper.slider-checkbox .toggler-knob{width:19px;height:19px;border-radius:50%;left:3px;top:3px;background-color:#fff}\n"] }]
|
|
45
|
-
}], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i2.NgControl, decorators: [{
|
|
46
|
-
type: Optional
|
|
47
|
-
}, {
|
|
48
|
-
type: Self
|
|
49
|
-
}] }, { type: Array, decorators: [{
|
|
50
|
-
type: Optional
|
|
51
|
-
}, {
|
|
52
|
-
type: Inject,
|
|
53
|
-
args: [NG_VALIDATORS]
|
|
54
|
-
}] }, { type: i3.AccessControlService }, { type: i3.ComponentContext, decorators: [{
|
|
55
|
-
type: Optional
|
|
56
|
-
}] }, { type: undefined, decorators: [{
|
|
57
|
-
type: Optional
|
|
58
|
-
}, {
|
|
59
|
-
type: Inject,
|
|
60
|
-
args: [ACO_CUSTOMKEY]
|
|
61
|
-
}] }, { type: undefined, decorators: [{
|
|
62
|
-
type: Optional
|
|
63
|
-
}, {
|
|
64
|
-
type: Inject,
|
|
65
|
-
args: [FAV_SLIDER_MODE]
|
|
66
|
-
}] }, { type: undefined, decorators: [{
|
|
67
|
-
type: Optional
|
|
68
|
-
}, {
|
|
69
|
-
type: Inject,
|
|
70
|
-
args: [FAV_DEBUG_MODE]
|
|
71
|
-
}] }], propDecorators: { SliderMode: [{
|
|
72
|
-
type: Input
|
|
73
|
-
}] } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jaGVja2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWNoZWNrYm94L2Zvcm0tY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1jaGVja2JveC9mb3JtLWNoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQXdCLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQVEsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXhHLGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFJOUUsNkNBQTZDO0FBTzdDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxlQUFlO0lBS3RELDJCQUEyQjtJQUMzQixZQUFvQixFQUF1QixFQUFFLEdBQXNCLEVBQXNCLFNBQW9CLEVBQXFDLFdBQXVCLEVBQUUsRUFBd0IsRUFBYyxVQUE0QixFQUFxQyxhQUFxQixFQUErQyxlQUF3QixFQUFzQyxjQUF1QjtRQUN2YSxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFEbEUsT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFBMlMsb0JBQWUsR0FBZixlQUFlLENBQVM7UUFKOVcseURBQXlEO1FBQ2hELGVBQVUsR0FBWSxJQUFJLENBQUM7SUFLcEMsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO0lBQ2QsVUFBVSxDQUFDLEdBQVE7UUFDZixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsS0FBVyxDQUFDOytHQTlCcEIscUJBQXFCLDJJQU1xRyxhQUFhLGlIQUFtSCxhQUFhLDZCQUE2QyxlQUFlLDZCQUF3RCxjQUFjO21HQU56WSxxQkFBcUIsa0hDbkJsQyxpbUdBcUNjOzs0RkRsQkQscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTTs7MEJBUXVCLFFBQVE7OzBCQUFJLElBQUk7OzBCQUEwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUFzRCxRQUFROzswQkFBa0MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBMEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzswQkFBcUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjO3lDQUh6WSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPcHRpb25hbCwgU2VsZiwgSG9zdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sJztcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBCYXNlRm9ybUNvbnRyb2wgfSBmcm9tIFwiLi4vYmFzZS1mb3JtLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUsIEZBVl9TTElERVJfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgcmFwcHJlc2VudGFudGUgdW5hIGNoZWNrYm94ICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1jaGVja2JveFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1jaGVja2JveC5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCJmb3JtLWNoZWNrYm94LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1DaGVja2JveENvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKiogTW9zdHJhIGwnaW5wdXQgY2hlY2tib3ggY29uIGxvIHN0aWxlIGRpIHVubyBzbGlkZXIgKi9cclxuICAgIEBJbnB1dCgpIFNsaWRlck1vZGU6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBBcHBDb250ZXh0OiBDb21wb25lbnRDb250ZXh0LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDT19DVVNUT01LRVkpIEFDT19DVVNUT01LRVk6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfU0xJREVSX01PREUpIHByaXZhdGUgRkFWX1NMSURFUl9NT0RFOiBib29sZWFuLCBAT3B0aW9uYWwoKSBASW5qZWN0KEZBVl9ERUJVR19NT0RFKSBGQVZfREVCVUdfTU9ERTogYm9vbGVhbikge1xyXG4gICAgICAgIHN1cGVyKGNkciwgbmdDb250cm9sLCBfdmFsaWRhdG9ycywgYWMsIEFwcENvbnRleHQsIEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLlNsaWRlck1vZGUgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5TbGlkZXJNb2RlID0gdGhpcy5GQVZfU0xJREVSX01PREU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBvYmogPSBvYmogPyAob2JqID09PSB0cnVlIHx8IG9iai50b0xvd2VyQ2FzZSgpID09IFwidHJ1ZVwiKSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmxjLmxvYyhvYmogPyAnU8OsJyA6ICdObycpO1xyXG5cclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5sYy5sb2ModGhpcy5Nb2RlbCA/ICdTw6wnIDogJ05vJyk7XHJcbiAgICAgICAgc3VwZXIuY2hhbmdlZChudWxsLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG9uTm90TnVsbFZhbHVlU2V0KCk6IHZvaWQgeyB9XHJcbn0iLCI8IS0tIFVndWFsZSBpbiB0dXR0aSBpIGNvbXBvbmVudGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIUZvcm1MYXlvdXQgJiYgKCFEaXNwbGF5TW9kZSB8fCAoRGlzcGxheUxheW91dCAhPSAnaGlkZGVuJyAmJiBEaXNwbGF5Q29uZGl0aW9uKSlcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdmb3JtJ1wiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2lubGluZSdcIiBjbGFzcz1cImFwcC1pbmxpbmVcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCIgY2xhc3M9XCJhcHAtaW5saW5lLWJsb2NrXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCIgY2xhc3M9XCJ7e0Zvcm1Hcm91cENsYXNzICsgKExhc3QgPyAnIGFwcC1tYXJnaW4tYm90dG9tLTAgYXBwLW1hcmdpbi1yaWdodC0wICcgOiAnJykgKyAoRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBEaXNwbGF5TW9kZSA/ICgnIGFwcC1pbmxpbmUtYmxvY2sgJyArICghTGFzdCA/ICdhcHAtbWFyZ2luLXJpZ2h0LTEwJyA6ICcnKSkgOiAnIGZvcm0tZ3JvdXAgcm93Jyl9fVwiPlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC17eyhEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWJvbGQgYXBwLW1hcmdpbi1ib3R0b20tMCcgOiBMYWJlbENvbFdpZHRoKSArIChEaXNwbGF5TW9kZSA/ICcgYXBwLWJvbGQnIDogJyBtLXQtNScpIH19XCI+e3tMYWJlbH19e3tSZXF1aXJlZCAmJiAhRGlzcGxheU1vZGUgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcbiAgICA8c3BhbiAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgSW5saW5lU2VwYXJhdG9yICE9ICcnXCI+e3tJbmxpbmVTZXBhcmF0b3J9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWlubGluZS1ibG9jaycgOiBJbnB1dENvbFdpZHRofX1cIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2xpZGVyTW9kZVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRvZ2dsZXItd3JhcHBlciBzbGlkZXItY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJSZWFkb25seSA/IHRydWUgOiBudWxsXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIGlkPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpOyBmaW5hbGl6ZWQoKVwiIChjbGljayk9XCJmb2N1c2VkKCRldmVudClcIiA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVyLXNsaWRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVyLWtub2JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhU2xpZGVyTW9kZVwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImFwcC1wb2ludGVyXCIgW2Rpc2FibGVkXT1cIlJlYWRvbmx5ID8gdHJ1ZSA6IG51bGxcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgaWQ9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKCk7IGZpbmFsaXplZCgpXCIgKGNsaWNrKT1cImZvY3VzZWQoJGV2ZW50KVwiLz5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|