mmhglobal-dynamicform 2.43.0 → 2.44.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.
@@ -0,0 +1,140 @@
1
+ /********** Angular **********/
2
+ import { Component, Input } from '@angular/core';
3
+ /********** Component & Service **********/
4
+ import { InputFieldBase } from '../components/inputfieldbase.component';
5
+ import { ZComponentHelper } from "mmhglobal-zcore";
6
+ import { Validators } from '@angular/forms';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../services/zcomponent.service";
9
+ import * as i2 from "@progress/kendo-angular-inputs";
10
+ import * as i3 from "@angular/forms";
11
+ export class ZsliderComponent extends InputFieldBase {
12
+ constructor(componentService) {
13
+ super(componentService);
14
+ this.componentService = componentService;
15
+ this.inputMode = "decimal";
16
+ this.minValue = 0;
17
+ this.maxValue = 0;
18
+ this.smallStep = 1;
19
+ this.largeStep = 5;
20
+ this.tickPlacement = 'both';
21
+ this.slidervalue = 0;
22
+ }
23
+ get sliderData() {
24
+ return this.data;
25
+ }
26
+ ngOnInit() {
27
+ super.setupInnerField();
28
+ this.setInitPropertyValue();
29
+ }
30
+ ngOnDestroy() {
31
+ this.removeMinAndMaxValidator();
32
+ }
33
+ ngAfterViewInit() {
34
+ this.componentService.decrementComponentCounterForField(this.data);
35
+ }
36
+ setMinValue(newValue) {
37
+ this.minValue = newValue;
38
+ // mark this control as touched to trigger for validation
39
+ const control = this.form.controls[this.data.Value];
40
+ control.markAsTouched();
41
+ }
42
+ setMaxValue(newValue) {
43
+ this.maxValue = newValue;
44
+ // mark this control as touched to trigger for validation
45
+ const control = this.form.controls[this.data.Value];
46
+ control.markAsTouched();
47
+ }
48
+ setInitPropertyValue() {
49
+ if (typeof this.data.MinValue == 'string' && this.data.MinValue.toString().startsWith('group.')) {
50
+ this.minValue = ZComponentHelper.getGroupValue(this.data.MinValue.toString(), this.group);
51
+ }
52
+ else {
53
+ this.minValue = this.data.MinValue;
54
+ }
55
+ if (typeof this.data.MaxValue == 'string' && this.data.MaxValue.toString().startsWith('group.')) {
56
+ this.maxValue = ZComponentHelper.getGroupValue(this.data.MaxValue.toString(), this.group);
57
+ }
58
+ else {
59
+ this.maxValue = this.data.MaxValue;
60
+ }
61
+ if (typeof this.sliderData.SmallStep == 'string' && this.sliderData.SmallStep.toString().startsWith('group.')) {
62
+ this.smallStep = ZComponentHelper.getGroupValue(this.sliderData.SmallStep.toString(), this.group);
63
+ }
64
+ else {
65
+ this.smallStep = this.sliderData.SmallStep;
66
+ }
67
+ if (this.smallStep <= 0 || ZComponentHelper.isNullUndefinedEmpty(this.smallStep)) {
68
+ this.smallStep = 1;
69
+ }
70
+ if (typeof this.sliderData.LargeStep == 'string' && this.sliderData.LargeStep.toString().startsWith('group.')) {
71
+ this.largeStep = ZComponentHelper.getGroupValue(this.sliderData.LargeStep.toString(), this.group);
72
+ }
73
+ else {
74
+ this.largeStep = this.sliderData.LargeStep;
75
+ }
76
+ if (this.largeStep <= 0 || ZComponentHelper.isNullUndefinedEmpty(this.largeStep)) {
77
+ this.largeStep = 5;
78
+ }
79
+ if (this.sliderData.TickPlacement && this.sliderData.TickPlacement.toString().startsWith('group.')) {
80
+ this.tickPlacement = ZComponentHelper.getGroupValue(this.sliderData.TickPlacement.toString(), this.group);
81
+ }
82
+ else {
83
+ this.tickPlacement = this.sliderData.TickPlacement || 'both';
84
+ }
85
+ this.addMinAndMaxValidator();
86
+ }
87
+ addMinAndMaxValidator() {
88
+ // Setup form validator for ionic components only (Kendo component will be auto setup)
89
+ if (this.isMobileScreen()) {
90
+ const control = this.form?.controls[this.data.Value];
91
+ if (control) {
92
+ if (this.minValue != undefined) {
93
+ this.minValidator = Validators.min(Number(this.minValue));
94
+ control.addValidators(this.minValidator);
95
+ }
96
+ if (this.maxValue != undefined) {
97
+ this.maxValidator = Validators.max(Number(this.maxValue));
98
+ control.addValidators(this.maxValidator);
99
+ }
100
+ control.updateValueAndValidity();
101
+ }
102
+ }
103
+ }
104
+ removeMinAndMaxValidator() {
105
+ this.minValue = null;
106
+ this.maxValue = null;
107
+ const control = this.form?.controls[this.data.Value];
108
+ if (control) {
109
+ if (this.isMobileScreen()) {
110
+ if (control.hasValidator(this.minValidator)) {
111
+ control.removeValidators(this.minValidator);
112
+ }
113
+ if (control.hasValidator(this.maxValidator)) {
114
+ control.removeValidators(this.maxValidator);
115
+ }
116
+ }
117
+ control.updateValueAndValidity();
118
+ }
119
+ }
120
+ get hasError() {
121
+ if (!this.form || !this.data || !this.data.Value || !this.form.controls[this.data.Value]) {
122
+ return false;
123
+ }
124
+ const control = this.form.controls[this.data.Value];
125
+ return !control.valid && !control.untouched && !control.disabled && !this.form.untouched;
126
+ }
127
+ }
128
+ ZsliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZsliderComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
129
+ ZsliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZsliderComponent, selector: "app-zslider", inputs: { data: "data", group: "group", form: "form" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"zslider-container e1tag-style\" [style]=\"componentProperties.style.style\"\r\n [class.has-error-with-tick]=\"tickPlacement !== 'none' && hasError\">\r\n <div style=\"display: flex; width: 100%;\">\r\n <kendo-slider #orientation [id]=\"data.Name\" [formControlName]=\"data.Value\" [vertical]=\"sliderData?.IsVertical\"\r\n [min]=\"minValue\" [max]=\"maxValue\" [smallStep]=\"smallStep\" [largeStep]=\"largeStep\" [tickPlacement]=\"tickPlacement\"\r\n [showButtons]=\"sliderData?.ShowButtons\"\r\n [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n (valueChange)=\"onChange(null, $event)\" [style]=\"componentProperties?.style?.style1\" class=\"e1tag-style1\">\r\n </kendo-slider>&nbsp;\r\n\r\n <kendo-numerictextbox [formControlName]=\"data.Value\" [min]=\"minValue\" [max]=\"maxValue\"\r\n [spinners]=\"data.ShowSpinners\" [step]=\"data.StepValue\"\r\n [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n (valueChange)=\"onChange(null, $event)\" style=\"width: 30%;\">\r\n </kendo-numerictextbox>\r\n </div>\r\n</div>", styles: [".has-error-with-tick{padding-bottom:25px}\n"], components: [{ type: i2.SliderComponent, selector: "kendo-slider", inputs: ["focusableId", "dragHandleTitle", "incrementTitle", "animate", "decrementTitle", "showButtons", "value", "tabIndex"], exportAs: ["kendoSlider"] }, { type: i2.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZsliderComponent, decorators: [{
131
+ type: Component,
132
+ args: [{ selector: 'app-zslider', template: "<div [formGroup]=\"form\" class=\"zslider-container e1tag-style\" [style]=\"componentProperties.style.style\"\r\n [class.has-error-with-tick]=\"tickPlacement !== 'none' && hasError\">\r\n <div style=\"display: flex; width: 100%;\">\r\n <kendo-slider #orientation [id]=\"data.Name\" [formControlName]=\"data.Value\" [vertical]=\"sliderData?.IsVertical\"\r\n [min]=\"minValue\" [max]=\"maxValue\" [smallStep]=\"smallStep\" [largeStep]=\"largeStep\" [tickPlacement]=\"tickPlacement\"\r\n [showButtons]=\"sliderData?.ShowButtons\"\r\n [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n (valueChange)=\"onChange(null, $event)\" [style]=\"componentProperties?.style?.style1\" class=\"e1tag-style1\">\r\n </kendo-slider>&nbsp;\r\n\r\n <kendo-numerictextbox [formControlName]=\"data.Value\" [min]=\"minValue\" [max]=\"maxValue\"\r\n [spinners]=\"data.ShowSpinners\" [step]=\"data.StepValue\"\r\n [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n (valueChange)=\"onChange(null, $event)\" style=\"width: 30%;\">\r\n </kendo-numerictextbox>\r\n </div>\r\n</div>", styles: [".has-error-with-tick{padding-bottom:25px}\n"] }]
133
+ }], ctorParameters: function () { return [{ type: i1.ZComponentService }]; }, propDecorators: { data: [{
134
+ type: Input
135
+ }], group: [{
136
+ type: Input
137
+ }], form: [{
138
+ type: Input
139
+ }] } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96c2xpZGVyL3pzbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenNsaWRlci96c2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHcEUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxPQUFPLEVBQWMsZ0JBQWdCLEVBQXFDLE1BQU0saUJBQWlCLENBQUM7QUFDbEcsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU92RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQW9CbEQsWUFDUyxnQkFBbUM7UUFFMUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFGakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQVhyQyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBR2IsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxrQkFBYSxHQUFHLE1BQU0sQ0FBQztRQUN2QixnQkFBVyxHQUFHLENBQUMsQ0FBQztJQU12QixDQUFDO0lBbkJELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQW9DLENBQUM7SUFDbkQsQ0FBQztJQW1CRCxRQUFRO1FBQ04sS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FB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QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4RixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDM0YsQ0FBQzs7NkdBaEpVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLGtJQ2Y3Qiw0dkNBZ0JNOzJGRERPLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO3dHQUtkLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2lucHV0ZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkZpZWxkLCBaR3JvdXAsIHpTbGlkZXJQcm9wZXJ0aWVzIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16c2xpZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4venNsaWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4venNsaWRlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnNsaWRlckNvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgZ2V0IHNsaWRlckRhdGEoKTogelNsaWRlclByb3BlcnRpZXMge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YSBhcyB1bmtub3duIGFzIHpTbGlkZXJQcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBpbnB1dE1vZGUgPSBcImRlY2ltYWxcIjtcclxuICBwdWJsaWMgbWluVmFsdWUgPSAwO1xyXG4gIHB1YmxpYyBtYXhWYWx1ZSA9IDA7XHJcbiAgcHJpdmF0ZSBtaW5WYWxpZGF0b3I7XHJcbiAgcHJpdmF0ZSBtYXhWYWxpZGF0b3I7XHJcbiAgcHVibGljIHNtYWxsU3RlcCA9IDE7XHJcbiAgcHVibGljIGxhcmdlU3RlcCA9IDU7XHJcbiAgcHVibGljIHRpY2tQbGFjZW1lbnQgPSAnYm90aCc7XHJcbiAgcHVibGljIHNsaWRlcnZhbHVlID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5zZXR1cElubmVyRmllbGQoKTtcclxuICAgIHRoaXMuc2V0SW5pdFByb3BlcnR5VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZW1vdmVNaW5BbmRNYXhWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIHNldE1pblZhbHVlKG5ld1ZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWluVmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAvLyBtYXJrIHRoaXMgY29udHJvbCBhcyB0b3VjaGVkIHRvIHRyaWdnZXIgZm9yIHZhbGlkYXRpb25cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TWF4VmFsdWUobmV3VmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5tYXhWYWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgIC8vIG1hcmsgdGhpcyBjb250cm9sIGFzIHRvdWNoZWQgdG8gdHJpZ2dlciBmb3IgdmFsaWRhdGlvblxyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEluaXRQcm9wZXJ0eVZhbHVlKCkge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuTWluVmFsdWUgPT0gJ3N0cmluZycgJiYgKHRoaXMuZGF0YS5NaW5WYWx1ZSBhcyBhbnkpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5taW5WYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSgodGhpcy5kYXRhLk1pblZhbHVlIGFzIGFueSkudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuZGF0YS5NaW5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YS5NYXhWYWx1ZSA9PSAnc3RyaW5nJyAmJiAodGhpcy5kYXRhLk1heFZhbHVlIGFzIGFueSkudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLm1heFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKCh0aGlzLmRhdGEuTWF4VmFsdWUgYXMgYW55KS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1heFZhbHVlID0gdGhpcy5kYXRhLk1heFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5zbGlkZXJEYXRhLlNtYWxsU3RlcCA9PSAnc3RyaW5nJyAmJiAodGhpcy5zbGlkZXJEYXRhLlNtYWxsU3RlcCBhcyBhbnkpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5zbWFsbFN0ZXAgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoKHRoaXMuc2xpZGVyRGF0YS5TbWFsbFN0ZXAgYXMgYW55KS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNtYWxsU3RlcCA9IHRoaXMuc2xpZGVyRGF0YS5TbWFsbFN0ZXA7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFsbFN0ZXAgPD0gMCB8fCBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuc21hbGxTdGVwKSkge1xyXG4gICAgICB0aGlzLnNtYWxsU3RlcCA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNsaWRlckRhdGEuTGFyZ2VTdGVwID09ICdzdHJpbmcnICYmICh0aGlzLnNsaWRlckRhdGEuTGFyZ2VTdGVwIGFzIGFueSkudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmxhcmdlU3RlcCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSgodGhpcy5zbGlkZXJEYXRhLkxhcmdlU3RlcCBhcyBhbnkpLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubGFyZ2VTdGVwID0gdGhpcy5zbGlkZXJEYXRhLkxhcmdlU3RlcDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxhcmdlU3RlcCA8PSAwIHx8IFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5sYXJnZVN0ZXApKSB7XHJcbiAgICAgIHRoaXMubGFyZ2VTdGVwID0gNTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbGlkZXJEYXRhLlRpY2tQbGFjZW1lbnQgJiYgKHRoaXMuc2xpZGVyRGF0YS5UaWNrUGxhY2VtZW50IGFzIGFueSkudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLnRpY2tQbGFjZW1lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoKHRoaXMuc2xpZGVyRGF0YS5UaWNrUGxhY2VtZW50IGFzIGFueSkudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50aWNrUGxhY2VtZW50ID0gdGhpcy5zbGlkZXJEYXRhLlRpY2tQbGFjZW1lbnQgfHwgJ2JvdGgnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkTWluQW5kTWF4VmFsaWRhdG9yKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE1pbkFuZE1heFZhbGlkYXRvcigpIHtcclxuICAgIC8vIFNldHVwIGZvcm0gdmFsaWRhdG9yIGZvciBpb25pYyBjb21wb25lbnRzIG9ubHkgKEtlbmRvIGNvbXBvbmVudCB3aWxsIGJlIGF1dG8gc2V0dXApXHJcbiAgICBpZiAodGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0/LmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICAgIGlmIChjb250cm9sKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluVmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLm1pblZhbGlkYXRvciA9IFZhbGlkYXRvcnMubWluKE51bWJlcih0aGlzLm1pblZhbHVlKSk7XHJcbiAgICAgICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5taW5WYWxpZGF0b3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLm1heFZhbGlkYXRvciA9IFZhbGlkYXRvcnMubWF4KE51bWJlcih0aGlzLm1heFZhbHVlKSk7XHJcbiAgICAgICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5tYXhWYWxpZGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVNaW5BbmRNYXhWYWxpZGF0b3IoKSB7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMubWF4VmFsdWUgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0/LmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICBpZiAodGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKHRoaXMubWluVmFsaWRhdG9yKSkge1xyXG4gICAgICAgICAgY29udHJvbC5yZW1vdmVWYWxpZGF0b3JzKHRoaXMubWluVmFsaWRhdG9yKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKHRoaXMubWF4VmFsaWRhdG9yKSkge1xyXG4gICAgICAgICAgY29udHJvbC5yZW1vdmVWYWxpZGF0b3JzKHRoaXMubWF4VmFsaWRhdG9yKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBoYXNFcnJvcigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5mb3JtIHx8ICF0aGlzLmRhdGEgfHwgIXRoaXMuZGF0YS5WYWx1ZSB8fCAhdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV0pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgcmV0dXJuICFjb250cm9sLnZhbGlkICYmICFjb250cm9sLnVudG91Y2hlZCAmJiAhY29udHJvbC5kaXNhYmxlZCAmJiAhdGhpcy5mb3JtLnVudG91Y2hlZDtcclxuICB9XHJcbn1cclxuXHJcbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJ6c2xpZGVyLWNvbnRhaW5lciBlMXRhZy1zdHlsZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCJcclxuICBbY2xhc3MuaGFzLWVycm9yLXdpdGgtdGlja109XCJ0aWNrUGxhY2VtZW50ICE9PSAnbm9uZScgJiYgaGFzRXJyb3JcIj5cclxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgIHdpZHRoOiAxMDAlO1wiPlxyXG4gICAgPGtlbmRvLXNsaWRlciAjb3JpZW50YXRpb24gW2lkXT1cImRhdGEuTmFtZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZGF0YS5WYWx1ZVwiIFt2ZXJ0aWNhbF09XCJzbGlkZXJEYXRhPy5Jc1ZlcnRpY2FsXCJcclxuICAgICAgW21pbl09XCJtaW5WYWx1ZVwiIFttYXhdPVwibWF4VmFsdWVcIiBbc21hbGxTdGVwXT1cInNtYWxsU3RlcFwiIFtsYXJnZVN0ZXBdPVwibGFyZ2VTdGVwXCIgW3RpY2tQbGFjZW1lbnRdPVwidGlja1BsYWNlbWVudFwiXHJcbiAgICAgIFtzaG93QnV0dG9uc109XCJzbGlkZXJEYXRhPy5TaG93QnV0dG9uc1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UobnVsbCwgJGV2ZW50KVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzPy5zdHlsZT8uc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuICAgIDwva2VuZG8tc2xpZGVyPiZuYnNwO1xyXG5cclxuICAgIDxrZW5kby1udW1lcmljdGV4dGJveCBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIiBbbWluXT1cIm1pblZhbHVlXCIgW21heF09XCJtYXhWYWx1ZVwiXHJcbiAgICAgIFtzcGlubmVyc109XCJkYXRhLlNob3dTcGlubmVyc1wiIFtzdGVwXT1cImRhdGEuU3RlcFZhbHVlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZShudWxsLCAkZXZlbnQpXCIgc3R5bGU9XCJ3aWR0aDogMzAlO1wiPlxyXG4gICAgPC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19