@firestitch/form 12.5.2 → 13.1.0
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/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +22 -23
- package/app/components/form-dialog-actions/index.d.ts +1 -0
- package/app/components/form-template/form-template.component.d.ts +13 -0
- package/app/components/form-template/index.d.ts +1 -0
- package/app/components/form-template-outlet/form-template-outlet.component.d.ts +13 -0
- package/app/components/form-template-outlet/index.d.ts +1 -0
- package/app/components/index.d.ts +3 -0
- package/app/consts/error-messages.const.d.ts +19 -19
- package/app/directives/button.directive.d.ts +35 -35
- package/app/directives/form/form.directive.d.ts +123 -127
- package/app/directives/form/index.d.ts +1 -0
- package/app/directives/form-dialog-close.directive.d.ts +16 -12
- package/app/directives/form-template.directive.d.ts +10 -0
- package/app/directives/index.d.ts +6 -2
- package/app/directives/submit-button.directive.d.ts +6 -6
- package/app/directives/validators/compare.directive.d.ts +15 -15
- package/app/directives/validators/control.directive.d.ts +49 -49
- package/app/directives/validators/daterange.directive.d.ts +13 -13
- package/app/directives/validators/email.directive.d.ts +13 -13
- package/app/directives/validators/emails.directive.d.ts +13 -13
- package/app/directives/validators/function.directive.d.ts +15 -15
- package/app/directives/validators/greater.directive.d.ts +13 -13
- package/app/directives/validators/index.d.ts +20 -0
- package/app/directives/validators/integer.directive.d.ts +13 -13
- package/app/directives/validators/lesser.directive.d.ts +13 -13
- package/app/directives/validators/max.directive.d.ts +13 -13
- package/app/directives/validators/maxlength.directive.d.ts +13 -13
- package/app/directives/validators/min.directive.d.ts +13 -13
- package/app/directives/validators/minlength.directive.d.ts +13 -13
- package/app/directives/validators/no-fs-validators.directive.d.ts +14 -14
- package/app/directives/validators/numeric.directive.d.ts +13 -13
- package/app/directives/validators/pattern.directive.d.ts +13 -13
- package/app/directives/validators/phone.directive.d.ts +13 -13
- package/app/directives/validators/required.directive.d.ts +16 -16
- package/app/directives/validators/url.directive.d.ts +14 -14
- package/app/directives/validators/validate.directive.d.ts +15 -15
- package/app/enums/confirm-result.d.ts +7 -7
- package/app/enums/form-status.d.ts +10 -10
- package/app/fs-form.module.d.ts +40 -37
- package/app/guards/form-deactivate.guard.d.ts +14 -14
- package/app/helpers/confirm-result-continue.d.ts +1 -1
- package/app/helpers/confirm-unsaved.d.ts +5 -5
- package/app/helpers/get-active-route.d.ts +2 -2
- package/app/helpers/get-form-errors.d.ts +2 -2
- package/app/helpers/index.d.ts +2 -2
- package/app/helpers/is-enabled.d.ts +1 -1
- package/app/interfaces/async-validator.d.ts +14 -14
- package/app/interfaces/confirm-config.d.ts +7 -7
- package/app/interfaces/confirm-tab-group.d.ts +10 -10
- package/app/interfaces/index.d.ts +4 -4
- package/app/interfaces/submit-event.d.ts +6 -6
- package/app/interfaces/submitted-event.d.ts +7 -7
- package/app/interfaces/validator.d.ts +13 -13
- package/app/providers/validate-messages.provider.d.ts +25 -25
- package/app/services/fsform.service.d.ts +16 -16
- package/app/validators/validators.d.ts +12 -12
- package/esm2020/app/components/form-dialog-actions/form-dialog-actions.component.mjs +75 -0
- package/esm2020/app/components/form-dialog-actions/index.mjs +2 -0
- package/esm2020/app/components/form-template/form-template.component.mjs +31 -0
- package/esm2020/app/components/form-template/index.mjs +2 -0
- package/esm2020/app/components/form-template-outlet/form-template-outlet.component.mjs +30 -0
- package/esm2020/app/components/form-template-outlet/index.mjs +2 -0
- package/esm2020/app/components/index.mjs +4 -0
- package/{esm2015/app/consts/error-messages.const.js → esm2020/app/consts/error-messages.const.mjs} +19 -19
- package/{esm2015/app/directives/button.directive.js → esm2020/app/directives/button.directive.mjs} +152 -153
- package/esm2020/app/directives/form/form.directive.mjs +686 -0
- package/esm2020/app/directives/form/index.mjs +2 -0
- package/esm2020/app/directives/form-dialog-close.directive.mjs +54 -0
- package/esm2020/app/directives/form-template.directive.mjs +20 -0
- package/esm2020/app/directives/index.mjs +7 -0
- package/{esm2015/app/directives/submit-button.directive.js → esm2020/app/directives/submit-button.directive.mjs} +14 -14
- package/{esm2015/app/directives/validators/compare.directive.js → esm2020/app/directives/validators/compare.directive.mjs} +49 -49
- package/esm2020/app/directives/validators/control.directive.mjs +259 -0
- package/{esm2015/app/directives/validators/daterange.directive.js → esm2020/app/directives/validators/daterange.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/email.directive.js → esm2020/app/directives/validators/email.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/emails.directive.js → esm2020/app/directives/validators/emails.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/function.directive.js → esm2020/app/directives/validators/function.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/greater.directive.js → esm2020/app/directives/validators/greater.directive.mjs} +40 -40
- package/esm2020/app/directives/validators/index.mjs +21 -0
- package/{esm2015/app/directives/validators/integer.directive.js → esm2020/app/directives/validators/integer.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/lesser.directive.js → esm2020/app/directives/validators/lesser.directive.mjs} +40 -40
- package/{esm2015/app/directives/validators/max.directive.js → esm2020/app/directives/validators/max.directive.mjs} +36 -36
- package/{esm2015/app/directives/validators/maxlength.directive.js → esm2020/app/directives/validators/maxlength.directive.mjs} +35 -35
- package/{esm2015/app/directives/validators/min.directive.js → esm2020/app/directives/validators/min.directive.mjs} +36 -36
- package/{esm2015/app/directives/validators/minlength.directive.js → esm2020/app/directives/validators/minlength.directive.mjs} +35 -35
- package/{esm2015/app/directives/validators/no-fs-validators.directive.js → esm2020/app/directives/validators/no-fs-validators.directive.mjs} +52 -52
- package/{esm2015/app/directives/validators/numeric.directive.js → esm2020/app/directives/validators/numeric.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/pattern.directive.js → esm2020/app/directives/validators/pattern.directive.mjs} +35 -35
- package/{esm2015/app/directives/validators/phone.directive.js → esm2020/app/directives/validators/phone.directive.mjs} +41 -41
- package/{esm2015/app/directives/validators/required.directive.js → esm2020/app/directives/validators/required.directive.mjs} +71 -71
- package/{esm2015/app/directives/validators/url.directive.js → esm2020/app/directives/validators/url.directive.mjs} +47 -47
- package/{esm2015/app/directives/validators/validate.directive.js → esm2020/app/directives/validators/validate.directive.mjs} +43 -43
- package/{esm2015/app/enums/confirm-result.js → esm2020/app/enums/confirm-result.mjs} +8 -8
- package/{esm2015/app/enums/form-status.js → esm2020/app/enums/form-status.mjs} +11 -11
- package/esm2020/app/fs-form.module.mjs +194 -0
- package/{esm2015/app/guards/form-deactivate.guard.js → esm2020/app/guards/form-deactivate.guard.mjs} +45 -45
- package/{esm2015/app/helpers/confirm-result-continue.js → esm2020/app/helpers/confirm-result-continue.mjs} +4 -4
- package/{esm2015/app/helpers/confirm-unsaved.js → esm2020/app/helpers/confirm-unsaved.mjs} +71 -71
- package/{esm2015/app/helpers/get-active-route.js → esm2020/app/helpers/get-active-route.mjs} +6 -6
- package/esm2020/app/helpers/get-form-errors.mjs +25 -0
- package/{esm2015/app/helpers/index.js → esm2020/app/helpers/index.mjs} +2 -2
- package/{esm2015/app/helpers/is-enabled.js → esm2020/app/helpers/is-enabled.mjs} +3 -3
- package/{esm2015/app/interfaces/async-validator.js → esm2020/app/interfaces/async-validator.mjs} +1 -1
- package/{esm2015/app/interfaces/confirm-config.js → esm2020/app/interfaces/confirm-config.mjs} +1 -1
- package/{esm2015/app/interfaces/confirm-tab-group.js → esm2020/app/interfaces/confirm-tab-group.mjs} +1 -1
- package/{esm2015/app/interfaces/index.js → esm2020/app/interfaces/index.mjs} +4 -4
- package/{esm2015/app/interfaces/submit-event.js → esm2020/app/interfaces/submit-event.mjs} +1 -1
- package/{esm2015/app/interfaces/submitted-event.js → esm2020/app/interfaces/submitted-event.mjs} +1 -1
- package/{esm2015/app/interfaces/validator.js → esm2020/app/interfaces/validator.mjs} +1 -1
- package/{esm2015/app/providers/validate-messages.provider.js → esm2020/app/providers/validate-messages.provider.mjs} +11 -11
- package/{esm2015/app/services/fsform.service.js → esm2020/app/services/fsform.service.mjs} +40 -40
- package/{esm2015/app/validators/validators.js → esm2020/app/validators/validators.mjs} +96 -96
- package/{esm2015/firestitch-form.js → esm2020/firestitch-form.mjs} +4 -4
- package/esm2020/public_api.mjs +38 -0
- package/fesm2015/firestitch-form.mjs +2478 -0
- package/fesm2015/firestitch-form.mjs.map +1 -0
- package/{fesm2015/firestitch-form.js → fesm2020/firestitch-form.mjs} +2353 -2299
- package/fesm2020/firestitch-form.mjs.map +1 -0
- package/firestitch-form.d.ts +5 -5
- package/package.json +20 -7
- package/public_api.d.ts +35 -34
- package/bundles/firestitch-form.umd.js +0 -3012
- package/bundles/firestitch-form.umd.js.map +0 -1
- package/esm2015/app/components/form-dialog-actions/form-dialog-actions.component.js +0 -92
- package/esm2015/app/directives/form/form.directive.js +0 -712
- package/esm2015/app/directives/form-dialog-close.directive.js +0 -31
- package/esm2015/app/directives/index.js +0 -3
- package/esm2015/app/directives/validators/control.directive.js +0 -261
- package/esm2015/app/fs-form.module.js +0 -181
- package/esm2015/app/helpers/get-form-errors.js +0 -25
- package/esm2015/public_api.js +0 -37
- package/fesm2015/firestitch-form.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './form.directive';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLmRpcmVjdGl2ZSc7XHJcbiJdfQ==
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Directive, HostListener, HostBinding, Optional, Input } from '@angular/core';
|
|
2
|
+
import { FsFormDirective } from './form';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { filter, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { MatDialogRef } from '@angular/material/dialog';
|
|
6
|
+
import { ConfirmResult } from '../enums/confirm-result';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./form";
|
|
9
|
+
import * as i2 from "@angular/material/dialog";
|
|
10
|
+
export class FsFormDialogCloseDirective {
|
|
11
|
+
constructor(_form, _dialogRef) {
|
|
12
|
+
this._form = _form;
|
|
13
|
+
this._dialogRef = _dialogRef;
|
|
14
|
+
this._destroy$ = new Subject();
|
|
15
|
+
this.type = 'button';
|
|
16
|
+
}
|
|
17
|
+
closeClick() {
|
|
18
|
+
if (this._form) {
|
|
19
|
+
this._form.triggerConfirm()
|
|
20
|
+
.pipe(filter((confirmResult) => (confirmResult !== ConfirmResult.Review)), takeUntil(this._destroy$))
|
|
21
|
+
.subscribe(() => {
|
|
22
|
+
this._dialogRef.close(this.closeData);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this._dialogRef.close(this.closeData);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
ngOnDestroy() {
|
|
30
|
+
this._destroy$.next();
|
|
31
|
+
this._destroy$.complete();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
FsFormDialogCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFormDialogCloseDirective, deps: [{ token: i1.FsFormDirective, optional: true }, { token: i2.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
35
|
+
FsFormDialogCloseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsFormDialogCloseDirective, selector: "[fsFormDialogClose],[fs-form-dialog-close]", inputs: { closeData: "closeData" }, host: { listeners: { "click": "closeClick($event.target)" }, properties: { "attr.type": "this.type" } }, ngImport: i0 });
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFormDialogCloseDirective, decorators: [{
|
|
37
|
+
type: Directive,
|
|
38
|
+
args: [{
|
|
39
|
+
selector: '[fsFormDialogClose],[fs-form-dialog-close]'
|
|
40
|
+
}]
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i1.FsFormDirective, decorators: [{
|
|
42
|
+
type: Optional
|
|
43
|
+
}] }, { type: i2.MatDialogRef, decorators: [{
|
|
44
|
+
type: Optional
|
|
45
|
+
}] }]; }, propDecorators: { closeData: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], type: [{
|
|
48
|
+
type: HostBinding,
|
|
49
|
+
args: ['attr.type']
|
|
50
|
+
}], closeClick: [{
|
|
51
|
+
type: HostListener,
|
|
52
|
+
args: ['click', ['$event.target']]
|
|
53
|
+
}] } });
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctY2xvc2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2Zvcm0tZGlhbG9nLWNsb3NlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBTXhELE1BQU0sT0FBTywwQkFBMEI7SUFNckMsWUFDc0IsS0FBc0IsRUFDdEIsVUFBNkI7UUFEN0IsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFKM0MsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFRUixTQUFJLEdBQUcsUUFBUSxDQUFDO0lBRjFDLENBQUM7SUFLTSxVQUFVO1FBQ2YsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUU7aUJBQzFCLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxhQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDbEYsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7aUJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7O3VIQWpDVSwwQkFBMEI7MkdBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUh0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0Q0FBNEM7aUJBQ3ZEOzswQkFRSSxRQUFROzswQkFDUixRQUFROzRDQU5LLFNBQVM7c0JBQXhCLEtBQUs7Z0JBVW9CLElBQUk7c0JBQTdCLFdBQVc7dUJBQUMsV0FBVztnQkFHakIsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBIb3N0QmluZGluZywgT3B0aW9uYWwsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0nO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uL2VudW1zL2NvbmZpcm0tcmVzdWx0JztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZnNGb3JtRGlhbG9nQ2xvc2VdLFtmcy1mb3JtLWRpYWxvZy1jbG9zZV0nXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybURpYWxvZ0Nsb3NlRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VEYXRhO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiBcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm06IEZzRm9ybURpcmVjdGl2ZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnk+LFxuICApIHtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci50eXBlJykgdHlwZSA9ICdidXR0b24nO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIHB1YmxpYyBjbG9zZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0udHJpZ2dlckNvbmZpcm0oKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoY29uZmlybVJlc3VsdDogQ29uZmlybVJlc3VsdCkgPT4gKGNvbmZpcm1SZXN1bHQgIT09IENvbmZpcm1SZXN1bHQuUmV2aWV3KSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHRoaXMuY2xvc2VEYXRhKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodGhpcy5jbG9zZURhdGEpO1xuICAgIH1cbiAgfVxuIFxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Directive, QueryList, ViewChildren } from '@angular/core';
|
|
2
|
+
import { NgModel } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class FsFormTemplateDirective {
|
|
5
|
+
constructor() { }
|
|
6
|
+
ngAfterContentInit() {
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
FsFormTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFormTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
10
|
+
FsFormTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsFormTemplateDirective, selector: "[fsFormTemplate]", viewQueries: [{ propertyName: "models", predicate: NgModel, descendants: true }], ngImport: i0 });
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFormTemplateDirective, decorators: [{
|
|
12
|
+
type: Directive,
|
|
13
|
+
args: [{
|
|
14
|
+
selector: '[fsFormTemplate]',
|
|
15
|
+
}]
|
|
16
|
+
}], ctorParameters: function () { return []; }, propDecorators: { models: [{
|
|
17
|
+
type: ViewChildren,
|
|
18
|
+
args: [NgModel]
|
|
19
|
+
}] } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZm9ybS10ZW1wbGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQyxTQUFTLEVBQUUsU0FBUyxFQUFlLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBTXpDLE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsZ0JBRUcsQ0FBQztJQUtHLGtCQUFrQjtJQUV6QixDQUFDOztvSEFYVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixtRkFNcEIsT0FBTzsyRkFOVix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7MEVBUVEsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1UZW1wbGF0ZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1UZW1wbGF0ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgLy9wdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEZzRm9ybVRlbXBsYXRlRGlyZWN0aXZlPlxuICApIHt9XG5cbiAgQFZpZXdDaGlsZHJlbihOZ01vZGVsKSBcbiAgcHVibGljIG1vZGVsczogUXVlcnlMaXN0PE5nTW9kZWw+O1xuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG5cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './form';
|
|
2
|
+
export * from './validators';
|
|
3
|
+
export * from './button.directive';
|
|
4
|
+
export * from './form-dialog-close.directive';
|
|
5
|
+
export * from './form-template.directive';
|
|
6
|
+
export * from './submit-button.directive';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdG9ycyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYnV0dG9uLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1kaWFsb2ctY2xvc2UuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9mb3JtLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUnO1xyXG4iXX0=
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Directive } from '@angular/core';
|
|
2
|
-
import { FsButtonDirective } from './button.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class FsSubmitButtonDirective extends FsButtonDirective {
|
|
5
|
-
}
|
|
6
|
-
FsSubmitButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
7
|
-
FsSubmitButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "
|
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
9
|
-
type: Directive,
|
|
10
|
-
args: [{
|
|
11
|
-
selector: 'dummy-selector',
|
|
12
|
-
}]
|
|
13
|
-
}] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import { FsButtonDirective } from './button.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class FsSubmitButtonDirective extends FsButtonDirective {
|
|
5
|
+
}
|
|
6
|
+
FsSubmitButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsSubmitButtonDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
7
|
+
FsSubmitButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsSubmitButtonDirective, selector: "dummy-selector", usesInheritance: true, ngImport: i0 });
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsSubmitButtonDirective, decorators: [{
|
|
9
|
+
type: Directive,
|
|
10
|
+
args: [{
|
|
11
|
+
selector: 'dummy-selector',
|
|
12
|
+
}]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvc3VibWl0LWJ1dHRvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjs7b0hBQWpELHVCQUF1Qjt3R0FBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuL2J1dHRvbi5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2R1bW15LXNlbGVjdG9yJyxcbn0pXG5leHBvcnQgY2xhc3MgRnNTdWJtaXRCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBGc0J1dHRvbkRpcmVjdGl2ZSB7XG59XG4iXX0=
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { FsControlDirective } from './control.directive';
|
|
3
|
-
import { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class FsFormCompareDirective extends FsControlDirective {
|
|
6
|
-
set validationMessage(value) {
|
|
7
|
-
this._validateMessages.compare = value;
|
|
8
|
-
}
|
|
9
|
-
ngOnChanges() {
|
|
10
|
-
this._control.updateValueAndValidity();
|
|
11
|
-
}
|
|
12
|
-
validate(control) {
|
|
13
|
-
if (this.fsFormCompare.value === this.elementRef.nativeElement.value) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
return { compare: true };
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
ngAfterViewInit() {
|
|
21
|
-
this.fsFormCompare.addEventListener('keyup', () => {
|
|
22
|
-
this._control.updateValueAndValidity();
|
|
23
|
-
}, false);
|
|
24
|
-
}
|
|
25
|
-
ngOnDestroy() {
|
|
26
|
-
this.fsFormCompare.removeEventListener('keyup', () => {
|
|
27
|
-
this._control.updateValueAndValidity();
|
|
28
|
-
}, false);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
FsFormCompareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
32
|
-
FsFormCompareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "
|
|
33
|
-
VALIDATE_MESSAGE_PROVIDER,
|
|
34
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
36
|
-
type: Directive,
|
|
37
|
-
args: [{
|
|
38
|
-
selector: '[fsFormCompare]',
|
|
39
|
-
providers: [
|
|
40
|
-
VALIDATE_MESSAGE_PROVIDER,
|
|
41
|
-
],
|
|
42
|
-
}]
|
|
43
|
-
}], propDecorators: { fsFormCompare: [{
|
|
44
|
-
type: Input
|
|
45
|
-
}], validationMessage: [{
|
|
46
|
-
type: Input,
|
|
47
|
-
args: ['fsFormCompareMessage']
|
|
48
|
-
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { FsControlDirective } from './control.directive';
|
|
3
|
+
import { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class FsFormCompareDirective extends FsControlDirective {
|
|
6
|
+
set validationMessage(value) {
|
|
7
|
+
this._validateMessages.compare = value;
|
|
8
|
+
}
|
|
9
|
+
ngOnChanges() {
|
|
10
|
+
this._control.updateValueAndValidity();
|
|
11
|
+
}
|
|
12
|
+
validate(control) {
|
|
13
|
+
if (this.fsFormCompare.value === this.elementRef.nativeElement.value) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return { compare: true };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
ngAfterViewInit() {
|
|
21
|
+
this.fsFormCompare.addEventListener('keyup', () => {
|
|
22
|
+
this._control.updateValueAndValidity();
|
|
23
|
+
}, false);
|
|
24
|
+
}
|
|
25
|
+
ngOnDestroy() {
|
|
26
|
+
this.fsFormCompare.removeEventListener('keyup', () => {
|
|
27
|
+
this._control.updateValueAndValidity();
|
|
28
|
+
}, false);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
FsFormCompareDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFormCompareDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
32
|
+
FsFormCompareDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsFormCompareDirective, selector: "[fsFormCompare]", inputs: { fsFormCompare: "fsFormCompare", validationMessage: ["fsFormCompareMessage", "validationMessage"] }, providers: [
|
|
33
|
+
VALIDATE_MESSAGE_PROVIDER,
|
|
34
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFormCompareDirective, decorators: [{
|
|
36
|
+
type: Directive,
|
|
37
|
+
args: [{
|
|
38
|
+
selector: '[fsFormCompare]',
|
|
39
|
+
providers: [
|
|
40
|
+
VALIDATE_MESSAGE_PROVIDER,
|
|
41
|
+
],
|
|
42
|
+
}]
|
|
43
|
+
}], propDecorators: { fsFormCompare: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], validationMessage: [{
|
|
46
|
+
type: Input,
|
|
47
|
+
args: ['fsFormCompareMessage']
|
|
48
|
+
}] } });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb21wYXJlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBV3ZGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxrQkFBa0I7SUFNNUQsSUFDVyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDekMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1osQ0FBQzs7bUhBakNVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHdKQUp0QjtRQUNULHlCQUF5QjtLQUMxQjsyRkFFVSxzQkFBc0I7a0JBTmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsU0FBUyxFQUFFO3dCQUNULHlCQUF5QjtxQkFDMUI7aUJBQ0Y7OEJBS1EsYUFBYTtzQkFEbkIsS0FBSztnQkFJSyxpQkFBaUI7c0JBRDNCLEtBQUs7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZzQ29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vY29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy92YWxpZGF0ZS1tZXNzYWdlcy5wcm92aWRlcic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGc1ZhbGlkYXRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmFsaWRhdG9yJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZnNGb3JtQ29tcGFyZV0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1Db21wYXJlRGlyZWN0aXZlIGV4dGVuZHMgRnNDb250cm9sRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZzVmFsaWRhdG9yIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZnNGb3JtQ29tcGFyZTtcblxuICBASW5wdXQoJ2ZzRm9ybUNvbXBhcmVNZXNzYWdlJylcbiAgcHVibGljIHNldCB2YWxpZGF0aW9uTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsaWRhdGVNZXNzYWdlcy5jb21wYXJlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICh0aGlzLmZzRm9ybUNvbXBhcmUudmFsdWUgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgY29tcGFyZTogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5mc0Zvcm1Db21wYXJlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKCkgPT4ge1xuICAgICAgdGhpcy5fY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZnNGb3JtQ29tcGFyZS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsICgpID0+IHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0sIGZhbHNlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { Input, ElementRef, Renderer2, Directive, Injector, Optional, Inject, Self, } from '@angular/core';
|
|
2
|
+
import { NgControl } from '@angular/forms';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { values, keys } from 'lodash-es';
|
|
6
|
+
import { FsFormDirective } from '../form/form.directive';
|
|
7
|
+
import { VALIDATE_MESSAGE_PROVIDER, VALIDATE_MESSAGES } from '../../providers/validate-messages.provider';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
import * as i2 from "../form/form.directive";
|
|
11
|
+
export class FsControlDirective {
|
|
12
|
+
constructor(elementRef, renderer2, injector, _validateMessages, ngControl, formDirective) {
|
|
13
|
+
this.elementRef = elementRef;
|
|
14
|
+
this.renderer2 = renderer2;
|
|
15
|
+
this.injector = injector;
|
|
16
|
+
this._validateMessages = _validateMessages;
|
|
17
|
+
this.ngControl = ngControl;
|
|
18
|
+
this.formDirective = formDirective;
|
|
19
|
+
this.appendMessageClass = 'fs-form-message';
|
|
20
|
+
this.appendLabelClass = 'fs-form-label';
|
|
21
|
+
this.appendErrorClass = 'fs-form-error';
|
|
22
|
+
this.appendHintClass = 'fs-form-hint';
|
|
23
|
+
this.errors = [];
|
|
24
|
+
// protected _validateMessages = { ...ERROR_MESSAGES };
|
|
25
|
+
this._destroy$ = new Subject();
|
|
26
|
+
if (ngControl) {
|
|
27
|
+
this._control = ngControl.control;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.error('The element does not have a valid ngModel', this.elementRef.nativeElement);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
set validateMessages(messages) {
|
|
34
|
+
this._validateMessages = {
|
|
35
|
+
...this._validateMessages,
|
|
36
|
+
...messages,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
this._setupValidators();
|
|
41
|
+
}
|
|
42
|
+
ngOnDestroy() {
|
|
43
|
+
this._destroy$.next();
|
|
44
|
+
this._destroy$.complete();
|
|
45
|
+
}
|
|
46
|
+
ngAfterContentInit() {
|
|
47
|
+
this._subscribeToStatusChagnes();
|
|
48
|
+
}
|
|
49
|
+
_subscribeToStatusChagnes() {
|
|
50
|
+
if (this._control) {
|
|
51
|
+
this._control.statusChanges
|
|
52
|
+
.pipe(takeUntil(this._destroy$))
|
|
53
|
+
.subscribe(this.render.bind(this));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
getMessageSelector() {
|
|
57
|
+
if (this.messageSelector === false) {
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
if (this.messageSelector) {
|
|
61
|
+
return this.messageSelector;
|
|
62
|
+
}
|
|
63
|
+
else if (this.formDirective?.messageSelector) {
|
|
64
|
+
return this.formDirective.messageSelector;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
getHintWrapperSelector() {
|
|
68
|
+
if (this.hintSelector === false) {
|
|
69
|
+
return '';
|
|
70
|
+
}
|
|
71
|
+
if (this.hintSelector) {
|
|
72
|
+
return this.hintSelector;
|
|
73
|
+
}
|
|
74
|
+
else if (this.formDirective?.hintSelector) {
|
|
75
|
+
return this.formDirective.hintSelector;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
getWrapperSelector() {
|
|
79
|
+
if (this.wrapperSelector === false) {
|
|
80
|
+
return '';
|
|
81
|
+
}
|
|
82
|
+
if (this.wrapperSelector) {
|
|
83
|
+
return this.wrapperSelector;
|
|
84
|
+
}
|
|
85
|
+
else if (this.formDirective?.wrapperSelector) {
|
|
86
|
+
return this.formDirective.wrapperSelector;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getlabelSelector() {
|
|
90
|
+
if (this.labelSelector === false) {
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
if (this.labelSelector) {
|
|
94
|
+
return this.labelSelector;
|
|
95
|
+
}
|
|
96
|
+
else if (this.formDirective?.labelSelector) {
|
|
97
|
+
return this.formDirective.labelSelector;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getWrapperElement() {
|
|
101
|
+
const wrapper = this.getWrapper(this.elementRef.nativeElement);
|
|
102
|
+
if (wrapper) {
|
|
103
|
+
return wrapper;
|
|
104
|
+
}
|
|
105
|
+
return this.elementRef.nativeElement;
|
|
106
|
+
}
|
|
107
|
+
/*
|
|
108
|
+
<mat-form-field class="mat-form-field"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.
|
|
109
|
+
<input>
|
|
110
|
+
<div class="fs-form-message"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector
|
|
111
|
+
<div class="fs-form-message"></div>
|
|
112
|
+
<div class="fs-form-hint"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector
|
|
113
|
+
</div>
|
|
114
|
+
</mat-form-field>
|
|
115
|
+
*/
|
|
116
|
+
render() {
|
|
117
|
+
if (this.ngControl) {
|
|
118
|
+
const renderer = this.renderer2;
|
|
119
|
+
const wrapper = this.getWrapperElement();
|
|
120
|
+
const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;
|
|
121
|
+
const shouldErrorBeRendered = this.ngControl.invalid
|
|
122
|
+
&& (this.ngControl.dirty || this.formDirective?.ngForm?.submitted);
|
|
123
|
+
if (shouldErrorBeRendered && error) {
|
|
124
|
+
wrapper.classList.add('ng-invalid', 'ng-dirty');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
wrapper.classList.remove('ng-invalid');
|
|
128
|
+
}
|
|
129
|
+
if (!this.getMessageSelector()) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const messageWrapper = wrapper.querySelector(this.getMessageSelector());
|
|
133
|
+
if (!messageWrapper) {
|
|
134
|
+
return console.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);
|
|
135
|
+
}
|
|
136
|
+
if (this.getlabelSelector()) {
|
|
137
|
+
const labelWrapper = wrapper.querySelector(this.getlabelSelector());
|
|
138
|
+
if (labelWrapper) {
|
|
139
|
+
if (this.appendLabelClass) {
|
|
140
|
+
this.renderer2.addClass(labelWrapper, this.appendLabelClass);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (this.appendMessageClass) {
|
|
145
|
+
renderer.addClass(messageWrapper, this.appendMessageClass);
|
|
146
|
+
}
|
|
147
|
+
if (this.getHintWrapperSelector()) {
|
|
148
|
+
const hint = messageWrapper.querySelector(this.getHintWrapperSelector());
|
|
149
|
+
if (hint) {
|
|
150
|
+
renderer.setStyle(hint, 'display', error ? 'none' : 'block');
|
|
151
|
+
if (this.appendHintClass) {
|
|
152
|
+
renderer.addClass(hint, this.appendHintClass);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
let errorWrapper = wrapper.querySelector('.fs-form-error-target');
|
|
157
|
+
if (errorWrapper) {
|
|
158
|
+
errorWrapper.remove();
|
|
159
|
+
}
|
|
160
|
+
if (!shouldErrorBeRendered || !error) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
errorWrapper = renderer.createElement('div');
|
|
164
|
+
renderer.addClass(errorWrapper, 'fs-form-error-target');
|
|
165
|
+
renderer.addClass(errorWrapper, this.appendErrorClass);
|
|
166
|
+
renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);
|
|
167
|
+
const errorText = renderer.createText(error.message);
|
|
168
|
+
renderer.appendChild(errorWrapper, errorText);
|
|
169
|
+
messageWrapper.appendChild(errorWrapper);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
getWrapper(node, count = 0) {
|
|
173
|
+
if (!node || count > 10) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {
|
|
177
|
+
return node;
|
|
178
|
+
}
|
|
179
|
+
return this.getWrapper(node.parentNode, ++count);
|
|
180
|
+
}
|
|
181
|
+
parseErrorMessage(message, args) {
|
|
182
|
+
values(args)
|
|
183
|
+
.forEach((name) => {
|
|
184
|
+
message = message.replace(/\$\(\d\)/, name);
|
|
185
|
+
});
|
|
186
|
+
return message;
|
|
187
|
+
}
|
|
188
|
+
getError(controlRef) {
|
|
189
|
+
const name = keys(controlRef.control.errors)[0];
|
|
190
|
+
if (!name) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
let message = controlRef.control.errors[name];
|
|
194
|
+
if (this._validateMessages[name]) {
|
|
195
|
+
message = this.parseErrorMessage(this._validateMessages[name], message);
|
|
196
|
+
}
|
|
197
|
+
return { name: name, message: message };
|
|
198
|
+
}
|
|
199
|
+
_setupValidators() {
|
|
200
|
+
const control = this._control;
|
|
201
|
+
if (this.validate) {
|
|
202
|
+
const validators = control.validator
|
|
203
|
+
? [control.validator, this.validate.bind(this)]
|
|
204
|
+
: this.validate.bind(this);
|
|
205
|
+
control.setValidators(validators);
|
|
206
|
+
}
|
|
207
|
+
if (this.validateAsync) {
|
|
208
|
+
const asyncValidators = control.asyncValidator
|
|
209
|
+
? [control.asyncValidator, this.validateAsync.bind(this)]
|
|
210
|
+
: this.validateAsync.bind(this);
|
|
211
|
+
control.setAsyncValidators(asyncValidators);
|
|
212
|
+
}
|
|
213
|
+
control.updateValueAndValidity();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
FsControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsControlDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: VALIDATE_MESSAGES, self: true }, { token: i1.NgControl, optional: true }, { token: FsFormDirective, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
217
|
+
FsControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: FsControlDirective, selector: "[fsFormControl]", inputs: { wrapperSelector: "wrapperSelector", messageSelector: "messageSelector", hintSelector: "hintSelector", labelSelector: "labelSelector", appendMessageClass: "appendMessageClass", appendLabelClass: "appendLabelClass", appendErrorClass: "appendErrorClass", appendHintClass: "appendHintClass", validateMessages: "validateMessages" }, providers: [
|
|
218
|
+
VALIDATE_MESSAGE_PROVIDER
|
|
219
|
+
], ngImport: i0 });
|
|
220
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsControlDirective, decorators: [{
|
|
221
|
+
type: Directive,
|
|
222
|
+
args: [{
|
|
223
|
+
selector: '[fsFormControl]',
|
|
224
|
+
providers: [
|
|
225
|
+
VALIDATE_MESSAGE_PROVIDER
|
|
226
|
+
],
|
|
227
|
+
}]
|
|
228
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined, decorators: [{
|
|
229
|
+
type: Self
|
|
230
|
+
}, {
|
|
231
|
+
type: Inject,
|
|
232
|
+
args: [VALIDATE_MESSAGES]
|
|
233
|
+
}] }, { type: i1.NgControl, decorators: [{
|
|
234
|
+
type: Optional
|
|
235
|
+
}] }, { type: i2.FsFormDirective, decorators: [{
|
|
236
|
+
type: Optional
|
|
237
|
+
}, {
|
|
238
|
+
type: Inject,
|
|
239
|
+
args: [FsFormDirective]
|
|
240
|
+
}] }]; }, propDecorators: { wrapperSelector: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], messageSelector: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], hintSelector: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], labelSelector: [{
|
|
247
|
+
type: Input
|
|
248
|
+
}], appendMessageClass: [{
|
|
249
|
+
type: Input
|
|
250
|
+
}], appendLabelClass: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], appendErrorClass: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], appendHintClass: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], validateMessages: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}] } });
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvdmFsaWRhdG9ycy9jb250cm9sLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksR0FJTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFxQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNsQixNQUFNLDRDQUE0QyxDQUFDOzs7O0FBZXBELE1BQU0sT0FBTyxrQkFBa0I7SUF5QjdCLFlBQ1ksVUFBc0IsRUFDdEIsU0FBb0IsRUFDcEIsUUFBa0IsRUFDaUIsaUJBQWlCLEVBQ3hDLFNBQW9CLEVBQ0ssYUFBOEI7UUFMbkUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDaUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFBO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDSyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUF6QnRFLHVCQUFrQixHQUFHLGlCQUFpQixDQUFDO1FBQ3ZDLHFCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxlQUFl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SSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxjQUFjO2dCQUM1QyxDQUFDLENBQUMsQ0FBRSxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbkMsQ0FBQzs7K0dBL1FVLGtCQUFrQiw2RkE2QlgsaUJBQWlCLGtFQUViLGVBQWU7bUdBL0IxQixrQkFBa0IsNFhBSmxCO1FBQ1QseUJBQXlCO0tBQzFCOzJGQUVVLGtCQUFrQjtrQkFOOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUU7d0JBQ1QseUJBQXlCO3FCQUMxQjtpQkFDRjs7MEJBOEJJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDaEMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQTdCNUIsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdLLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjIsXG4gIERpcmVjdGl2ZSxcbiAgSW5qZWN0b3IsXG4gIE9wdGlvbmFsLFxuICBJbmplY3QsXG4gIFNlbGYsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBBZnRlckNvbnRlbnRJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHZhbHVlcywga2V5cyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgVkFMSURBVEVfTUVTU0FHRV9QUk9WSURFUixcbiAgVkFMSURBVEVfTUVTU0FHRVNcbn0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3ZhbGlkYXRlLW1lc3NhZ2VzLnByb3ZpZGVyJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEZzQ29udHJvbERpcmVjdGl2ZSB7XG4gIHZhbGlkYXRlPyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcbiAgdmFsaWRhdGVBc3luYz8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPjtcbn1cblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZnNGb3JtQ29udHJvbF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBWQUxJREFURV9NRVNTQUdFX1BST1ZJREVSXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSB3cmFwcGVyU2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBtZXNzYWdlU2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBoaW50U2VsZWN0b3I6IHN0cmluZyB8IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbFNlbGVjdG9yOiBzdHJpbmcgfCBmYWxzZTtcbiAgQElucHV0KCkgYXBwZW5kTWVzc2FnZUNsYXNzID0gJ2ZzLWZvcm0tbWVzc2FnZSc7XG4gIEBJbnB1dCgpIGFwcGVuZExhYmVsQ2xhc3MgPSAnZnMtZm9ybS1sYWJlbCc7XG4gIEBJbnB1dCgpIGFwcGVuZEVycm9yQ2xhc3MgPSAnZnMtZm9ybS1lcnJvcic7XG4gIEBJbnB1dCgpIGFwcGVuZEhpbnRDbGFzcyA9ICdmcy1mb3JtLWhpbnQnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGVNZXNzYWdlcyhtZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXMgPSB7XG4gICAgICAuLi50aGlzLl92YWxpZGF0ZU1lc3NhZ2VzLFxuICAgICAgLi4ubWVzc2FnZXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvcnMgPSBbXTtcblxuICAvLyBwcm90ZWN0ZWQgX3ZhbGlkYXRlTWVzc2FnZXMgPSB7IC4uLkVSUk9SX01FU1NBR0VTIH07XG4gIHByb3RlY3RlZCBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBwcm90ZWN0ZWQgX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAU2VsZigpIEBJbmplY3QoVkFMSURBVEVfTUVTU0FHRVMpIHByb3RlY3RlZCBfdmFsaWRhdGVNZXNzYWdlcyxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGc0Zvcm1EaXJlY3RpdmUpIHByb3RlY3RlZCBmb3JtRGlyZWN0aXZlOiBGc0Zvcm1EaXJlY3RpdmUsXG4gICkge1xuXG4gICAgaWYgKG5nQ29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgbmdNb2RlbCcsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9zZXR1cFZhbGlkYXRvcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmliZVRvU3RhdHVzQ2hhZ25lcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zdWJzY3JpYmVUb1N0YXR1c0NoYWduZXMoKTp2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHRoaXMucmVuZGVyLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRNZXNzYWdlU2VsZWN0b3IoKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLm1lc3NhZ2VTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZWxlY3RvcjtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtRGlyZWN0aXZlPy5tZXNzYWdlU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUubWVzc2FnZVNlbGVjdG9yO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIaW50V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy5oaW50U2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaW50U2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZT8uaGludFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmhpbnRTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V3JhcHBlclNlbGVjdG9yKCk6IHN0cmluZyB7XG5cbiAgICBpZiAodGhpcy53cmFwcGVyU2VsZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud3JhcHBlclNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy53cmFwcGVyU2VsZWN0b3I7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURpcmVjdGl2ZT8ud3JhcHBlclNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLndyYXBwZXJTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0bGFiZWxTZWxlY3RvcigpOiBzdHJpbmcge1xuXG4gICAgaWYgKHRoaXMubGFiZWxTZWxlY3RvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYWJlbFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbFNlbGVjdG9yO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EaXJlY3RpdmU/LmxhYmVsU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUubGFiZWxTZWxlY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0V3JhcHBlckVsZW1lbnQoKSB7XG5cbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRXcmFwcGVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGlmICh3cmFwcGVyKSB7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkXCI+ICA8LS0gRmllbGQgV3JhcHBlciBDbGFzcy4gTG9vayBmb3IgcGFyZW50cyBmcm9tIHRoZSBuYXRpdmUgZWxlbWVudCB3aXRoIHRoZSBtYXRjaGluZyB3cmFwcGVyU2VsZWN0b3IuIElmIG5vdCBmb3VuZCBkZWZhdWx0cyB0byBuYXRpdmUgZWxlbWVudC5cbiAgICAgIDxpbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj4gPC0tIE1lc3NhZ2UgU2VsZWN0b3IuIExvb2sgZm9yIHRoZSBlbGVtZW50IHdpdGggY2xhc3MgLmZzLWZvcm0tbWVzc2FnZSBvciBtZXNzYWdlU2VsZWN0b3JcbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtZm9ybS1oaW50XCI+PC9kaXY+IDwtLSBIaW50IFNlbGVjdG9yLiBMb29rIGZvciB0aGUgZWxlbWVudCB3aXRoIGNsYXNzIC5mcy1mb3JtLWhpbnQgb3IgaGludFNlbGVjdG9yXG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAqL1xuXG4gIHByb3RlY3RlZCByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIyO1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZ2V0V3JhcHBlckVsZW1lbnQoKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uZ0NvbnRyb2wuZGlydHkgPyB0aGlzLmdldEVycm9yKHRoaXMubmdDb250cm9sKSA6IG51bGw7XG4gICAgICBjb25zdCBzaG91bGRFcnJvckJlUmVuZGVyZWQgPSB0aGlzLm5nQ29udHJvbC5pbnZhbGlkXG4gICAgICAgICYmICh0aGlzLm5nQ29udHJvbC5kaXJ0eSB8fCB0aGlzLmZvcm1EaXJlY3RpdmU/Lm5nRm9ybT8uc3VibWl0dGVkKTtcblxuICAgICAgaWYgKHNob3VsZEVycm9yQmVSZW5kZXJlZCAmJiBlcnJvcikge1xuICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ25nLWludmFsaWQnLCAnbmctZGlydHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnbmctaW52YWxpZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZ2V0TWVzc2FnZVNlbGVjdG9yKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlV3JhcHBlciA9IHdyYXBwZXIucXVlcnlTZWxlY3Rvcih0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpKTtcblxuICAgICAgaWYgKCFtZXNzYWdlV3JhcHBlcikge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9jYXRlICcgKyB0aGlzLmdldE1lc3NhZ2VTZWxlY3RvcigpLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdldGxhYmVsU2VsZWN0b3IoKSkge1xuICAgICAgICBjb25zdCBsYWJlbFdyYXBwZXIgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRsYWJlbFNlbGVjdG9yKCkpO1xuXG4gICAgICAgIGlmIChsYWJlbFdyYXBwZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5hcHBlbmRMYWJlbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5hZGRDbGFzcyhsYWJlbFdyYXBwZXIsIHRoaXMuYXBwZW5kTGFiZWxDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZE1lc3NhZ2VDbGFzcykge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyhtZXNzYWdlV3JhcHBlciwgdGhpcy5hcHBlbmRNZXNzYWdlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nZXRIaW50V3JhcHBlclNlbGVjdG9yKCkpIHtcbiAgICAgICAgY29uc3QgaGludCA9IG1lc3NhZ2VXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRIaW50V3JhcHBlclNlbGVjdG9yKCkpO1xuXG4gICAgICAgIGlmIChoaW50KSB7XG4gICAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoaGludCwgJ2Rpc3BsYXknLCBlcnJvciA/ICdub25lJyA6ICdibG9jaycpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuYXBwZW5kSGludENsYXNzKSB7XG4gICAgICAgICAgICByZW5kZXJlci5hZGRDbGFzcyhoaW50LCB0aGlzLmFwcGVuZEhpbnRDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBlcnJvcldyYXBwZXIgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5mcy1mb3JtLWVycm9yLXRhcmdldCcpO1xuICAgICAgaWYgKGVycm9yV3JhcHBlcikge1xuICAgICAgICBlcnJvcldyYXBwZXIucmVtb3ZlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvdWxkRXJyb3JCZVJlbmRlcmVkIHx8ICFlcnJvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVycm9yV3JhcHBlciA9IHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoZXJyb3JXcmFwcGVyLCAnZnMtZm9ybS1lcnJvci10YXJnZXQnKTtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgdGhpcy5hcHBlbmRFcnJvckNsYXNzKTtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKGVycm9yV3JhcHBlciwgdGhpcy5hcHBlbmRFcnJvckNsYXNzICsgJy0nICsgZXJyb3IubmFtZSk7XG5cbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IHJlbmRlcmVyLmNyZWF0ZVRleHQoZXJyb3IubWVzc2FnZSk7XG5cbiAgICAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKGVycm9yV3JhcHBlciwgZXJyb3JUZXh0KTtcbiAgICAgIG1lc3NhZ2VXcmFwcGVyLmFwcGVuZENoaWxkKGVycm9yV3JhcHBlcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFdyYXBwZXIobm9kZSwgY291bnQgPSAwKSB7XG5cbiAgICBpZiAoIW5vZGUgfHwgY291bnQgPiAxMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUucXVlcnlTZWxlY3Rvcih0aGlzLmdldFdyYXBwZXJTZWxlY3RvcigpKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0V3JhcHBlcihub2RlLnBhcmVudE5vZGUsICsrY291bnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGFyZ3MpOiBzdHJpbmcge1xuICAgIHZhbHVlcyhhcmdzKVxuICAgICAgLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXCRcXChcXGRcXCkvLCBuYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RXJyb3IoY29udHJvbFJlZik6IHsgbmFtZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSB7XG5cbiAgICBjb25zdCBuYW1lID0ga2V5cyhjb250cm9sUmVmLmNvbnRyb2wuZXJyb3JzKVswXTtcblxuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1lc3NhZ2UgPSBjb250cm9sUmVmLmNvbnRyb2wuZXJyb3JzW25hbWVdO1xuXG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0pIHtcbiAgICAgIG1lc3NhZ2UgPSB0aGlzLnBhcnNlRXJyb3JNZXNzYWdlKHRoaXMuX3ZhbGlkYXRlTWVzc2FnZXNbbmFtZV0sIG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5fY29udHJvbDtcblxuICAgIGlmICh0aGlzLnZhbGlkYXRlKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gY29udHJvbC52YWxpZGF0b3JcbiAgICAgICAgPyBbIGNvbnRyb2wudmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyldXG4gICAgICAgIDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsaWRhdGVBc3luYykge1xuICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gY29udHJvbC5hc3luY1ZhbGlkYXRvclxuICAgICAgICA/IFsgY29udHJvbC5hc3luY1ZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZUFzeW5jLmJpbmQodGhpcyldXG4gICAgICAgIDogdGhpcy52YWxpZGF0ZUFzeW5jLmJpbmQodGhpcyk7XG5cbiAgICAgIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxufVxuIl19
|