@esfaenza/forms-and-validations 18.2.2 → 19.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -1
- package/fesm2022/esfaenza-forms-and-validations.mjs +1099 -3972
- package/fesm2022/esfaenza-forms-and-validations.mjs.map +1 -1
- package/lib/forms/adaptive/form-adaptive.component.d.ts +23 -0
- package/lib/forms/autocomplete/form-autocomplete.component.d.ts +40 -0
- package/lib/forms/base/base-form-control.d.ts +132 -0
- package/lib/forms/base/skeleton/input-skeleton.component.d.ts +12 -0
- package/lib/forms/checkbox/form-checkbox.component.d.ts +11 -0
- package/lib/forms/currency/form-currency.component.d.ts +10 -0
- package/lib/forms/date/form-date.component.d.ts +36 -0
- package/lib/forms/datetime/form-datetime.component.d.ts +7 -0
- package/lib/forms/{form-info/form-info.component.d.ts → error/form-error.component.d.ts} +4 -4
- package/lib/forms/file/form-file.component.d.ts +38 -0
- package/lib/forms/{form-error/form-error.component.d.ts → info/form-info.component.d.ts} +4 -4
- package/lib/forms/input/form-input.component.d.ts +25 -0
- package/lib/forms/multiselect/form-multiselect.component.d.ts +20 -0
- package/lib/forms/select/form-select.component.d.ts +9 -0
- package/lib/forms/{form-template → template}/form-template.component.d.ts +3 -3
- package/lib/forms/textarea/form-textarea.component.d.ts +13 -0
- package/lib/forms/time/form-time.component.d.ts +7 -0
- package/lib/forms.module.d.ts +32 -0
- package/lib/models/AppFile.d.ts +5 -15
- package/lib/models/BaseFormConfiguration.d.ts +27 -0
- package/lib/models/EsFormsModuleConfig.d.ts +7 -0
- package/lib/services/helper.d.ts +15 -0
- package/lib/tokens.d.ts +1 -5
- package/package.json +10 -16
- package/public-api.d.ts +18 -28
- package/esm2022/esfaenza-forms-and-validations.mjs +0 -5
- package/esm2022/lib/forms/base-form-control.mjs +0 -558
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +0 -22
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.mjs +0 -420
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +0 -21
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.mjs +0 -289
- package/esm2022/lib/forms/form-checkbox/form-checkbox.component.mjs +0 -74
- package/esm2022/lib/forms/form-date/form-date.component.mjs +0 -69
- package/esm2022/lib/forms/form-datetime/form-datetime.component.mjs +0 -67
- package/esm2022/lib/forms/form-empty/form-empty.component.mjs +0 -30
- package/esm2022/lib/forms/form-error/form-error.component.mjs +0 -42
- package/esm2022/lib/forms/form-file/form-file.component.loc.mjs +0 -22
- package/esm2022/lib/forms/form-file/form-file.component.mjs +0 -175
- package/esm2022/lib/forms/form-info/form-info.component.mjs +0 -42
- package/esm2022/lib/forms/form-input/form-input.component.mjs +0 -83
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +0 -23
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.mjs +0 -163
- package/esm2022/lib/forms/form-select/form-select.component.loc.mjs +0 -21
- package/esm2022/lib/forms/form-select/form-select.component.mjs +0 -165
- package/esm2022/lib/forms/form-template/form-template.component.mjs +0 -77
- package/esm2022/lib/forms/form-textarea/form-textarea.component.mjs +0 -57
- package/esm2022/lib/forms/form-time/form-time.component.mjs +0 -115
- package/esm2022/lib/forms-and-validations.module.mjs +0 -213
- package/esm2022/lib/models/AppFile.mjs +0 -14
- package/esm2022/lib/models/ChangeEvent.mjs +0 -7
- package/esm2022/lib/models/FormsAndValidationsModuleConfig.mjs +0 -6
- package/esm2022/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +0 -89
- package/esm2022/lib/tokens.mjs +0 -8
- package/esm2022/lib/validations/base-validation.loc.mjs +0 -23
- package/esm2022/lib/validations/base-validation.mjs +0 -328
- package/esm2022/lib/validations/customValidators/CustomRequiredDirective.mjs +0 -41
- package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +0 -147
- package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +0 -240
- package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +0 -75
- package/esm2022/lib/validations/validation-date/validation-date.component.mjs +0 -183
- package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +0 -212
- package/esm2022/lib/validations/validation-input/validation-input.component.mjs +0 -222
- package/esm2022/lib/validations/validation-select/validation-select.component.mjs +0 -183
- package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +0 -78
- package/esm2022/public-api.mjs +0 -40
- package/lib/forms/base-form-control.d.ts +0 -276
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +0 -126
- package/lib/forms/form-adaptive/form-adaptive.component.loc.d.ts +0 -14
- package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +0 -84
- package/lib/forms/form-autocomplete/form-autocomplete.component.loc.d.ts +0 -14
- package/lib/forms/form-checkbox/form-checkbox.component.d.ts +0 -23
- package/lib/forms/form-date/form-date.component.d.ts +0 -21
- package/lib/forms/form-datetime/form-datetime.component.d.ts +0 -23
- package/lib/forms/form-empty/form-empty.component.d.ts +0 -15
- package/lib/forms/form-file/form-file.component.d.ts +0 -46
- package/lib/forms/form-file/form-file.component.loc.d.ts +0 -14
- package/lib/forms/form-input/form-input.component.d.ts +0 -33
- package/lib/forms/form-multiselect/form-multiselect.component.d.ts +0 -67
- package/lib/forms/form-multiselect/form-multiselect.component.loc.d.ts +0 -14
- package/lib/forms/form-select/form-select.component.d.ts +0 -43
- package/lib/forms/form-select/form-select.component.loc.d.ts +0 -14
- package/lib/forms/form-textarea/form-textarea.component.d.ts +0 -18
- package/lib/forms/form-time/form-time.component.d.ts +0 -40
- package/lib/forms-and-validations.module.d.ts +0 -47
- package/lib/models/FormsAndValidationsModuleConfig.d.ts +0 -11
- package/lib/models/dayjs-adapter/dayjs-date-adapter.d.ts +0 -49
- package/lib/validations/base-validation.d.ts +0 -219
- package/lib/validations/base-validation.loc.d.ts +0 -14
- package/lib/validations/customValidators/CustomRequiredDirective.d.ts +0 -24
- package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +0 -58
- package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts +0 -88
- package/lib/validations/validation-currency/validation-currency.component.d.ts +0 -28
- package/lib/validations/validation-date/validation-date.component.d.ts +0 -79
- package/lib/validations/validation-datetime/validation-datetime.component.d.ts +0 -109
- package/lib/validations/validation-input/validation-input.component.d.ts +0 -134
- package/lib/validations/validation-select/validation-select.component.d.ts +0 -95
- package/lib/validations/validation-text-area/validation-text-area.component.d.ts +0 -28
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { NG_VALIDATORS } from "@angular/forms";
|
|
3
|
-
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self } from "@angular/core";
|
|
4
|
-
import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
|
|
5
|
-
// Applicazione
|
|
6
|
-
import { BaseFormControl } from "../base-form-control";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@esfaenza/extensions";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "@esfaenza/access-control";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
import * as i5 from "../../validations/validation-date/validation-date.component";
|
|
13
|
-
/** Componente che dà all'utente la possibilità di selezionare una data */
|
|
14
|
-
export class FormDateComponent extends BaseFormControl {
|
|
15
|
-
/** @ignore Costruttore */
|
|
16
|
-
constructor(datesExts, cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE) {
|
|
17
|
-
super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
|
|
18
|
-
this.datesExts = datesExts;
|
|
19
|
-
/** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */
|
|
20
|
-
this.JsDates = false;
|
|
21
|
-
}
|
|
22
|
-
/** @ignore */
|
|
23
|
-
writeValue(obj) {
|
|
24
|
-
this.EvaluatedModel = this.datesExts.getFormatted(obj, true, false);
|
|
25
|
-
super.writeValue(obj);
|
|
26
|
-
}
|
|
27
|
-
changed() {
|
|
28
|
-
let newlyEvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, true, false) : '';
|
|
29
|
-
// Evito che l'inputChange lato html mi faccia sparare fuori dai changed finti. L'input cambia solo quando cambia il modello presentato
|
|
30
|
-
if (newlyEvaluatedModel != this.EvaluatedModel) {
|
|
31
|
-
this.EvaluatedModel = newlyEvaluatedModel;
|
|
32
|
-
super.changed(null, false, true);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/** @ignore */
|
|
36
|
-
onNotNullValueSet() { }
|
|
37
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateComponent, deps: [{ token: i1.DateService }, { token: i0.ChangeDetectorRef }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormDateComponent, selector: "form-date", inputs: { JsDates: "JsDates" }, usesInheritance: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-date [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\"\r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-date>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ValidationDateComponent, selector: "val-date", inputs: ["useJsDates"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
39
|
-
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateComponent, decorators: [{
|
|
41
|
-
type: Component,
|
|
42
|
-
args: [{ selector: "form-date", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-date [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\"\r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-date>\r\n</ng-template>" }]
|
|
43
|
-
}], ctorParameters: () => [{ type: i1.DateService }, { type: i0.ChangeDetectorRef }, { type: i2.NgControl, decorators: [{
|
|
44
|
-
type: Optional
|
|
45
|
-
}, {
|
|
46
|
-
type: Self
|
|
47
|
-
}] }, { type: Array, decorators: [{
|
|
48
|
-
type: Optional
|
|
49
|
-
}, {
|
|
50
|
-
type: Inject,
|
|
51
|
-
args: [NG_VALIDATORS]
|
|
52
|
-
}] }, { type: i3.AccessControlService, decorators: [{
|
|
53
|
-
type: Optional
|
|
54
|
-
}] }, { type: i3.ComponentContext, decorators: [{
|
|
55
|
-
type: Optional
|
|
56
|
-
}] }, { type: undefined, decorators: [{
|
|
57
|
-
type: Optional
|
|
58
|
-
}, {
|
|
59
|
-
type: Inject,
|
|
60
|
-
args: [ACO_CUSTOMKEY]
|
|
61
|
-
}] }, { type: undefined, decorators: [{
|
|
62
|
-
type: Optional
|
|
63
|
-
}, {
|
|
64
|
-
type: Inject,
|
|
65
|
-
args: [FAV_DEBUG_MODE]
|
|
66
|
-
}] }], propDecorators: { JsDates: [{
|
|
67
|
-
type: Input
|
|
68
|
-
}] } });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zLWFuZC12YWxpZGF0aW9ucy9zcmMvbGliL2Zvcm1zL2Zvcm0tZGF0ZS9mb3JtLWRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1kYXRlL2Zvcm0tZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFRLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBR3ZELDBFQUEwRTtBQU0xRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQUtsRCwyQkFBMkI7SUFDM0IsWUFBb0IsU0FBc0IsRUFBRSxHQUFzQixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFjLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBcUIsRUFBc0MsY0FBdUI7UUFDM1csS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRGxFLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFKMUMsd0hBQXdIO1FBQy9HLFlBQU8sR0FBWSxLQUFLLENBQUM7SUFLbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpHLHVJQUF1STtRQUN2SSxJQUFJLG1CQUFtQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLG1CQUFtQixDQUFBO1lBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsS0FBVyxDQUFDOytHQTNCcEIsaUJBQWlCLG1JQU13RyxhQUFhLGlJQUErSCxhQUFhLDZCQUE2QyxjQUFjO21HQU43VSxpQkFBaUIsd0dDbkI5Qixzb0dBMENjOzs0RkR2QkQsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLFdBQVcsbUJBRUosdUJBQXVCLENBQUMsTUFBTTs7MEJBUXNCLFFBQVE7OzBCQUFJLElBQUk7OzBCQUEwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUE0QixRQUFROzswQkFBOEIsUUFBUTs7MEJBQWtDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzt5Q0FIN1UsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3QsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBTZWxmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sJztcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEJhc2VGb3JtQ29udHJvbCB9IGZyb20gXCIuLi9iYXNlLWZvcm0tY29udHJvbFwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgZMOgIGFsbCd1dGVudGUgbGEgcG9zc2liaWxpdMOgIGRpIHNlbGV6aW9uYXJlIHVuYSBkYXRhICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1kYXRlXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJmb3JtLWRhdGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGF0ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKiogVXRpbGl6emEgaWwgRGF0ZSBkaSBKYXZhc2NyaXB0IGNvbWUgbW9kZWxsbyBpbiB1c2NpdGEuIElsIG1vZGVsbG8gaW4gZW50cmF0YSB2ZXJyw6AgY29tdW5xdWUgcmljb25kb3R0byBhIHVuIERheUpzICovXHJcbiAgICBASW5wdXQoKSBKc0RhdGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVzRXh0czogRGF0ZVNlcnZpY2UsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIEZBVl9ERUJVR19NT0RFOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIHRydWUsIGZhbHNlKTtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbmV3bHlFdmFsdWF0ZWRNb2RlbCA9IHRoaXMuTW9kZWwgPyB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQodGhpcy5Nb2RlbCwgdHJ1ZSwgZmFsc2UpIDogJyc7XHJcblxyXG4gICAgICAgIC8vIEV2aXRvIGNoZSBsJ2lucHV0Q2hhbmdlIGxhdG8gaHRtbCBtaSBmYWNjaWEgc3BhcmFyZSBmdW9yaSBkYWkgY2hhbmdlZCBmaW50aS4gTCdpbnB1dCBjYW1iaWEgc29sbyBxdWFuZG8gY2FtYmlhIGlsIG1vZGVsbG8gcHJlc2VudGF0b1xyXG4gICAgICAgIGlmIChuZXdseUV2YWx1YXRlZE1vZGVsICE9IHRoaXMuRXZhbHVhdGVkTW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG5ld2x5RXZhbHVhdGVkTW9kZWxcclxuICAgICAgICAgICAgc3VwZXIuY2hhbmdlZChudWxsLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkIHsgfVxyXG59IiwiPCEtLSBVZ3VhbGUgaW4gdHV0dGkgaSBjb21wb25lbnRpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgIURpc3BsYXlNb2RlVGVtcGxhdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnZm9ybSdcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnXCIgY2xhc3M9XCJhcHAtaW5saW5lXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiIGNsYXNzPVwie3tGb3JtR3JvdXBDbGFzcyArIChMYXN0ID8gJyBhcHAtbWFyZ2luLWJvdHRvbS0wIGFwcC1tYXJnaW4tcmlnaHQtMCAnIDogJycpICsgKERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgRGlzcGxheU1vZGUgPyAoJyBhcHAtaW5saW5lLWJsb2NrICcgKyAoIUxhc3QgPyAnYXBwLW1hcmdpbi1yaWdodC0xMCcgOiAnJykpIDogJyBmb3JtLWdyb3VwIHJvdycpfX1cIj5cclxuXHJcbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3soRGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1ib2xkIGFwcC1tYXJnaW4tYm90dG9tLTAnIDogTGFiZWxDb2xXaWR0aCkgKyAoRGlzcGxheU1vZGUgPyAnIGFwcC1ib2xkJyA6ICcgbS10LTUnKSB9fVwiPnt7TGFiZWx9fXt7UmVxdWlyZWQgJiYgIURpc3BsYXlNb2RlID8gJyonIDogJyd9fXt7TGFiZWwgPyBcIjpcIiA6IFwiXCJ9fTwvbGFiZWw+XHJcbiAgICA8c3BhbiAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgSW5saW5lU2VwYXJhdG9yICE9ICcnXCI+e3tJbmxpbmVTZXBhcmF0b3J9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWlubGluZS1ibG9jaycgOiBJbnB1dENvbFdpZHRofX1cIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8dmFsLWRhdGUgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFxyXG4gICAgICAgICAgICAgIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJHZW5lcmF0ZWROYW1lXCJcclxuICAgICAgICAgICAgICBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJSZWFkb25seSA/ICdhcHAtYmctbGlnaHRncmV5JyA6ICcnXCJcclxuICAgICAgICAgICAgICBbdXNlSnNEYXRlc109XCJKc0RhdGVzXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIk1vZGVsXCJcclxuICAgICAgICAgICAgICBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIlxyXG4gICAgICAgICAgICAgICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCJcclxuICAgICAgICAgICAgICAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRpb25GYWlsZWRdPVwiRmFpbGVkVmFsaWRhdGlvbk1lc3NhZ2VcIj5cclxuICAgIDwvdmFsLWRhdGU+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { NG_VALIDATORS } from "@angular/forms";
|
|
3
|
-
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self } from "@angular/core";
|
|
4
|
-
import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
|
|
5
|
-
// Applicazione
|
|
6
|
-
import { BaseFormControl } from "../base-form-control";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@esfaenza/extensions";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "@esfaenza/access-control";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
import * as i5 from "../../validations/validation-datetime/validation-datetime.component";
|
|
13
|
-
/**
|
|
14
|
-
* Componente che dà all'utente la possibilità di selezionare una data insieme ad un orario
|
|
15
|
-
*/
|
|
16
|
-
export class FormDateTimeComponent extends BaseFormControl {
|
|
17
|
-
/** @ignore Costruttore */
|
|
18
|
-
constructor(datesExts, cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE) {
|
|
19
|
-
super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
|
|
20
|
-
this.datesExts = datesExts;
|
|
21
|
-
/** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */
|
|
22
|
-
this.JsDates = false;
|
|
23
|
-
}
|
|
24
|
-
/** @ignore */
|
|
25
|
-
writeValue(obj) {
|
|
26
|
-
this.EvaluatedModel = this.datesExts.getFormatted(obj, false, true);
|
|
27
|
-
super.writeValue(obj);
|
|
28
|
-
}
|
|
29
|
-
changed() {
|
|
30
|
-
this.EvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, false, true) : '';
|
|
31
|
-
super.changed(null, false, true);
|
|
32
|
-
}
|
|
33
|
-
/** @ignore */
|
|
34
|
-
onNotNullValueSet() { }
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateTimeComponent, deps: [{ token: i1.DateService }, { token: i0.ChangeDetectorRef }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
36
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormDateTimeComponent, selector: "form-datetime", inputs: { JsDates: "JsDates" }, usesInheritance: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-datetime [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [Readonly]=\"Readonly\"\r\n [id]=\"GeneratedName\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-datetime>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ValidationDateTimeComponent, selector: "val-datetime", inputs: ["useJsDates"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
37
|
-
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateTimeComponent, decorators: [{
|
|
39
|
-
type: Component,
|
|
40
|
-
args: [{ selector: "form-datetime", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-datetime [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [Readonly]=\"Readonly\"\r\n [id]=\"GeneratedName\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-datetime>\r\n</ng-template>" }]
|
|
41
|
-
}], ctorParameters: () => [{ type: i1.DateService }, { type: i0.ChangeDetectorRef }, { type: i2.NgControl, decorators: [{
|
|
42
|
-
type: Optional
|
|
43
|
-
}, {
|
|
44
|
-
type: Self
|
|
45
|
-
}] }, { type: Array, decorators: [{
|
|
46
|
-
type: Optional
|
|
47
|
-
}, {
|
|
48
|
-
type: Inject,
|
|
49
|
-
args: [NG_VALIDATORS]
|
|
50
|
-
}] }, { type: i3.AccessControlService, decorators: [{
|
|
51
|
-
type: Optional
|
|
52
|
-
}] }, { type: i3.ComponentContext, decorators: [{
|
|
53
|
-
type: Optional
|
|
54
|
-
}] }, { type: undefined, decorators: [{
|
|
55
|
-
type: Optional
|
|
56
|
-
}, {
|
|
57
|
-
type: Inject,
|
|
58
|
-
args: [ACO_CUSTOMKEY]
|
|
59
|
-
}] }, { type: undefined, decorators: [{
|
|
60
|
-
type: Optional
|
|
61
|
-
}, {
|
|
62
|
-
type: Inject,
|
|
63
|
-
args: [FAV_DEBUG_MODE]
|
|
64
|
-
}] }], propDecorators: { JsDates: [{
|
|
65
|
-
type: Input
|
|
66
|
-
}] } });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWRhdGV0aW1lL2Zvcm0tZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1kYXRldGltZS9mb3JtLWRhdGV0aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQXdCLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVEsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3hHLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUFHdkQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUt0RCwyQkFBMkI7SUFDM0IsWUFBb0IsU0FBc0IsRUFBRSxHQUFzQixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFjLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBc0IsRUFBc0MsY0FBd0I7UUFDN1csS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRGxFLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFKMUMsd0hBQXdIO1FBQy9HLFlBQU8sR0FBWSxLQUFLLENBQUM7SUFLbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdGLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixLQUFXLENBQUM7K0dBdEJwQixxQkFBcUIsbUlBTW9HLGFBQWEsaUlBQStILGFBQWEsNkJBQThDLGNBQWM7bUdBTjlVLHFCQUFxQiw0R0NyQmxDLDB0R0EwQ2M7OzRGRHJCRCxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksZUFBZSxtQkFFUix1QkFBdUIsQ0FBQyxNQUFNOzswQkFRc0IsUUFBUTs7MEJBQUksSUFBSTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQTRCLFFBQVE7OzBCQUE4QixRQUFROzswQkFBa0MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBMkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjO3lDQUg5VSxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdCwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tICdAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZUZvcm1Db250cm9sIH0gZnJvbSBcIi4uL2Jhc2UtZm9ybS1jb250cm9sXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBkw6AgYWxsJ3V0ZW50ZSBsYSBwb3NzaWJpbGl0w6AgZGkgc2VsZXppb25hcmUgdW5hIGRhdGEgaW5zaWVtZSBhZCB1biBvcmFyaW9cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1kYXRldGltZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1kYXRldGltZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1EYXRlVGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIFxyXG4gICAgLyoqIFV0aWxpenphIGlsIERhdGUgZGkgSmF2YXNjcmlwdCBjb21lIG1vZGVsbG8gaW4gdXNjaXRhLiBJbCBtb2RlbGxvIGluIGVudHJhdGEgdmVycsOgIGNvbXVucXVlIHJpY29uZG90dG8gYSB1biBEYXlKcyAqL1xyXG4gICAgQElucHV0KCkgSnNEYXRlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlc0V4dHM6IERhdGVTZXJ2aWNlLCBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX1ZBTElEQVRPUlMpIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgQUNPX0NVU1RPTUtFWSA6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgRkFWX0RFQlVHX01PREUgOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbCA/IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZCh0aGlzLk1vZGVsLCBmYWxzZSwgdHJ1ZSkgOiAnJztcclxuICAgICAgICBzdXBlci5jaGFuZ2VkKG51bGwsIGZhbHNlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZCB7IH1cclxufSIsIjwhLS0gVWd1YWxlIGluIHR1dHRpIGkgY29tcG9uZW50aSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2Zvcm0nXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnaW5saW5lJ1wiIGNsYXNzPVwiYXBwLWlubGluZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TW9kZVRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkRpc3BsYXlNb2RlVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBFdmFsdWF0ZWRNb2RlbCB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiAqbmdJZj1cIkZvcm1MYXlvdXQgJiYgKCFEaXNwbGF5TW9kZSB8fCAoRGlzcGxheUxheW91dCAhPSAnaGlkZGVuJyAmJiBEaXNwbGF5Q29uZGl0aW9uKSlcIiBjbGFzcz1cInt7Rm9ybUdyb3VwQ2xhc3MgKyAoTGFzdCA/ICcgYXBwLW1hcmdpbi1ib3R0b20tMCBhcHAtbWFyZ2luLXJpZ2h0LTAgJyA6ICcnKSArIChEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIERpc3BsYXlNb2RlID8gKCcgYXBwLWlubGluZS1ibG9jayAnICsgKCFMYXN0ID8gJ2FwcC1tYXJnaW4tcmlnaHQtMTAnIDogJycpKSA6ICcgZm9ybS1ncm91cCByb3cnKX19XCI+XHJcblxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7KERpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtYm9sZCBhcHAtbWFyZ2luLWJvdHRvbS0wJyA6IExhYmVsQ29sV2lkdGgpICsgKERpc3BsYXlNb2RlID8gJyBhcHAtYm9sZCcgOiAnIG0tdC01JykgfX1cIj57e0xhYmVsfX17e1JlcXVpcmVkICYmICFEaXNwbGF5TW9kZSA/ICcqJyA6ICcnfX17e0xhYmVsID8gXCI6XCIgOiBcIlwifX08L2xhYmVsPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIElubGluZVNlcGFyYXRvciAhPSAnJ1wiPnt7SW5saW5lU2VwYXJhdG9yfX08L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7RGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1pbmxpbmUtYmxvY2snIDogSW5wdXRDb2xXaWR0aH19XCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxyXG4gICAgPHZhbC1kYXRldGltZSAgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBcclxuICAgICAgICAgICAgICAgICAgIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgIFtpZF09XCJHZW5lcmF0ZWROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJSZWFkb25seSA/ICdhcHAtYmctbGlnaHRncmV5JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgIFt1c2VKc0RhdGVzXT1cIkpzRGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAgICAgIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRpb25GYWlsZWRdPVwiRmFpbGVkVmFsaWRhdGlvbk1lc3NhZ2VcIj5cclxuICAgIDwvdmFsLWRhdGV0aW1lPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/forms";
|
|
5
|
-
import * as i2 from "../../validations/validation-input/validation-input.component";
|
|
6
|
-
/**
|
|
7
|
-
* Componente placeholder per la creazione dei form che rappresenta un blocchetto vuoto,
|
|
8
|
-
* al posto del quale possono poi comparire dei componenti form senza incasinare la grafica
|
|
9
|
-
*/
|
|
10
|
-
export class FormEmptyComponent {
|
|
11
|
-
constructor() {
|
|
12
|
-
/** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */
|
|
13
|
-
this.Last = false;
|
|
14
|
-
/** Classe extra per il form-group in cui viene wrappato l'input finto */
|
|
15
|
-
this.FormGroupClass = "";
|
|
16
|
-
/** Valore placeholder da mostrare */
|
|
17
|
-
this.PlaceholderModel = "Placeholder";
|
|
18
|
-
}
|
|
19
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormEmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
20
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormEmptyComponent, selector: "form-empty", inputs: { Last: "Last", FormGroupClass: "FormGroupClass" }, ngImport: i0, template: "<div class=\"form-group row app-hidden-view {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"col-md-4 m-t-5\">Placeholder:</label>\r\n <div class=\"col-md-8\">\r\n <val-input type=\"text\" [(ngModel)]=\"PlaceholderModel\" [ngModelOptions]=\"{standalone: true}\"></val-input>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ValidationInputComponent, selector: "val-input", inputs: ["Frozen", "Password", "showWarning", "warningTitle", "warningClass", "value", "Type", "maxlength", "minlength"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
21
|
-
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormEmptyComponent, decorators: [{
|
|
23
|
-
type: Component,
|
|
24
|
-
args: [{ selector: "form-empty", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group row app-hidden-view {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"col-md-4 m-t-5\">Placeholder:</label>\r\n <div class=\"col-md-8\">\r\n <val-input type=\"text\" [(ngModel)]=\"PlaceholderModel\" [ngModelOptions]=\"{standalone: true}\"></val-input>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>" }]
|
|
25
|
-
}], propDecorators: { Last: [{
|
|
26
|
-
type: Input
|
|
27
|
-
}], FormGroupClass: [{
|
|
28
|
-
type: Input
|
|
29
|
-
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbXB0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWVtcHR5L2Zvcm0tZW1wdHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1lbXB0eS9mb3JtLWVtcHR5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUUxRTs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sa0JBQWtCO0lBTC9CO1FBT0kseUZBQXlGO1FBQ2hGLFNBQUksR0FBWSxLQUFLLENBQUM7UUFFL0IseUVBQXlFO1FBQ2hFLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBRXJDLHFDQUFxQztRQUM5QixxQkFBZ0IsR0FBVyxhQUFhLENBQUM7S0FDbkQ7K0dBVlksa0JBQWtCO21HQUFsQixrQkFBa0IsOEdDWi9CLDRYQU1NOzs0RkRNTyxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0ksWUFBWSxtQkFFTCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUt0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcGxhY2Vob2xkZXIgcGVyIGxhIGNyZWF6aW9uZSBkZWkgZm9ybSBjaGUgcmFwcHJlc2VudGEgdW4gYmxvY2NoZXR0byB2dW90bywgXHJcbiAqIGFsIHBvc3RvIGRlbCBxdWFsZSBwb3Nzb25vIHBvaSBjb21wYXJpcmUgZGVpIGNvbXBvbmVudGkgZm9ybSBzZW56YSBpbmNhc2luYXJlIGxhIGdyYWZpY2FcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1lbXB0eVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1lbXB0eS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1FbXB0eUNvbXBvbmVudCB7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBsJ3VsdGltbyBjb21wb25lbnRlIGRpIHVuIGZvcm0gKHNlcnZlIHBlciByaW11b3ZlcmUgaWwgbWFyZ2luZSBmaW5hbGUpICovXHJcbiAgICBASW5wdXQoKSBMYXN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIENsYXNzZSBleHRyYSBwZXIgaWwgZm9ybS1ncm91cCBpbiBjdWkgdmllbmUgd3JhcHBhdG8gbCdpbnB1dCBmaW50byAqL1xyXG4gICAgQElucHV0KCkgRm9ybUdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBwbGFjZWhvbGRlciBkYSBtb3N0cmFyZSAqL1xyXG4gICAgcHVibGljIFBsYWNlaG9sZGVyTW9kZWw6IHN0cmluZyA9IFwiUGxhY2Vob2xkZXJcIjtcclxufSIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBhcHAtaGlkZGVuLXZpZXcge3tGb3JtR3JvdXBDbGFzc319XCIgW2NsYXNzLmFwcC1tYXJnaW4tYm90dG9tLTBdPVwiTGFzdFwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTQgbS10LTVcIj5QbGFjZWhvbGRlcjo8L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgPHZhbC1pbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiUGxhY2Vob2xkZXJNb2RlbFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj48L3ZhbC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Componente placeholder per la creazione dei form che rappresenta un blocchetto di erorre,
|
|
6
|
-
* al posto del quale possono poi comparire dei componenti form senza incasinare la grafica
|
|
7
|
-
*/
|
|
8
|
-
export class FormErrorComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
/** col-md-X per la label (Che in questoc aso è vuota) */
|
|
11
|
-
this.LabelColWidth = 4;
|
|
12
|
-
/** col-md-X per l'input (che in questo caso contiene il messaggio d'errore proiettato nell'HTML) */
|
|
13
|
-
this.InputColWidth = 8;
|
|
14
|
-
/** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */
|
|
15
|
-
this.Last = false;
|
|
16
|
-
/** Classe extra per il form-group in cui viene wrappato l'input */
|
|
17
|
-
this.FormGroupClass = "";
|
|
18
|
-
}
|
|
19
|
-
/** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y" */
|
|
20
|
-
set LabelInputRatio(input) {
|
|
21
|
-
var ratio = input.split(/\s/);
|
|
22
|
-
this.LabelColWidth = parseInt(ratio[0]);
|
|
23
|
-
this.InputColWidth = parseInt(ratio[1]);
|
|
24
|
-
}
|
|
25
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormErrorComponent, selector: "form-error", inputs: { LabelColWidth: "LabelColWidth", InputColWidth: "InputColWidth", Last: "Last", FormGroupClass: "FormGroupClass", LabelInputRatio: "LabelInputRatio" }, ngImport: i0, template: "<div class=\"form-group row {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"app-hidden-view col-md-{{LabelColWidth}} m-t-5\"></label>\r\n <span class=\"help-block text-danger col-md-{{InputColWidth}}\">\r\n <ng-content></ng-content>\r\n </span>\r\n <div class=\"clearfix\"></div>\r\n</div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27
|
-
}
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormErrorComponent, decorators: [{
|
|
29
|
-
type: Component,
|
|
30
|
-
args: [{ selector: "form-error", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group row {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"app-hidden-view col-md-{{LabelColWidth}} m-t-5\"></label>\r\n <span class=\"help-block text-danger col-md-{{InputColWidth}}\">\r\n <ng-content></ng-content>\r\n </span>\r\n <div class=\"clearfix\"></div>\r\n</div>" }]
|
|
31
|
-
}], propDecorators: { LabelColWidth: [{
|
|
32
|
-
type: Input
|
|
33
|
-
}], InputColWidth: [{
|
|
34
|
-
type: Input
|
|
35
|
-
}], Last: [{
|
|
36
|
-
type: Input
|
|
37
|
-
}], FormGroupClass: [{
|
|
38
|
-
type: Input
|
|
39
|
-
}], LabelInputRatio: [{
|
|
40
|
-
type: Input
|
|
41
|
-
}] } });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWVycm9yL2Zvcm0tZXJyb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1lcnJvci9mb3JtLWVycm9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUU7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQUwvQjtRQU9JLHlEQUF5RDtRQUNoRCxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUVuQyxvR0FBb0c7UUFDM0Ysa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFbkMseUZBQXlGO1FBQ2hGLFNBQUksR0FBWSxLQUFLLENBQUM7UUFFL0IsbUVBQW1FO1FBQzFELG1CQUFjLEdBQVcsRUFBRSxDQUFDO0tBUXhDO0lBTkcsMkhBQTJIO0lBQzNILElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQW5CUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrTkNaL0Isb1ZBTU07OzRGRE1PLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZLG1CQUVMLHVCQUF1QixDQUFDLE1BQU07OEJBS3RDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHTyxlQUFlO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBwbGFjZWhvbGRlciBwZXIgbGEgY3JlYXppb25lIGRlaSBmb3JtIGNoZSByYXBwcmVzZW50YSB1biBibG9jY2hldHRvIGRpIGVyb3JyZSwgXHJcbiAqIGFsIHBvc3RvIGRlbCBxdWFsZSBwb3Nzb25vIHBvaSBjb21wYXJpcmUgZGVpIGNvbXBvbmVudGkgZm9ybSBzZW56YSBpbmNhc2luYXJlIGxhIGdyYWZpY2FcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1lcnJvclwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1lcnJvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1FcnJvckNvbXBvbmVudCB7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsYSBsYWJlbCAoQ2hlIGluIHF1ZXN0b2MgYXNvIMOoIHZ1b3RhKSAqL1xyXG4gICAgQElucHV0KCkgTGFiZWxDb2xXaWR0aDogbnVtYmVyID0gNDtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGwnaW5wdXQgKGNoZSBpbiBxdWVzdG8gY2FzbyBjb250aWVuZSBpbCBtZXNzYWdnaW8gZCdlcnJvcmUgcHJvaWV0dGF0byBuZWxsJ0hUTUwpICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggbCd1bHRpbW8gY29tcG9uZW50ZSBkaSB1biBmb3JtIChzZXJ2ZSBwZXIgcmltdW92ZXJlIGlsIG1hcmdpbmUgZmluYWxlKSAqL1xyXG4gICAgQElucHV0KCkgTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBDbGFzc2UgZXh0cmEgcGVyIGlsIGZvcm0tZ3JvdXAgaW4gY3VpIHZpZW5lIHdyYXBwYXRvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1Hcm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCBMYWJlbENvbFdpZHRoIGUgSW5wdXRDb2xXaWR0aCwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyB7e0Zvcm1Hcm91cENsYXNzfX1cIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJhcHAtaGlkZGVuLXZpZXcgY29sLW1kLXt7TGFiZWxDb2xXaWR0aH19IG0tdC01XCI+PC9sYWJlbD5cclxuICAgIDxzcGFuIGNsYXNzPVwiaGVscC1ibG9jayB0ZXh0LWRhbmdlciBjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { LocalizationService } from "@esfaenza/localizations";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Classe di localizzazione per il componente **FormFileComponent**
|
|
6
|
-
*/
|
|
7
|
-
export class FormFileComponentLoc extends LocalizationService {
|
|
8
|
-
/**
|
|
9
|
-
* @ignore
|
|
10
|
-
*/
|
|
11
|
-
constructor(injector) {
|
|
12
|
-
super(injector);
|
|
13
|
-
super.set("en->it", "Select a file", ["Seleziona un file"]);
|
|
14
|
-
super.set("en->it", "Files Selected", ["File Selezionati"]);
|
|
15
|
-
}
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponentLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
17
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponentLoc }); }
|
|
18
|
-
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponentLoc, decorators: [{
|
|
20
|
-
type: Injectable
|
|
21
|
-
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWxlLmNvbXBvbmVudC5sb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWZpbGUvZm9ybS1maWxlLmNvbXBvbmVudC5sb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsbUJBQW1CO0lBRXpEOztPQUVHO0lBQ0gsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7K0dBVlEsb0JBQW9CO21IQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgZGkgbG9jYWxpenphemlvbmUgcGVyIGlsIGNvbXBvbmVudGUgKipGb3JtRmlsZUNvbXBvbmVudCoqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBGb3JtRmlsZUNvbXBvbmVudExvYyBleHRlbmRzIExvY2FsaXphdGlvblNlcnZpY2Uge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJTZWxlY3QgYSBmaWxlXCIsIFtcIlNlbGV6aW9uYSB1biBmaWxlXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJGaWxlcyBTZWxlY3RlZFwiLCBbXCJGaWxlIFNlbGV6aW9uYXRpXCJdKTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, ViewChild } from "@angular/core";
|
|
3
|
-
import { NG_VALIDATORS } from "@angular/forms";
|
|
4
|
-
import { LocalizationService } from "@esfaenza/localizations";
|
|
5
|
-
// Applicazione
|
|
6
|
-
import { BaseFormControl } from "../base-form-control";
|
|
7
|
-
// Modelli
|
|
8
|
-
import { AppFile } from "../../models/AppFile";
|
|
9
|
-
// Configurazioni
|
|
10
|
-
import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
|
|
11
|
-
import { FormFileComponentLoc } from "./form-file.component.loc";
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@esfaenza/extensions";
|
|
14
|
-
import * as i2 from "@angular/forms";
|
|
15
|
-
import * as i3 from "@esfaenza/access-control";
|
|
16
|
-
import * as i4 from "@esfaenza/localizations";
|
|
17
|
-
import * as i5 from "@angular/common";
|
|
18
|
-
/** Componente che permette all'utente di caricare/scaricare un file all'interno di un campo Input */
|
|
19
|
-
export class FormFileComponent extends BaseFormControl {
|
|
20
|
-
/** @ignore Costruttore */
|
|
21
|
-
constructor(msgs, cdr, utiExts, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, lc, FAV_DEBUG_MODE) {
|
|
22
|
-
super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
|
|
23
|
-
this.msgs = msgs;
|
|
24
|
-
this.utiExts = utiExts;
|
|
25
|
-
this.lc = lc;
|
|
26
|
-
/** Permette di caricare file multipli */
|
|
27
|
-
this.Multiple = false;
|
|
28
|
-
/** Permette di scaricare l'eventuale file selezionato */
|
|
29
|
-
this.AllowDownload = true;
|
|
30
|
-
/** Controllo sulla dimensione di ogni singolo file in Byte. 0 -> nessun limite */
|
|
31
|
-
this.MaxSize = 0;
|
|
32
|
-
/** Sportivo */
|
|
33
|
-
this.FancyMode = false;
|
|
34
|
-
/** Legge sempre il contenuto del file e ne estrapola il base64 */
|
|
35
|
-
this.ReadFile = false;
|
|
36
|
-
//Per questo componente non posso permettermi che il modello sia nullo
|
|
37
|
-
this.Model = new AppFile();
|
|
38
|
-
}
|
|
39
|
-
ngOnInit() {
|
|
40
|
-
super.ngOnInit();
|
|
41
|
-
;
|
|
42
|
-
if (this._validators) {
|
|
43
|
-
this._validators.push(this);
|
|
44
|
-
this.ngControl.control.setValidators(this._validators);
|
|
45
|
-
this.ngControl.control.updateValueAndValidity();
|
|
46
|
-
}
|
|
47
|
-
if (this.ReadFile && this.Multiple)
|
|
48
|
-
throw new Error("Impossibile utilizzare ReadFile e Multiple nello stesso form-file.");
|
|
49
|
-
}
|
|
50
|
-
validate(control) {
|
|
51
|
-
if (this.Required && !this.Model.filename)
|
|
52
|
-
return { required: true };
|
|
53
|
-
else
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
/** @ignore */
|
|
57
|
-
writeValue(obj) {
|
|
58
|
-
var model = obj == null ? new AppFile() : obj;
|
|
59
|
-
this.EvaluatedModel = model.filename;
|
|
60
|
-
super.writeValue(model);
|
|
61
|
-
if (obj == null)
|
|
62
|
-
this.changed();
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Helper per gestire la modifica del file attualmente bindato
|
|
66
|
-
*
|
|
67
|
-
* @param {boolean} clear Indica se bisogna svuotare l'input o meno
|
|
68
|
-
*/
|
|
69
|
-
fileChange(clear = false) {
|
|
70
|
-
let files = [];
|
|
71
|
-
let model = this.Model;
|
|
72
|
-
let ne = this.inputEl.nativeElement;
|
|
73
|
-
if (clear) {
|
|
74
|
-
model.filename = "";
|
|
75
|
-
ne.value = "";
|
|
76
|
-
model.fileb64 = "";
|
|
77
|
-
model.nativefiles = [];
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
for (let i = 0; i < ne.files.length; i++) {
|
|
81
|
-
let file = ne.files.item(i);
|
|
82
|
-
if (this.MaxSize > 0 && file.size > this.MaxSize) {
|
|
83
|
-
this.msgs.simpleError(`Il file ${file.name} eccede la dimensione massima ${this.MaxSize} B`);
|
|
84
|
-
this.fileChange(true);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
files.push(file);
|
|
88
|
-
}
|
|
89
|
-
// Modalità Upload Singolo File
|
|
90
|
-
if (ne.files.length == 1) {
|
|
91
|
-
let fileUploaded = ne.files[0];
|
|
92
|
-
model.filename = fileUploaded.name;
|
|
93
|
-
if (this.ReadFile) {
|
|
94
|
-
let reader = new FileReader();
|
|
95
|
-
reader.readAsDataURL(fileUploaded);
|
|
96
|
-
reader.onload = () => {
|
|
97
|
-
let fileSource = reader.result.toString();
|
|
98
|
-
let fileSourceSegments = fileSource.split(',');
|
|
99
|
-
model.fileb64 = fileSourceSegments[fileSourceSegments.length - 1];
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Modalità Upload Multiple File
|
|
104
|
-
if (ne.files.length > 1)
|
|
105
|
-
model.filename = ne.files.length + " " + this.lc.loc("Files Selected");
|
|
106
|
-
model.nativefiles = files;
|
|
107
|
-
model.fileb64 = null;
|
|
108
|
-
}
|
|
109
|
-
this.EvaluatedModel = model.filename;
|
|
110
|
-
this.changed(null, true, true);
|
|
111
|
-
}
|
|
112
|
-
/** Permette di scaricare l'eventuale file selezionato */
|
|
113
|
-
onDownloadFile() {
|
|
114
|
-
let model = this.Model;
|
|
115
|
-
this.utiExts.saveFile(model.fileb64, model.filename);
|
|
116
|
-
}
|
|
117
|
-
/** @ignore */
|
|
118
|
-
onNotNullValueSet() { }
|
|
119
|
-
// FancyMode - Drag Over
|
|
120
|
-
onFileDragOver(event) {
|
|
121
|
-
event.preventDefault();
|
|
122
|
-
event.stopPropagation();
|
|
123
|
-
}
|
|
124
|
-
// FancyMode - File Dropped
|
|
125
|
-
onFileDropped(event) {
|
|
126
|
-
event.preventDefault();
|
|
127
|
-
event.stopPropagation();
|
|
128
|
-
let ne = this.inputEl.nativeElement;
|
|
129
|
-
ne.files = event.dataTransfer?.files;
|
|
130
|
-
this.fileChange();
|
|
131
|
-
}
|
|
132
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponent, deps: [{ token: i1.MessageService }, { token: i0.ChangeDetectorRef }, { token: i1.UtilityService }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: i4.LocalizationService }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFileComponent, selector: "form-file", inputs: { Multiple: "Multiple", AllowDownload: "AllowDownload", MaxSize: "MaxSize", FancyMode: "FancyMode", ReadFile: "ReadFile" }, providers: [{ provide: LocalizationService, useClass: FormFileComponentLoc }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--Per la DisplayMode, a differenza di TUTTI gli altri forms, ho dovuto inserire \"Model?.filename\", in quanto \r\nEvaluatedModel \u00E8 una stringa valorizzata col modello AppFile, e non posso farci ragionamenti sopra a causa del compilatore-->\r\n\r\n<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FancyMode && !FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"!FancyMode && FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"Model.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Fancy Mode-->\r\n<div *ngIf=\"FancyMode\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{GeneratedName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{Model.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"Model.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" class=\"app-pointer file-download-btn\" (click)=\"onDownloadFile(); $event.stopPropagation(); false;\">\r\n <span class=\"file-download-btn-text\">Download <i class=\"fa fa-download\"></i></span>\r\n </div>\r\n </label>\r\n</div>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
134
|
-
}
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponent, decorators: [{
|
|
136
|
-
type: Component,
|
|
137
|
-
args: [{ selector: "form-file", providers: [{ provide: LocalizationService, useClass: FormFileComponentLoc }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--Per la DisplayMode, a differenza di TUTTI gli altri forms, ho dovuto inserire \"Model?.filename\", in quanto \r\nEvaluatedModel \u00E8 una stringa valorizzata col modello AppFile, e non posso farci ragionamenti sopra a causa del compilatore-->\r\n\r\n<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FancyMode && !FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"!FancyMode && FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"Model.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Fancy Mode-->\r\n<div *ngIf=\"FancyMode\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{GeneratedName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{Model.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"Model.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" class=\"app-pointer file-download-btn\" (click)=\"onDownloadFile(); $event.stopPropagation(); false;\">\r\n <span class=\"file-download-btn-text\">Download <i class=\"fa fa-download\"></i></span>\r\n </div>\r\n </label>\r\n</div>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"] }]
|
|
138
|
-
}], ctorParameters: () => [{ type: i1.MessageService }, { type: i0.ChangeDetectorRef }, { type: i1.UtilityService }, { type: i2.NgControl, decorators: [{
|
|
139
|
-
type: Optional
|
|
140
|
-
}, {
|
|
141
|
-
type: Self
|
|
142
|
-
}] }, { type: Array, decorators: [{
|
|
143
|
-
type: Optional
|
|
144
|
-
}, {
|
|
145
|
-
type: Inject,
|
|
146
|
-
args: [NG_VALIDATORS]
|
|
147
|
-
}] }, { type: i3.AccessControlService, decorators: [{
|
|
148
|
-
type: Optional
|
|
149
|
-
}] }, { type: i3.ComponentContext, decorators: [{
|
|
150
|
-
type: Optional
|
|
151
|
-
}] }, { type: undefined, decorators: [{
|
|
152
|
-
type: Optional
|
|
153
|
-
}, {
|
|
154
|
-
type: Inject,
|
|
155
|
-
args: [ACO_CUSTOMKEY]
|
|
156
|
-
}] }, { type: i4.LocalizationService }, { type: undefined, decorators: [{
|
|
157
|
-
type: Optional
|
|
158
|
-
}, {
|
|
159
|
-
type: Inject,
|
|
160
|
-
args: [FAV_DEBUG_MODE]
|
|
161
|
-
}] }], propDecorators: { Multiple: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], AllowDownload: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}], MaxSize: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], FancyMode: [{
|
|
168
|
-
type: Input
|
|
169
|
-
}], ReadFile: [{
|
|
170
|
-
type: Input
|
|
171
|
-
}], inputEl: [{
|
|
172
|
-
type: ViewChild,
|
|
173
|
-
args: ["fileInput", { static: false }]
|
|
174
|
-
}] } });
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zLWFuZC12YWxpZGF0aW9ucy9zcmMvbGliL2Zvcm1zL2Zvcm0tZmlsZS9mb3JtLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1maWxlL2Zvcm0tZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQXdCLGFBQWEsRUFBMkQsTUFBTSxnQkFBZ0IsQ0FBQztBQUk5SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc5RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELFVBQVU7QUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBRWpFLHFHQUFxRztBQVFyRyxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQW9CbEQsMkJBQTJCO0lBQzNCLFlBQW9CLElBQW9CLEVBQUUsR0FBc0IsRUFBVSxPQUF1QixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFjLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBcUIsRUFBUyxFQUF1QixFQUFzQyxjQUF3QjtR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QUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLHVKQ3RCakYsMGdMQWdFTTs7NEZEckNPLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDSSxXQUFXLGFBQ1YsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxtQkFHNUQsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUJxRCxRQUFROzswQkFBSSxJQUFJOzswQkFBMEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBNEIsUUFBUTs7MEJBQThCLFFBQVE7OzBCQUFrQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUEwRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7eUNBbEI1WSxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHcUMsT0FBTztzQkFBakQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCwgSG9zdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wsIFZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG4vLyBFc2ZhZW56YVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSwgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gJ0Blc2ZhZW56YS9hY2Nlc3MtY29udHJvbCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZUZvcm1Db250cm9sIH0gZnJvbSBcIi4uL2Jhc2UtZm9ybS1jb250cm9sXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFwcEZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL0FwcEZpbGVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgRm9ybUZpbGVDb21wb25lbnRMb2MgfSBmcm9tIFwiLi9mb3JtLWZpbGUuY29tcG9uZW50LmxvY1wiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgY2hlIHBlcm1ldHRlIGFsbCd1dGVudGUgZGkgY2FyaWNhcmUvc2NhcmljYXJlIHVuIGZpbGUgYWxsJ2ludGVybm8gZGkgdW4gY2FtcG8gSW5wdXQgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJmb3JtLWZpbGVcIixcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEZvcm1GaWxlQ29tcG9uZW50TG9jIH1dLFxyXG4gICAgc3R5bGVVcmxzOiBbXCJmb3JtLWZpbGUuY29tcG9uZW50LmNzc1wiXSxcclxuICAgIHRlbXBsYXRlVXJsOiBcImZvcm0tZmlsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1GaWxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1Db250cm9sIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIGNhcmljYXJlIGZpbGUgbXVsdGlwbGkgKi9cclxuICAgIEBJbnB1dCgpIE11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBsJ2V2ZW50dWFsZSBmaWxlIHNlbGV6aW9uYXRvICovXHJcbiAgICBASW5wdXQoKSBBbGxvd0Rvd25sb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQ29udHJvbGxvIHN1bGxhIGRpbWVuc2lvbmUgZGkgb2duaSBzaW5nb2xvIGZpbGUgaW4gQnl0ZS4gMCAtPiBuZXNzdW4gbGltaXRlICovXHJcbiAgICBASW5wdXQoKSBNYXhTaXplOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8qKiBTcG9ydGl2byAqL1xyXG4gICAgQElucHV0KCkgRmFuY3lNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIExlZ2dlIHNlbXByZSBpbCBjb250ZW51dG8gZGVsIGZpbGUgZSBuZSBlc3RyYXBvbGEgaWwgYmFzZTY0ICovXHJcbiAgICBASW5wdXQoKSBSZWFkRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnZWxlbWVudG8gaW5wdXQgZGkgdGlwbyBmaWxlICovXHJcbiAgICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtc2dzOiBNZXNzYWdlU2VydmljZSwgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgQE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBBcHBDb250ZXh0OiBDb21wb25lbnRDb250ZXh0LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDT19DVVNUT01LRVkpIEFDT19DVVNUT01LRVk6IHN0cmluZywgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBAT3B0aW9uYWwoKSBASW5qZWN0KEZBVl9ERUJVR19NT0RFKSBGQVZfREVCVUdfTU9ERSA6IGJvb2xlYW4pIHtcclxuICAgICAgICBzdXBlcihjZHIsIG5nQ29udHJvbCwgX3ZhbGlkYXRvcnMsIGFjLCBBcHBDb250ZXh0LCBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSk7XHJcblxyXG4gICAgICAgIC8vUGVyIHF1ZXN0byBjb21wb25lbnRlIG5vbiBwb3NzbyBwZXJtZXR0ZXJtaSBjaGUgaWwgbW9kZWxsbyBzaWEgbnVsbG9cclxuICAgICAgICB0aGlzLk1vZGVsID0gbmV3IEFwcEZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpOztcclxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLlJlYWRGaWxlICYmIHRoaXMuTXVsdGlwbGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIHV0aWxpenphcmUgUmVhZEZpbGUgZSBNdWx0aXBsZSBuZWxsbyBzdGVzc28gZm9ybS1maWxlLlwiKTsgXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICAgICAgaWYgKHRoaXMuUmVxdWlyZWQgJiYgISg8QXBwRmlsZT50aGlzLk1vZGVsKS5maWxlbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfVxyXG4gICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBBcHBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIG1vZGVsID0gb2JqID09IG51bGwgPyBuZXcgQXBwRmlsZSgpIDogb2JqO1xyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBtb2RlbC5maWxlbmFtZTtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG1vZGVsKTtcclxuXHJcbiAgICAgICAgaWYob2JqID09IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIG1vZGlmaWNhIGRlbCBmaWxlIGF0dHVhbG1lbnRlIGJpbmRhdG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciBJbmRpY2Egc2UgYmlzb2duYSBzdnVvdGFyZSBsJ2lucHV0IG8gbWVubyBcclxuICAgICAqL1xyXG4gICAgZmlsZUNoYW5nZShjbGVhcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIG5lLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgbW9kZWwuZmlsZWI2NCA9IFwiXCI7XHJcbiAgICAgICAgICAgIG1vZGVsLm5hdGl2ZWZpbGVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5lLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IG5lLmZpbGVzLml0ZW0oaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5NYXhTaXplID4gMCAmJiBmaWxlLnNpemUgPiB0aGlzLk1heFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ3Muc2ltcGxlRXJyb3IoYElsIGZpbGUgJHtmaWxlLm5hbWV9IGVjY2VkZSBsYSBkaW1lbnNpb25lIG1hc3NpbWEgJHt0aGlzLk1heFNpemV9IEJgKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBNb2RhbGl0w6AgVXBsb2FkIFNpbmdvbG8gRmlsZVxyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkZWQgPSBuZS5maWxlc1swXTtcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gZmlsZVVwbG9hZGVkLm5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5SZWFkRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVVcGxvYWRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVTb3VyY2UgPSByZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlU291cmNlU2VnbWVudHMgPSBmaWxlU291cmNlLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5maWxlYjY0ID0gZmlsZVNvdXJjZVNlZ21lbnRzW2ZpbGVTb3VyY2VTZWdtZW50cy5sZW5ndGggLTFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE1vZGFsaXTDoCBVcGxvYWQgTXVsdGlwbGUgRmlsZVxyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXMubGVuZ3RoICsgXCIgXCIgKyB0aGlzLmxjLmxvYyhcIkZpbGVzIFNlbGVjdGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgbW9kZWwubmF0aXZlZmlsZXMgPSBmaWxlcztcclxuICAgICAgICAgICAgbW9kZWwuZmlsZWI2NCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gbW9kZWwuZmlsZW5hbWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKG51bGwsIHRydWUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzY2FyaWNhcmUgbCdldmVudHVhbGUgZmlsZSBzZWxlemlvbmF0byAqL1xyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgbGV0IG1vZGVsID0gKDxBcHBGaWxlPnRoaXMuTW9kZWwpO1xyXG4gICAgICAgIHRoaXMudXRpRXh0cy5zYXZlRmlsZShtb2RlbC5maWxlYjY0LCBtb2RlbC5maWxlbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG9uTm90TnVsbFZhbHVlU2V0KCk6IHZvaWQgeyB9XHJcblxyXG4gICAgLy8gRmFuY3lNb2RlIC0gRHJhZyBPdmVyXHJcbiAgICBvbkZpbGVEcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYW5jeU1vZGUgLSBGaWxlIERyb3BwZWRcclxuICAgIG9uRmlsZURyb3BwZWQoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgbmUuZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZSgpO1xyXG4gICAgfVxyXG59IiwiPCEtLVBlciBsYSBEaXNwbGF5TW9kZSwgYSBkaWZmZXJlbnphIGRpIFRVVFRJIGdsaSBhbHRyaSBmb3JtcywgaG8gZG92dXRvIGluc2VyaXJlIFwiTW9kZWw/LmZpbGVuYW1lXCIsIGluIHF1YW50byBcclxuRXZhbHVhdGVkTW9kZWwgw6ggdW5hIHN0cmluZ2EgdmFsb3JpenphdGEgY29sIG1vZGVsbG8gQXBwRmlsZSwgZSBub24gcG9zc28gZmFyY2kgcmFnaW9uYW1lbnRpIHNvcHJhIGEgY2F1c2EgZGVsIGNvbXBpbGF0b3JlLS0+XHJcblxyXG48IS0tIFVndWFsZSBpbiB0dXR0aSBpIGNvbXBvbmVudGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIUZhbmN5TW9kZSAmJiAhRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2Zvcm0nXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWxpbmtcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZTtcIiAqbmdJZj1cIk1vZGVsPy5maWxlbmFtZVwiIChjbGljayk9XCJvbkRvd25sb2FkRmlsZSgpXCI+e3sgTW9kZWw/LmZpbGVuYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFNb2RlbD8uZmlsZW5hbWVcIj5OL0E8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2lubGluZSdcIiBjbGFzcz1cImFwcC1pbmxpbmVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtbGlua1wiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lO1wiICpuZ0lmPVwiTW9kZWw/LmZpbGVuYW1lXCIgKGNsaWNrKT1cIm9uRG93bmxvYWRGaWxlKClcIj57eyBNb2RlbD8uZmlsZW5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIU1vZGVsPy5maWxlbmFtZVwiPk4vQTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIUZhbmN5TW9kZSAmJiBGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCIgY2xhc3M9XCJ7e0Zvcm1Hcm91cENsYXNzICsgKExhc3QgPyAnIGFwcC1tYXJnaW4tYm90dG9tLTAgYXBwLW1hcmdpbi1yaWdodC0wICcgOiAnJykgKyAoRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBEaXNwbGF5TW9kZSA/ICgnIGFwcC1pbmxpbmUtYmxvY2sgJyArICghTGFzdCA/ICdhcHAtbWFyZ2luLXJpZ2h0LTEwJyA6ICcnKSkgOiAnIGZvcm0tZ3JvdXAgcm93Jyl9fVwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7KERpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtYm9sZCBhcHAtbWFyZ2luLWJvdHRvbS0wJyA6IExhYmVsQ29sV2lkdGgpICsgKERpc3BsYXlNb2RlID8gJyBhcHAtYm9sZCcgOiAnIG0tdC01JykgfX1cIj57e0xhYmVsfX17e1JlcXVpcmVkICYmICFEaXNwbGF5TW9kZSA/ICcqJyA6ICcnfX17e0xhYmVsID8gXCI6XCIgOiBcIlwifX08L2xhYmVsPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIElubGluZVNlcGFyYXRvciAhPSAnJ1wiPnt7SW5saW5lU2VwYXJhdG9yfX08L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7RGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1pbmxpbmUtYmxvY2snIDogSW5wdXRDb2xXaWR0aH19XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWxpbmtcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZTtcIiAqbmdJZj1cIk1vZGVsPy5maWxlbmFtZVwiIChjbGljayk9XCJvbkRvd25sb2FkRmlsZSgpXCI+e3sgTW9kZWw/LmZpbGVuYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFNb2RlbD8uZmlsZW5hbWVcIj5OL0E8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKClcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgI2ZpbGVJbnB1dCBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0biBhcHAtcG9pbnRlclwiIFttdWx0aXBsZV09XCJNdWx0aXBsZSA/IHRydWUgOiBudWxsXCIgLz5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbY2xhc3MuZnJtLXBhZGRpbmctbGVmdC0yMl09XCJBbGxvd0Rvd25sb2FkICYmIE1vZGVsLmZpbGVuYW1lICYmIE1vZGVsLmZpbGViNjRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjaGVja2luZy1maWVsZFwiIHBsYWNlaG9sZGVyPVwie3tQbGFjZWhvbGRlciB8fCAoJ1NlbGVjdCBhIGZpbGUnIHwgbG9jYWxpemUgOiBsYyl9fS4uLlwiIFsobmdNb2RlbCldPVwiTW9kZWwuZmlsZW5hbWVcIiBuYW1lPVwiZHNmaWxlX3t7R2VuZXJhdGVkTmFtZX19XCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGEgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBhcHAtcG9pbnRlciBhcHAtaW5wdXQtaWNvblwiICpuZ0lmPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbC5maWxlbmFtZSAmJiBNb2RlbC5maWxlYjY0XCIgKGNsaWNrKT1cIm9uRG93bmxvYWRGaWxlKClcIj48L2E+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBkZWxldGUtZmlsZVwiIChjbGljayk9XCJmaWxlQ2hhbmdlKHRydWUpXCIgKm5nSWY9XCJNb2RlbC5maWxlbmFtZVwiPjwvaT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1maWxlLXVwbG9hZFwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1GYW5jeSBNb2RlLS0+XHJcbjxkaXYgKm5nSWY9XCJGYW5jeU1vZGVcIiAoZHJvcCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIiAoZHJhZ292ZXIpPVwib25GaWxlRHJhZ092ZXIoJGV2ZW50KVwiPlxyXG4gICAgPCEtLURyb3AtLT5cclxuICAgIDxsYWJlbCBmb3I9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGNsYXNzPVwiZHJvcC1jb250YWluZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtdGl0bGVcIj57e0xhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbmFtZS1jb250YWluZXJcIj57e01vZGVsLmZpbGVuYW1lIHx8ICdOZXNzdW4gZmlsZSBzZWxlemlvbmF0byd9fTwvZGl2PlxyXG4gICAgICAgIDwhLS1IaWRkZW4gRm9ybXMtLT5cclxuICAgICAgICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKClcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgI2ZpbGVJbnB1dCBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0biBhcHAtcG9pbnRlclwiIFttdWx0aXBsZV09XCJNdWx0aXBsZSA/IHRydWUgOiBudWxsXCIgLz5cclxuICAgICAgICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJ0ZXh0XCIgW2NsYXNzLmZybS1wYWRkaW5nLWxlZnQtMjJdPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbC5maWxlbmFtZSAmJiBNb2RlbC5maWxlYjY0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY2hlY2tpbmctZmllbGRcIiBcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1BsYWNlaG9sZGVyIHx8ICgnU2VsZWN0IGEgZmlsZScgfCBsb2NhbGl6ZSA6IGxjKX19Li4uXCIgWyhuZ01vZGVsKV09XCJNb2RlbC5maWxlbmFtZVwiIG5hbWU9XCJkc2ZpbGVfe3tHZW5lcmF0ZWROYW1lfX1cIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICA8IS0tQ2xlYW4tLT5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGZpbGUtZGVsZXRlLWJ0blwiIChjbGljayk9XCJmaWxlQ2hhbmdlKHRydWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZhbHNlO1wiICpuZ0lmPVwiTW9kZWwuZmlsZW5hbWVcIj48L2k+XHJcbiAgICAgICAgPCEtLURvd25sb2FkLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWwuZmlsZW5hbWUgJiYgTW9kZWwuZmlsZWI2NFwiIGNsYXNzPVwiYXBwLXBvaW50ZXIgZmlsZS1kb3dubG9hZC1idG5cIiAoY2xpY2spPVwib25Eb3dubG9hZEZpbGUoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmYWxzZTtcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLWRvd25sb2FkLWJ0bi10ZXh0XCI+RG93bmxvYWQgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2xhYmVsPlxyXG48L2Rpdj4iXX0=
|