@eqproject/eqp-dynamic-module 1.1.1 → 1.1.2

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.
@@ -23,6 +23,7 @@ export class ListValueFieldTemplateComponent {
23
23
  this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);
24
24
  }
25
25
  ngOnInit() {
26
+ this.updateField();
26
27
  this.setArrayData();
27
28
  if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {
28
29
  this.record[this.field.Name] = [];
@@ -31,7 +32,6 @@ export class ListValueFieldTemplateComponent {
31
32
  // e il validator del FormControl. Se non viene eseguita questa riga
32
33
  // l'utente deve modificare la selezione fatta per aggiornare la form.
33
34
  this.setFormControlValue();
34
- this.updateField();
35
35
  this.initStyles();
36
36
  }
37
37
  ngOnChanges(changes) {
@@ -46,7 +46,18 @@ export class ListValueFieldTemplateComponent {
46
46
  */
47
47
  updateField() {
48
48
  if (this.field.Formula) {
49
- this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
49
+ this.field.ValuePairs = {};
50
+ var temp = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
51
+ for (var key in temp) {
52
+ if (UtilityHelperService.isNumeric(temp[key])) {
53
+ this.field.ValuePairs[key] = Number(temp[key]);
54
+ }
55
+ else {
56
+ this.field.ValuePairs[key] = temp[key];
57
+ }
58
+ }
59
+ // this.setArrayData();
60
+ //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
50
61
  }
51
62
  if (this.field.VisibleIf) {
52
63
  this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);
@@ -87,9 +98,7 @@ export class ListValueFieldTemplateComponent {
87
98
  * Metodo per emettere l'evento che il valore del record è cambiato.
88
99
  */
89
100
  onRecordValueChange() {
90
- if (!this.field.Formula) {
91
- this.recordChange.emit(this.record);
92
- }
101
+ this.recordChange.emit(this.record);
93
102
  }
94
103
  /**
95
104
  * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.
@@ -100,7 +109,7 @@ export class ListValueFieldTemplateComponent {
100
109
  Object.keys(this.field.ValuePairs).forEach(k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));
101
110
  }
102
111
  else {
103
- Object.keys(this.field.ValuePairs).forEach(k => this.createNumberArrayDataElement(k, this.field.ValuePairs[k]));
112
+ Object.keys(this.field.ValuePairs).forEach(k => this.createArrayDataElement(k, this.field.ValuePairs[k]));
104
113
  }
105
114
  }
106
115
  else {
@@ -146,4 +155,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
146
155
  }], recordChange: [{
147
156
  type: Output
148
157
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLG9CQUFvQixFQUFrQixNQUFNLGdEQUFnRCxDQUFDO0FBRXRHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7QUFPbkYsTUFBTSxPQUFPLCtCQUErQjtJQVUxQztRQU5VLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUUseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsY0FBUyxHQUF1RSxFQUFFLENBQUM7SUFJbkUsQ0FBQztJQUVqQixVQUFVO1FBQ1Isa0ZBQWtGO1FBQ2xGLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLFNBQVM7WUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMs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LEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBQ0Q7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7OzRIQXpJVSwrQkFBK0I7Z0hBQS9CLCtCQUErQiwrS0NYNUMsa2hHQTZDTTsyRkRsQ08sK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDJCQUEyQjswRUFNNUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0UHJlc2VudGF0aW9uRW51bSwgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogTGlzdFZhbHVlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSA9IExpc3RQcmVzZW50YXRpb25FbnVtO1xyXG4gIGFycmF5RGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSwgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfVtdID0gW107XHJcbi8vdmFyaWFiaWxpIHBlciBnZXN0aXJlIGlsIGNzcyBkZWxsYSBsYWJlbCBlIGRlbCBmaWVsZFxyXG5GaWVsZHN0eWxlT2JqOiBhbnk7XHJcbkxhYmVsc3R5bGVPYmo6IGFueTtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgLy9GdW56aW9uZSBwZXIgcGFyc2FyZSBpbCBjYW1wbyBzdHlsZWNzcyBkZWxsJ29nZ2V0dG8gZmllbGQgZWQgYXBwbGljYXJsbyBhbGwnaHRtbFxyXG4gICAgaWYodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZCkgICBcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgICBpZih0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKSAgIFxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gTmVsIGNhc28gaW4gY3VpIHNvbm8gaW4gbW9kaWZpY2EgZGkgdW4gUmVjb3JkIGFnZ2lvcm5vIGlsIHZhbG9yZVxyXG4gICAgLy8gZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sLiBTZSBub24gdmllbmUgZXNlZ3VpdGEgcXVlc3RhIHJpZ2FcclxuICAgIC8vIGwndXRlbnRlIGRldmUgbW9kaWZpY2FyZSBsYSBzZWxlemlvbmUgZmF0dGEgcGVyIGFnZ2lvcm5hcmUgbGEgZm9ybS5cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5Gb3JtdWxhLCB0aGlzLnJlY29yZCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gdmllbmUgc2VsZXppb25hdGEgdW4nb3B6aW9uZSBuZWxsYSB2aXN1YWxpenphemlvbmUgYSBidXR0b25cclxuICAgKiBAcGFyYW0gZGF0YSBSYXBwcmVzZW50YSBsJ29nZ2V0dG8gc2VsZXppb25hdG9cclxuICAgKi9cclxuICBidXR0b25TZWxlY3RDbGljayhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nLCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9KSB7XHJcbiAgICBkYXRhLlNlbGVjdGVkID0gIWRhdGEuU2VsZWN0ZWQ7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkID0+IGQuS2V5ICE9IGRhdGEuS2V5ICYmIGQuVmFsdWUgIT0gZGF0YS5WYWx1ZSkuZm9yRWFjaChkID0+IGQuU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWMoZGF0YS5WYWx1ZSkpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IE51bWJlcihkYXRhLlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZGF0YS5WYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsL2kgdmFsb3JlL2kgc2VsZXppb25hdG8vaSBkYWxsJ3V0ZW50ZS5cclxuICAgKiBAcGFyYW0gZW1pdENoYW5nZSBTZSB0cnVlIHNjYXRlbmEgbCdldmVudG8gZGkgb3V0cHV0IGRlbGxhIG1vZGlmaWNhIGRlbCB2YWxvcmUgZGkgcmVjb3JkXHJcbiAgICovXHJcbiAgdXBkYXRlU2VsZWN0ZWQoZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB0aGlzLmFycmF5RGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLlNlbGVjdGVkKS5tYXAoZGF0YSA9PiBkYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRlbCB0aXBvIHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBhbnkgfSBkYSB1c2FyZSBjb21lIHNvcmdlbnRlIGRhdGkgcGVyIGxhIGVxcC1zZWxlY3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5QcmVzZW50YXRpb25Nb2RlICE9IExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pKSB7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGhpcy5maWVsZC5WYWx1ZVBhaXJzW09iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycylbMF1dKSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycykuZm9yRWFjaFxyXG4gICAgICAgICAgKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoXHJcbiAgICAgICAgICAoayA9PiB0aGlzLmNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoaywgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkJ1dHRvbkltYWdlTGlzdC5mb3JFYWNoKGkgPT4geyB0aGlzLmNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoaS5CdXR0b25LZXksIGkuQnV0dG9uVmFsdWUsICdkYXRhOicgKyBpLkZpbGVDb250ZW50VHlwZSArICc7YmFzZTY0LCcgKyBpLkZpbGVEYXRhQmFzZTY0KTsgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgdmFyIGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgdmFyIGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sIGFzc29jaWF0byBhbCBjYW1wby5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5zZXRWYWx1ZSh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKTtcclxuICB9XHJcbn1cclxuIiwiPGVxcC1zZWxlY3QgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIiBbYXJyYXlEYXRhXT1cImFycmF5RGF0YVwiXHJcbiAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInVmFsdWUnXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwiIWZpZWxkLlJlcXVpcmVkXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInS2V5J1wiXHJcbiAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCJmaWVsZC5OYW1lXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiIFtpc1JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgW2lzRGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiXHJcbiAgICBbKG5nTW9kZWxJbnB1dCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgW2lzTXVsdGlTZWxlY3RdPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIlxyXG4gICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuPC9lcXAtc2VsZWN0PlxyXG5cclxuPGRpdiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgIT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1yLTMgcHMtM1wiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj4ge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIiA6IFwiXCIpfX0gPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBSQURJTyBCVVRUT04gKFNFTlpBIFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICA8bWF0LXJhZGlvLWdyb3VwIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmICFmaWVsZC5Jc011bHRpQ2hvaWNoZVwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtci0yXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCIgW3ZhbHVlXT1cImRhdGEuVmFsdWVcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBDSEVDS0JPWCAoU0VMRVpJT05FIE1VTFRJUExBKSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXSAmJiBmaWVsZC5Jc011bHRpQ2hvaWNoZVwiPlxyXG4gICAgICAgIDxtYXQtY2hlY2tib3ggIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBjbGFzcz1cIm1yLTJcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiIFsobmdNb2RlbCldPVwiZGF0YS5TZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFBVTFNBTlRJIChDT04gVEVTVE8gTyBJTU1BR0lOSSkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIlxyXG4gICAgICAgICpuZ0lmPVwiW0xpc3RQcmVzZW50YXRpb25FbnVtWydQdWxzYW50ZSBjb24gdGVzdG8nXSwgTGlzdFByZXNlbnRhdGlvbkVudW0uSW1tYWdpbmldLmluY2x1ZGVzKGZpZWxkLlByZXNlbnRhdGlvbk1vZGUpXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbS0xIGRhdGEtYnV0dG9uXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1idXR0b24nOiBkYXRhLlNlbGVjdGVkID09IHRydWUsICdwLTAnOiBmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pfVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJidXR0b25TZWxlY3RDbGljayhkYXRhKVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRFU1RPIERFTCBQVUxTQU5URSAtLT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydQdWxzYW50ZSBjb24gdGVzdG8nXVwiPiB7e2RhdGEuS2V5fX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8IS0tIElNTUFHSU5FIERFTCBQVUxTQU5URSAtLT5cclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW0uSW1tYWdpbmlcIiBbc3JjXT1cImRhdGEuSW1nVXJsXCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLG9CQUFvQixFQUFrQixNQUFNLGdEQUFnRCxDQUFDO0FBRXRHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7QUFPbkYsTUFBTSxPQUFPLCtCQUErQjtJQVUxQztRQU5VLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUUseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsY0FBUyxHQUF1RSxFQUFFLENBQUM7SUFJbkUsQ0FBQztJQUVqQixVQUFVO1FBQ1Isa0ZBQWtGO1FBQ2xGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLFNBQVM7WUFDM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMs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QUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1NBQ3pFO2FBQU07WUFDTCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFDRDs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQzs7NEhBbkpVLCtCQUErQjtnSEFBL0IsK0JBQStCLCtLQ1g1QyxraEdBNkNNOzJGRGxDTywrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0UsMkJBQTJCOzBFQU01QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RQcmVzZW50YXRpb25FbnVtLCBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBMaXN0VmFsdWVGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtID0gTGlzdFByZXNlbnRhdGlvbkVudW07XHJcbiAgYXJyYXlEYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9W10gPSBbXTtcclxuICAvL3ZhcmlhYmlsaSBwZXIgZ2VzdGlyZSBpbCBjc3MgZGVsbGEgbGFiZWwgZSBkZWwgZmllbGRcclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcbiAgTGFiZWxzdHlsZU9iajogYW55O1xyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICAvL0Z1bnppb25lIHBlciBwYXJzYXJlIGlsIGNhbXBvIHN0eWxlY3NzIGRlbGwnb2dnZXR0byBmaWVsZCBlZCBhcHBsaWNhcmxvIGFsbCdodG1sXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuTGFiZWxzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gTmVsIGNhc28gaW4gY3VpIHNvbm8gaW4gbW9kaWZpY2EgZGkgdW4gUmVjb3JkIGFnZ2lvcm5vIGlsIHZhbG9yZVxyXG4gICAgLy8gZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sLiBTZSBub24gdmllbmUgZXNlZ3VpdGEgcXVlc3RhIHJpZ2FcclxuICAgIC8vIGwndXRlbnRlIGRldmUgbW9kaWZpY2FyZSBsYSBzZWxlemlvbmUgZmF0dGEgcGVyIGFnZ2lvcm5hcmUgbGEgZm9ybS5cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3JkJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3JlY29yZCddLmZpcnN0Q2hhbmdlID09IGZhbHNlICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10ucHJldmlvdXNWYWx1ZSkpIHsgICAgIFxyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgICAgZm9yICh2YXIga2V5IGluIHRlbXApIHtcclxuICAgICAgICBpZihVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXldKSl7XHJcbiAgICAgICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnNba2V5XSA9IE51bWJlcih0ZW1wW2tleV0pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tleV0gPSB0ZW1wW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAvLyAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgICAgIC8vdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHZpZW5lIHNlbGV6aW9uYXRhIHVuJ29wemlvbmUgbmVsbGEgdmlzdWFsaXp6YXppb25lIGEgYnV0dG9uXHJcbiAgICogQHBhcmFtIGRhdGEgUmFwcHJlc2VudGEgbCdvZ2dldHRvIHNlbGV6aW9uYXRvXHJcbiAgICovXHJcbiAgYnV0dG9uU2VsZWN0Q2xpY2soZGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IHN0cmluZywgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfSkge1xyXG4gICAgZGF0YS5TZWxlY3RlZCA9ICFkYXRhLlNlbGVjdGVkO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZChmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFycmF5RGF0YS5maWx0ZXIoZCA9PiBkLktleSAhPSBkYXRhLktleSAmJiBkLlZhbHVlICE9IGRhdGEuVmFsdWUpLmZvckVhY2goZCA9PiBkLlNlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICBcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyhkYXRhLlZhbHVlKSkge1xyXG5cclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gTnVtYmVyKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwvaSB2YWxvcmUvaSBzZWxlemlvbmF0by9pIGRhbGwndXRlbnRlLlxyXG4gICAqIEBwYXJhbSBlbWl0Q2hhbmdlIFNlIHRydWUgc2NhdGVuYSBsJ2V2ZW50byBkaSBvdXRwdXQgZGVsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBkaSByZWNvcmRcclxuICAgKi9cclxuICB1cGRhdGVTZWxlY3RlZChlbWl0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICBpZiAoZW1pdENoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZW1ldHRlcmUgbCdldmVudG8gY2hlIGlsIHZhbG9yZSBkZWwgcmVjb3JkIMOoIGNhbWJpYXRvLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkZWwgdGlwbyB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55IH0gZGEgdXNhcmUgY29tZSBzb3JnZW50ZSBkYXRpIHBlciBsYSBlcXAtc2VsZWN0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0QXJyYXlEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUHJlc2VudGF0aW9uTW9kZSAhPSBMaXN0UHJlc2VudGF0aW9uRW51bS5JbW1hZ2luaSkge1xyXG4gICAgICBpZiAoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRoaXMuZmllbGQuVmFsdWVQYWlyc1tPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpWzBdXSkpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2hcclxuICAgICAgICAgIChrID0+IHRoaXMuY3JlYXRlTnVtYmVyQXJyYXlEYXRhRWxlbWVudChrLCBOdW1iZXIodGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycykuZm9yRWFjaFxyXG4gICAgICAgICAgKGsgPT4gdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGssIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5CdXR0b25JbWFnZUxpc3QuZm9yRWFjaChpID0+IHsgdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGkuQnV0dG9uS2V5LCBpLkJ1dHRvblZhbHVlLCAnZGF0YTonICsgaS5GaWxlQ29udGVudFR5cGUgKyAnO2Jhc2U2NCwnICsgaS5GaWxlRGF0YUJhc2U2NCk7IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBcnJheURhdGFFbGVtZW50KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBpbWdVcmw6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHZhciBpc09wdGlvblNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9ICEhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5maW5kKHYgPT4gdiA9PSB2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFycmF5RGF0YS5wdXNoKHsgS2V5OiBrZXksIFZhbHVlOiB2YWx1ZSwgU2VsZWN0ZWQ6IGlzT3B0aW9uU2VsZWN0ZWQsIEltZ1VybDogaW1nVXJsIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGtleTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBpbWdVcmw6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHZhciBpc09wdGlvblNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9ICEhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5maW5kKHYgPT4gdiA9PSB2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFycmF5RGF0YS5wdXNoKHsgS2V5OiBrZXksIFZhbHVlOiB2YWx1ZSwgU2VsZWN0ZWQ6IGlzT3B0aW9uU2VsZWN0ZWQsIEltZ1VybDogaW1nVXJsIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGUgaWwgdmFsaWRhdG9yIGRlbCBGb3JtQ29udHJvbCBhc3NvY2lhdG8gYWwgY2FtcG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRGb3JtQ29udHJvbFZhbHVlKCkge1xyXG4gICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uc2V0VmFsdWUodGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSk7XHJcbiAgfVxyXG59XHJcbiIsIjxlcXAtc2VsZWN0IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFtzaG93Q2FuY2VsQnV0dG9uXT1cIiFmaWVsZC5SZXF1aXJlZFwiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ0tleSdcIlxyXG4gICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiZmllbGQuTmFtZVwiIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5EZXNjcmlwdGlvblwiXHJcbiAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsSW5wdXQpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIFtpc011bHRpU2VsZWN0XT1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCJcclxuICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbjwvZXFwLXNlbGVjdD5cclxuXHJcbjxkaXYgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlICE9IExpc3RQcmVzZW50YXRpb25FbnVtWydDb21ibyBib3gnXVwiIFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiPlxyXG5cclxuICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtci0zIHBzLTNcIiBbbmdTdHlsZV09XCJMYWJlbHN0eWxlT2JqXCI+IHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19IDwvbWF0LWxhYmVsPlxyXG5cclxuICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU8gQlVUVE9OIChTRU5aQSBTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgPG1hdC1yYWRpby1ncm91cCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXSAmJiAhZmllbGQuSXNNdWx0aUNob2ljaGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXItMlwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiIFt2YWx1ZV09XCJkYXRhLlZhbHVlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5LZXl9fVxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgQ0hFQ0tCT1ggKFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIlxyXG4gICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgZmllbGQuSXNNdWx0aUNob2ljaGVcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94ICBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJtci0yXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbKG5nTW9kZWwpXT1cImRhdGEuU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5LZXl9fVxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBQVUxTQU5USSAoQ09OIFRFU1RPIE8gSU1NQUdJTkkpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAqbmdJZj1cIltMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ10sIExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pXS5pbmNsdWRlcyhmaWVsZC5QcmVzZW50YXRpb25Nb2RlKVwiPlxyXG4gICAgICAgIDxidXR0b24gW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG0tMSBkYXRhLWJ1dHRvblwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtYnV0dG9uJzogZGF0YS5TZWxlY3RlZCA9PSB0cnVlLCAncC0wJzogZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bS5JbW1hZ2luaX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uU2VsZWN0Q2xpY2soZGF0YSlcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBURVNUTyBERUwgUFVMU0FOVEUgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ11cIj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBJTU1BR0lORSBERUwgUFVMU0FOVEUgLS0+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pXCIgW3NyY109XCJkYXRhLkltZ1VybFwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
@@ -1505,6 +1505,7 @@ class ListValueFieldTemplateComponent {
1505
1505
  this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);
1506
1506
  }
1507
1507
  ngOnInit() {
1508
+ this.updateField();
1508
1509
  this.setArrayData();
1509
1510
  if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {
1510
1511
  this.record[this.field.Name] = [];
@@ -1513,7 +1514,6 @@ class ListValueFieldTemplateComponent {
1513
1514
  // e il validator del FormControl. Se non viene eseguita questa riga
1514
1515
  // l'utente deve modificare la selezione fatta per aggiornare la form.
1515
1516
  this.setFormControlValue();
1516
- this.updateField();
1517
1517
  this.initStyles();
1518
1518
  }
1519
1519
  ngOnChanges(changes) {
@@ -1528,7 +1528,18 @@ class ListValueFieldTemplateComponent {
1528
1528
  */
1529
1529
  updateField() {
1530
1530
  if (this.field.Formula) {
1531
- this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
1531
+ this.field.ValuePairs = {};
1532
+ var temp = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
1533
+ for (var key in temp) {
1534
+ if (UtilityHelperService.isNumeric(temp[key])) {
1535
+ this.field.ValuePairs[key] = Number(temp[key]);
1536
+ }
1537
+ else {
1538
+ this.field.ValuePairs[key] = temp[key];
1539
+ }
1540
+ }
1541
+ // this.setArrayData();
1542
+ //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
1532
1543
  }
1533
1544
  if (this.field.VisibleIf) {
1534
1545
  this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);
@@ -1569,9 +1580,7 @@ class ListValueFieldTemplateComponent {
1569
1580
  * Metodo per emettere l'evento che il valore del record è cambiato.
1570
1581
  */
1571
1582
  onRecordValueChange() {
1572
- if (!this.field.Formula) {
1573
- this.recordChange.emit(this.record);
1574
- }
1583
+ this.recordChange.emit(this.record);
1575
1584
  }
1576
1585
  /**
1577
1586
  * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.
@@ -1582,7 +1591,7 @@ class ListValueFieldTemplateComponent {
1582
1591
  Object.keys(this.field.ValuePairs).forEach(k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));
1583
1592
  }
1584
1593
  else {
1585
- Object.keys(this.field.ValuePairs).forEach(k => this.createNumberArrayDataElement(k, this.field.ValuePairs[k]));
1594
+ Object.keys(this.field.ValuePairs).forEach(k => this.createArrayDataElement(k, this.field.ValuePairs[k]));
1586
1595
  }
1587
1596
  }
1588
1597
  else {
@@ -2954,6 +2963,7 @@ class AddFormulaComponent {
2954
2963
  this.fieldNull = true;
2955
2964
  this.formula = new Formula('0');
2956
2965
  this.stringaFormula = "";
2966
+ this.counter = 0;
2957
2967
  this.Fields = [];
2958
2968
  }
2959
2969
  ngOnInit() {
@@ -3016,6 +3026,11 @@ class AddFormulaComponent {
3016
3026
  }
3017
3027
  }
3018
3028
  }
3029
+ addArrayList() {
3030
+ this.counter++;
3031
+ var value = "var outputList" + this.counter + " = { \"key\" : value , \"key2\" : value2 }; outputList" + this.counter + ";";
3032
+ this.addNumber(value);
3033
+ }
3019
3034
  addNumber(value) {
3020
3035
  this.stringaFormula = this.stringaFormula.trim();
3021
3036
  if (UtilityHelperService.isNumeric(value)) {
@@ -3104,10 +3119,10 @@ class AddFormulaComponent {
3104
3119
  }
3105
3120
  }
3106
3121
  AddFormulaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: AddFormulaComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$3.MatDialogRef }, { token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
3107
- AddFormulaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: AddFormulaComponent, selector: "eqp-dynamic-module-add-formula-component", viewQueries: [{ propertyName: "formulaTextArea", first: true, predicate: ["formula"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formula\" #formula type=\"textarea\" id=\"formula\" rows=\"10\"\r\n style=\"width: 100%\" class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\" (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n [(ngModel)]=\"stringaFormula\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('IF( Condizione ) { se vera } ELSE { se falsa }')\">IF</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\">%</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\">C</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\">&divide;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\">x<sup>2</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\">x<sup>3</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\">x<sup>y</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\">&#x213C;</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\">7</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\">8</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\">9</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\">&times;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"><sup>2</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"><sup>y</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\">ln</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\">log</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\">4</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\">5</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\">6</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\">&minus;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\">sin</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\">cos</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\">tan</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\">e</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\">1</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\">2</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\">3</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\">&#43;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div> \r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\">0</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\">.</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\">Annulla</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\">Salva</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2\">\r\n <div [hidden]=\"fieldNull\" cdkDropList cdkDropListOrientation=\"vertical\" class=\"example-list\">\r\n <div class=\"example-box\" draggable=\"true\" (drag)=\"drag_handler($event)\"\r\n (dragend)=\"dragend_handler($event)\" (dragenter)=\"dragenter_handler($event)\"\r\n (dragleave)=\"dragleave_handler($event)\" (dragover)=\"dragover_handler($event)\"\r\n (dragstart)=\"dragstart_handler($event)\" (drop)=\"drop_handler($event)\"\r\n [attr.data-drag-data]=\"field.Label\" *ngFor=\"let field of Fields\" cdkDrag>\r\n {{field.Label}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".col,.col-2,.col-12{padding-left:5px;padding-right:5px}.btn-xl{font-size:1.5rem;line-height:.9}.btn-sm{border-radius:0}@media (min-width: 420px){.d-lt-none{display:none!important}.d-lt-inline{display:inline!important}.d-lt-inline-block{display:inline-block!important}.d-lt-block{display:block!important}.d-lt-table{display:table!important}.d-lt-table-row{display:table-row!important}.d-lt-table-cell{display:table-cell!important}.d-lt-flex{display:flex!important}.d-lt-inline-flex{display:inline-flex!important}.mycol-2{flex:0 0 20%;max-width:20%}}.preview{padding:20px 10px;border-right:solid 1px #ccc;color:#ff0000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background-color:#0ff;font-size:14px;flex-grow:1;flex-basis:0}.example-box{padding:20px 10px;border-right:solid 1px #ccc;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background:white;font-size:14px;flex-grow:1;flex-basis:0}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list{min-width:100%;max-width:100%;border:solid 1px #ccc;min-height:60px;background:white;border-radius:4px;overflow:hidden}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.example-custom-placeholder{background:#ccc;border:dotted 3px #999;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-placeholder{opacity:0}.droptarget{float:left;margin:15px 100px 15px 15px;padding:10px;border:1px solid #aaaaaa}.blink{animation:blink-animation .4s steps(5,start) infinite;-webkit-animation:blink-animation .4s steps(5,start) infinite}@keyframes blink-animation{to{visibility:hidden}}.categories-item-drag{color:red!important;text-align:center;position:relative;line-height:2rem;padding:-.5rem}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
3122
+ AddFormulaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: AddFormulaComponent, selector: "eqp-dynamic-module-add-formula-component", viewQueries: [{ propertyName: "formulaTextArea", first: true, predicate: ["formula"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formula\" #formula type=\"textarea\" id=\"formula\" rows=\"10\"\r\n style=\"width: 100%\" class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\" (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n [(ngModel)]=\"stringaFormula\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addArrayList()\">ArrayList</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('IF( Condizione ) { se vera } ELSE { se falsa }')\">IF</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\">%</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\">C</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\">&divide;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\">x<sup>2</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\">x<sup>3</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\">x<sup>y</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\">&#x213C;</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\">7</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\">8</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\">9</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\">&times;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"><sup>2</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"><sup>y</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\">ln</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\">log</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\">4</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\">5</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\">6</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\">&minus;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\">sin</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\">cos</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\">tan</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\">e</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\">1</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\">2</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\">3</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\">&#43;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\">0</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\">.</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\">Annulla</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\">Salva</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2\">\r\n <div [hidden]=\"fieldNull\" cdkDropList cdkDropListOrientation=\"vertical\" class=\"example-list\">\r\n <div class=\"example-box\" draggable=\"true\" (drag)=\"drag_handler($event)\"\r\n (dragend)=\"dragend_handler($event)\" (dragenter)=\"dragenter_handler($event)\"\r\n (dragleave)=\"dragleave_handler($event)\" (dragover)=\"dragover_handler($event)\"\r\n (dragstart)=\"dragstart_handler($event)\" (drop)=\"drop_handler($event)\"\r\n [attr.data-drag-data]=\"field.Label\" *ngFor=\"let field of Fields\" cdkDrag>\r\n {{field.Label}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".col,.col-2,.col-12{padding-left:5px;padding-right:5px}.btn-xl{font-size:1.5rem;line-height:.9}.btn-sm{border-radius:0}@media (min-width: 420px){.d-lt-none{display:none!important}.d-lt-inline{display:inline!important}.d-lt-inline-block{display:inline-block!important}.d-lt-block{display:block!important}.d-lt-table{display:table!important}.d-lt-table-row{display:table-row!important}.d-lt-table-cell{display:table-cell!important}.d-lt-flex{display:flex!important}.d-lt-inline-flex{display:inline-flex!important}.mycol-2{flex:0 0 20%;max-width:20%}}.preview{padding:20px 10px;border-right:solid 1px #ccc;color:#ff0000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background-color:#0ff;font-size:14px;flex-grow:1;flex-basis:0}.example-box{padding:20px 10px;border-right:solid 1px #ccc;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background:white;font-size:14px;flex-grow:1;flex-basis:0}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list{min-width:100%;max-width:100%;border:solid 1px #ccc;min-height:60px;background:white;border-radius:4px;overflow:hidden}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.example-custom-placeholder{background:#ccc;border:dotted 3px #999;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-placeholder{opacity:0}.droptarget{float:left;margin:15px 100px 15px 15px;padding:10px;border:1px solid #aaaaaa}.blink{animation:blink-animation .4s steps(5,start) infinite;-webkit-animation:blink-animation .4s steps(5,start) infinite}@keyframes blink-animation{to{visibility:hidden}}.categories-item-drag{color:red!important;text-align:center;position:relative;line-height:2rem;padding:-.5rem}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
3108
3123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: AddFormulaComponent, decorators: [{
3109
3124
  type: Component,
3110
- args: [{ selector: 'eqp-dynamic-module-add-formula-component', template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formula\" #formula type=\"textarea\" id=\"formula\" rows=\"10\"\r\n style=\"width: 100%\" class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\" (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n [(ngModel)]=\"stringaFormula\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('IF( Condizione ) { se vera } ELSE { se falsa }')\">IF</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\">%</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\">C</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\">&divide;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\">x<sup>2</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\">x<sup>3</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\">x<sup>y</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\">&#x213C;</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\">7</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\">8</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\">9</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\">&times;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"><sup>2</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"><sup>y</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\">ln</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\">log</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\">4</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\">5</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\">6</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\">&minus;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\">sin</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\">cos</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\">tan</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\">e</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\">1</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\">2</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\">3</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\">&#43;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div> \r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\">0</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\">.</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\">Annulla</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\">Salva</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2\">\r\n <div [hidden]=\"fieldNull\" cdkDropList cdkDropListOrientation=\"vertical\" class=\"example-list\">\r\n <div class=\"example-box\" draggable=\"true\" (drag)=\"drag_handler($event)\"\r\n (dragend)=\"dragend_handler($event)\" (dragenter)=\"dragenter_handler($event)\"\r\n (dragleave)=\"dragleave_handler($event)\" (dragover)=\"dragover_handler($event)\"\r\n (dragstart)=\"dragstart_handler($event)\" (drop)=\"drop_handler($event)\"\r\n [attr.data-drag-data]=\"field.Label\" *ngFor=\"let field of Fields\" cdkDrag>\r\n {{field.Label}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".col,.col-2,.col-12{padding-left:5px;padding-right:5px}.btn-xl{font-size:1.5rem;line-height:.9}.btn-sm{border-radius:0}@media (min-width: 420px){.d-lt-none{display:none!important}.d-lt-inline{display:inline!important}.d-lt-inline-block{display:inline-block!important}.d-lt-block{display:block!important}.d-lt-table{display:table!important}.d-lt-table-row{display:table-row!important}.d-lt-table-cell{display:table-cell!important}.d-lt-flex{display:flex!important}.d-lt-inline-flex{display:inline-flex!important}.mycol-2{flex:0 0 20%;max-width:20%}}.preview{padding:20px 10px;border-right:solid 1px #ccc;color:#ff0000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background-color:#0ff;font-size:14px;flex-grow:1;flex-basis:0}.example-box{padding:20px 10px;border-right:solid 1px #ccc;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background:white;font-size:14px;flex-grow:1;flex-basis:0}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list{min-width:100%;max-width:100%;border:solid 1px #ccc;min-height:60px;background:white;border-radius:4px;overflow:hidden}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.example-custom-placeholder{background:#ccc;border:dotted 3px #999;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-placeholder{opacity:0}.droptarget{float:left;margin:15px 100px 15px 15px;padding:10px;border:1px solid #aaaaaa}.blink{animation:blink-animation .4s steps(5,start) infinite;-webkit-animation:blink-animation .4s steps(5,start) infinite}@keyframes blink-animation{to{visibility:hidden}}.categories-item-drag{color:red!important;text-align:center;position:relative;line-height:2rem;padding:-.5rem}\n"] }]
3125
+ args: [{ selector: 'eqp-dynamic-module-add-formula-component', template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div class=\"row\">\r\n <div class=\"col-12 pt-2\">\r\n <div class=\"p-1\">\r\n <textarea name=\"formula\" #formula type=\"textarea\" id=\"formula\" rows=\"10\"\r\n style=\"width: 100%\" class=\"droptarget\"\r\n (click)=\"lostFocus(formula)\" (keyup)=\"lostFocus(formula)\"\r\n (blur)=\"lostFocus(formula)\"\r\n [(ngModel)]=\"stringaFormula\"></textarea>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"p-1 form-group\">\r\n <form method=\"POST\" class=\"alert alert-secondary\">\r\n <div class=\"w-100\">\r\n <div class=\"row pt-2\">\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addArrayList()\">ArrayList</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('IF( Condizione ) { se vera } ELSE { se falsa }')\">IF</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('/100')\">%</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-danger\"\r\n (click)=\"clear()\">C</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('/')\">&divide;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,2)')\">x<sup>2</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore ,3)')\">x<sup>3</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( valore , potenza )')\">x<sup>y</sup></button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber(' * 3.14 ')\">&#x213C;</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('7')\">7</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('8')\">8</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('9')\">9</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('*')\">&times;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sqrt( valore )')\"><sup>2</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"><sup>y</sup>&radic;x</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log( valore )')\">ln</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.log10( valore )')\">log</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('4')\">4</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('5')\">5</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('6')\">6</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('-')\">&minus;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.sin( valore )')\">sin</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.cos( valore )')\">cos</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addSymbol('Math.tan( valore )')\">tan</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-secondary\"\r\n (click)=\"addNumber('* 2.718281828459045')\">e</button>\r\n </div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('1')\">1</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('2')\">2</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('3')\">3</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-xl btn-info\"\r\n (click)=\"addNumber('+')\">&#43;</button>\r\n </div>\r\n </div>\r\n <div class=\"row pt-2\">\r\n <div class=\"col d-lt-flex\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n <div class=\"col\"></div>\r\n\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('0')\">0</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-success\"\r\n (click)=\"addNumber('.')\">.</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"back()\">Annulla</button>\r\n </div>\r\n <div class=\"col d-lt-flex\"><button\r\n class=\"form-control btn btn-sm btn-primary\"\r\n (click)=\"save()\">Salva</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-3 p-2\">\r\n <div [hidden]=\"fieldNull\" cdkDropList cdkDropListOrientation=\"vertical\" class=\"example-list\">\r\n <div class=\"example-box\" draggable=\"true\" (drag)=\"drag_handler($event)\"\r\n (dragend)=\"dragend_handler($event)\" (dragenter)=\"dragenter_handler($event)\"\r\n (dragleave)=\"dragleave_handler($event)\" (dragover)=\"dragover_handler($event)\"\r\n (dragstart)=\"dragstart_handler($event)\" (drop)=\"drop_handler($event)\"\r\n [attr.data-drag-data]=\"field.Label\" *ngFor=\"let field of Fields\" cdkDrag>\r\n {{field.Label}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".col,.col-2,.col-12{padding-left:5px;padding-right:5px}.btn-xl{font-size:1.5rem;line-height:.9}.btn-sm{border-radius:0}@media (min-width: 420px){.d-lt-none{display:none!important}.d-lt-inline{display:inline!important}.d-lt-inline-block{display:inline-block!important}.d-lt-block{display:block!important}.d-lt-table{display:table!important}.d-lt-table-row{display:table-row!important}.d-lt-table-cell{display:table-cell!important}.d-lt-flex{display:flex!important}.d-lt-inline-flex{display:inline-flex!important}.mycol-2{flex:0 0 20%;max-width:20%}}.preview{padding:20px 10px;border-right:solid 1px #ccc;color:#ff0000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background-color:#0ff;font-size:14px;flex-grow:1;flex-basis:0}.example-box{padding:20px 10px;border-right:solid 1px #ccc;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;text-align:center;cursor:move;background:white;font-size:14px;flex-grow:1;flex-basis:0}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list{min-width:100%;max-width:100%;border:solid 1px #ccc;min-height:60px;background:white;border-radius:4px;overflow:hidden}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.example-custom-placeholder{background:#ccc;border:dotted 3px #999;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-placeholder{opacity:0}.droptarget{float:left;margin:15px 100px 15px 15px;padding:10px;border:1px solid #aaaaaa}.blink{animation:blink-animation .4s steps(5,start) infinite;-webkit-animation:blink-animation .4s steps(5,start) infinite}@keyframes blink-animation{to{visibility:hidden}}.categories-item-drag{color:red!important;text-align:center;position:relative;line-height:2rem;padding:-.5rem}\n"] }]
3111
3126
  }], ctorParameters: function () {
3112
3127
  return [{ type: undefined, decorators: [{
3113
3128
  type: Inject,
@@ -3166,15 +3181,15 @@ class AddFormFieldComponent {
3166
3181
  * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input
3167
3182
  * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.
3168
3183
  */
3169
- setFormulaAutocompleteOptions(keyboardEvent) {
3170
- // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto
3171
- // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,
3172
- // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e
3173
- // si prederebbe la selezione appena fatta).
3174
- if (!keyboardEvent || !keyboardEvent.code.includes("Arrow")) {
3175
- this.formulaAutocompleteOptions = UtilityHelperService.GetAutocompleteOptions(this.availableFields, this.field.Formula);
3176
- }
3177
- }
3184
+ // setFormulaAutocompleteOptions(keyboardEvent: KeyboardEvent) {
3185
+ // // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto
3186
+ // // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,
3187
+ // // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e
3188
+ // // si prederebbe la selezione appena fatta).
3189
+ // if (!keyboardEvent || !keyboardEvent.code.includes("Arrow")) {
3190
+ // this.formulaAutocompleteOptions = UtilityHelperService.GetAutocompleteOptions(this.availableFields, this.field.Formula);
3191
+ // }
3192
+ // }
3178
3193
  setVisibleIfAutocompleteOptions(keyboardEvent) {
3179
3194
  // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto
3180
3195
  // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,
@@ -3198,7 +3213,7 @@ class AddFormFieldComponent {
3198
3213
  */
3199
3214
  createFieldForm() {
3200
3215
  this.fieldFormGroup = this.formBuilder.group({
3201
- Label: [this.field.Label, [Validators.required, this.questionPoll]],
3216
+ Label: [this.field.Label, [Validators.required, this.questionPoll, Validators.pattern('^[a-zA-Z ]*$')]],
3202
3217
  Description: [this.field.Description, [Validators.required, this.questionPoll]],
3203
3218
  Readonly: [this.field.Readonly],
3204
3219
  Required: [this.field.Required],
@@ -3246,7 +3261,7 @@ class AddFormFieldComponent {
3246
3261
  this.field.Microphone = false;
3247
3262
  }
3248
3263
  this.fieldFormGroup.addControl('TextMask', new UntypedFormControl(this.field.TextMask));
3249
- this.fieldFormGroup.addControl('MaxLenght', [new UntypedFormControl(this.field.MaxLenght), [this.questionPoll, Validators.pattern("^[0-9]*$")]]);
3264
+ this.fieldFormGroup.addControl('MaxLenght', new UntypedFormControl(this.field.MaxLenght, [this.questionPoll, Validators.pattern("^[0-9]*$")]));
3250
3265
  this.fieldFormGroup.addControl('MinLenght', new UntypedFormControl(this.field.MinLenght, [this.questionPoll, Validators.pattern("^[0-9]*$")]));
3251
3266
  this.fieldFormGroup.addControl('Microphone', new UntypedFormControl(this.field.Microphone));
3252
3267
  this.fieldTypeFormTemplate = this.textFieldFormTemplate;
@@ -3598,6 +3613,12 @@ class AddFormFieldComponent {
3598
3613
  switch (this.field.FieldType) {
3599
3614
  case FieldTypeEnum['Elenco generico']:
3600
3615
  if (this.field.PresentationMode != ListPresentationEnum.Immagini) {
3616
+ if (this.field.Formula != undefined && this.field.Formula != "") {
3617
+ if (!this.field.ValuePairs) {
3618
+ this.field.ValuePairs = {};
3619
+ }
3620
+ return false;
3621
+ }
3601
3622
  return !this.field.ValuePairs || this.field.ValuePairs.length === 0;
3602
3623
  }
3603
3624
  else {