@esfaenza/parameters 13.1.7 → 13.1.10
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/esm2020/lib/es_parameters.component.mjs +7 -5
- package/esm2020/lib/models/GenericParameter.mjs +2 -2
- package/fesm2015/esfaenza-parameters.mjs +7 -5
- package/fesm2015/esfaenza-parameters.mjs.map +1 -1
- package/fesm2020/esfaenza-parameters.mjs +7 -5
- package/fesm2020/esfaenza-parameters.mjs.map +1 -1
- package/lib/es_parameters.component.d.ts +1 -1
- package/lib/models/GenericParameter.d.ts +1 -1
- package/package.json +1 -1
|
@@ -145,6 +145,8 @@ export class EsParametersComponent {
|
|
|
145
145
|
* Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel
|
|
146
146
|
*/
|
|
147
147
|
changed() {
|
|
148
|
+
if (!this.Parameters)
|
|
149
|
+
return;
|
|
148
150
|
var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));
|
|
149
151
|
this.propagateChange(thyCleanShaltNotBlankMe);
|
|
150
152
|
this.reviewParametersBindings();
|
|
@@ -173,12 +175,12 @@ export class EsParametersComponent {
|
|
|
173
175
|
/**
|
|
174
176
|
* Valuta un'espressione in base ai parametri presenti nel modello attuale
|
|
175
177
|
*
|
|
176
|
-
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null)" separato eventualmente da && ed ||
|
|
178
|
+
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)" separato eventualmente da && ed ||
|
|
177
179
|
*
|
|
178
180
|
* @returns **true** se la condizione è verificata, **false** altrimenti
|
|
179
181
|
*/
|
|
180
182
|
evaluate(expr) {
|
|
181
|
-
var regex = /\s?([a-zA-Z0-
|
|
183
|
+
var regex = /\s?([a-zA-Z0-9_-]+)\s?(!=|==|<|>|<=|>=)\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;
|
|
182
184
|
var matches = [];
|
|
183
185
|
var finalExpr = expr;
|
|
184
186
|
while (matches = regex.exec(expr)) {
|
|
@@ -238,7 +240,7 @@ EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
238
240
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
239
241
|
multi: true
|
|
240
242
|
}
|
|
241
|
-
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.
|
|
243
|
+
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>", components: [{ type: i3.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { type: i3.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { type: i3.FormCheckboxComponent, selector: "form-checkbox" }, { type: i3.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol"] }, { type: i3.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }], pipes: { "localize": i2.LocalizePipe } });
|
|
242
244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsParametersComponent, decorators: [{
|
|
243
245
|
type: Component,
|
|
244
246
|
args: [{ selector: "es-parameters", providers: [
|
|
@@ -253,7 +255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
253
255
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
254
256
|
multi: true
|
|
255
257
|
}
|
|
256
|
-
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.
|
|
258
|
+
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>" }]
|
|
257
259
|
}], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.DateService }]; }, propDecorators: { LastParameterNoMargin: [{
|
|
258
260
|
type: Input
|
|
259
261
|
}], LabelColWidth: [{
|
|
@@ -273,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
273
275
|
}], LabelInputRatio: [{
|
|
274
276
|
type: Input
|
|
275
277
|
}] } });
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFxQyxTQUFTLEVBQVUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNOUQsZUFBZTtBQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7OztBQUVoRTs7R0FFRztBQWlCSCxNQUFNLE9BQU8scUJBQXFCO0lBb0U5Qjs7OztPQUlHO0lBQ0gsWUFBb0IsT0FBdUIsRUFBUyxFQUF1QixFQUFTLEdBQXNCLEVBQVUsR0FBYSxFQUFTLEtBQWtCO1FBQXhJLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFhO1FBN0Q1Sjs7OztXQUlHO1FBQ0gsb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxDOztXQUVHO1FBQ00sMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRWhEOztXQUVHO1FBQ00sa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFbkM7O1dBRUc7UUFDTSxrQkFBYSxH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ZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wsIE5nRm9ybSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBHZW5lcmljUGFyYW1ldGVyIH0gZnJvbSAnLi9tb2RlbHMvR2VuZXJpY1BhcmFtZXRlcic7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgRXNQYXJhbWV0ZXJzTG9jIH0gZnJvbSBcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQubG9jXCI7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBjaGUgcGVybWV0dGUgZGkgZ3JhZmljYXJlIHVuYSBsaXN0YSBkaSAqKkdlbmVyaWNQYXJhbWV0ZXIqKiBjb21lIElucHV0IGluIGJhc2UgYWwgbG9ybyB0aXBvIHNwZWNpZmljb1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJlcy1wYXJhbWV0ZXJzXCIsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBFc1BhcmFtZXRlcnNMb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFc1BhcmFtZXRlcnNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFc1BhcmFtZXRlcnNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1dLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEVzUGFyYW1ldGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9kZWxsbyBkZWwgY29tcG9uZW50ZSBzdSBjdWkgdmVuZ29ubyBlZmZldHR1YXRlIGxlIGdyYWZpY2F6aW9uaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgUGFyYW1ldGVyczogR2VuZXJpY1BhcmFtZXRlcltdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgcGVyIGZhcmUgbG9va3VwIHJhcGlkaSBpbiBmYXNlIGRpIHZhbHV0YXppb25lIGVzcHJlc3Npb25pIGRpIHZpc2liaWxpdMOgIGUgb2JibGlnYXRvcmlldMOgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgUGFyYW1ldGVyc0NhY2hlOiB7W2lkOiBzdHJpbmddOiBHZW5lcmljUGFyYW1ldGVyfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXIgXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIGNoZSBsJ3VsdGltbyBwYXJhbWV0cm8gbm9uIGRldmUgYXZlcmUgbWFyZ2luZSBpbiBmb25kb1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBMYXN0UGFyYW1ldGVyTm9NYXJnaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGNvbC1tZC1YIHBlciBsYSBsYWJlbFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogY29sLW1kLVggcGVyIGwnaW5wdXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElucHV0IGEgY3VpIGNvbGxlZ2FyZSBsYSB2YXJpYWJpbGUgKipzdWJtaXR0ZWQqKiBkZWwgZm9ybSBhbGwnaW50ZXJubyBkZWwgcXVhbGUgdmllbmUgdXRpbGl6emF0byBxdWVzdG8gY29tcG9uZW50ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbG9yZSBkYSBtb3N0cmFyZSBxdWFsb3JhIG5vbiBmb3NzZXJvIGFuY29yYSByaWNldnV0aSBpICoqUGFyYW1ldGVycyoqIGRhIG1vc3RyYXJlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEVtcHR5TWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHJpbXVvdmVyZSBpIHBhcmFtZXRyaSBkYWxsYSBsaXN0YSBjbGljY2FuZG8gc3VsbGEgWCBkYXZhbnRpIGFsbGEgTGFiZWxcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGkgY29tcG9uZW50aSBkaSBJbnB1dCBnZW5lcmF0aSBzb25vIFJlYWRvbmx5IG8gbm9cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm0gY2hlIHV0aWxpenphIGlsIGNvbXBvbmVudGUuIEZvbmRhbWVudGFsZSBjb2xsZWdhcmxvIHNlIHNpIHZvZ2xpb25vIGxlIHZhbGlkYXppb25pIHN1bCBzdWJtaXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRm9ybSA6IE5nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCAqKkxhYmVsQ29sV2lkdGgqKiBlICoqSW5wdXRDb2xXaWR0aCoqLCBiYXN0YSBzY3JpdmVybG8gY29uIGxhIHNpbnRhc3NpIFwiWCBZXCJcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2V0IExhYmVsSW5wdXRSYXRpbyhpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvID0gaW5wdXQuc3BsaXQoL1xccy8pO1xyXG4gICAgICAgIHRoaXMuTGFiZWxDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzBdKTtcclxuICAgICAgICB0aGlzLklucHV0Q29sV2lkdGggPSBwYXJzZUludChyYXRpb1sxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaW5qOiBJbmplY3RvciwgcHVibGljIGRhdGVzOiBEYXRlU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzID0gb2JqO1xyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlID0ge307XHJcbiAgICAgICAgaWYgKCF0aGlzLlBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlW3QuaWRdID0gdDtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0LnR5cGVjb2RlICYmICF0LnR5cGUpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gbsOpIHVuIHR5cGUgbsOpIHVuIHR5cGVjb2RlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIHQudHlwZSA9IHRoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiB0LnR5cGUgIT0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlJpbGV2YXRlIGluY29uc2lzdGVuemUgZnJhIGlsIHRpcG8gXCIgKyB0LnR5cGUgKyBcIiBlIGlsIHRpcG8gXCIgKyB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gXCJib29sZWFuXCIpXHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gKDxzdHJpbmc+dC52YWx1ZS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LmVudW10eXBlIHx8IHQuZGljdHR5cGUpXHJcbiAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZW51bSc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBhbnkge1xyXG4gICAgICAgIC8vIFNlIGxhIHZhbGlkYXppb25lIMOoIHJpY2hpYW1hdGEgZGEgdW4gY29tcG9uZW50ZSBub24gbWUgc3Rlc3NvIHZ1b2wgZGlyZSBjaGUgaSBjb21wb25lbnRpIGRpIHZhbGlkYXppb25lIGludGVybmkgc3Rhbm5vIHJpY2hpYW1hbmRvXHJcbiAgICAgICAgLy8gcXVlc3RvIHZhbGlkYXRvciwgbWEgZGFsIGxvcm8gcHVudG8gZGkgdmlzdGEgbm9uIHNlIG5lIGRldm9ubyBwcmVvY2N1cGFyZSBxdWluZGkgZmFjY2lvIGZpbnRhIG5vbiBjaSBzaWFubyBlcnJvcmkuXHJcbiAgICAgICAgLy8gU2UgaW52ZWNlIHZlbmdvIHJpY2hpYW1hdG8gZGlyZXR0YW1lbnRlIHNpZ25pZmljYSBjaGUgw6ggaWwgZm9ybSBpbiBjdWkgdml2ZSBlcy1wYXJhbWV0ZXJzIGUgbMOsIGRldm8gZWZmZXR0dWFyZSBsYSB2YWxpZGF6aW9uZVxyXG4gICAgICAgIGxldCBjb250cm9sID0gdGhpcy5pbmouZ2V0KE5nQ29udHJvbCwgbnVsbCk/LmNvbnRyb2w7XHJcbiAgICAgICAgaWYgKGMgIT0gY29udHJvbClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuUGFyYW1ldGVycyAmJiB0aGlzLlBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCF0LnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5TnVtYmVyID0gdC50eXBlID09ICdudW1iZXInICYmICh0LnZhbHVlID09IG51bGwgfHwgdC52YWx1ZSA9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5Tm9uTnVtYmVyID0gdC50eXBlICE9ICdudW1iZXInICYmICF0LnZhbHVlXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQucmVxdWlyZWQgJiYgKGVtcHR5TnVtYmVyIHx8IGVtcHR5Tm9uTnVtYmVyKSlcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodC52YWx1ZSAmJiB0LnR5cGUgPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBuZXcgUmVnRXhwKHQucGF0dGVybiB8fCAvXlsrLV0/WzAtOV0qWyxdP1swLTldKyQvKS50ZXN0KHQudmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0LnZhbHVlICYmIHQucGF0dGVybilcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IG5ldyBSZWdFeHAodC5wYXR0ZXJuKS50ZXN0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWxpZClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJlcy1wYXJhbWV0ZXJzXCI6IHZhbGlkIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm4pOiB2b2lkIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhclxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbik6IHZvaWQgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIG1vZGVsbG8gaW4gdXNjaXRhIGUgcHJvcGFnYXJsbyBzdWwgYmluZGluZyBuZ01vZGVsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VkKCkge1xyXG4gICAgICAgIHZhciB0aHlDbGVhblNoYWx0Tm90QmxhbmtNZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5QYXJhbWV0ZXJzKSk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGh5Q2xlYW5TaGFsdE5vdEJsYW5rTWUpO1xyXG4gICAgICAgIHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaW11b3ZlIGlsIHBhcmFtZXRybyBzZWxlemlvbmF0byBlIHByb3BhZ2EgaWwgbW9kZWxsb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0dlbmVyaWNQYXJhbWV0ZXJ9IHBhciBQYXJhbWV0cm8gZGEgcmltdW92ZXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVQYXJhbWV0ZXIocGFyOiBHZW5lcmljUGFyYW1ldGVyKSB7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLnNwbGljZSh0aGlzLlBhcmFtZXRlcnMuaW5kZXhPZihwYXIpLCAxKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpdmVkZSBpIGJpbmRpbmdzIGRlaSBwYXJhbWV0cmkgaW4gYmFzZSBhIGxvcm8gZXZlbnR1YWxpIGVzcHJlc3Npb25pIGRpIGNvbnRyb2xsb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJldmlld1BhcmFtZXRlcnNCaW5kaW5ncygpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuUGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMuUGFyYW1ldGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwLnJlcXVpcmVkZXhwKVxyXG4gICAgICAgICAgICAgICAgcC5yZXF1aXJlZCA9IHRoaXMuZXZhbHVhdGUocC5yZXF1aXJlZGV4cCk7XHJcbiAgICAgICAgICAgIGlmIChwLnZpc2libGVleHApXHJcbiAgICAgICAgICAgICAgICBwLnZpc2libGUgPSB0aGlzLmV2YWx1YXRlKHAudmlzaWJsZWV4cCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHVuJ2VzcHJlc3Npb25lIGluIGJhc2UgYWkgcGFyYW1ldHJpIHByZXNlbnRpIG5lbCBtb2RlbGxvIGF0dHVhbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV4cHIgRXNwcmVzc2lvbmUgZGEgdmFsdXRhcmUgc2NyaXR0YSBuZWwgZm9ybWF0byAocmlwZXRpYmlsZSkgXCJJRCAoPT18IT18PHw+fD49fDw9KSAoYHZhbG9yZWAgfCBudWxsKVwiIHNlcGFyYXRvIGV2ZW50dWFsbWVudGUgZGEgJiYgZWQgfHxcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlKGV4cHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZWdleCA9IC9cXHM/KFthLXpBLVowLTldKylcXHM/KCE9fD09fDx8Pnw8PXw+PSlcXHM/KGBbXmBdK2B8bnVsbHxbMC05LF0rfHRydWV8ZmFsc2UpL2dtO1xyXG5cclxuICAgICAgICB2YXIgbWF0Y2hlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB2YXIgZmluYWxFeHByID0gZXhwcjtcclxuICAgICAgICB3aGlsZSAobWF0Y2hlcyA9IHJlZ2V4LmV4ZWMoZXhwcikpIHtcclxuICAgICAgICAgICAgdmFyIGZ1bGxNYXRjaCA9IG1hdGNoZXNbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgaWQgPSBtYXRjaGVzWzFdLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIG9wZXJhdGlvbiA9IG1hdGNoZXNbMl0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBtYXRjaGVzWzNdLnRyaW0oKS50cmltKCkucmVwbGFjZSgnYCcsICcnKS5yZXBsYWNlKCdgJywgJycpO1xyXG5cclxuICAgICAgICAgICAgZmluYWxFeHByID0gZmluYWxFeHByLnJlcGxhY2UoZnVsbE1hdGNoLCBgdGhpcy5jaGVja1ZhbHVlKCcke2lkfScsICcke29wZXJhdGlvbn0nLCAnJHt2YWx1ZX0nKWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2YWwoZmluYWxFeHByKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RpdHVpc2NlIGwnb3BlcmF6aW9uZSBkaSBjb21wYXJhemlvbmUgZnJhIHVuIHNpbmdvbG8gdmFsb3JlIGRpIHVuIHBhcmFtZXRybyBlIHVuIHN1byB2YWxvcmUgZGkgY29uZnJvbnRvIGluIGJhc2UgYWQgdW4gb3BlcmF0b3JlXHJcbiAgICAgKiBSaWNoaWFtYXRhIGRhIEVWQUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGVsIHBhcmFtZXRybyBkaSBjdWkgdmVyaWZpY2FyZSBpbCB2YWxvcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciBPcGVyYXRvcmUgY29uIGN1aSB2ZXJpZmljYXJlIGlsIHZhbG9yZTogPT0sICE9LCA+LCA8LCA+PSwgPD1cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWxvcmUgZGkgY29uZnJvbnRvIGRhIHV0aWxpenphcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tWYWx1ZShrZXk6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByUGFyID0gdGhpcy5QYXJhbWV0ZXJzQ2FjaGVba2V5XTtcclxuICAgICAgICBzd2l0Y2ggKHJQYXIudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgXCIke3JQYXIudmFsdWV9XCIgJHtvcGVyYXRvcn0gXCIke3ZhbHVlfVwiYCk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgJHtyUGFyLnZhbHVlLnRvU3RyaW5nKCl9ICR7b3BlcmF0b3J9ICR7dmFsdWV9YCk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGAke3JQYXIudmFsdWUucmVwbGFjZSgnLCcsICcuJyl9ICR7b3BlcmF0b3J9ICR7dmFsdWUucmVwbGFjZSgnLCcsICcuJyl9YCk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyRGF0ZUNvbnYgPSBgdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbihcIiR7clBhci52YWx1ZX1cIilgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbERhdGVDb252ID0gYHRoaXMuZGF0ZXMuZ2V0RGF0ZUNvbnZlcnRpb24oXCIke3ZhbHVlfVwiKWA7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPT1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ID09ICR7dmFsRGF0ZUNvbnZ9IHx8ICgke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIiE9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSAke3ZhbERhdGVDb252fSAmJiAke3BhckRhdGVDb252fSAhPSBudWxsICYmICEke3BhckRhdGVDb252fS5pc1NhbWUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj5cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc0FmdGVyKCR7dmFsRGF0ZUNvbnZ9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNCZWZvcmUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj49XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pIHx8ICR7cGFyRGF0ZUNvbnZ9Py5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICgke3BhckRhdGVDb252fS5pc0JlZm9yZSgke3ZhbERhdGVDb252fSkgfHwgJHtwYXJEYXRlQ29udn0/LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IGBAZXNmYWVuemEvcGFyYW1ldGVyczogVGlwbyBwYXJhbWV0cm8gJHtrZXl9IG5vbiByaWNvbm9zY2l1dG86ICR7clBhci50eXBlfWA7XHJcbiAgICB9XHJcbn0iLCI8ZGl2ICpuZ0lmPVwiKCFQYXJhbWV0ZXJzIHx8IFBhcmFtZXRlcnMubGVuZ3RoID09IDApICYmIEVtcHR5TWVzc2FnZVwiPlxyXG4gICAgPGVtPnt7RW1wdHlNZXNzYWdlfX08L2VtPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJQYXJhbWV0ZXJzICYmIFBhcmFtZXRlcnMubGVuZ3RoID4gMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHBhciBvZiBQYXJhbWV0ZXJzOyBsZXQgaT0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDtcIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0UGFyYW1ldGVyTm9NYXJnaW4gJiYgbGFzdFwiIFtoaWRkZW5dPVwiIXBhci52aXNpYmxlXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7TGFiZWxDb2xXaWR0aH19IG0tdC01XCI+PHNwYW4gKm5nSWY9XCJSZW1vdmFsXCIgY2xhc3M9XCJmYSBmYS1yZW1vdmUgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwicmVtb3ZlUGFyYW1ldGVyKHBhcilcIj48L3NwYW4+Jm5ic3A7e3twYXIuZGVzY3JpcHRpb259fXt7cGFyLnJlcXVpcmVkID8gJyonIDogJyd9fTo8L2xhYmVsPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLnJlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1kYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBzdHJpbmdhLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5yZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIG51bWVyby0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdudW1iZXInXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWlucHV0IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIucmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3IgcGF0dGVybj1cInt7cGFyLnBhdHRlcm4gfHwgJ15bKy1dP1swLTldKlssXT9bMC05XSskJ319XCI+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBib29sZWFuLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fSBtLXQtNVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWNoZWNrYm94IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIucmVhZG9ubHlcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIGVudW0gc2luZ2xlIHNlbGVjdC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bVwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1zZWxlY3QgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5yZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvciBbU291cmNlXT1cInBhci5lbnVtdmFsdWVzXCI+PC9mb3JtLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgZW51bSBtdWx0aSBzZWxlY3QtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgcGFyLm11bHRpZW51bVwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1tdWx0aXNlbGVjdCBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbU2VsZWN0TGFiZWxdPVwiKCdTZWxlY3QnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJ1wiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cIm10dVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIucmVhZG9ubHlcIiBbU291cmNlXT1cInBhci5lbnVtdmFsdWVzXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFxQyxTQUFTLEVBQVUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNOUQsZUFBZTtBQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7OztBQUVoRTs7R0FFRztBQWlCSCxNQUFNLE9BQU8scUJBQXFCO0lBb0U5Qjs7OztPQUlHO0lBQ0gsWUFBb0IsT0FBdUIsRUFBUyxFQUF1QixFQUFTLEdBQXNCLEVBQVUsR0FBYSxFQUFTLEtBQWtCO1FBQXhJLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFhO1FBN0Q1Sjs7OztXQUlHO1FBQ0gsb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxDOztXQUVHO1FBQ00sMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRWhEOztXQUVHO1FBQ00sa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFbkM7O1dBRUc7UUFDTSxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUVuQzs7V0FFRztRQUNNLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFcEM7O1dBRUc7UUFDTSxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUVuQzs7V0FFRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDTSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRW5DOztXQUVHO1FBQ00sU0FBSSxHQUFZLElBQUksQ0FBQztJQWdCa0ksQ0FBQztJQWRqSzs7T0FFRztJQUNILElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBU0Q7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxHQUFHO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixPQUFPO1FBRVgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRS9CLElBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUV0RSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDckIsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RFLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVsSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksU0FBUztnQkFDbkIsQ0FBQyxDQUFDLEtBQUssR0FBWSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztZQUVwRSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVE7Z0JBQ3hCLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsQ0FBYztRQUNuQixxSUFBcUk7UUFDckkscUhBQXFIO1FBQ3JILGdJQUFnSTtRQUNoSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ3JELElBQUksQ0FBQyxJQUFJLE9BQU87WUFDWixPQUFPLElBQUksQ0FBQztRQUVoQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsSUFBRyxDQUFDLENBQUMsQ0FBQyxPQUFPO29CQUNULE9BQU87Z0JBRVgsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7Z0JBRW5ELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLFdBQVcsSUFBSSxjQUFjLENBQUM7b0JBQzdDLEtBQUssR0FBRyxLQUFLLENBQUM7cUJBQ2IsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUTtvQkFDbEMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUkseUJBQXlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO3FCQUNuRixJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU87b0JBQ3pCLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxLQUFLO1lBQ0wsT0FBTyxJQUFJLENBQUM7UUFDaEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLEVBQUUsSUFBVSxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEU7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLEVBQUUsSUFBVSxDQUFDO0lBRXRDOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixPQUFPO1FBRVgsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUFDLEdBQXFCO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0IsSUFBSSxDQUFDLENBQUMsV0FBVztnQkFDYixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxDQUFDLFVBQVU7Z0JBQ1osQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxRQUFRLENBQUMsSUFBWTtRQUN6QixJQUFJLEtBQUssR0FBRywrRUFBK0UsQ0FBQztRQUU1RixJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLE9BQU8sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV2RSxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxTQUFTLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztTQUNwRztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxVQUFVLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsS0FBYTtRQUMxRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNmLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxNQUFNO2dCQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQztZQUMxRCxLQUFLLFNBQVM7Z0JBQ1YsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLEtBQUssUUFBUTtnQkFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEtBQUssTUFBTTtnQkFDUCxJQUFJLFdBQVcsR0FBRyxpQ0FBaUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO2dCQUNsRSxJQUFJLFdBQVcsR0FBRyxpQ0FBaUMsS0FBSyxJQUFJLENBQUM7Z0JBRTdELFFBQVEsUUFBUSxFQUFFO29CQUVkLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxXQUFXLE9BQU8sV0FBVyxRQUFRLFdBQVcsZUFBZSxXQUFXLFdBQVcsV0FBVyxJQUFJLENBQUMsQ0FBQztvQkFDaEksS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLFdBQVcsT0FBTyxXQUFXLE9BQU8sV0FBVyxnQkFBZ0IsV0FBVyxXQUFXLFdBQVcsR0FBRyxDQUFDLENBQUM7b0JBQy9ILEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxXQUFXLGVBQWUsV0FBVyxlQUFlLFdBQVcsWUFBWSxXQUFXLEdBQUcsQ0FBQyxDQUFDO29CQUNwSCxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsV0FBVyxlQUFlLFdBQVcsZUFBZSxXQUFXLGFBQWEsV0FBVyxHQUFHLENBQUMsQ0FBQztvQkFDckgsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLFdBQVcsZUFBZSxXQUFXLGdCQUFnQixXQUFXLFlBQVksV0FBVyxRQUFRLFdBQVcsWUFBWSxXQUFXLElBQUksQ0FBQyxDQUFDO29CQUNqSyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsV0FBVyxlQUFlLFdBQVcsZ0JBQWdCLFdBQVcsYUFBYSxXQUFXLFFBQVEsV0FBVyxZQUFZLFdBQVcsSUFBSSxDQUFDLENBQUM7aUJBQ3JLO1NBQ1I7UUFDRCxNQUFNLHdDQUF3QyxHQUFHLHNCQUFzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkYsQ0FBQzs7a0hBN1BRLHFCQUFxQjtzR0FBckIscUJBQXFCLHNUQWRuQjtRQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7UUFDM0Q7WUFDSSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7WUFDcEQsS0FBSyxFQUFFLElBQUk7U0FDZDtRQUNEO1lBQ0ksT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQUMsMEJDOUJWLDg4RkFrQ007MkZERE8scUJBQXFCO2tCQWhCakMsU0FBUzsrQkFDSSxlQUFlLGFBQ2Q7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTt3QkFDM0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNkO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQUM7d05BeUJHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLTyxlQUFlO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCwgTmdGb3JtLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuLy8gQ2xhc3NpXHJcbmltcG9ydCB7IEdlbmVyaWNQYXJhbWV0ZXIgfSBmcm9tICcuL21vZGVscy9HZW5lcmljUGFyYW1ldGVyJztcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBFc1BhcmFtZXRlcnNMb2MgfSBmcm9tIFwiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBwZXJtZXR0ZSBkaSBncmFmaWNhcmUgdW5hIGxpc3RhIGRpICoqR2VuZXJpY1BhcmFtZXRlcioqIGNvbWUgSW5wdXQgaW4gYmFzZSBhbCBsb3JvIHRpcG8gc3BlY2lmaWNvXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImVzLXBhcmFtZXRlcnNcIixcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEVzUGFyYW1ldGVyc0xvYyB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVzUGFyYW1ldGVyc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVzUGFyYW1ldGVyc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50Lmh0bWxcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNQYXJhbWV0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb2RlbGxvIGRlbCBjb21wb25lbnRlIHN1IGN1aSB2ZW5nb25vIGVmZmV0dHVhdGUgbGUgZ3JhZmljYXppb25pXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBQYXJhbWV0ZXJzOiBHZW5lcmljUGFyYW1ldGVyW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWNoZSBwZXIgZmFyZSBsb29rdXAgcmFwaWRpIGluIGZhc2UgZGkgdmFsdXRhemlvbmUgZXNwcmVzc2lvbmkgZGkgdmlzaWJpbGl0w6AgZSBvYmJsaWdhdG9yaWV0w6BcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBQYXJhbWV0ZXJzQ2FjaGU6IHtbaWQ6IHN0cmluZ106IEdlbmVyaWNQYXJhbWV0ZXJ9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhciBcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2EgY2hlIGwndWx0aW1vIHBhcmFtZXRybyBub24gZGV2ZSBhdmVyZSBtYXJnaW5lIGluIGZvbmRvXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIExhc3RQYXJhbWV0ZXJOb01hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogY29sLW1kLVggcGVyIGxhIGxhYmVsXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsQ29sV2lkdGg6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjb2wtbWQtWCBwZXIgbCdpbnB1dFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5wdXQgYSBjdWkgY29sbGVnYXJlIGxhIHZhcmlhYmlsZSAqKnN1Ym1pdHRlZCoqIGRlbCBmb3JtIGFsbCdpbnRlcm5vIGRlbCBxdWFsZSB2aWVuZSB1dGlsaXp6YXRvIHF1ZXN0byBjb21wb25lbnRlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsb3JlIGRhIG1vc3RyYXJlIHF1YWxvcmEgbm9uIGZvc3Nlcm8gYW5jb3JhIHJpY2V2dXRpIGkgKipQYXJhbWV0ZXJzKiogZGEgbW9zdHJhcmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRW1wdHlNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVybWV0dGUgZGkgcmltdW92ZXJlIGkgcGFyYW1ldHJpIGRhbGxhIGxpc3RhIGNsaWNjYW5kbyBzdWxsYSBYIGRhdmFudGkgYWxsYSBMYWJlbFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaSBjb21wb25lbnRpIGRpIElucHV0IGdlbmVyYXRpIHNvbm8gUmVhZG9ubHkgbyBub1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybSBjaGUgdXRpbGl6emEgaWwgY29tcG9uZW50ZS4gRm9uZGFtZW50YWxlIGNvbGxlZ2FybG8gc2Ugc2kgdm9nbGlvbm8gbGUgdmFsaWRhemlvbmkgc3VsIHN1Ym1pdFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBGb3JtIDogTmdGb3JtID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHNldHRhcmUgaW4gdW5hIHZvbHRhIHNvbG8gZ2xpIGlucHV0ICoqTGFiZWxDb2xXaWR0aCoqIGUgKipJbnB1dENvbFdpZHRoKiosIGJhc3RhIHNjcml2ZXJsbyBjb24gbGEgc2ludGFzc2kgXCJYIFlcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBpbmo6IEluamVjdG9yLCBwdWJsaWMgZGF0ZXM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmopOiB2b2lkIHtcclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMgPSBvYmo7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGUgPSB7fTtcclxuICAgICAgICBpZiAoIXRoaXMuUGFyYW1ldGVycylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGVbdC5pZF0gPSB0O1xyXG5cclxuICAgICAgICAgICAgaWYoIXQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBuw6kgdW4gdHlwZSBuw6kgdW4gdHlwZWNvZGVcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiAhdC50eXBlKVxyXG4gICAgICAgICAgICAgICAgdC50eXBlID0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGVjb2RlICYmIHQudHlwZSAhPSB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiUmlsZXZhdGUgaW5jb25zaXN0ZW56ZSBmcmEgaWwgdGlwbyBcIiArIHQudHlwZSArIFwiIGUgaWwgdGlwbyBcIiArIHRoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSBcImJvb2xlYW5cIilcclxuICAgICAgICAgICAgICAgIHQudmFsdWUgPSAoPHN0cmluZz50LnZhbHVlLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQuZW51bXR5cGUgfHwgdC5kaWN0dHlwZSlcclxuICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlbnVtJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IGFueSB7XHJcbiAgICAgICAgLy8gU2UgbGEgdmFsaWRhemlvbmUgw6ggcmljaGlhbWF0YSBkYSB1biBjb21wb25lbnRlIG5vbiBtZSBzdGVzc28gdnVvbCBkaXJlIGNoZSBpIGNvbXBvbmVudGkgZGkgdmFsaWRhemlvbmUgaW50ZXJuaSBzdGFubm8gcmljaGlhbWFuZG9cclxuICAgICAgICAvLyBxdWVzdG8gdmFsaWRhdG9yLCBtYSBkYWwgbG9ybyBwdW50byBkaSB2aXN0YSBub24gc2UgbmUgZGV2b25vIHByZW9jY3VwYXJlIHF1aW5kaSBmYWNjaW8gZmludGEgbm9uIGNpIHNpYW5vIGVycm9yaS5cclxuICAgICAgICAvLyBTZSBpbnZlY2UgdmVuZ28gcmljaGlhbWF0byBkaXJldHRhbWVudGUgc2lnbmlmaWNhIGNoZSDDqCBpbCBmb3JtIGluIGN1aSB2aXZlIGVzLXBhcmFtZXRlcnMgZSBsw6wgZGV2byBlZmZldHR1YXJlIGxhIHZhbGlkYXppb25lXHJcbiAgICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLmluai5nZXQoTmdDb250cm9sLCBudWxsKT8uY29udHJvbDtcclxuICAgICAgICBpZiAoYyAhPSBjb250cm9sKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5QYXJhbWV0ZXJzICYmIHRoaXMuUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVycy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoIXQudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBsZXQgZW1wdHlOdW1iZXIgPSB0LnR5cGUgPT0gJ251bWJlcicgJiYgKHQudmFsdWUgPT0gbnVsbCB8fCB0LnZhbHVlID09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW1wdHlOb25OdW1iZXIgPSB0LnR5cGUgIT0gJ251bWJlcicgJiYgIXQudmFsdWVcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodC5yZXF1aXJlZCAmJiAoZW1wdHlOdW1iZXIgfHwgZW1wdHlOb25OdW1iZXIpKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0LnZhbHVlICYmIHQudHlwZSA9PSAnbnVtYmVyJylcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IG5ldyBSZWdFeHAodC5wYXR0ZXJuIHx8IC9eWystXT9bMC05XSpbLF0/WzAtOV0rJC8pLnRlc3QodC52YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQudmFsdWUgJiYgdC5wYXR0ZXJuKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkID0gbmV3IFJlZ0V4cCh0LnBhdHRlcm4pLnRlc3QodC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbGlkKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBcImVzLXBhcmFtZXRlcnNcIjogdmFsaWQgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbik6IHZvaWQgeyB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKTogdm9pZCB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgaWwgbW9kZWxsbyBpbiB1c2NpdGEgZSBwcm9wYWdhcmxvIHN1bCBiaW5kaW5nIG5nTW9kZWxcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIHRoeUNsZWFuU2hhbHROb3RCbGFua01lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLlBhcmFtZXRlcnMpKTtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aHlDbGVhblNoYWx0Tm90QmxhbmtNZSk7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpbXVvdmUgaWwgcGFyYW1ldHJvIHNlbGV6aW9uYXRvIGUgcHJvcGFnYSBpbCBtb2RlbGxvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7R2VuZXJpY1BhcmFtZXRlcn0gcGFyIFBhcmFtZXRybyBkYSByaW11b3ZlcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZVBhcmFtZXRlcihwYXI6IEdlbmVyaWNQYXJhbWV0ZXIpIHtcclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuc3BsaWNlKHRoaXMuUGFyYW1ldGVycy5pbmRleE9mKHBhciksIDEpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUml2ZWRlIGkgYmluZGluZ3MgZGVpIHBhcmFtZXRyaSBpbiBiYXNlIGEgbG9ybyBldmVudHVhbGkgZXNwcmVzc2lvbmkgZGkgY29udHJvbGxvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5QYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5QYXJhbWV0ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHAucmVxdWlyZWRleHApXHJcbiAgICAgICAgICAgICAgICBwLnJlcXVpcmVkID0gdGhpcy5ldmFsdWF0ZShwLnJlcXVpcmVkZXhwKTtcclxuICAgICAgICAgICAgaWYgKHAudmlzaWJsZWV4cClcclxuICAgICAgICAgICAgICAgIHAudmlzaWJsZSA9IHRoaXMuZXZhbHVhdGUocC52aXNpYmxlZXhwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1dGEgdW4nZXNwcmVzc2lvbmUgaW4gYmFzZSBhaSBwYXJhbWV0cmkgcHJlc2VudGkgbmVsIG1vZGVsbG8gYXR0dWFsZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gZXhwciBFc3ByZXNzaW9uZSBkYSB2YWx1dGFyZSBzY3JpdHRhIG5lbCBmb3JtYXRvIChyaXBldGliaWxlKSBcIklEICg9PXwhPXw8fD58Pj18PD0pIChgdmFsb3JlYCB8IG51bGwgfCB0cnVlIHwgZmFsc2UgfCBYWFgsWFhYKVwiIHNlcGFyYXRvIGV2ZW50dWFsbWVudGUgZGEgJiYgZWQgfHxcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlKGV4cHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZWdleCA9IC9cXHM/KFthLXpBLVowLTlfLV0rKVxccz8oIT18PT18PHw+fDw9fD49KVxccz8oYFteYF0rYHxudWxsfFswLTksXSt8dHJ1ZXxmYWxzZSkvZ207XHJcblxyXG4gICAgICAgIHZhciBtYXRjaGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIHZhciBmaW5hbEV4cHIgPSBleHByO1xyXG4gICAgICAgIHdoaWxlIChtYXRjaGVzID0gcmVnZXguZXhlYyhleHByKSkge1xyXG4gICAgICAgICAgICB2YXIgZnVsbE1hdGNoID0gbWF0Y2hlc1swXS50cmltKCk7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IG1hdGNoZXNbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgb3BlcmF0aW9uID0gbWF0Y2hlc1syXS50cmltKCk7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1hdGNoZXNbM10udHJpbSgpLnRyaW0oKS5yZXBsYWNlKCdgJywgJycpLnJlcGxhY2UoJ2AnLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBmaW5hbEV4cHIgPSBmaW5hbEV4cHIucmVwbGFjZShmdWxsTWF0Y2gsIGB0aGlzLmNoZWNrVmFsdWUoJyR7aWR9JywgJyR7b3BlcmF0aW9ufScsICcke3ZhbHVlfScpYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXZhbChmaW5hbEV4cHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdGl0dWlzY2UgbCdvcGVyYXppb25lIGRpIGNvbXBhcmF6aW9uZSBmcmEgdW4gc2luZ29sbyB2YWxvcmUgZGkgdW4gcGFyYW1ldHJvIGUgdW4gc3VvIHZhbG9yZSBkaSBjb25mcm9udG8gaW4gYmFzZSBhZCB1biBvcGVyYXRvcmVcclxuICAgICAqIFJpY2hpYW1hdGEgZGEgRVZBTFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkZWwgcGFyYW1ldHJvIGRpIGN1aSB2ZXJpZmljYXJlIGlsIHZhbG9yZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIE9wZXJhdG9yZSBjb24gY3VpIHZlcmlmaWNhcmUgaWwgdmFsb3JlOiA9PSwgIT0sID4sIDwsID49LCA8PVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbG9yZSBkaSBjb25mcm9udG8gZGEgdXRpbGl6emFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyAqKnRydWUqKiBzZSBsYSBjb25kaXppb25lIMOoIHZlcmlmaWNhdGEsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGVja1ZhbHVlKGtleTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJQYXIgPSB0aGlzLlBhcmFtZXRlcnNDYWNoZVtrZXldO1xyXG4gICAgICAgIHN3aXRjaCAoclBhci50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGBcIiR7clBhci52YWx1ZX1cIiAke29wZXJhdG9yfSBcIiR7dmFsdWV9XCJgKTtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGAke3JQYXIudmFsdWUudG9TdHJpbmcoKX0gJHtvcGVyYXRvcn0gJHt2YWx1ZX1gKTtcclxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYCR7clBhci52YWx1ZS5yZXBsYWNlKCcsJywgJy4nKX0gJHtvcGVyYXRvcn0gJHt2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKX1gKTtcclxuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgIGxldCBwYXJEYXRlQ29udiA9IGB0aGlzLmRhdGVzLmdldERhdGVDb252ZXJ0aW9uKFwiJHtyUGFyLnZhbHVlfVwiKWA7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsRGF0ZUNvbnYgPSBgdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbihcIiR7dmFsdWV9XCIpYDtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI9PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gPT0gJHt2YWxEYXRlQ29udn0gfHwgKCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiIT1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9ICR7dmFsRGF0ZUNvbnZ9ICYmICR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgISR7cGFyRGF0ZUNvbnZ9LmlzU2FtZSgke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPlwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjxcIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc0JlZm9yZSgke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPj1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAoJHtwYXJEYXRlQ29udn0uaXNBZnRlcigke3ZhbERhdGVDb252fSkgfHwgJHtwYXJEYXRlQ29udn0/LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjw9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQmVmb3JlKCR7dmFsRGF0ZUNvbnZ9KSB8fCAke3BhckRhdGVDb252fT8uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgYEBlc2ZhZW56YS9wYXJhbWV0ZXJzOiBUaXBvIHBhcmFtZXRybyAke2tleX0gbm9uIHJpY29ub3NjaXV0bzogJHtyUGFyLnR5cGV9YDtcclxuICAgIH1cclxufSIsIjxkaXYgKm5nSWY9XCIoIVBhcmFtZXRlcnMgfHwgUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgJiYgRW1wdHlNZXNzYWdlXCI+XHJcbiAgICA8ZW0+e3tFbXB0eU1lc3NhZ2V9fTwvZW0+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIlBhcmFtZXRlcnMgJiYgUGFyYW1ldGVycy5sZW5ndGggPiAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgcGFyIG9mIFBhcmFtZXRlcnM7IGxldCBpPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0O1wiIFtjbGFzcy5hcHAtbWFyZ2luLWJvdHRvbS0wXT1cIkxhc3RQYXJhbWV0ZXJOb01hcmdpbiAmJiBsYXN0XCIgW2hpZGRlbl09XCIhcGFyLnZpc2libGVcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3tMYWJlbENvbFdpZHRofX0gbS10LTVcIj48c3BhbiAqbmdJZj1cIlJlbW92YWxcIiBjbGFzcz1cImZhIGZhLXJlbW92ZSB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVQYXJhbWV0ZXIocGFyKVwiPjwvc3Bhbj4mbmJzcDt7e3Bhci5kZXNjcmlwdGlvbn19e3twYXIucmVxdWlyZWQgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICA8Zm9ybS1kYXRlIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tZGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2Ugc3RyaW5nYS0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdzdHJpbmcnXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWlucHV0IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIG51bWVyby0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdudW1iZXInXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWlucHV0IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvciBwYXR0ZXJuPVwie3twYXIucGF0dGVybiB8fCAnXlsrLV0/WzAtOV0qWyxdP1swLTldKyQnfX1cIj48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIGJvb2xlYW4tLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19IG0tdC01XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnYm9vbGVhbidcIj5cclxuICAgICAgICAgICAgPGZvcm0tY2hlY2tib3ggW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBlbnVtIHNpbmdsZSBzZWxlY3QtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgIXBhci5tdWx0aWVudW1cIj5cclxuICAgICAgICAgICAgPGZvcm0tc2VsZWN0IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvciBbU291cmNlXT1cInBhci5lbnVtdmFsdWVzXCI+PC9mb3JtLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgZW51bSBtdWx0aSBzZWxlY3QtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgcGFyLm11bHRpZW51bVwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1tdWx0aXNlbGVjdCBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbU2VsZWN0TGFiZWxdPVwiKCdTZWxlY3QnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJ1wiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cIm10dVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1tdWx0aXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -24,11 +24,11 @@ export class GenericParameter {
|
|
|
24
24
|
this.type = type == 'enum' ? "" : type;
|
|
25
25
|
this.visible = true;
|
|
26
26
|
this.enumtype = type == 'enum' ? type : "";
|
|
27
|
-
this.
|
|
27
|
+
this.isreadonly = false;
|
|
28
28
|
if (!this.enumtype && enumvalues.length != 0)
|
|
29
29
|
console.error("impossibile gestire valori di dizionario per un parametro non di tipo enum");
|
|
30
30
|
if (v_default != null)
|
|
31
31
|
this.value = v_default;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuZXJpY1BhcmFtZXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcmFtZXRlcnMvc3JjL2xpYi9tb2RlbHMvR2VuZXJpY1BhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFFekI7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxZQUNXLEVBQVUsRUFDVixXQUFtQixFQUNuQixPQUFlLEVBQ3RCLElBQXVELEVBQ2hELFFBQWlCLEVBQ3hCLFlBQWlCLElBQUksRUFDZCxhQUFvRCxFQUFFLEVBQ3RELFNBQW1CO1FBUG5CLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBRWYsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUVqQixlQUFVLEdBQVYsVUFBVSxDQUE0QztRQUN0RCxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBRTFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1FBRWhHLElBQUksU0FBUyxJQUFJLElBQUk7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztDQThDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDbGFzc2UgY2hlIHJhcHByZXNlbnRhIHVuIHBhcmFtZXRybyBnZW5lcmljb1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNQYXJhbWV0ZXIge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIENvZGljZSBkZWwgcGFyYW1ldHJvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gRGVzY3JpemlvbmUgZGVsIHBhcmFtZXRyb1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm4gUGF0dGVybiBkaSB2YWxpZGF6aW9uZVxyXG4gICAgICogQHBhcmFtIHsnZGF0ZScgfCAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2VudW0nfSB0eXBlIFRpcG8gZGkgaW5wdXQgXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVpcmVkIEluZGljYSBzZSBpbCB2YWxvcmUgw6ggb2JibGlnYXRvcmlvIG8gbWVub1xyXG4gICAgICogQHBhcmFtIHthbnl9IHZfZGVmYXVsdCBWYWxvcmUgZGkgZGVmYXVsdCBwZXIgcXVlc3RvIFBhcmFtZXRyb1xyXG4gICAgICogQHBhcmFtIHt7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdfSBlbnVtdmFsdWVzIFF1YWxvcmEgaWwgKip0eXBlKiogZm9zc2UgZGkgdGlwbyAqKmVudW0qKiwgcXVpIGRldm9ubyBlc3NlcmNpIHR1dHRpIGkgdmFsb3JpIGNoZSBwdcOyIGFzc3VtZXJlIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBtdWx0aWVudW0gUXVhbG9yYSBpbCAqKnR5cGUqKiBmb3NzZSBkaSB0aXBvICoqZW51bSoqLCBpbmRpY2Egc2Ugw6ggcG9zc2liaWxlIHNlbGV6aW9uYXJlIHBpw7kgdmFsb3JpIChtdWx0aXNlbGVjdClcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHBhdHRlcm46IHN0cmluZyxcclxuICAgICAgICB0eXBlOiAnZGF0ZScgfCAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2VudW0nLFxyXG4gICAgICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbixcclxuICAgICAgICB2X2RlZmF1bHQ6IGFueSA9IG51bGwsXHJcbiAgICAgICAgcHVibGljIGVudW12YWx1ZXM6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10gPSBbXSxcclxuICAgICAgICBwdWJsaWMgbXVsdGllbnVtPzogYm9vbGVhbikge1xyXG5cclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlID09ICdlbnVtJyA/IFwiXCIgOiB0eXBlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbnVtdHlwZSA9IHR5cGUgPT0gJ2VudW0nID8gdHlwZSA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5pc3JlYWRvbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbnVtdHlwZSAmJiBlbnVtdmFsdWVzLmxlbmd0aCAhPSAwKVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiaW1wb3NzaWJpbGUgZ2VzdGlyZSB2YWxvcmkgZGkgZGl6aW9uYXJpbyBwZXIgdW4gcGFyYW1ldHJvIG5vbiBkaSB0aXBvIGVudW1cIik7XHJcblxyXG4gICAgICAgIGlmICh2X2RlZmF1bHQgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZfZGVmYXVsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpcG8gZGkgZGF0byByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBwYXJhbWV0cm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFR5cGVjb2RlIGxhdG8gQyMgY2hlIHJhcHByZXNlbnRhIGlsIHRpcG8gZGkgZGF0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHlwZWNvZGU6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjYW1wbyBzcGVjaWZpY2F0byBkZXYnZXNzZXJlIGRpIHNvbGEgbGV0dHVyYSBvIG1lbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzcmVhZG9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxvcmUgZGVsIHBhcmFtZXRyb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBxdWVzdG8gcGFyYW1ldHJvIGRldidlc3NlcmUgaW5zZXJpdG8gbyBuby4gSW4gY2FzbyBjb250cmFyaW8gdmllbmUgc2VtcGxpY2VtZW50ZSBuYXNjb3N0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpcG8gRW51bSwgdmFsb3JpenphdG8gZGFsIEJhY2tlbmRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGVudW10eXBlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaXBvIERpemlvbmFyaW8sIHZhbG9yaXp6YXRvIGRhbCBCYWNrZW5kXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkaWN0dHlwZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNwcmVzc2lvbmUgZGkgb2JibGlnYXRvcmlldMOgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXF1aXJlZGV4cD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzcHJlc3Npb25lIGRpIHZpc2liaWxpdMOgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2aXNpYmxlZXhwPzogc3RyaW5nO1xyXG59Il19
|
|
@@ -176,6 +176,8 @@ class EsParametersComponent {
|
|
|
176
176
|
* Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel
|
|
177
177
|
*/
|
|
178
178
|
changed() {
|
|
179
|
+
if (!this.Parameters)
|
|
180
|
+
return;
|
|
179
181
|
var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));
|
|
180
182
|
this.propagateChange(thyCleanShaltNotBlankMe);
|
|
181
183
|
this.reviewParametersBindings();
|
|
@@ -204,12 +206,12 @@ class EsParametersComponent {
|
|
|
204
206
|
/**
|
|
205
207
|
* Valuta un'espressione in base ai parametri presenti nel modello attuale
|
|
206
208
|
*
|
|
207
|
-
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null)" separato eventualmente da && ed ||
|
|
209
|
+
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)" separato eventualmente da && ed ||
|
|
208
210
|
*
|
|
209
211
|
* @returns **true** se la condizione è verificata, **false** altrimenti
|
|
210
212
|
*/
|
|
211
213
|
evaluate(expr) {
|
|
212
|
-
var regex = /\s?([a-zA-Z0-
|
|
214
|
+
var regex = /\s?([a-zA-Z0-9_-]+)\s?(!=|==|<|>|<=|>=)\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;
|
|
213
215
|
var matches = [];
|
|
214
216
|
var finalExpr = expr;
|
|
215
217
|
while (matches = regex.exec(expr)) {
|
|
@@ -269,7 +271,7 @@ EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
269
271
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
270
272
|
multi: true
|
|
271
273
|
}
|
|
272
|
-
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.
|
|
274
|
+
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>", components: [{ type: i3.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { type: i3.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { type: i3.FormCheckboxComponent, selector: "form-checkbox" }, { type: i3.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol"] }, { type: i3.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }], pipes: { "localize": i2.LocalizePipe } });
|
|
273
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsParametersComponent, decorators: [{
|
|
274
276
|
type: Component,
|
|
275
277
|
args: [{ selector: "es-parameters", providers: [
|
|
@@ -284,7 +286,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
284
286
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
285
287
|
multi: true
|
|
286
288
|
}
|
|
287
|
-
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.
|
|
289
|
+
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>" }]
|
|
288
290
|
}], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.DateService }]; }, propDecorators: { LastParameterNoMargin: [{
|
|
289
291
|
type: Input
|
|
290
292
|
}], LabelColWidth: [{
|
|
@@ -369,7 +371,7 @@ class GenericParameter {
|
|
|
369
371
|
this.type = type == 'enum' ? "" : type;
|
|
370
372
|
this.visible = true;
|
|
371
373
|
this.enumtype = type == 'enum' ? type : "";
|
|
372
|
-
this.
|
|
374
|
+
this.isreadonly = false;
|
|
373
375
|
if (!this.enumtype && enumvalues.length != 0)
|
|
374
376
|
console.error("impossibile gestire valori di dizionario per un parametro non di tipo enum");
|
|
375
377
|
if (v_default != null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/tokens.ts","../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il locale da utilizzare per l'applicazione. Sono supportati i locali \"it-IT\" ed \"en-US\"\r\n */\r\nexport const PAR_LOCALE: InjectionToken<string> = new InjectionToken<string>('PAR_LOCALE');","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(@Inject(PAR_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n }\r\n}","// Angular\r\nimport { ControlValueAccessor, FormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\n\r\n/**\r\n * Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico\r\n */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }],\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor, Validator {\r\n\r\n /**\r\n * Modello del componente su cui vengono effettuate le graficazioni\r\n */\r\n public Parameters: GenericParameter[];\r\n\r\n /**\r\n * Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà\r\n */\r\n private ParametersCache: {[id: string]: GenericParameter};\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /**\r\n * Indica che l'ultimo parametro non deve avere margine in fondo\r\n */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /**\r\n * col-md-X per la label\r\n */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /**\r\n * col-md-X per l'input\r\n */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /**\r\n * Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente\r\n */\r\n @Input() submitted: boolean = false;\r\n\r\n /**\r\n * Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare\r\n */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /**\r\n * Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label\r\n */\r\n @Input() Removal: boolean = false;\r\n\r\n /**\r\n * Indica se i componenti di Input generati sono Readonly o no\r\n */\r\n @Input() Readonly: boolean = false;\r\n\r\n /**\r\n * Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit\r\n */\r\n @Input() Form : NgForm = null;\r\n\r\n /**\r\n * Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\"\r\n */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n this.Parameters = obj;\r\n this.ParametersCache = {};\r\n if (!this.Parameters)\r\n return;\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if(!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(\"Rilevate inconsistenze fra il tipo \" + t.type + \" e il tipo \" + this.utiExts.getJsTypeFromTypeCode(t.typecode));\r\n\r\n if (t.type == \"boolean\")\r\n t.value = (<string>t.value.toString()).toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n });\r\n\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n validate(c: FormControl): any {\r\n // Se la validazione è richiamata da un componente non me stesso vuol dire che i componenti di validazione interni stanno richiamando\r\n // questo validator, ma dal loro punto di vista non se ne devono preoccupare quindi faccio finta non ci siano errori.\r\n // Se invece vengo richiamato direttamente significa che è il form in cui vive es-parameters e lì devo effettuare la validazione\r\n let control = this.inj.get(NgControl, null)?.control;\r\n if (c != control)\r\n return null;\r\n\r\n let valid = true;\r\n if (this.Parameters && this.Parameters.length > 0) {\r\n this.Parameters.forEach(t => {\r\n if(!t.visible)\r\n return;\r\n \r\n let emptyNumber = t.type == 'number' && (t.value == null || t.value == undefined);\r\n let emptyNonNumber = t.type != 'number' && !t.value\r\n\r\n if (t.required && (emptyNumber || emptyNonNumber))\r\n valid = false;\r\n else if (t.value && t.type == 'number')\r\n valid = new RegExp(t.pattern || /^[+-]?[0-9]*[,]?[0-9]+$/).test(t.value.toString());\r\n else if (t.value && t.pattern)\r\n valid = new RegExp(t.pattern).test(t.value);\r\n });\r\n }\r\n\r\n if (valid)\r\n return null;\r\n return { \"es-parameters\": valid };\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));\r\n this.propagateChange(thyCleanShaltNotBlankMe);\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n */\r\n private reviewParametersBindings() {\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp)\r\n p.required = this.evaluate(p.requiredexp);\r\n if (p.visibleexp)\r\n p.visible = this.evaluate(p.visibleexp);\r\n }\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', '${value}')`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${rPar.value}\" ${operator} \"${value}\"`);\r\n case \"boolean\":\r\n return eval(`${rPar.value.toString()} ${operator} ${value}`);\r\n case \"number\":\r\n return eval(`${rPar.value.replace(',', '.')} ${operator} ${value.replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.readonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { FullExtensionsModule } from '@esfaenza/extensions';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\nimport { EsParametersModuleConfig } from './models/EsParametersModuleConfig';\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FullExtensionsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n static forRoot(config?: EsParametersModuleConfig): ModuleWithProviders<EsParametersModule> {\r\n return {\r\n ngModule: EsParametersModule,\r\n providers: [\r\n { provide: PAR_LOCALE, useValue: config?.locale || 'it-IT' }\r\n ]\r\n };\r\n }\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n */\r\n constructor(\r\n public id: string, \r\n public description: string, \r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum', \r\n public required: boolean, \r\n v_default: any = null, \r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean) {\r\n\r\n this.type = type == 'enum' ? \"\" : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.readonly = false;\r\n\r\n if(!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n \r\n /**\r\n * Tipo di dato rappresentato da questo parametro\r\n */\r\n public type: string;\r\n\r\n /**\r\n * Typecode lato C# che rappresenta il tipo di dato\r\n */\r\n public typecode: number;\r\n\r\n /**\r\n * Indica se il campo specificato dev'essere di sola lettura o meno\r\n */\r\n public readonly: boolean;\r\n\r\n /**\r\n * Valore del parametro\r\n */\r\n public value: any;\r\n\r\n /**\r\n * Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto\r\n */\r\n public visible: boolean;\r\n\r\n /**\r\n * Tipo Enum, valorizzato dal Backend\r\n */\r\n public enumtype: string;\r\n\r\n /**\r\n * Tipo Dizionario, valorizzato dal Backend\r\n */\r\n public dicttype: string;\r\n\r\n /**\r\n * Espressione di obbligatorietà\r\n */\r\n public requiredexp?: string;\r\n\r\n /**\r\n * Espressione di visibilità\r\n */\r\n public visibleexp?: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/tokens.ts","../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il locale da utilizzare per l'applicazione. Sono supportati i locali \"it-IT\" ed \"en-US\"\r\n */\r\nexport const PAR_LOCALE: InjectionToken<string> = new InjectionToken<string>('PAR_LOCALE');","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(@Inject(PAR_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n }\r\n}","// Angular\r\nimport { ControlValueAccessor, FormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\n\r\n/**\r\n * Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico\r\n */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }],\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor, Validator {\r\n\r\n /**\r\n * Modello del componente su cui vengono effettuate le graficazioni\r\n */\r\n public Parameters: GenericParameter[];\r\n\r\n /**\r\n * Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà\r\n */\r\n private ParametersCache: {[id: string]: GenericParameter};\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /**\r\n * Indica che l'ultimo parametro non deve avere margine in fondo\r\n */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /**\r\n * col-md-X per la label\r\n */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /**\r\n * col-md-X per l'input\r\n */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /**\r\n * Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente\r\n */\r\n @Input() submitted: boolean = false;\r\n\r\n /**\r\n * Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare\r\n */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /**\r\n * Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label\r\n */\r\n @Input() Removal: boolean = false;\r\n\r\n /**\r\n * Indica se i componenti di Input generati sono Readonly o no\r\n */\r\n @Input() Readonly: boolean = false;\r\n\r\n /**\r\n * Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit\r\n */\r\n @Input() Form : NgForm = null;\r\n\r\n /**\r\n * Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\"\r\n */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n this.Parameters = obj;\r\n this.ParametersCache = {};\r\n if (!this.Parameters)\r\n return;\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if(!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(\"Rilevate inconsistenze fra il tipo \" + t.type + \" e il tipo \" + this.utiExts.getJsTypeFromTypeCode(t.typecode));\r\n\r\n if (t.type == \"boolean\")\r\n t.value = (<string>t.value.toString()).toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n });\r\n\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n validate(c: FormControl): any {\r\n // Se la validazione è richiamata da un componente non me stesso vuol dire che i componenti di validazione interni stanno richiamando\r\n // questo validator, ma dal loro punto di vista non se ne devono preoccupare quindi faccio finta non ci siano errori.\r\n // Se invece vengo richiamato direttamente significa che è il form in cui vive es-parameters e lì devo effettuare la validazione\r\n let control = this.inj.get(NgControl, null)?.control;\r\n if (c != control)\r\n return null;\r\n\r\n let valid = true;\r\n if (this.Parameters && this.Parameters.length > 0) {\r\n this.Parameters.forEach(t => {\r\n if(!t.visible)\r\n return;\r\n \r\n let emptyNumber = t.type == 'number' && (t.value == null || t.value == undefined);\r\n let emptyNonNumber = t.type != 'number' && !t.value\r\n\r\n if (t.required && (emptyNumber || emptyNonNumber))\r\n valid = false;\r\n else if (t.value && t.type == 'number')\r\n valid = new RegExp(t.pattern || /^[+-]?[0-9]*[,]?[0-9]+$/).test(t.value.toString());\r\n else if (t.value && t.pattern)\r\n valid = new RegExp(t.pattern).test(t.value);\r\n });\r\n }\r\n\r\n if (valid)\r\n return null;\r\n return { \"es-parameters\": valid };\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n if (!this.Parameters)\r\n return;\r\n\r\n var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));\r\n this.propagateChange(thyCleanShaltNotBlankMe);\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n */\r\n private reviewParametersBindings() {\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp)\r\n p.required = this.evaluate(p.requiredexp);\r\n if (p.visibleexp)\r\n p.visible = this.evaluate(p.visibleexp);\r\n }\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9_-]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', '${value}')`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${rPar.value}\" ${operator} \"${value}\"`);\r\n case \"boolean\":\r\n return eval(`${rPar.value.toString()} ${operator} ${value}`);\r\n case \"number\":\r\n return eval(`${rPar.value.replace(',', '.')} ${operator} ${value.replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { FullExtensionsModule } from '@esfaenza/extensions';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\nimport { EsParametersModuleConfig } from './models/EsParametersModuleConfig';\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FullExtensionsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n static forRoot(config?: EsParametersModuleConfig): ModuleWithProviders<EsParametersModule> {\r\n return {\r\n ngModule: EsParametersModule,\r\n providers: [\r\n { provide: PAR_LOCALE, useValue: config?.locale || 'it-IT' }\r\n ]\r\n };\r\n }\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum',\r\n public required: boolean,\r\n v_default: any = null,\r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean) {\r\n\r\n this.type = type == 'enum' ? \"\" : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.isreadonly = false;\r\n\r\n if (!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n\r\n /**\r\n * Tipo di dato rappresentato da questo parametro\r\n */\r\n public type: string;\r\n\r\n /**\r\n * Typecode lato C# che rappresenta il tipo di dato\r\n */\r\n public typecode: number;\r\n\r\n /**\r\n * Indica se il campo specificato dev'essere di sola lettura o meno\r\n */\r\n public isreadonly: boolean;\r\n\r\n /**\r\n * Valore del parametro\r\n */\r\n public value: any;\r\n\r\n /**\r\n * Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto\r\n */\r\n public visible: boolean;\r\n\r\n /**\r\n * Tipo Enum, valorizzato dal Backend\r\n */\r\n public enumtype: string;\r\n\r\n /**\r\n * Tipo Dizionario, valorizzato dal Backend\r\n */\r\n public dicttype: string;\r\n\r\n /**\r\n * Espressione di obbligatorietà\r\n */\r\n public requiredexp?: string;\r\n\r\n /**\r\n * Espressione di visibilità\r\n */\r\n public visibleexp?: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -173,6 +173,8 @@ class EsParametersComponent {
|
|
|
173
173
|
* Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel
|
|
174
174
|
*/
|
|
175
175
|
changed() {
|
|
176
|
+
if (!this.Parameters)
|
|
177
|
+
return;
|
|
176
178
|
var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));
|
|
177
179
|
this.propagateChange(thyCleanShaltNotBlankMe);
|
|
178
180
|
this.reviewParametersBindings();
|
|
@@ -201,12 +203,12 @@ class EsParametersComponent {
|
|
|
201
203
|
/**
|
|
202
204
|
* Valuta un'espressione in base ai parametri presenti nel modello attuale
|
|
203
205
|
*
|
|
204
|
-
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null)" separato eventualmente da && ed ||
|
|
206
|
+
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)" separato eventualmente da && ed ||
|
|
205
207
|
*
|
|
206
208
|
* @returns **true** se la condizione è verificata, **false** altrimenti
|
|
207
209
|
*/
|
|
208
210
|
evaluate(expr) {
|
|
209
|
-
var regex = /\s?([a-zA-Z0-
|
|
211
|
+
var regex = /\s?([a-zA-Z0-9_-]+)\s?(!=|==|<|>|<=|>=)\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;
|
|
210
212
|
var matches = [];
|
|
211
213
|
var finalExpr = expr;
|
|
212
214
|
while (matches = regex.exec(expr)) {
|
|
@@ -266,7 +268,7 @@ EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
266
268
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
267
269
|
multi: true
|
|
268
270
|
}
|
|
269
|
-
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.
|
|
271
|
+
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>", components: [{ type: i3.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { type: i3.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { type: i3.FormCheckboxComponent, selector: "form-checkbox" }, { type: i3.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol"] }, { type: i3.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }], pipes: { "localize": i2.LocalizePipe } });
|
|
270
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: EsParametersComponent, decorators: [{
|
|
271
273
|
type: Component,
|
|
272
274
|
args: [{ selector: "es-parameters", providers: [
|
|
@@ -281,7 +283,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
281
283
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
282
284
|
multi: true
|
|
283
285
|
}
|
|
284
|
-
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.
|
|
286
|
+
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>" }]
|
|
285
287
|
}], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.DateService }]; }, propDecorators: { LastParameterNoMargin: [{
|
|
286
288
|
type: Input
|
|
287
289
|
}], LabelColWidth: [{
|
|
@@ -366,7 +368,7 @@ class GenericParameter {
|
|
|
366
368
|
this.type = type == 'enum' ? "" : type;
|
|
367
369
|
this.visible = true;
|
|
368
370
|
this.enumtype = type == 'enum' ? type : "";
|
|
369
|
-
this.
|
|
371
|
+
this.isreadonly = false;
|
|
370
372
|
if (!this.enumtype && enumvalues.length != 0)
|
|
371
373
|
console.error("impossibile gestire valori di dizionario per un parametro non di tipo enum");
|
|
372
374
|
if (v_default != null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/tokens.ts","../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il locale da utilizzare per l'applicazione. Sono supportati i locali \"it-IT\" ed \"en-US\"\r\n */\r\nexport const PAR_LOCALE: InjectionToken<string> = new InjectionToken<string>('PAR_LOCALE');","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(@Inject(PAR_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n }\r\n}","// Angular\r\nimport { ControlValueAccessor, FormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\n\r\n/**\r\n * Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico\r\n */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }],\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor, Validator {\r\n\r\n /**\r\n * Modello del componente su cui vengono effettuate le graficazioni\r\n */\r\n public Parameters: GenericParameter[];\r\n\r\n /**\r\n * Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà\r\n */\r\n private ParametersCache: {[id: string]: GenericParameter};\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /**\r\n * Indica che l'ultimo parametro non deve avere margine in fondo\r\n */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /**\r\n * col-md-X per la label\r\n */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /**\r\n * col-md-X per l'input\r\n */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /**\r\n * Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente\r\n */\r\n @Input() submitted: boolean = false;\r\n\r\n /**\r\n * Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare\r\n */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /**\r\n * Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label\r\n */\r\n @Input() Removal: boolean = false;\r\n\r\n /**\r\n * Indica se i componenti di Input generati sono Readonly o no\r\n */\r\n @Input() Readonly: boolean = false;\r\n\r\n /**\r\n * Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit\r\n */\r\n @Input() Form : NgForm = null;\r\n\r\n /**\r\n * Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\"\r\n */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n this.Parameters = obj;\r\n this.ParametersCache = {};\r\n if (!this.Parameters)\r\n return;\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if(!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(\"Rilevate inconsistenze fra il tipo \" + t.type + \" e il tipo \" + this.utiExts.getJsTypeFromTypeCode(t.typecode));\r\n\r\n if (t.type == \"boolean\")\r\n t.value = (<string>t.value.toString()).toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n });\r\n\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n validate(c: FormControl): any {\r\n // Se la validazione è richiamata da un componente non me stesso vuol dire che i componenti di validazione interni stanno richiamando\r\n // questo validator, ma dal loro punto di vista non se ne devono preoccupare quindi faccio finta non ci siano errori.\r\n // Se invece vengo richiamato direttamente significa che è il form in cui vive es-parameters e lì devo effettuare la validazione\r\n let control = this.inj.get(NgControl, null)?.control;\r\n if (c != control)\r\n return null;\r\n\r\n let valid = true;\r\n if (this.Parameters && this.Parameters.length > 0) {\r\n this.Parameters.forEach(t => {\r\n if(!t.visible)\r\n return;\r\n \r\n let emptyNumber = t.type == 'number' && (t.value == null || t.value == undefined);\r\n let emptyNonNumber = t.type != 'number' && !t.value\r\n\r\n if (t.required && (emptyNumber || emptyNonNumber))\r\n valid = false;\r\n else if (t.value && t.type == 'number')\r\n valid = new RegExp(t.pattern || /^[+-]?[0-9]*[,]?[0-9]+$/).test(t.value.toString());\r\n else if (t.value && t.pattern)\r\n valid = new RegExp(t.pattern).test(t.value);\r\n });\r\n }\r\n\r\n if (valid)\r\n return null;\r\n return { \"es-parameters\": valid };\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));\r\n this.propagateChange(thyCleanShaltNotBlankMe);\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n */\r\n private reviewParametersBindings() {\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp)\r\n p.required = this.evaluate(p.requiredexp);\r\n if (p.visibleexp)\r\n p.visible = this.evaluate(p.visibleexp);\r\n }\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', '${value}')`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${rPar.value}\" ${operator} \"${value}\"`);\r\n case \"boolean\":\r\n return eval(`${rPar.value.toString()} ${operator} ${value}`);\r\n case \"number\":\r\n return eval(`${rPar.value.replace(',', '.')} ${operator} ${value.replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.readonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.readonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { FullExtensionsModule } from '@esfaenza/extensions';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\nimport { EsParametersModuleConfig } from './models/EsParametersModuleConfig';\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FullExtensionsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n static forRoot(config?: EsParametersModuleConfig): ModuleWithProviders<EsParametersModule> {\r\n return {\r\n ngModule: EsParametersModule,\r\n providers: [\r\n { provide: PAR_LOCALE, useValue: config?.locale || 'it-IT' }\r\n ]\r\n };\r\n }\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n */\r\n constructor(\r\n public id: string, \r\n public description: string, \r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum', \r\n public required: boolean, \r\n v_default: any = null, \r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean) {\r\n\r\n this.type = type == 'enum' ? \"\" : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.readonly = false;\r\n\r\n if(!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n \r\n /**\r\n * Tipo di dato rappresentato da questo parametro\r\n */\r\n public type: string;\r\n\r\n /**\r\n * Typecode lato C# che rappresenta il tipo di dato\r\n */\r\n public typecode: number;\r\n\r\n /**\r\n * Indica se il campo specificato dev'essere di sola lettura o meno\r\n */\r\n public readonly: boolean;\r\n\r\n /**\r\n * Valore del parametro\r\n */\r\n public value: any;\r\n\r\n /**\r\n * Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto\r\n */\r\n public visible: boolean;\r\n\r\n /**\r\n * Tipo Enum, valorizzato dal Backend\r\n */\r\n public enumtype: string;\r\n\r\n /**\r\n * Tipo Dizionario, valorizzato dal Backend\r\n */\r\n public dicttype: string;\r\n\r\n /**\r\n * Espressione di obbligatorietà\r\n */\r\n public requiredexp?: string;\r\n\r\n /**\r\n * Espressione di visibilità\r\n */\r\n public visibleexp?: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"esfaenza-parameters.mjs","sources":["../../../projects/parameters/src/lib/tokens.ts","../../../projects/parameters/src/lib/es_parameters.component.loc.ts","../../../projects/parameters/src/lib/es_parameters.component.ts","../../../projects/parameters/src/lib/es_parameters.component.html","../../../projects/parameters/src/lib/es_parameters.module.ts","../../../projects/parameters/src/lib/models/GenericParameter.ts","../../../projects/parameters/src/public-api.ts","../../../projects/parameters/src/esfaenza-parameters.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che indica il locale da utilizzare per l'applicazione. Sono supportati i locali \"it-IT\" ed \"en-US\"\r\n */\r\nexport const PAR_LOCALE: InjectionToken<string> = new InjectionToken<string>('PAR_LOCALE');","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n/**\r\n * Classe di localizzazione per il componente **EsParametersComponent**\r\n */\r\n@Injectable()\r\nexport class EsParametersLoc extends LocalizationService {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(@Inject(PAR_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n }\r\n}","// Angular\r\nimport { ControlValueAccessor, FormControl, NgControl, NgForm, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from \"@angular/forms\";\r\nimport { ChangeDetectorRef, Component, forwardRef, Injector, Input } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { GenericParameter } from './models/GenericParameter';\r\n\r\n// Applicazione\r\nimport { EsParametersLoc } from \"./es_parameters.component.loc\";\r\n\r\n/**\r\n * Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico\r\n */\r\n@Component({\r\n selector: \"es-parameters\",\r\n providers: [\r\n { provide: LocalizationService, useClass: EsParametersLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EsParametersComponent),\r\n multi: true\r\n }],\r\n templateUrl: \"./es_parameters.component.html\"\r\n})\r\nexport class EsParametersComponent implements ControlValueAccessor, Validator {\r\n\r\n /**\r\n * Modello del componente su cui vengono effettuate le graficazioni\r\n */\r\n public Parameters: GenericParameter[];\r\n\r\n /**\r\n * Cache per fare lookup rapidi in fase di valutazione espressioni di visibilità e obbligatorietà\r\n */\r\n private ParametersCache: {[id: string]: GenericParameter};\r\n\r\n /**\r\n * Pipeline di Angular \r\n * \r\n * @ignore\r\n */\r\n propagateChange = (_: any) => { };\r\n\r\n /**\r\n * Indica che l'ultimo parametro non deve avere margine in fondo\r\n */\r\n @Input() LastParameterNoMargin: boolean = false;\r\n\r\n /**\r\n * col-md-X per la label\r\n */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /**\r\n * col-md-X per l'input\r\n */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /**\r\n * Input a cui collegare la variabile **submitted** del form all'interno del quale viene utilizzato questo componente\r\n */\r\n @Input() submitted: boolean = false;\r\n\r\n /**\r\n * Valore da mostrare qualora non fossero ancora ricevuti i **Parameters** da mostrare\r\n */\r\n @Input() EmptyMessage: string = \"\";\r\n\r\n /**\r\n * Permette di rimuovere i parametri dalla lista cliccando sulla X davanti alla Label\r\n */\r\n @Input() Removal: boolean = false;\r\n\r\n /**\r\n * Indica se i componenti di Input generati sono Readonly o no\r\n */\r\n @Input() Readonly: boolean = false;\r\n\r\n /**\r\n * Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit\r\n */\r\n @Input() Form : NgForm = null;\r\n\r\n /**\r\n * Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi \"X Y\"\r\n */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private utiExts: UtilityService, public lc: LocalizationService, public cdr: ChangeDetectorRef, private inj: Injector, public dates: DateService) { }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public writeValue(obj): void {\r\n this.Parameters = obj;\r\n this.ParametersCache = {};\r\n if (!this.Parameters)\r\n return;\r\n\r\n this.Parameters.forEach(t => {\r\n this.ParametersCache[t.id] = t;\r\n\r\n if(!t.typecode && !t.type)\r\n console.warn(\"Non è stato specificato né un type né un typecode\");\r\n\r\n if (t.typecode && !t.type)\r\n t.type = this.utiExts.getJsTypeFromTypeCode(t.typecode);\r\n\r\n if (t.typecode && t.type != this.utiExts.getJsTypeFromTypeCode(t.typecode))\r\n console.warn(\"Rilevate inconsistenze fra il tipo \" + t.type + \" e il tipo \" + this.utiExts.getJsTypeFromTypeCode(t.typecode));\r\n\r\n if (t.type == \"boolean\")\r\n t.value = (<string>t.value.toString()).toLowerCase() === \"true\";\r\n\r\n if (t.enumtype || t.dicttype)\r\n t.type = 'enum';\r\n });\r\n\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n validate(c: FormControl): any {\r\n // Se la validazione è richiamata da un componente non me stesso vuol dire che i componenti di validazione interni stanno richiamando\r\n // questo validator, ma dal loro punto di vista non se ne devono preoccupare quindi faccio finta non ci siano errori.\r\n // Se invece vengo richiamato direttamente significa che è il form in cui vive es-parameters e lì devo effettuare la validazione\r\n let control = this.inj.get(NgControl, null)?.control;\r\n if (c != control)\r\n return null;\r\n\r\n let valid = true;\r\n if (this.Parameters && this.Parameters.length > 0) {\r\n this.Parameters.forEach(t => {\r\n if(!t.visible)\r\n return;\r\n \r\n let emptyNumber = t.type == 'number' && (t.value == null || t.value == undefined);\r\n let emptyNonNumber = t.type != 'number' && !t.value\r\n\r\n if (t.required && (emptyNumber || emptyNonNumber))\r\n valid = false;\r\n else if (t.value && t.type == 'number')\r\n valid = new RegExp(t.pattern || /^[+-]?[0-9]*[,]?[0-9]+$/).test(t.value.toString());\r\n else if (t.value && t.pattern)\r\n valid = new RegExp(t.pattern).test(t.value);\r\n });\r\n }\r\n\r\n if (valid)\r\n return null;\r\n return { \"es-parameters\": valid };\r\n }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n /**\r\n * Pipeline di Angular\r\n * \r\n * @ignore\r\n */\r\n public registerOnTouched(fn): void { }\r\n\r\n /**\r\n * Metodo che si occupa di gestire il modello in uscita e propagarlo sul binding ngModel\r\n */\r\n public changed() {\r\n if (!this.Parameters)\r\n return;\r\n\r\n var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));\r\n this.propagateChange(thyCleanShaltNotBlankMe);\r\n this.reviewParametersBindings();\r\n }\r\n\r\n /**\r\n * Rimuove il parametro selezionato e propaga il modello\r\n * \r\n * @param {GenericParameter} par Parametro da rimuovere\r\n */\r\n public removeParameter(par: GenericParameter) {\r\n this.Parameters.splice(this.Parameters.indexOf(par), 1);\r\n this.changed();\r\n }\r\n\r\n /**\r\n * Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo\r\n */\r\n private reviewParametersBindings() {\r\n for (let i = 0; i < this.Parameters.length; i++) {\r\n var p = this.Parameters[i];\r\n\r\n if (p.requiredexp)\r\n p.required = this.evaluate(p.requiredexp);\r\n if (p.visibleexp)\r\n p.visible = this.evaluate(p.visibleexp);\r\n }\r\n }\r\n\r\n /**\r\n * Valuta un'espressione in base ai parametri presenti nel modello attuale\r\n * \r\n * @param expr Espressione da valutare scritta nel formato (ripetibile) \"ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)\" separato eventualmente da && ed ||\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n private evaluate(expr: string): boolean {\r\n var regex = /\\s?([a-zA-Z0-9_-]+)\\s?(!=|==|<|>|<=|>=)\\s?(`[^`]+`|null|[0-9,]+|true|false)/gm;\r\n\r\n var matches: string[] = [];\r\n var finalExpr = expr;\r\n while (matches = regex.exec(expr)) {\r\n var fullMatch = matches[0].trim();\r\n var id = matches[1].trim();\r\n var operation = matches[2].trim();\r\n var value = matches[3].trim().trim().replace('`', '').replace('`', '');\r\n\r\n finalExpr = finalExpr.replace(fullMatch, `this.checkValue('${id}', '${operation}', '${value}')`);\r\n }\r\n\r\n return eval(finalExpr);\r\n }\r\n\r\n /**\r\n * Restituisce l'operazione di comparazione fra un singolo valore di un parametro e un suo valore di confronto in base ad un operatore\r\n * Richiamata da EVAL\r\n * \r\n * @param {string} key Chiave del parametro di cui verificare il valore\r\n * @param {string} operator Operatore con cui verificare il valore: ==, !=, >, <, >=, <=\r\n * @param {string} value Valore di confronto da utilizzare\r\n * \r\n * @returns **true** se la condizione è verificata, **false** altrimenti\r\n */\r\n public checkValue(key: string, operator: string, value: string): boolean {\r\n var rPar = this.ParametersCache[key];\r\n switch (rPar.type) {\r\n case \"string\":\r\n case \"enum\":\r\n return eval(`\"${rPar.value}\" ${operator} \"${value}\"`);\r\n case \"boolean\":\r\n return eval(`${rPar.value.toString()} ${operator} ${value}`);\r\n case \"number\":\r\n return eval(`${rPar.value.replace(',', '.')} ${operator} ${value.replace(',', '.')}`);\r\n case \"date\":\r\n let parDateConv = `this.dates.getDateConvertion(\"${rPar.value}\")`;\r\n let valDateConv = `this.dates.getDateConvertion(\"${value}\")`;\r\n\r\n switch (operator) {\r\n\r\n case \"==\": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);\r\n case \"!=\": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);\r\n case \">\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);\r\n case \"<\": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);\r\n case \">=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n case \"<=\": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);\r\n }\r\n }\r\n throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;\r\n }\r\n}","<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"mtu\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { FullExtensionsModule } from '@esfaenza/extensions';\r\nimport { EsParametersComponent } from './es_parameters.component';\r\nimport { EsParametersModuleConfig } from './models/EsParametersModuleConfig';\r\nimport { PAR_LOCALE } from './tokens';\r\n\r\n\r\n@NgModule({\r\n declarations: [EsParametersComponent],\r\n imports: [\r\n CommonModule,\r\n LocalizationModule,\r\n FormsModule,\r\n FullExtensionsModule,\r\n FormsAndValidationsModule,\r\n ],\r\n exports: [EsParametersComponent]\r\n})\r\nexport class EsParametersModule {\r\n static forRoot(config?: EsParametersModuleConfig): ModuleWithProviders<EsParametersModule> {\r\n return {\r\n ngModule: EsParametersModule,\r\n providers: [\r\n { provide: PAR_LOCALE, useValue: config?.locale || 'it-IT' }\r\n ]\r\n };\r\n }\r\n }\r\n","/**\r\n * Classe che rappresenta un parametro generico\r\n */\r\nexport class GenericParameter {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice del parametro\r\n * @param {string} description Descrizione del parametro\r\n * @param {string} pattern Pattern di validazione\r\n * @param {'date' | 'string' | 'number' | 'boolean' | 'enum'} type Tipo di input \r\n * @param {boolean} required Indica se il valore è obbligatorio o meno\r\n * @param {any} v_default Valore di default per questo Parametro\r\n * @param {{ id: string, description: string }[]} enumvalues Qualora il **type** fosse di tipo **enum**, qui devono esserci tutti i valori che può assumere \r\n * @param {boolean} multienum Qualora il **type** fosse di tipo **enum**, indica se è possibile selezionare più valori (multiselect)\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public pattern: string,\r\n type: 'date' | 'string' | 'number' | 'boolean' | 'enum',\r\n public required: boolean,\r\n v_default: any = null,\r\n public enumvalues: { id: string, description: string }[] = [],\r\n public multienum?: boolean) {\r\n\r\n this.type = type == 'enum' ? \"\" : type;\r\n this.visible = true;\r\n this.enumtype = type == 'enum' ? type : \"\";\r\n this.isreadonly = false;\r\n\r\n if (!this.enumtype && enumvalues.length != 0)\r\n console.error(\"impossibile gestire valori di dizionario per un parametro non di tipo enum\");\r\n\r\n if (v_default != null)\r\n this.value = v_default;\r\n }\r\n\r\n /**\r\n * Tipo di dato rappresentato da questo parametro\r\n */\r\n public type: string;\r\n\r\n /**\r\n * Typecode lato C# che rappresenta il tipo di dato\r\n */\r\n public typecode: number;\r\n\r\n /**\r\n * Indica se il campo specificato dev'essere di sola lettura o meno\r\n */\r\n public isreadonly: boolean;\r\n\r\n /**\r\n * Valore del parametro\r\n */\r\n public value: any;\r\n\r\n /**\r\n * Indica se questo parametro dev'essere inserito o no. In caso contrario viene semplicemente nascosto\r\n */\r\n public visible: boolean;\r\n\r\n /**\r\n * Tipo Enum, valorizzato dal Backend\r\n */\r\n public enumtype: string;\r\n\r\n /**\r\n * Tipo Dizionario, valorizzato dal Backend\r\n */\r\n public dicttype: string;\r\n\r\n /**\r\n * Espressione di obbligatorietà\r\n */\r\n public requiredexp?: string;\r\n\r\n /**\r\n * Espressione di visibilità\r\n */\r\n public visibleexp?: string;\r\n}","/*\r\n * Public API Surface of parameters\r\n */\r\nexport * from './lib/es_parameters.module';\r\nexport * from './lib/tokens';\r\nexport * from './lib/models/GenericParameter';\r\nexport * from './lib/es_parameters.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,7 @@ export declare class EsParametersComponent implements ControlValueAccessor, Vali
|
|
|
110
110
|
/**
|
|
111
111
|
* Valuta un'espressione in base ai parametri presenti nel modello attuale
|
|
112
112
|
*
|
|
113
|
-
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null)" separato eventualmente da && ed ||
|
|
113
|
+
* @param expr Espressione da valutare scritta nel formato (ripetibile) "ID (==|!=|<|>|>=|<=) (`valore` | null | true | false | XXX,XXX)" separato eventualmente da && ed ||
|
|
114
114
|
*
|
|
115
115
|
* @returns **true** se la condizione è verificata, **false** altrimenti
|
|
116
116
|
*/
|