@alauda-fe/crd-form 0.0.1
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/esm2022/alauda-fe-crd-form.mjs +5 -0
- package/esm2022/lib/abstract/base-array.mjs +117 -0
- package/esm2022/lib/crd-form/component.mjs +334 -0
- package/esm2022/lib/crd-form/helper.mjs +32 -0
- package/esm2022/lib/crd-form.module.mjs +117 -0
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +2 -0
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +58 -0
- package/esm2022/lib/field-controls/form-item.component.mjs +121 -0
- package/esm2022/lib/field-controls/index.mjs +8 -0
- package/esm2022/lib/field-controls/module.mjs +141 -0
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +80 -0
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +112 -0
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +98 -0
- package/esm2022/lib/field-controls/operand-field.component.mjs +870 -0
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +109 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +116 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +211 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +2 -0
- package/esm2022/lib/field-controls/widgets/index.mjs +8 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +169 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +40 -0
- package/esm2022/lib/field-controls/widgets/link/component.mjs +68 -0
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +524 -0
- package/esm2022/lib/field-controls/widgets/utils.mjs +73 -0
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +94 -0
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +35 -0
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +171 -0
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +4 -0
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +54 -0
- package/esm2022/lib/field-widgets/index.mjs +2 -0
- package/esm2022/lib/remote-widgets/constants.mjs +4 -0
- package/esm2022/lib/remote-widgets/index.mjs +4 -0
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +42 -0
- package/esm2022/lib/remote-widgets/token.mjs +7 -0
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +139 -0
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +189 -0
- package/esm2022/lib/spec-descriptors/index.mjs +4 -0
- package/esm2022/lib/spec-descriptors/util.mjs +13 -0
- package/esm2022/lib/types/index.mjs +73 -0
- package/esm2022/lib/utils/capability.mjs +295 -0
- package/esm2022/lib/utils/constant.mjs +22 -0
- package/esm2022/lib/utils/directives.mjs +19 -0
- package/esm2022/lib/utils/helper.mjs +201 -0
- package/esm2022/lib/utils/index.mjs +7 -0
- package/esm2022/lib/utils/service-model.mjs +12 -0
- package/esm2022/lib/utils/util.mjs +310 -0
- package/esm2022/public-api.mjs +13 -0
- package/index.d.ts +5 -0
- package/lib/abstract/base-array.d.ts +31 -0
- package/lib/crd-form/component.d.ts +61 -0
- package/lib/crd-form/helper.d.ts +7 -0
- package/lib/crd-form.module.d.ts +16 -0
- package/lib/field-controls/expressions/expression-core.d.ts +6 -0
- package/lib/field-controls/expressions/props-expression.d.ts +36 -0
- package/lib/field-controls/form-item.component.d.ts +11 -0
- package/lib/field-controls/index.d.ts +7 -0
- package/lib/field-controls/module.d.ts +23 -0
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +16 -0
- package/lib/field-controls/operand-array-field-group.component.d.ts +8 -0
- package/lib/field-controls/operand-field-group.component.d.ts +24 -0
- package/lib/field-controls/operand-field.component.d.ts +110 -0
- package/lib/field-controls/widgets/array-table/component.d.ts +8 -0
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +26 -0
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +45 -0
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +11 -0
- package/lib/field-controls/widgets/index.d.ts +7 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +35 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +3 -0
- package/lib/field-controls/widgets/link/component.d.ts +20 -0
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +88 -0
- package/lib/field-controls/widgets/utils.d.ts +17 -0
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +36 -0
- package/lib/field-widgets/htpasswd/component.d.ts +9 -0
- package/lib/field-widgets/htpasswd/form.d.ts +32 -0
- package/lib/field-widgets/htpasswd/index.d.ts +3 -0
- package/lib/field-widgets/htpasswd/module.d.ts +13 -0
- package/lib/field-widgets/index.d.ts +1 -0
- package/lib/remote-widgets/constants.d.ts +3 -0
- package/lib/remote-widgets/index.d.ts +3 -0
- package/lib/remote-widgets/remote-widget.service.d.ts +28 -0
- package/lib/remote-widgets/token.d.ts +3 -0
- package/lib/spec-descriptors/capability/capability.component.d.ts +20 -0
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +34 -0
- package/lib/spec-descriptors/index.d.ts +3 -0
- package/lib/spec-descriptors/util.d.ts +4 -0
- package/lib/types/index.d.ts +122 -0
- package/lib/utils/capability.d.ts +54 -0
- package/lib/utils/constant.d.ts +12 -0
- package/lib/utils/directives.d.ts +9 -0
- package/lib/utils/helper.d.ts +61 -0
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/service-model.d.ts +44 -0
- package/lib/utils/util.d.ts +48 -0
- package/package.json +30 -0
- package/public-api.d.ts +9 -0
|
@@ -0,0 +1,870 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { API_GATEWAY, createActions, isEqual, ObservableInput, publishRef, skipError, startWithCondition, viewActions, yamlReadOptions, yamlWriteOptions, } from '@alauda-fe/common';
|
|
3
|
+
import { HttpClient } from '@angular/common/http';
|
|
4
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Injector, Input, Output,
|
|
5
|
+
// cspell:disable-next-line
|
|
6
|
+
ɵcreateInjector as createInjector, } from '@angular/core';
|
|
7
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
8
|
+
import { decode, encode } from 'ab64';
|
|
9
|
+
import { isImmutable } from 'immutable';
|
|
10
|
+
import { get, identity, map as $map, template } from 'lodash-es';
|
|
11
|
+
import { combineLatest, map, filter, Observable, Subject, debounceTime, distinctUntilChanged, shareReplay, takeUntil, BehaviorSubject, switchMap, of, finalize, isObservable, take, } from 'rxjs';
|
|
12
|
+
import { CrdFormComponent } from '../crd-form/component';
|
|
13
|
+
import { SpecCapability, Validations, } from '../types';
|
|
14
|
+
import { convertBooleanSwitchValue, convertValue, CrdFormCustomDescriptionDirective, getDefaultValue, getDisplayByCapability, getFieldDescription, getFieldDisplayName, getFieldType, getFormData, getRadioOptions, normalizePath, } from '../utils';
|
|
15
|
+
import { isArrayField, isArrayFieldTable, isClearable, isCreatable, isGroupField, isMultiple, isAllowCreate, isRemoteField, isRequired, evalInContext, getOperandPath, } from '../utils/helper';
|
|
16
|
+
import { compareWithSubscribedPaths, PropsFieldExpression, } from './expressions/props-expression';
|
|
17
|
+
import { isLink } from './widgets/link/component';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "../crd-form/component";
|
|
20
|
+
import * as i2 from "@angular/common/http";
|
|
21
|
+
const _c0 = (a0, a1) => ({ fieldType: a0, isBasicTypeField: a1 });
|
|
22
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelement(0, "input", 21);
|
|
24
|
+
i0.ɵɵpipe(1, "pure");
|
|
25
|
+
i0.ɵɵpipe(2, "translate");
|
|
26
|
+
} if (rf & 2) {
|
|
27
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
28
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind3(1, 4, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)));
|
|
29
|
+
} }
|
|
30
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵtext(0);
|
|
32
|
+
i0.ɵɵpipe(1, "pure");
|
|
33
|
+
i0.ɵɵpipe(2, "translate");
|
|
34
|
+
} if (rf & 2) {
|
|
35
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
36
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 5, i0.ɵɵpipeBind3(1, 1, ctx_r0.control.value, ctx_r0.convertBooleanSwitchValue, ctx_r0.field.capabilities)));
|
|
37
|
+
} }
|
|
38
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
39
|
+
i0.ɵɵelementContainerStart(0);
|
|
40
|
+
i0.ɵɵelement(1, "aui-switch", 22);
|
|
41
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_ng_template_2_Template, 3, 7, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
|
|
42
|
+
i0.ɵɵelementContainerEnd();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const switchReadonly_r2 = i0.ɵɵreference(3);
|
|
45
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
46
|
+
i0.ɵɵadvance();
|
|
47
|
+
i0.ɵɵproperty("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", switchReadonly_r2)("formControl", ctx_r0.control);
|
|
48
|
+
} }
|
|
49
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_aui_option_2_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementStart(0, "aui-option", 27);
|
|
51
|
+
i0.ɵɵtext(1);
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
} if (rf & 2) {
|
|
54
|
+
const option_r3 = ctx.$implicit;
|
|
55
|
+
i0.ɵɵproperty("value", option_r3.value)("label", option_r3.label);
|
|
56
|
+
i0.ɵɵadvance();
|
|
57
|
+
i0.ɵɵtextInterpolate1(" ", option_r3.label, " ");
|
|
58
|
+
} }
|
|
59
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "aui-multi-select", 25);
|
|
61
|
+
i0.ɵɵpipe(1, "async");
|
|
62
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_aui_option_2_Template, 2, 3, "aui-option", 26);
|
|
63
|
+
i0.ɵɵpipe(3, "async");
|
|
64
|
+
i0.ɵɵelementStart(4, "aui-option-placeholder");
|
|
65
|
+
i0.ɵɵtext(5);
|
|
66
|
+
i0.ɵɵpipe(6, "translate");
|
|
67
|
+
i0.ɵɵelementEnd()();
|
|
68
|
+
} if (rf & 2) {
|
|
69
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
70
|
+
i0.ɵɵproperty("maxRowCount", 3)("clearable", true)("filterable", true)("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("loading", i0.ɵɵpipeBind1(1, 10, ctx_r0.loading$))("allowCreate", ctx_r0.isAllowCreate);
|
|
71
|
+
i0.ɵɵadvance(2);
|
|
72
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 12, ctx_r0.dynamicOptions$));
|
|
73
|
+
i0.ɵɵadvance(3);
|
|
74
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 14, "no_data"));
|
|
75
|
+
} }
|
|
76
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_aui_option_2_Template(rf, ctx) { if (rf & 1) {
|
|
77
|
+
i0.ɵɵelementStart(0, "aui-option", 27);
|
|
78
|
+
i0.ɵɵpipe(1, "aclParseJsonTranslate");
|
|
79
|
+
i0.ɵɵtext(2);
|
|
80
|
+
i0.ɵɵpipe(3, "aclParseJsonTranslate");
|
|
81
|
+
i0.ɵɵelementEnd();
|
|
82
|
+
} if (rf & 2) {
|
|
83
|
+
const option_r4 = ctx.$implicit;
|
|
84
|
+
i0.ɵɵproperty("value", option_r4.value)("label", i0.ɵɵpipeBind1(1, 3, option_r4.label));
|
|
85
|
+
i0.ɵɵadvance(2);
|
|
86
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, option_r4.label), " ");
|
|
87
|
+
} }
|
|
88
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "aui-select", 28);
|
|
90
|
+
i0.ɵɵpipe(1, "async");
|
|
91
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_aui_option_2_Template, 4, 7, "aui-option", 26);
|
|
92
|
+
i0.ɵɵpipe(3, "async");
|
|
93
|
+
i0.ɵɵelementStart(4, "aui-option-placeholder");
|
|
94
|
+
i0.ɵɵtext(5);
|
|
95
|
+
i0.ɵɵpipe(6, "translate");
|
|
96
|
+
i0.ɵɵelementEnd()();
|
|
97
|
+
} if (rf & 2) {
|
|
98
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
99
|
+
i0.ɵɵproperty("clearable", true)("filterable", true)("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("loading", i0.ɵɵpipeBind1(1, 9, ctx_r0.loading$))("allowCreate", ctx_r0.isAllowCreate);
|
|
100
|
+
i0.ɵɵadvance(2);
|
|
101
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 11, ctx_r0.dynamicOptions$));
|
|
102
|
+
i0.ɵɵadvance(3);
|
|
103
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 13, "no_data"));
|
|
104
|
+
} }
|
|
105
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
+
i0.ɵɵelementContainerStart(0);
|
|
107
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_Template, 7, 16, "aui-multi-select", 23)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_Template, 7, 15, "aui-select", 24);
|
|
108
|
+
i0.ɵɵelementContainerEnd();
|
|
109
|
+
} if (rf & 2) {
|
|
110
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
111
|
+
i0.ɵɵadvance();
|
|
112
|
+
i0.ɵɵproperty("ngIf", ctx_r0.isMultiple);
|
|
113
|
+
i0.ɵɵadvance();
|
|
114
|
+
i0.ɵɵproperty("ngIf", !ctx_r0.isMultiple);
|
|
115
|
+
} }
|
|
116
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_aui_radio_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
117
|
+
i0.ɵɵelementStart(0, "aui-radio-button", 31);
|
|
118
|
+
i0.ɵɵtext(1);
|
|
119
|
+
i0.ɵɵpipe(2, "translate");
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
121
|
+
} if (rf & 2) {
|
|
122
|
+
const option_r5 = ctx.$implicit;
|
|
123
|
+
i0.ɵɵproperty("value", option_r5.value);
|
|
124
|
+
i0.ɵɵadvance();
|
|
125
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, option_r5.display), " ");
|
|
126
|
+
} }
|
|
127
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
128
|
+
i0.ɵɵtext(0);
|
|
129
|
+
i0.ɵɵpipe(1, "pure");
|
|
130
|
+
i0.ɵɵpipe(2, "pure");
|
|
131
|
+
i0.ɵɵpipe(3, "translate");
|
|
132
|
+
} if (rf & 2) {
|
|
133
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
134
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 8, i0.ɵɵpipeBind3(2, 4, ctx_r0.control.value, ctx_r0.getOptionDisplay, i0.ɵɵpipeBind2(1, 1, ctx_r0.field.capabilities, ctx_r0.getRadioOptions))), " ");
|
|
135
|
+
} }
|
|
136
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
+
i0.ɵɵelementStart(0, "aui-radio-group", 29);
|
|
138
|
+
i0.ɵɵelementContainerStart(1);
|
|
139
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_aui_radio_button_2_Template, 3, 4, "aui-radio-button", 30);
|
|
140
|
+
i0.ɵɵpipe(3, "pure");
|
|
141
|
+
i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_ng_template_4_Template, 4, 10, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
|
|
142
|
+
i0.ɵɵelementContainerEnd();
|
|
143
|
+
i0.ɵɵelementEnd();
|
|
144
|
+
} if (rf & 2) {
|
|
145
|
+
const radioLabel_r6 = i0.ɵɵreference(5);
|
|
146
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
147
|
+
i0.ɵɵproperty("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", radioLabel_r6);
|
|
148
|
+
i0.ɵɵadvance(2);
|
|
149
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(3, 5, ctx_r0.field.capabilities, ctx_r0.getRadioOptions));
|
|
150
|
+
} }
|
|
151
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
152
|
+
i0.ɵɵelement(0, "acl-crd-resource-requirements", 33);
|
|
153
|
+
} if (rf & 2) {
|
|
154
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
155
|
+
i0.ɵɵproperty("ngModel", ctx_r0.control.value)("readOnly", true);
|
|
156
|
+
} }
|
|
157
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
158
|
+
i0.ɵɵelementContainerStart(0);
|
|
159
|
+
i0.ɵɵelement(1, "acl-crd-resource-requirements", 32);
|
|
160
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_ng_template_2_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
|
|
161
|
+
i0.ɵɵelementContainerEnd();
|
|
162
|
+
} if (rf & 2) {
|
|
163
|
+
const resourceRequirementsReadonly_r7 = i0.ɵɵreference(3);
|
|
164
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
165
|
+
i0.ɵɵadvance();
|
|
166
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", resourceRequirementsReadonly_r7);
|
|
167
|
+
} }
|
|
168
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
+
i0.ɵɵelement(0, "acl-crd-yaml-editor", 35);
|
|
170
|
+
} if (rf & 2) {
|
|
171
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
172
|
+
i0.ɵɵproperty("ngModel", ctx_r0.control.value)("actionsConfig", ctx_r0.viewActions)("options", ctx_r0.viewOptions);
|
|
173
|
+
} }
|
|
174
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
+
i0.ɵɵelementContainerStart(0);
|
|
176
|
+
i0.ɵɵelement(1, "acl-crd-yaml-editor", 34);
|
|
177
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_ng_template_2_Template, 1, 3, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
|
|
178
|
+
i0.ɵɵelementContainerEnd();
|
|
179
|
+
} if (rf & 2) {
|
|
180
|
+
const yamlReadonly_r8 = i0.ɵɵreference(3);
|
|
181
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
182
|
+
i0.ɵɵadvance();
|
|
183
|
+
i0.ɵɵproperty("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("actionsConfig", ctx_r0.editorActions)("options", ctx_r0.editorOptions)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", yamlReadonly_r8);
|
|
184
|
+
} }
|
|
185
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
+
i0.ɵɵelement(0, "acl-crd-resource-prefix", 37);
|
|
187
|
+
} if (rf & 2) {
|
|
188
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
189
|
+
i0.ɵɵproperty("field", ctx_r0.field)("ngModel", ctx_r0.control.value)("readonly", true);
|
|
190
|
+
} }
|
|
191
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
+
i0.ɵɵelementContainerStart(0);
|
|
193
|
+
i0.ɵɵelement(1, "acl-crd-resource-prefix", 36);
|
|
194
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_ng_template_2_Template, 1, 3, "ng-template", null, 7, i0.ɵɵtemplateRefExtractor);
|
|
195
|
+
i0.ɵɵelementContainerEnd();
|
|
196
|
+
} if (rf & 2) {
|
|
197
|
+
const resourcePrefixReadonly_r9 = i0.ɵɵreference(3);
|
|
198
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
199
|
+
i0.ɵɵadvance();
|
|
200
|
+
i0.ɵɵproperty("formErrors", ctx_r0.control.errors)("field", ctx_r0.field)("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", resourcePrefixReadonly_r9);
|
|
201
|
+
} }
|
|
202
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_8_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
+
i0.ɵɵelementContainerStart(0);
|
|
204
|
+
i0.ɵɵelement(1, "acl-crd-basic-auth-secret", 38);
|
|
205
|
+
i0.ɵɵelementContainerEnd();
|
|
206
|
+
} if (rf & 2) {
|
|
207
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
208
|
+
i0.ɵɵadvance();
|
|
209
|
+
i0.ɵɵproperty("field", ctx_r0.field)("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled);
|
|
210
|
+
} }
|
|
211
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_textarea_9_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
+
i0.ɵɵelement(0, "textarea", 39);
|
|
213
|
+
i0.ɵɵpipe(1, "pure");
|
|
214
|
+
i0.ɵɵpipe(2, "translate");
|
|
215
|
+
} if (rf & 2) {
|
|
216
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
217
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind3(1, 4, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)));
|
|
218
|
+
} }
|
|
219
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
+
i0.ɵɵelement(0, "aui-tags-input", 40);
|
|
221
|
+
i0.ɵɵpipe(1, "pure");
|
|
222
|
+
i0.ɵɵpipe(2, "translate");
|
|
223
|
+
} if (rf & 2) {
|
|
224
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
225
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 9, i0.ɵɵpipeBind3(1, 5, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)))("aclReadonlyField", ctx_r0.isDisabled)("clearable", ctx_r0.isClearable);
|
|
226
|
+
} }
|
|
227
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_acl_crd_link_1_Template(rf, ctx) { if (rf & 1) {
|
|
228
|
+
i0.ɵɵelement(0, "acl-crd-link", 42);
|
|
229
|
+
} if (rf & 2) {
|
|
230
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
231
|
+
i0.ɵɵproperty("field", ctx_r0.field)("formControl", ctx_r0.control);
|
|
232
|
+
} }
|
|
233
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_Template(rf, ctx) { if (rf & 1) {
|
|
234
|
+
i0.ɵɵelementContainerStart(0);
|
|
235
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_acl_crd_link_1_Template, 1, 2, "acl-crd-link", 41);
|
|
236
|
+
i0.ɵɵpipe(2, "pure");
|
|
237
|
+
i0.ɵɵelementContainerEnd();
|
|
238
|
+
} if (rf & 2) {
|
|
239
|
+
i0.ɵɵnextContext();
|
|
240
|
+
const textField_r10 = i0.ɵɵreference(13);
|
|
241
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
242
|
+
i0.ɵɵadvance();
|
|
243
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.isLink) && ctx_r0.isDisabled)("ngIfElse", textField_r10);
|
|
244
|
+
} }
|
|
245
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_template_12_Template(rf, ctx) { if (rf & 1) {
|
|
246
|
+
i0.ɵɵelement(0, "input", 43);
|
|
247
|
+
i0.ɵɵpipe(1, "pure");
|
|
248
|
+
i0.ɵɵpipe(2, "translate");
|
|
249
|
+
} if (rf & 2) {
|
|
250
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
251
|
+
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind3(1, 4, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)))("aclReadonlyField", ctx_r0.isDisabled);
|
|
252
|
+
} }
|
|
253
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
i0.ɵɵelementStart(0, "acl-crd-form-item", 14);
|
|
255
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template, 3, 10, "input", 15)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_Template, 4, 3, "ng-container", 16)(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_Template, 3, 2, "ng-container", 16)(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_Template, 6, 8, "aui-radio-group", 17)(5, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_Template, 4, 4, "ng-container", 16)(6, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_Template, 4, 6, "ng-container", 16)(7, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_Template, 4, 6, "ng-container", 16)(8, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_8_Template, 2, 4, "ng-container", 16)(9, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_textarea_9_Template, 3, 10, "textarea", 18)(10, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template, 3, 11, "aui-tags-input", 19)(11, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_Template, 3, 5, "ng-container", 20)(12, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_template_12_Template, 3, 10, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
|
|
256
|
+
i0.ɵɵelementEnd();
|
|
257
|
+
} if (rf & 2) {
|
|
258
|
+
const meta_r11 = i0.ɵɵnextContext(2).ngIf;
|
|
259
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
260
|
+
i0.ɵɵproperty("ngSwitch", meta_r11.fieldType);
|
|
261
|
+
i0.ɵɵadvance();
|
|
262
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.number);
|
|
263
|
+
i0.ɵɵadvance();
|
|
264
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.booleanSwitch);
|
|
265
|
+
i0.ɵɵadvance();
|
|
266
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.select);
|
|
267
|
+
i0.ɵɵadvance();
|
|
268
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.radio);
|
|
269
|
+
i0.ɵɵadvance();
|
|
270
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.resourceRequirements);
|
|
271
|
+
i0.ɵɵadvance();
|
|
272
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.yaml);
|
|
273
|
+
i0.ɵɵadvance();
|
|
274
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.k8sResourcePrefix);
|
|
275
|
+
i0.ɵɵadvance();
|
|
276
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.basicAuthSecret);
|
|
277
|
+
i0.ɵɵadvance();
|
|
278
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.textarea);
|
|
279
|
+
i0.ɵɵadvance();
|
|
280
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.tagsInput);
|
|
281
|
+
} }
|
|
282
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
283
|
+
i0.ɵɵelementContainer(0);
|
|
284
|
+
} }
|
|
285
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
286
|
+
i0.ɵɵelementStart(0, "div", 44);
|
|
287
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_ng_container_1_Template, 1, 0, "ng-container", 45);
|
|
288
|
+
i0.ɵɵelementEnd();
|
|
289
|
+
} if (rf & 2) {
|
|
290
|
+
const widget_r12 = ctx.ngIf;
|
|
291
|
+
i0.ɵɵadvance();
|
|
292
|
+
i0.ɵɵproperty("ngComponentOutlet", widget_r12.component);
|
|
293
|
+
} }
|
|
294
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_label_2_Template(rf, ctx) { if (rf & 1) {
|
|
295
|
+
i0.ɵɵelementStart(0, "label", 50);
|
|
296
|
+
i0.ɵɵtext(1);
|
|
297
|
+
i0.ɵɵpipe(2, "translate");
|
|
298
|
+
i0.ɵɵelementEnd();
|
|
299
|
+
} if (rf & 2) {
|
|
300
|
+
const label_r13 = ctx.ngIf;
|
|
301
|
+
i0.ɵɵadvance();
|
|
302
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, label_r13));
|
|
303
|
+
} }
|
|
304
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
+
i0.ɵɵelementContainer(0);
|
|
306
|
+
} }
|
|
307
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
308
|
+
i0.ɵɵelementContainerStart(0);
|
|
309
|
+
i0.ɵɵelementStart(1, "aui-form-item", 46);
|
|
310
|
+
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_label_2_Template, 3, 3, "label", 47);
|
|
311
|
+
i0.ɵɵpipe(3, "pure");
|
|
312
|
+
i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_ng_container_4_Template, 1, 0, "ng-container", 48);
|
|
313
|
+
i0.ɵɵelementStart(5, "div", 49);
|
|
314
|
+
i0.ɵɵtext(6);
|
|
315
|
+
i0.ɵɵpipe(7, "pure");
|
|
316
|
+
i0.ɵɵpipe(8, "translate");
|
|
317
|
+
i0.ɵɵelementEnd()();
|
|
318
|
+
i0.ɵɵelementContainerEnd();
|
|
319
|
+
} if (rf & 2) {
|
|
320
|
+
const remoteModule_r14 = i0.ɵɵnextContext().ngIf;
|
|
321
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
322
|
+
i0.ɵɵadvance();
|
|
323
|
+
i0.ɵɵproperty("emptyAddon", false);
|
|
324
|
+
i0.ɵɵadvance();
|
|
325
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(3, 5, ctx_r0.field, ctx_r0.getFieldDisplayName));
|
|
326
|
+
i0.ɵɵadvance(2);
|
|
327
|
+
i0.ɵɵproperty("ngComponentOutlet", remoteModule_r14.component)("ngComponentOutletInjector", remoteModule_r14.injector);
|
|
328
|
+
i0.ɵɵadvance(2);
|
|
329
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 11, i0.ɵɵpipeBind2(7, 8, ctx_r0.field, ctx_r0.getFieldDescription)), " ");
|
|
330
|
+
} }
|
|
331
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
332
|
+
i0.ɵɵelementContainer(0);
|
|
333
|
+
} }
|
|
334
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
+
i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_ng_container_0_Template, 1, 0, "ng-container", 48);
|
|
336
|
+
} if (rf & 2) {
|
|
337
|
+
const remoteModule_r14 = i0.ɵɵnextContext().ngIf;
|
|
338
|
+
i0.ɵɵproperty("ngComponentOutlet", remoteModule_r14.component)("ngComponentOutletInjector", remoteModule_r14.injector);
|
|
339
|
+
} }
|
|
340
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
+
i0.ɵɵelementContainerStart(0);
|
|
342
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_Template, 9, 13, "ng-container", 11);
|
|
343
|
+
i0.ɵɵpipe(2, "pure");
|
|
344
|
+
i0.ɵɵtemplate(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_Template, 1, 2, "ng-template", null, 8, i0.ɵɵtemplateRefExtractor);
|
|
345
|
+
i0.ɵɵelementContainerEnd();
|
|
346
|
+
} if (rf & 2) {
|
|
347
|
+
const pureRemote_r15 = i0.ɵɵreference(4);
|
|
348
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
349
|
+
i0.ɵɵadvance();
|
|
350
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.getFieldDisplayName))("ngIfElse", pureRemote_r15);
|
|
351
|
+
} }
|
|
352
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
353
|
+
i0.ɵɵelementContainerStart(0);
|
|
354
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_Template, 5, 5, "ng-container", 10);
|
|
355
|
+
i0.ɵɵpipe(2, "async");
|
|
356
|
+
i0.ɵɵelementContainerEnd();
|
|
357
|
+
} if (rf & 2) {
|
|
358
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
359
|
+
i0.ɵɵadvance();
|
|
360
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r0.remoteModule$));
|
|
361
|
+
} }
|
|
362
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
363
|
+
i0.ɵɵelementContainerStart(0);
|
|
364
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template, 14, 11, "acl-crd-form-item", 12);
|
|
365
|
+
i0.ɵɵpipe(2, "pure");
|
|
366
|
+
i0.ɵɵpipe(3, "pure");
|
|
367
|
+
i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_Template, 2, 1, "div", 13);
|
|
368
|
+
i0.ɵɵpipe(5, "pure");
|
|
369
|
+
i0.ɵɵtemplate(6, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_Template, 3, 3, "ng-container", 10);
|
|
370
|
+
i0.ɵɵpipe(7, "pure");
|
|
371
|
+
i0.ɵɵelementContainerEnd();
|
|
372
|
+
} if (rf & 2) {
|
|
373
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
374
|
+
i0.ɵɵadvance();
|
|
375
|
+
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind2(2, 3, ctx_r0.field.capabilities, ctx_r0.getWidgets) && !i0.ɵɵpipeBind2(3, 6, ctx_r0.field, ctx_r0.isRemoteField));
|
|
376
|
+
i0.ɵɵadvance(3);
|
|
377
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(5, 9, ctx_r0.field.capabilities, ctx_r0.getWidgets));
|
|
378
|
+
i0.ɵɵadvance(2);
|
|
379
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(7, 12, ctx_r0.field, ctx_r0.isRemoteField));
|
|
380
|
+
} }
|
|
381
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
382
|
+
i0.ɵɵelementContainer(0);
|
|
383
|
+
} }
|
|
384
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
+
i0.ɵɵelementStart(0, "acl-crd-form-item", 53);
|
|
386
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_ng_container_1_Template, 1, 0, "ng-container", 54);
|
|
387
|
+
i0.ɵɵelementEnd();
|
|
388
|
+
} if (rf & 2) {
|
|
389
|
+
i0.ɵɵnextContext(5);
|
|
390
|
+
const passwordView_r16 = i0.ɵɵreference(2);
|
|
391
|
+
i0.ɵɵproperty("plain", true);
|
|
392
|
+
i0.ɵɵadvance();
|
|
393
|
+
i0.ɵɵproperty("ngTemplateOutlet", passwordView_r16);
|
|
394
|
+
} }
|
|
395
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_password_input_2_Template(rf, ctx) { if (rf & 1) {
|
|
396
|
+
i0.ɵɵelement(0, "acl-password-input", 55);
|
|
397
|
+
i0.ɵɵpipe(1, "pure");
|
|
398
|
+
i0.ɵɵpipe(2, "translate");
|
|
399
|
+
i0.ɵɵpipe(3, "pure");
|
|
400
|
+
i0.ɵɵpipe(4, "translate");
|
|
401
|
+
i0.ɵɵpipe(5, "pure");
|
|
402
|
+
i0.ɵɵpipe(6, "pure");
|
|
403
|
+
i0.ɵɵpipe(7, "translate");
|
|
404
|
+
} if (rf & 2) {
|
|
405
|
+
const meta_r11 = i0.ɵɵnextContext(3).ngIf;
|
|
406
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
407
|
+
i0.ɵɵproperty("initPassword", ctx_r0.control.value)("label", i0.ɵɵpipeBind1(2, 15, i0.ɵɵpipeBind2(1, 12, ctx_r0.field, ctx_r0.getFieldDisplayName)))("hint", (ctx_r0.customDescription == null ? null : ctx_r0.customDescription.templateRef) || i0.ɵɵpipeBind1(4, 20, i0.ɵɵpipeBind2(3, 17, ctx_r0.field, ctx_r0.getFieldDescription)))("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("readonly", ctx_r0.crdForm.readonly)("isUpdate", !!ctx_r0.control.value && !ctx_r0.control.dirty)("strongPassword", meta_r11.fieldType !== ctx_r0.SpecCapability.externalPassword)("enableConfirm", meta_r11.fieldType === ctx_r0.SpecCapability.confirmPassword)("encoding", i0.ɵɵpipeBind3(5, 22, ctx_r0.field, ctx_r0.getEncoding, "password"))("pattern", ctx_r0.field.validations == null ? null : ctx_r0.field.validations.pattern)("placeholder", i0.ɵɵpipeBind1(7, 30, i0.ɵɵpipeBind3(6, 26, ctx_r0.field.capabilities, ctx_r0.getDisplayByCapability, ctx_r0.SpecCapability.placeholder)));
|
|
408
|
+
} }
|
|
409
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
+
i0.ɵɵelementContainerStart(0);
|
|
411
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_Template, 2, 2, "acl-crd-form-item", 51)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_password_input_2_Template, 8, 32, "acl-password-input", 52);
|
|
412
|
+
i0.ɵɵelementContainerEnd();
|
|
413
|
+
} if (rf & 2) {
|
|
414
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
415
|
+
i0.ɵɵadvance();
|
|
416
|
+
i0.ɵɵproperty("ngIf", ctx_r0.isDisabled);
|
|
417
|
+
i0.ɵɵadvance();
|
|
418
|
+
i0.ɵɵproperty("ngIf", !ctx_r0.isDisabled);
|
|
419
|
+
} }
|
|
420
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
421
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
422
|
+
i0.ɵɵelementContainerStart(0);
|
|
423
|
+
i0.ɵɵelementStart(1, "acl-operand-field-group", 56);
|
|
424
|
+
i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template_acl_operand_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
|
|
425
|
+
i0.ɵɵelementEnd();
|
|
426
|
+
i0.ɵɵelementContainerEnd();
|
|
427
|
+
} if (rf & 2) {
|
|
428
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
429
|
+
i0.ɵɵadvance();
|
|
430
|
+
i0.ɵɵproperty("fields", ctx_r0.fields)("fieldGroup", ctx_r0.field)("readonly", ctx_r0.isDisabled)("formDataState", ctx_r0.formDataState)("formErrors", ctx_r0.formErrors);
|
|
431
|
+
} }
|
|
432
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template(rf, ctx) { if (rf & 1) {
|
|
433
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
434
|
+
i0.ɵɵelementStart(0, "acl-crd-array-table", 58);
|
|
435
|
+
i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template_acl_crd_array_table_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
|
|
436
|
+
i0.ɵɵelementEnd();
|
|
437
|
+
} if (rf & 2) {
|
|
438
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
439
|
+
i0.ɵɵproperty("arrayFieldGroup", ctx_r0.field)("formDataState", ctx_r0.formDataState)("readonly", ctx_r0.isDisabled);
|
|
440
|
+
} }
|
|
441
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
443
|
+
i0.ɵɵelementStart(0, "acl-operand-array-field-group", 59);
|
|
444
|
+
i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template_acl_operand_array_field_group_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
|
|
445
|
+
i0.ɵɵelementEnd();
|
|
446
|
+
} if (rf & 2) {
|
|
447
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
448
|
+
i0.ɵɵproperty("arrayFieldGroup", ctx_r0.field)("readonly", ctx_r0.isDisabled)("formDataState", ctx_r0.formDataState);
|
|
449
|
+
} }
|
|
450
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
451
|
+
i0.ɵɵelementContainerStart(0);
|
|
452
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template, 1, 3, "acl-crd-array-table", 57);
|
|
453
|
+
i0.ɵɵpipe(2, "pure");
|
|
454
|
+
i0.ɵɵtemplate(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template, 1, 3, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor);
|
|
455
|
+
i0.ɵɵelementContainerEnd();
|
|
456
|
+
} if (rf & 2) {
|
|
457
|
+
const defaultArrayFiled_r20 = i0.ɵɵreference(4);
|
|
458
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
459
|
+
i0.ɵɵadvance();
|
|
460
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.isArrayFieldTable))("ngIfElse", defaultArrayFiled_r20);
|
|
461
|
+
} }
|
|
462
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
463
|
+
i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template, 3, 2, "ng-container", 10)(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template, 2, 5, "ng-container", 10)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_Template, 5, 5, "ng-container", 10);
|
|
464
|
+
} if (rf & 2) {
|
|
465
|
+
const meta_r11 = i0.ɵɵnextContext().ngIf;
|
|
466
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
467
|
+
i0.ɵɵproperty("ngIf", meta_r11.fieldType === ctx_r0.SpecCapability.password || meta_r11.fieldType === ctx_r0.SpecCapability.confirmPassword || meta_r11.fieldType === ctx_r0.SpecCapability.externalPassword);
|
|
468
|
+
i0.ɵɵadvance();
|
|
469
|
+
i0.ɵɵproperty("ngIf", ctx_r0.isGroupField(ctx_r0.field) && (ctx_r0.field.fieldList == null ? null : ctx_r0.field.fieldList.length) > 0);
|
|
470
|
+
i0.ɵɵadvance();
|
|
471
|
+
i0.ɵɵproperty("ngIf", ctx_r0.isArrayField(ctx_r0.field));
|
|
472
|
+
} }
|
|
473
|
+
function OperandFieldComponent_ng_container_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
474
|
+
i0.ɵɵelementContainerStart(0);
|
|
475
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_Template, 8, 15, "ng-container", 11)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_Template, 3, 3, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
|
|
476
|
+
i0.ɵɵelementContainerEnd();
|
|
477
|
+
} if (rf & 2) {
|
|
478
|
+
const meta_r11 = ctx.ngIf;
|
|
479
|
+
const advancedFiled_r21 = i0.ɵɵreference(3);
|
|
480
|
+
i0.ɵɵadvance();
|
|
481
|
+
i0.ɵɵproperty("ngIf", meta_r11.isBasicTypeField)("ngIfElse", advancedFiled_r21);
|
|
482
|
+
} }
|
|
483
|
+
function OperandFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
484
|
+
i0.ɵɵelementContainerStart(0);
|
|
485
|
+
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_Template, 4, 2, "ng-container", 10);
|
|
486
|
+
i0.ɵɵpipe(2, "pure");
|
|
487
|
+
i0.ɵɵpipe(3, "pure");
|
|
488
|
+
i0.ɵɵelementContainerEnd();
|
|
489
|
+
} if (rf & 2) {
|
|
490
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
491
|
+
i0.ɵɵadvance();
|
|
492
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(7, _c0, i0.ɵɵpipeBind2(2, 1, ctx_r0.field, ctx_r0.getFieldType), i0.ɵɵpipeBind2(3, 4, ctx_r0.field, ctx_r0.isBasicTypeField)));
|
|
493
|
+
} }
|
|
494
|
+
function OperandFieldComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
495
|
+
i0.ɵɵtext(0);
|
|
496
|
+
} if (rf & 2) {
|
|
497
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
498
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.PASSWORD_REVEAL, "\n");
|
|
499
|
+
} }
|
|
500
|
+
export const PASSWORD_REVEAL = '******';
|
|
501
|
+
const ENCODING_MAPPER = {
|
|
502
|
+
base64: {
|
|
503
|
+
decode,
|
|
504
|
+
encode,
|
|
505
|
+
},
|
|
506
|
+
};
|
|
507
|
+
export class OperandFieldComponent {
|
|
508
|
+
get isDisabled() {
|
|
509
|
+
return this.readonly || this.field?.disabled;
|
|
510
|
+
}
|
|
511
|
+
get effectControlDefaultValue() {
|
|
512
|
+
return this.crdForm.effectControlDefaultValue;
|
|
513
|
+
}
|
|
514
|
+
get isRequired() {
|
|
515
|
+
return isRequired(this.field);
|
|
516
|
+
}
|
|
517
|
+
get isCreatable() {
|
|
518
|
+
return isCreatable(this.field);
|
|
519
|
+
}
|
|
520
|
+
get isMultiple() {
|
|
521
|
+
return isMultiple(this.field);
|
|
522
|
+
}
|
|
523
|
+
get isAllowCreate() {
|
|
524
|
+
return isAllowCreate(this.field);
|
|
525
|
+
}
|
|
526
|
+
get isClearable() {
|
|
527
|
+
return isClearable(this.field);
|
|
528
|
+
}
|
|
529
|
+
// 通过hidden属性隐藏不必要的元素,和 aclScrollToFirstInvalid 指令过滤隐藏元素保持一致
|
|
530
|
+
get isHidden() {
|
|
531
|
+
return ((this.hasFieldDependency() && !this.checkFieldDependency(this.field)) ||
|
|
532
|
+
this._hidden);
|
|
533
|
+
}
|
|
534
|
+
set isHidden(hidden) {
|
|
535
|
+
this._hidden = hidden;
|
|
536
|
+
this.cdr.markForCheck();
|
|
537
|
+
}
|
|
538
|
+
get isCustomErrorsMapper() {
|
|
539
|
+
return getFieldType(this.field) === SpecCapability.resourceRequirements;
|
|
540
|
+
}
|
|
541
|
+
constructor(crdForm, injector, http, cdr) {
|
|
542
|
+
this.crdForm = crdForm;
|
|
543
|
+
this.injector = injector;
|
|
544
|
+
this.http = http;
|
|
545
|
+
this.cdr = cdr;
|
|
546
|
+
this.readonly = false;
|
|
547
|
+
this.valueChange = new EventEmitter();
|
|
548
|
+
this.itemRemove = new EventEmitter();
|
|
549
|
+
this.control = new FormControl();
|
|
550
|
+
this.onDestroy$ = new Subject();
|
|
551
|
+
this.getFieldType = getFieldType;
|
|
552
|
+
this.isLink = isLink;
|
|
553
|
+
this.SpecCapability = SpecCapability;
|
|
554
|
+
this.getFieldDisplayName = getFieldDisplayName;
|
|
555
|
+
this.getFieldDescription = getFieldDescription;
|
|
556
|
+
this.getRadioOptions = getRadioOptions;
|
|
557
|
+
this.getDisplayByCapability = getDisplayByCapability;
|
|
558
|
+
this.editorOptions = yamlWriteOptions;
|
|
559
|
+
this.editorActions = createActions;
|
|
560
|
+
this.isGroupField = isGroupField;
|
|
561
|
+
this.isArrayField = isArrayField;
|
|
562
|
+
this.isRemoteField = isRemoteField;
|
|
563
|
+
this.isArrayFieldTable = isArrayFieldTable;
|
|
564
|
+
this.convertBooleanSwitchValue = convertBooleanSwitchValue;
|
|
565
|
+
this.loading$ = new BehaviorSubject(false);
|
|
566
|
+
this.PASSWORD_REVEAL = PASSWORD_REVEAL;
|
|
567
|
+
this.isBasicTypeField = (filed) => ![
|
|
568
|
+
SpecCapability.object,
|
|
569
|
+
SpecCapability.array,
|
|
570
|
+
SpecCapability.password,
|
|
571
|
+
SpecCapability.confirmPassword,
|
|
572
|
+
SpecCapability.externalPassword,
|
|
573
|
+
].includes(getFieldType(filed));
|
|
574
|
+
this.viewActions = viewActions;
|
|
575
|
+
this.viewOptions = yamlReadOptions;
|
|
576
|
+
this.remoteModule$ = combineLatest([
|
|
577
|
+
this.field$,
|
|
578
|
+
this.remoteModuleDefinition$,
|
|
579
|
+
]).pipe(map(([field, remoteModuleDefinition]) => {
|
|
580
|
+
const remoteWidget = this.getRemoteWidget(field, remoteModuleDefinition);
|
|
581
|
+
return (remoteWidget && {
|
|
582
|
+
injector: createInjector(remoteModuleDefinition.module, this.injector),
|
|
583
|
+
module: remoteModuleDefinition.module,
|
|
584
|
+
component: remoteWidget.component,
|
|
585
|
+
});
|
|
586
|
+
}), filter(Boolean), takeUntil(this.onDestroy$), shareReplay(1));
|
|
587
|
+
this.getWidgets = (capabilities) => {
|
|
588
|
+
const descriptor = capabilities.find(c => c.startsWith(SpecCapability.custom));
|
|
589
|
+
return descriptor
|
|
590
|
+
? this.crdForm.widgets?.find(w => w.descriptor === descriptor.split('?=')[0])
|
|
591
|
+
: null;
|
|
592
|
+
};
|
|
593
|
+
this.dynamicOptions$ = this.field$.pipe(switchMap(field => {
|
|
594
|
+
const dynamicExpression = new PropsFieldExpression(field).expressions;
|
|
595
|
+
if (!dynamicExpression.options) {
|
|
596
|
+
return of(this.getSelectOptions(field).map(value => ({
|
|
597
|
+
label: value,
|
|
598
|
+
value,
|
|
599
|
+
})));
|
|
600
|
+
}
|
|
601
|
+
return combineLatest([
|
|
602
|
+
this.crdForm.formContext$,
|
|
603
|
+
this.formDataState$,
|
|
604
|
+
]).pipe(debounceTime(100), distinctUntilChanged((p, n) => compareWithSubscribedPaths(dynamicExpression, p, n)), switchMap(([formContext, formDataState]) => {
|
|
605
|
+
let result = [];
|
|
606
|
+
const { api, labelPath, valuePath, expression } = dynamicExpression.options;
|
|
607
|
+
const stringExpressionContext = this.getStringExpressionContext(formContext, formDataState);
|
|
608
|
+
if (!api && expression) {
|
|
609
|
+
result = evalInContext(expression, stringExpressionContext);
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
return stringExpressionContext.fetchResourceList(template(api)(stringExpressionContext), (item) => {
|
|
613
|
+
const value = get(item, valuePath, '');
|
|
614
|
+
return {
|
|
615
|
+
label: get(item, labelPath, value),
|
|
616
|
+
value,
|
|
617
|
+
};
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
return isObservable(result) ? result : of(result);
|
|
621
|
+
}));
|
|
622
|
+
}), publishRef());
|
|
623
|
+
this.dynamicDefaultValue$ = this.field$.pipe(switchMap(field => {
|
|
624
|
+
const defaultValueExpression = new PropsFieldExpression(field)
|
|
625
|
+
.expressions;
|
|
626
|
+
if (!defaultValueExpression.default ||
|
|
627
|
+
this.getFieldCurrentValue() !== undefined) {
|
|
628
|
+
return of({
|
|
629
|
+
value: this.getFieldValue(),
|
|
630
|
+
isDynamic: false,
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
return combineLatest([
|
|
634
|
+
this.crdForm.formContext$,
|
|
635
|
+
this.formDataState$,
|
|
636
|
+
]).pipe(distinctUntilChanged((p, n) => compareWithSubscribedPaths(defaultValueExpression, p, n)), map(([formContext, formDataState]) => template(defaultValueExpression.default)(this.getStringExpressionContext(formContext, formDataState))), map(value => ({
|
|
637
|
+
value,
|
|
638
|
+
isDynamic: true,
|
|
639
|
+
})));
|
|
640
|
+
}), publishRef());
|
|
641
|
+
this.dynamicHiddenValue$ = this.field$.pipe(switchMap(field => {
|
|
642
|
+
const { expressions } = new PropsFieldExpression(field);
|
|
643
|
+
if (!expressions.hidden) {
|
|
644
|
+
return of(false);
|
|
645
|
+
}
|
|
646
|
+
return combineLatest([
|
|
647
|
+
this.crdForm.formContext$,
|
|
648
|
+
this.formDataState$,
|
|
649
|
+
]).pipe(distinctUntilChanged((p, n) => compareWithSubscribedPaths(expressions, p, n)), map(([formContext, formDataState]) => template(expressions.hidden)(this.getStringExpressionContext(formContext, formDataState)) === 'true'));
|
|
650
|
+
}));
|
|
651
|
+
this.getStringExpressionContext = (formContext, formDataState) => ({
|
|
652
|
+
fetchResourceList: this.fetchResourceList,
|
|
653
|
+
context: formContext,
|
|
654
|
+
formData: formDataState.toJS()?.spec || {},
|
|
655
|
+
});
|
|
656
|
+
this.fetchResourceList = (url, callback) => {
|
|
657
|
+
this.loading$.next(true);
|
|
658
|
+
return this.http
|
|
659
|
+
.get(`${API_GATEWAY}${url}`)
|
|
660
|
+
.pipe(map(res => res.items.map(item => callback.call(this, item))), skipError([]), finalize(() => {
|
|
661
|
+
this.loading$.next(false);
|
|
662
|
+
}));
|
|
663
|
+
};
|
|
664
|
+
}
|
|
665
|
+
registerControl() {
|
|
666
|
+
this.crdForm.controlMap.set(getOperandPath(this.field), this.control);
|
|
667
|
+
}
|
|
668
|
+
unRegisterControl() {
|
|
669
|
+
this.crdForm.controlMap.delete(getOperandPath(this.field));
|
|
670
|
+
}
|
|
671
|
+
getRemoteWidget(field, remoteDefinition) {
|
|
672
|
+
const descriptor = field.capabilities.find(c => c.startsWith(SpecCapability.remote));
|
|
673
|
+
return (descriptor &&
|
|
674
|
+
remoteDefinition?.components?.find(w => w.descriptor === descriptor.split('?=')[0]));
|
|
675
|
+
}
|
|
676
|
+
ngOnInit() {
|
|
677
|
+
this.dynamicHiddenValue$.subscribe(value => {
|
|
678
|
+
this.isHidden = value;
|
|
679
|
+
});
|
|
680
|
+
this.registerControl();
|
|
681
|
+
if (this.field.validations) {
|
|
682
|
+
const validators = $map(this.field.validations, (val, rule) => {
|
|
683
|
+
switch (rule) {
|
|
684
|
+
case Validations.maximum: {
|
|
685
|
+
return Validators.max(val);
|
|
686
|
+
}
|
|
687
|
+
case Validations.minimum: {
|
|
688
|
+
return Validators.min(val);
|
|
689
|
+
}
|
|
690
|
+
case Validations.required: {
|
|
691
|
+
return Validators.required;
|
|
692
|
+
}
|
|
693
|
+
case Validations.maxLength: {
|
|
694
|
+
return Validators.maxLength(val);
|
|
695
|
+
}
|
|
696
|
+
case Validations.minLength: {
|
|
697
|
+
return Validators.minLength(val);
|
|
698
|
+
}
|
|
699
|
+
case Validations.pattern: {
|
|
700
|
+
return Validators.pattern(val);
|
|
701
|
+
}
|
|
702
|
+
default: {
|
|
703
|
+
return null;
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}).filter(v => !!v);
|
|
707
|
+
if (validators.length) {
|
|
708
|
+
this.control.addValidators((this._validators = validators));
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
// 将 valueChanges 的逻辑移动到 ngAfterViewInit 中,主要是为了避免全局 ValidatorsDirective带来的影响,需要等到ValidatorsDirective的ngAfterViewInit之后再订阅control的valueChanges
|
|
713
|
+
ngAfterViewInit() {
|
|
714
|
+
this.control.valueChanges
|
|
715
|
+
.pipe(startWithCondition(this.effectControlDefaultValue, this.control.value), debounceTime(50), distinctUntilChanged(), takeUntil(this.onDestroy$), filter(v =>
|
|
716
|
+
// FIXME: This is hack. yaml value will only be null if format error(because try-catch), the data flow now is from control => formDataState => control(will judge equality),this will make control be empty
|
|
717
|
+
getFieldType(this.field) === SpecCapability.yaml ? v !== null : true))
|
|
718
|
+
.subscribe(value => {
|
|
719
|
+
this.valueChange.emit({
|
|
720
|
+
field: this.field,
|
|
721
|
+
data: value,
|
|
722
|
+
errors: this.control.errors,
|
|
723
|
+
});
|
|
724
|
+
});
|
|
725
|
+
}
|
|
726
|
+
ngOnDestroy() {
|
|
727
|
+
this.onDestroy$.next();
|
|
728
|
+
this.onDestroy$.complete();
|
|
729
|
+
this.unRegisterControl();
|
|
730
|
+
if (this._validators?.length) {
|
|
731
|
+
this.control.removeValidators(this._validators);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
ngOnChanges({ formDataState }) {
|
|
735
|
+
if (this.field && formDataState?.firstChange) {
|
|
736
|
+
this.dynamicDefaultValue$
|
|
737
|
+
.pipe(take(1))
|
|
738
|
+
.subscribe(({ value, isDynamic }) => {
|
|
739
|
+
this.control.setValue(value, { emitEvent: isDynamic });
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
else if (formDataState?.currentValue) {
|
|
743
|
+
const currentValue = getFormData(formDataState.currentValue, this.field.path, false);
|
|
744
|
+
const prevValue = getFormData(formDataState.previousValue, this.field.path, false);
|
|
745
|
+
const rawValue = isImmutable(currentValue)
|
|
746
|
+
? currentValue.toJS()
|
|
747
|
+
: currentValue;
|
|
748
|
+
if (!isEqual(rawValue, prevValue) &&
|
|
749
|
+
!isEqual(rawValue, this.control.value)) {
|
|
750
|
+
this.control.setValue(rawValue);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
getFieldCurrentValue() {
|
|
755
|
+
let value = getFormData(this.formDataState, this.field.path, false);
|
|
756
|
+
// 如果值是 Immutable object 类型,需要转成原始 JS Object
|
|
757
|
+
if (isImmutable(value)) {
|
|
758
|
+
value = value.toJS();
|
|
759
|
+
}
|
|
760
|
+
return value;
|
|
761
|
+
}
|
|
762
|
+
getFieldValue(useDefault = true) {
|
|
763
|
+
const currentValue = this.getFieldCurrentValue();
|
|
764
|
+
if (currentValue === undefined && useDefault) {
|
|
765
|
+
return getDefaultValue(this.field);
|
|
766
|
+
}
|
|
767
|
+
return currentValue;
|
|
768
|
+
}
|
|
769
|
+
getOptionDisplay(value, options) {
|
|
770
|
+
return options.find(item => item.value === value)?.display;
|
|
771
|
+
}
|
|
772
|
+
getSelectOptions(field) {
|
|
773
|
+
return field.capabilities
|
|
774
|
+
.filter(c => c.startsWith(SpecCapability.select))
|
|
775
|
+
.map(c => c.split(SpecCapability.select)?.[1]);
|
|
776
|
+
}
|
|
777
|
+
getEncoding(field, type) {
|
|
778
|
+
const prefix = `urn:alm:descriptor:${type}:encoding:`;
|
|
779
|
+
const capability = field.capabilities.find(it => it.startsWith(prefix));
|
|
780
|
+
let encoding;
|
|
781
|
+
if (capability) {
|
|
782
|
+
encoding = ENCODING_MAPPER[capability.slice(prefix.length)];
|
|
783
|
+
}
|
|
784
|
+
return (encoding || {
|
|
785
|
+
encode: identity,
|
|
786
|
+
decode: identity,
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
hasFieldDependency() {
|
|
790
|
+
return this.field.capabilities.some(c => c.startsWith(SpecCapability.fieldDependency));
|
|
791
|
+
}
|
|
792
|
+
checkFieldDependency(field) {
|
|
793
|
+
try {
|
|
794
|
+
const dependencies = field?.capabilities
|
|
795
|
+
.filter(c => c.startsWith(SpecCapability.fieldDependency))
|
|
796
|
+
.map(i => i.split(SpecCapability.fieldDependency)[1]);
|
|
797
|
+
if (!dependencies?.length) {
|
|
798
|
+
return true;
|
|
799
|
+
}
|
|
800
|
+
const parentPaths = dependencies.map(d => d.split(':'));
|
|
801
|
+
const state = parentPaths.every(([path, ...values]) => {
|
|
802
|
+
// Support depend one of values
|
|
803
|
+
const dependencyField = this.fields.find(f => f.path === normalizePath(path));
|
|
804
|
+
const dependencyDefaultValue = getDefaultValue(dependencyField);
|
|
805
|
+
const formStateValue = getFormData(this.formDataState, path);
|
|
806
|
+
const currentValue = formStateValue === null || formStateValue === undefined
|
|
807
|
+
? dependencyDefaultValue
|
|
808
|
+
: formStateValue;
|
|
809
|
+
return values.some(val => convertValue(val, dependencyField.type) === currentValue);
|
|
810
|
+
});
|
|
811
|
+
/**
|
|
812
|
+
* 父 field dependency 不满足时,即隐藏时,本 field 也应当隐藏。
|
|
813
|
+
* 因为在大部分情形下,fieldDependency 与 oneOf 搭配来描述一组关联关系,很少只有 b 仅依赖于 a,当 a 隐藏后,还要根据 a 的默认值要求显示 b 的情况,
|
|
814
|
+
* 对于该情况,可以多加一个配备了额外 fieldDependency 的 Descriptor 来描述 b
|
|
815
|
+
*/
|
|
816
|
+
return (parentPaths.every(([path]) => this.checkFieldDependency(this.fields.find(i => i.path === path))) && state);
|
|
817
|
+
}
|
|
818
|
+
catch (error) {
|
|
819
|
+
console.error(error);
|
|
820
|
+
return false;
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
static { this.ɵfac = function OperandFieldComponent_Factory(t) { return new (t || OperandFieldComponent)(i0.ɵɵdirectiveInject(i1.CrdFormComponent), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i2.HttpClient), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
824
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OperandFieldComponent, selectors: [["acl-operand-field"]], hostVars: 1, hostBindings: function OperandFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
825
|
+
i0.ɵɵhostProperty("hidden", ctx.isHidden);
|
|
826
|
+
} }, inputs: { field: "field", remoteModuleDefinition: "remoteModuleDefinition", readonly: "readonly", fields: "fields", formDataState: "formDataState", formErrors: "formErrors", customDescription: "customDescription" }, outputs: { valueChange: "valueChange", itemRemove: "itemRemove" }, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 1, consts: [["passwordView", ""], ["advancedFiled", ""], ["textField", ""], ["switchReadonly", ""], ["radioLabel", ""], ["resourceRequirementsReadonly", ""], ["yamlReadonly", ""], ["resourcePrefixReadonly", ""], ["pureRemote", ""], ["defaultArrayFiled", ""], [4, "ngIf"], [4, "ngIf", "ngIfElse"], [3, "ngSwitch", 4, "ngIf"], ["class", "tw-flex tw-w-full tw-flex-col", 4, "ngIf"], [3, "ngSwitch"], ["type", "number", "aui-input", "", "auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "placeholder", 4, "ngSwitchCase"], [4, "ngSwitchCase"], ["auiFormItemControl", "", 3, "formControl", "required", "aclReadonlyField", "aclReadonlyFieldTemplate", 4, "ngSwitchCase"], ["auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "aclReadonlyField", "placeholder", 4, "ngSwitchCase"], ["auiFormItemControl", "", "class", "tw-flex-1", 3, "required", "formControl", "placeholder", "aclReadonlyField", "clearable", 4, "ngSwitchCase"], [4, "ngSwitchDefault"], ["type", "number", "aui-input", "", "auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "placeholder"], ["auiFormItemControl", "", 3, "aclReadonlyField", "aclReadonlyFieldTemplate", "formControl"], ["auiFormItemControl", "", 3, "maxRowCount", "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate", 4, "ngIf"], ["auiFormItemControl", "", 3, "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate", 4, "ngIf"], ["auiFormItemControl", "", 3, "maxRowCount", "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate"], [3, "value", "label", 4, "ngFor", "ngForOf"], [3, "value", "label"], ["auiFormItemControl", "", 3, "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate"], ["auiFormItemControl", "", 3, "formControl", "required", "aclReadonlyField", "aclReadonlyFieldTemplate"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "ngModel", "readOnly"], ["auiFormItemControl", "", 3, "formControl", "required", "actionsConfig", "options", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "ngModel", "actionsConfig", "options"], ["auiFormItemControl", "", 3, "formErrors", "field", "required", "formControl", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "field", "ngModel", "readonly"], ["auiFormItemControl", "", 3, "field", "required", "formControl", "aclReadonlyField"], ["auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "aclReadonlyField", "placeholder"], ["auiFormItemControl", "", 1, "tw-flex-1", 3, "required", "formControl", "placeholder", "aclReadonlyField", "clearable"], ["auiFormItemControl", "", 3, "field", "formControl", 4, "ngIf", "ngIfElse"], ["auiFormItemControl", "", 3, "field", "formControl"], ["type", "text", "auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "placeholder", "aclReadonlyField"], [1, "tw-flex", "tw-w-full", "tw-flex-col"], [4, "ngComponentOutlet"], [3, "emptyAddon"], ["auiFormItemLabel", "", 4, "ngIf"], [4, "ngComponentOutlet", "ngComponentOutletInjector"], ["auiFormItemHint", ""], ["auiFormItemLabel", ""], [3, "plain", 4, "ngIf"], ["width", "large", 3, "initPassword", "label", "hint", "formControl", "required", "readonly", "isUpdate", "strongPassword", "enableConfirm", "encoding", "pattern", "placeholder", 4, "ngIf"], [3, "plain"], [4, "ngTemplateOutlet"], ["width", "large", 3, "initPassword", "label", "hint", "formControl", "required", "readonly", "isUpdate", "strongPassword", "enableConfirm", "encoding", "pattern", "placeholder"], [3, "valueChange", "fields", "fieldGroup", "readonly", "formDataState", "formErrors"], [3, "arrayFieldGroup", "formDataState", "readonly", "valueChange", 4, "ngIf", "ngIfElse"], [3, "valueChange", "arrayFieldGroup", "formDataState", "readonly"], [3, "valueChange", "arrayFieldGroup", "readonly", "formDataState"]], template: function OperandFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
827
|
+
i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_Template, 4, 10, "ng-container", 10)(1, OperandFieldComponent_ng_template_1_Template, 1, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
828
|
+
} if (rf & 2) {
|
|
829
|
+
i0.ɵɵproperty("ngIf", ctx.field);
|
|
830
|
+
} }, styles: ["[_nghost-%COMP%] .input-group[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .aui-form-item__label-wrapper:not(.hasLabel){display:none}"], changeDetection: 0 }); }
|
|
831
|
+
}
|
|
832
|
+
__decorate([
|
|
833
|
+
ObservableInput(),
|
|
834
|
+
__metadata("design:type", Observable)
|
|
835
|
+
], OperandFieldComponent.prototype, "field$", void 0);
|
|
836
|
+
__decorate([
|
|
837
|
+
ObservableInput(),
|
|
838
|
+
__metadata("design:type", Observable)
|
|
839
|
+
], OperandFieldComponent.prototype, "remoteModuleDefinition$", void 0);
|
|
840
|
+
__decorate([
|
|
841
|
+
ObservableInput(),
|
|
842
|
+
__metadata("design:type", Observable)
|
|
843
|
+
], OperandFieldComponent.prototype, "formDataState$", void 0);
|
|
844
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OperandFieldComponent, [{
|
|
845
|
+
type: Component,
|
|
846
|
+
args: [{ selector: 'acl-operand-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"field\">\n <ng-container\n *ngIf=\"{\n fieldType: field | pure: getFieldType,\n isBasicTypeField: field | pure: isBasicTypeField\n } as meta\"\n >\n <ng-container *ngIf=\"meta.isBasicTypeField; else advancedFiled\">\n <acl-crd-form-item\n *ngIf=\"\n !(field.capabilities | pure: getWidgets) &&\n !(field | pure: isRemoteField)\n \"\n [ngSwitch]=\"meta.fieldType\"\n >\n <input\n *ngSwitchCase=\"SpecCapability.number\"\n type=\"number\"\n aui-input\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n />\n <ng-container *ngSwitchCase=\"SpecCapability.booleanSwitch\">\n <aui-switch\n auiFormItemControl\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"switchReadonly\"\n [formControl]=\"control\"\n ></aui-switch>\n <ng-template #switchReadonly>{{\n (control.value | pure: convertBooleanSwitchValue: field.capabilities) | translate\n }}</ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.select\">\n <aui-multi-select\n *ngIf=\"isMultiple\"\n [maxRowCount]=\"3\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n >\n {{ option.label }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-multi-select>\n\n <aui-select\n *ngIf=\"!isMultiple\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label | aclParseJsonTranslate\"\n >\n {{ option.label | aclParseJsonTranslate }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-select>\n </ng-container>\n <aui-radio-group\n *ngSwitchCase=\"SpecCapability.radio\"\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"radioLabel\"\n >\n <ng-container>\n <aui-radio-button\n *ngFor=\"let option of field.capabilities | pure: getRadioOptions\"\n [value]=\"option.value\"\n >\n {{ option.display | translate }}\n </aui-radio-button>\n <ng-template #radioLabel>\n {{\n control.value\n | pure\n : getOptionDisplay\n : (field.capabilities | pure: getRadioOptions)\n | translate\n }}\n </ng-template>\n </ng-container>\n </aui-radio-group>\n <ng-container *ngSwitchCase=\"SpecCapability.resourceRequirements\">\n <acl-crd-resource-requirements\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourceRequirementsReadonly\"\n ></acl-crd-resource-requirements>\n <ng-template #resourceRequirementsReadonly>\n <acl-crd-resource-requirements\n auiFormItemControl\n [ngModel]=\"control.value\"\n [readOnly]=\"true\"\n ></acl-crd-resource-requirements>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.yaml\">\n <acl-crd-yaml-editor\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [actionsConfig]=\"editorActions\"\n [options]=\"editorOptions\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"yamlReadonly\"\n ></acl-crd-yaml-editor>\n <ng-template #yamlReadonly>\n <acl-crd-yaml-editor\n auiFormItemControl\n [ngModel]=\"control.value\"\n [actionsConfig]=\"viewActions\"\n [options]=\"viewOptions\"\n ></acl-crd-yaml-editor>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.k8sResourcePrefix\">\n <acl-crd-resource-prefix\n auiFormItemControl\n [formErrors]=\"control.errors\"\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourcePrefixReadonly\"\n ></acl-crd-resource-prefix>\n <ng-template #resourcePrefixReadonly>\n <acl-crd-resource-prefix\n auiFormItemControl\n [field]=\"field\"\n [ngModel]=\"control.value\"\n [readonly]=\"true\"\n ></acl-crd-resource-prefix>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.basicAuthSecret\">\n <acl-crd-basic-auth-secret\n auiFormItemControl\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n ></acl-crd-basic-auth-secret>\n </ng-container>\n <textarea\n *ngSwitchCase=\"SpecCapability.textarea\"\n auiFormItemControl\n aui-input\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n ></textarea>\n <aui-tags-input\n *ngSwitchCase=\"SpecCapability.tagsInput\"\n auiFormItemControl\n class=\"tw-flex-1\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n [aclReadonlyField]=\"isDisabled\"\n [clearable]=\"isClearable\"\n ></aui-tags-input>\n <ng-container *ngSwitchDefault>\n <acl-crd-link\n *ngIf=\"(field | pure: isLink) && isDisabled; else textField\"\n auiFormItemControl\n [field]=\"field\"\n [formControl]=\"control\"\n ></acl-crd-link>\n </ng-container>\n <ng-template #textField>\n <input\n type=\"text\"\n auiFormItemControl\n [required]=\"isRequired\"\n aui-input\n [formControl]=\"control\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n [aclReadonlyField]=\"isDisabled\"\n />\n </ng-template>\n </acl-crd-form-item>\n <div\n class=\"tw-flex tw-w-full tw-flex-col\"\n *ngIf=\"field.capabilities | pure: getWidgets as widget\"\n >\n <ng-container *ngComponentOutlet=\"widget.component\"></ng-container>\n </div>\n <ng-container *ngIf=\"field | pure: isRemoteField\">\n <ng-container *ngIf=\"remoteModule$ | async as remoteModule\">\n <ng-container\n *ngIf=\"field | pure: getFieldDisplayName as label; else pureRemote\"\n >\n <aui-form-item [emptyAddon]=\"false\">\n <label\n auiFormItemLabel\n *ngIf=\"field | pure: getFieldDisplayName as label\"\n >{{ label | translate }}</label\n >\n <ng-container\n *ngComponentOutlet=\"\n remoteModule.component;\n injector: remoteModule.injector\n \"\n ></ng-container>\n <div auiFormItemHint>\n {{ field | pure: getFieldDescription | translate }}\n </div>\n </aui-form-item>\n </ng-container>\n <ng-template #pureRemote>\n <ng-container\n *ngComponentOutlet=\"\n remoteModule.component;\n injector: remoteModule.injector\n \"\n ></ng-container\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #advancedFiled>\n <ng-container\n *ngIf=\"\n meta.fieldType === SpecCapability.password ||\n meta.fieldType === SpecCapability.confirmPassword ||\n meta.fieldType === SpecCapability.externalPassword\n \"\n >\n <acl-crd-form-item\n *ngIf=\"isDisabled\"\n [plain]=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"passwordView\"></ng-container>\n </acl-crd-form-item>\n <acl-password-input\n *ngIf=\"!isDisabled\"\n [initPassword]=\"control.value\"\n [label]=\"field | pure: getFieldDisplayName | translate\"\n [hint]=\"\n customDescription?.templateRef ||\n (field | pure: getFieldDescription | translate)\n \"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [readonly]=\"crdForm.readonly\"\n [isUpdate]=\"!!control.value && !control.dirty\"\n [strongPassword]=\"meta.fieldType !== SpecCapability.externalPassword\"\n [enableConfirm]=\"meta.fieldType === SpecCapability.confirmPassword\"\n width=\"large\"\n [encoding]=\"field | pure: getEncoding:'password'\"\n [pattern]=\"field.validations?.pattern\"\n [placeholder]=\"\n field.capabilities\n | pure: getDisplayByCapability:SpecCapability.placeholder\n | translate\n \"\n ></acl-password-input>\n </ng-container>\n <!-- group field -->\n <ng-container *ngIf=\"isGroupField(field) && field.fieldList?.length > 0\">\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-field-group>\n </ng-container>\n <!-- array field groups -->\n <!-- array field table -->\n <ng-container *ngIf=\"isArrayField(field)\">\n <acl-crd-array-table\n *ngIf=\"field | pure: isArrayFieldTable; else defaultArrayFiled\"\n [arrayFieldGroup]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"isDisabled\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-crd-array-table>\n <ng-template #defaultArrayFiled>\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-array-field-group>\n </ng-template>\n </ng-container>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #passwordView>\n {{ PASSWORD_REVEAL }}\n</ng-template>\n", styles: [":host .input-group{width:100%}:host ::ng-deep .aui-form-item__label-wrapper:not(.hasLabel){display:none}\n"] }]
|
|
847
|
+
}], () => [{ type: i1.CrdFormComponent }, { type: i0.Injector }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }], { field: [{
|
|
848
|
+
type: Input
|
|
849
|
+
}], field$: [], remoteModuleDefinition: [{
|
|
850
|
+
type: Input
|
|
851
|
+
}], remoteModuleDefinition$: [], readonly: [{
|
|
852
|
+
type: Input
|
|
853
|
+
}], fields: [{
|
|
854
|
+
type: Input
|
|
855
|
+
}], formDataState: [{
|
|
856
|
+
type: Input
|
|
857
|
+
}], formDataState$: [], formErrors: [{
|
|
858
|
+
type: Input
|
|
859
|
+
}], customDescription: [{
|
|
860
|
+
type: Input
|
|
861
|
+
}], valueChange: [{
|
|
862
|
+
type: Output
|
|
863
|
+
}], itemRemove: [{
|
|
864
|
+
type: Output
|
|
865
|
+
}], isHidden: [{
|
|
866
|
+
type: HostBinding,
|
|
867
|
+
args: ['hidden']
|
|
868
|
+
}] }); })();
|
|
869
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OperandFieldComponent, { className: "OperandFieldComponent", filePath: "lib/field-controls/operand-field.component.ts", lineNumber: 115 }); })();
|
|
870
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFuZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBRWIsT0FBTyxFQUVQLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUdsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU07QUFFTiwyQkFBMkI7QUFDM0IsZUFBZSxJQUFJLGNBQWMsR0FDbEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVks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IEVuY29kaW5nLFxuICBpc0VxdWFsLFxuICBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgcHVibGlzaFJlZixcbiAgc2tpcEVycm9yLFxuICBzdGFydFdpdGhDb25kaXRpb24sXG4gIFN0cmluZ01hcCxcbiAgVHJhbnNsYXRpb24sXG4gIHZpZXdBY3Rpb25zLFxuICB5YW1sUmVhZE9wdGlvbnMsXG4gIHlhbWxXcml0ZU9wdGlvbnMsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIC8vIGNzcGVsbDpkaXNhYmxlLW5leHQtbGluZVxuICDJtWNyZWF0ZUluamVjdG9yIGFzIGNyZWF0ZUluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnYWI2NCc7XG5pbXBvcnQgeyBpc0ltbXV0YWJsZSB9IGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgeyBnZXQsIGlkZW50aXR5LCBtYXAgYXMgJG1hcCwgdGVtcGxhdGUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBmaWx0ZXIsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIHNoYXJlUmVwbGF5LFxuICB0YWtlVW50aWwsXG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICBvZixcbiAgZmluYWxpemUsXG4gIGlzT2JzZXJ2YWJsZSxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENyZEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmQtZm9ybS9jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3JlbW90ZS13aWRnZXRzJztcbmltcG9ydCB7XG4gIEZpZWxkVmFsdWVDaGFuZ2VFdmVudCxcbiAgRm9ybURhdGFTdGF0ZSxcbiAgRm9ybUVycm9ycyxcbiAgT3BlcmFuZEZpZWxkLFxuICBTcGVjQ2FwYWJpbGl0eSxcbiAgVmFsaWRhdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWUsXG4gIGNvbnZlcnRWYWx1ZSxcbiAgQ3JkRm9ybUN1c3RvbURlc2NyaXB0aW9uRGlyZWN0aXZlLFxuICBnZXREZWZhdWx0VmFsdWUsXG4gIGdldERpc3BsYXlCeUNhcGFiaWxpdHksXG4gIGdldEZpZWxkRGVzY3JpcHRpb24sXG4gIGdldEZpZWxkRGlzcGxheU5hbWUsXG4gIGdldEZpZWxkVHlwZSxcbiAgZ2V0Rm9ybURhdGEsXG4gIGdldFJhZGlvT3B0aW9ucyxcbiAgbm9ybWFsaXplUGF0aCxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgaXNBcnJheUZpZWxkLFxuICBpc0FycmF5RmllbGRUYWJsZSxcbiAgaXNDbGVhcmFibGUsXG4gIGlzQ3JlYXRhYmxlLFxuICBpc0dyb3VwRmllbGQsXG4gIGlzTXVsdGlwbGUsXG4gIGlzQWxsb3dDcmVhdGUsXG4gIGlzUmVtb3RlRmllbGQsXG4gIGlzUmVxdWlyZWQsXG4gIGV2YWxJbkNvbnRleHQsXG4gIGdldE9wZXJhbmRQYXRoLFxufSBmcm9tICcuLi91dGlscy9oZWxwZXInO1xuXG5pbXBvcnQge1xuICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyxcbiAgUHJvcHNGaWVsZEV4cHJlc3Npb24sXG59IGZyb20gJy4vZXhwcmVzc2lvbnMvcHJvcHMtZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBpc0xpbmsgfSBmcm9tICcuL3dpZGdldHMvbGluay9jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgUEFTU1dPUkRfUkVWRUFMID0gJyoqKioqKic7XG5cbmNvbnN0IEVOQ09ESU5HX01BUFBFUjogUmVjb3JkPHN0cmluZywgRW5jb2Rpbmc+ID0ge1xuICBiYXNlNjQ6IHtcbiAgICBkZWNvZGUsXG4gICAgZW5jb2RlLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLW9wZXJhbmQtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJ29wZXJhbmQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnb3BlcmFuZC1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgT3BlcmFuZEZpZWxkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxue1xuICBASW5wdXQoKVxuICBmaWVsZDogT3BlcmFuZEZpZWxkO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmaWVsZCQhOiBPYnNlcnZhYmxlPE9wZXJhbmRGaWVsZD47XG5cbiAgQElucHV0KClcbiAgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbjogUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbiQhOiBPYnNlcnZhYmxlPFJlbW90ZVdpZGdldE1vZHVsZURlZmluaXRpb24+O1xuXG4gIEBJbnB1dCgpXG4gIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5maWVsZD8uZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZWZmZWN0Q29udHJvbERlZmF1bHRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jcmRGb3JtLmVmZmVjdENvbnRyb2xEZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gaXNSZXF1aXJlZCh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0NyZWF0YWJsZSgpIHtcbiAgICByZXR1cm4gaXNDcmVhdGFibGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gaXNNdWx0aXBsZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0FsbG93Q3JlYXRlKCkge1xuICAgIHJldHVybiBpc0FsbG93Q3JlYXRlKHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ2V0IGlzQ2xlYXJhYmxlKCkge1xuICAgIHJldHVybiBpc0NsZWFyYWJsZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGZpZWxkczogT3BlcmFuZEZpZWxkW107XG4gIEBJbnB1dCgpIGZvcm1EYXRhU3RhdGU6IEZvcm1EYXRhU3RhdGU7XG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBmb3JtRGF0YVN0YXRlJCE6IE9ic2VydmFibGU8Rm9ybURhdGFTdGF0ZT47XG5cbiAgQElucHV0KCkgZm9ybUVycm9yczogRm9ybUVycm9ycztcbiAgQElucHV0KCkgY3VzdG9tRGVzY3JpcHRpb246IENyZEZvcm1DdXN0b21EZXNjcmlwdGlvbkRpcmVjdGl2ZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpZWxkVmFsdWVDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8g6YCa6L+HaGlkZGVu5bGe5oCn6ZqQ6JeP5LiN5b+F6KaB55qE5YWD57Sg77yM5ZKMIGFjbFNjcm9sbFRvRmlyc3RJbnZhbGlkIOaMh+S7pOi/h+a7pOmakOiXj+WFg+e0oOS/neaMgeS4gOiHtFxuICBASG9zdEJpbmRpbmcoJ2hpZGRlbicpXG4gIGdldCBpc0hpZGRlbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuaGFzRmllbGREZXBlbmRlbmN5KCkgJiYgIXRoaXMuY2hlY2tGaWVsZERlcGVuZGVuY3kodGhpcy5maWVsZCkpIHx8XG4gICAgICB0aGlzLl9oaWRkZW5cbiAgICApO1xuICB9XG5cbiAgc2V0IGlzSGlkZGVuKGhpZGRlbikge1xuICAgIHRoaXMuX2hpZGRlbiA9IGhpZGRlbjtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hpZGRlbjogYm9vbGVhbjtcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXRGaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGU7XG4gIGlzTGluayA9IGlzTGluaztcblxuICBTcGVjQ2FwYWJpbGl0eSA9IFNwZWNDYXBhYmlsaXR5O1xuXG4gIGdldEZpZWxkRGlzcGxheU5hbWUgPSBnZXRGaWVsZERpc3BsYXlOYW1lO1xuICBnZXRGaWVsZERlc2NyaXB0aW9uID0gZ2V0RmllbGREZXNjcmlwdGlvbjtcbiAgZ2V0UmFkaW9PcHRpb25zID0gZ2V0UmFkaW9PcHRpb25zO1xuICBnZXREaXNwbGF5QnlDYXBhYmlsaXR5ID0gZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTtcblxuICBlZGl0b3JPcHRpb25zID0geWFtbFdyaXRlT3B0aW9ucztcbiAgZWRpdG9yQWN0aW9ucyA9IGNyZWF0ZUFjdGlvbnM7XG5cbiAgaXNHcm91cEZpZWxkID0gaXNHcm91cEZpZWxkO1xuICBpc0FycmF5RmllbGQgPSBpc0FycmF5RmllbGQ7XG4gIGlzUmVtb3RlRmllbGQgPSBpc1JlbW90ZUZpZWxkO1xuICBpc0FycmF5RmllbGRUYWJsZSA9IGlzQXJyYXlGaWVsZFRhYmxlO1xuICBjb252ZXJ0Qm9vbGVhblN3aXRjaFZhbHVlID0gY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZTtcbiAgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBnZXQgaXNDdXN0b21FcnJvcnNNYXBwZXIoKSB7XG4gICAgcmV0dXJuIGdldEZpZWxkVHlwZSh0aGlzLmZpZWxkKSA9PT0gU3BlY0NhcGFiaWxpdHkucmVzb3VyY2VSZXF1aXJlbWVudHM7XG4gIH1cblxuICBQQVNTV09SRF9SRVZFQUwgPSBQQVNTV09SRF9SRVZFQUw7XG5cbiAgaXNCYXNpY1R5cGVGaWVsZCA9IChmaWxlZDogT3BlcmFuZEZpZWxkKSA9PlxuICAgICFbXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5vYmplY3QsXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5hcnJheSxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LnBhc3N3b3JkLFxuICAgICAgU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkLFxuICAgICAgU3BlY0NhcGFiaWxpdHkuZXh0ZXJuYWxQYXNzd29yZCxcbiAgICBdLmluY2x1ZGVzKGdldEZpZWxkVHlwZShmaWxlZCkpO1xuXG4gIHZpZXdBY3Rpb25zID0gdmlld0FjdGlvbnM7XG4gIHZpZXdPcHRpb25zID0geWFtbFJlYWRPcHRpb25zO1xuXG4gIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XG5cbiAgcmVtb3RlTW9kdWxlJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZmllbGQkLFxuICAgIHRoaXMucmVtb3RlTW9kdWxlRGVmaW5pdGlvbiQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZmllbGQsIHJlbW90ZU1vZHVsZURlZmluaXRpb25dKSA9PiB7XG4gICAgICBjb25zdCByZW1vdGVXaWRnZXQgPSB0aGlzLmdldFJlbW90ZVdpZGdldChmaWVsZCwgcmVtb3RlTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gKFxuICAgICAgICByZW1vdGVXaWRnZXQgJiYge1xuICAgICAgICAgIGluamVjdG9yOiBjcmVhdGVJbmplY3RvcihcbiAgICAgICAgICAgIHJlbW90ZU1vZHVsZURlZmluaXRpb24ubW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICApLFxuICAgICAgICAgIG1vZHVsZTogcmVtb3RlTW9kdWxlRGVmaW5pdGlvbi5tb2R1bGUsXG4gICAgICAgICAgY29tcG9uZW50OiByZW1vdGVXaWRnZXQuY29tcG9uZW50LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pLFxuICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICBzaGFyZVJlcGxheSgxKSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3JkRm9ybTogQ3JkRm9ybUNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgcmVnaXN0ZXJDb250cm9sKCkge1xuICAgIHRoaXMuY3JkRm9ybS5jb250cm9sTWFwLnNldChnZXRPcGVyYW5kUGF0aCh0aGlzLmZpZWxkKSwgdGhpcy5jb250cm9sKTtcbiAgfVxuXG4gIHVuUmVnaXN0ZXJDb250cm9sKCkge1xuICAgIHRoaXMuY3JkRm9ybS5jb250cm9sTWFwLmRlbGV0ZShnZXRPcGVyYW5kUGF0aCh0aGlzLmZpZWxkKSk7XG4gIH1cblxuICBnZXRXaWRnZXRzID0gKGNhcGFiaWxpdGllczogU3BlY0NhcGFiaWxpdHlbXSkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjYXBhYmlsaXRpZXMuZmluZChjID0+XG4gICAgICBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuY3VzdG9tKSxcbiAgICApO1xuICAgIHJldHVybiBkZXNjcmlwdG9yXG4gICAgICA/IHRoaXMuY3JkRm9ybS53aWRnZXRzPy5maW5kKFxuICAgICAgICAgIHcgPT4gdy5kZXNjcmlwdG9yID09PSBkZXNjcmlwdG9yLnNwbGl0KCc/PScpWzBdLFxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gIH07XG5cbiAgZ2V0UmVtb3RlV2lkZ2V0KFxuICAgIGZpZWxkOiBPcGVyYW5kRmllbGQsXG4gICAgcmVtb3RlRGVmaW5pdGlvbjogUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbixcbiAgKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGZpZWxkLmNhcGFiaWxpdGllcy5maW5kKGMgPT5cbiAgICAgIGMuc3RhcnRzV2l0aChTcGVjQ2FwYWJpbGl0eS5yZW1vdGUpLFxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIGRlc2NyaXB0b3IgJiZcbiAgICAgIHJlbW90ZURlZmluaXRpb24/LmNvbXBvbmVudHM/LmZpbmQoXG4gICAgICAgIHcgPT4gdy5kZXNjcmlwdG9yID09PSBkZXNjcmlwdG9yLnNwbGl0KCc/PScpWzBdLFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmR5bmFtaWNIaWRkZW5WYWx1ZSQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuaXNIaWRkZW4gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyQ29udHJvbCgpO1xuICAgIGlmICh0aGlzLmZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gJG1hcCh0aGlzLmZpZWxkLnZhbGlkYXRpb25zLCAodmFsLCBydWxlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAocnVsZSkge1xuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWF4aW11bToge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWF4KHZhbCBhcyBudW1iZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLm1pbmltdW06IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5yZXF1aXJlZDoge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWF4TGVuZ3RoOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWluTGVuZ3RoOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMucGF0dGVybjoge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybih2YWwgYXMgc3RyaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5maWx0ZXIodiA9PiAhIXYpO1xuICAgICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5hZGRWYWxpZGF0b3JzKCh0aGlzLl92YWxpZGF0b3JzID0gdmFsaWRhdG9ycykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOWwhiB2YWx1ZUNoYW5nZXMg55qE6YC76L6R56e75Yqo5YiwIG5nQWZ0ZXJWaWV3SW5pdCDkuK3vvIzkuLvopoHmmK/kuLrkuobpgb/lhY3lhajlsYAgVmFsaWRhdG9yc0RpcmVjdGl2ZeW4puadpeeahOW9seWTje+8jOmcgOimgeetieWIsFZhbGlkYXRvcnNEaXJlY3RpdmXnmoRuZ0FmdGVyVmlld0luaXTkuYvlkI7lho3orqLpmIVjb250cm9s55qEdmFsdWVDaGFuZ2VzXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoQ29uZGl0aW9uKHRoaXMuZWZmZWN0Q29udHJvbERlZmF1bHRWYWx1ZSwgdGhpcy5jb250cm9sLnZhbHVlKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICAgIGZpbHRlcih2ID0+XG4gICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaGFjay4geWFtbCB2YWx1ZSB3aWxsIG9ubHkgYmUgbnVsbCBpZiBmb3JtYXQgZXJyb3IoYmVjYXVzZSB0cnktY2F0Y2gpLCB0aGUgZGF0YSBmbG93IG5vdyBpcyBmcm9tIGNvbnRyb2wgPT4gZm9ybURhdGFTdGF0ZSA9PiBjb250cm9sKHdpbGwganVkZ2UgZXF1YWxpdHkp77yMdGhpcyB3aWxsIG1ha2UgY29udHJvbCBiZSBlbXB0eVxuICAgICAgICAgIGdldEZpZWxkVHlwZSh0aGlzLmZpZWxkKSA9PT0gU3BlY0NhcGFiaWxpdHkueWFtbCA/IHYgIT09IG51bGwgOiB0cnVlLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgZGF0YTogdmFsdWUsXG4gICAgICAgICAgZXJyb3JzOiB0aGlzLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLnVuUmVnaXN0ZXJDb250cm9sKCk7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sLnJlbW92ZVZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoeyBmb3JtRGF0YVN0YXRlIH06IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5maWVsZCAmJiBmb3JtRGF0YVN0YXRlPy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5keW5hbWljRGVmYXVsdFZhbHVlJFxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCh7IHZhbHVlLCBpc0R5bmFtaWMgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGlzRHluYW1pYyB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtRGF0YVN0YXRlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLmN1cnJlbnRWYWx1ZSBhcyBGb3JtRGF0YVN0YXRlLFxuICAgICAgICB0aGlzLmZpZWxkLnBhdGgsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLnByZXZpb3VzVmFsdWUgYXMgRm9ybURhdGFTdGF0ZSxcbiAgICAgICAgdGhpcy5maWVsZC5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGlzSW1tdXRhYmxlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgPyBjdXJyZW50VmFsdWUudG9KUygpXG4gICAgICAgIDogY3VycmVudFZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhaXNFcXVhbChyYXdWYWx1ZSwgcHJldlZhbHVlKSAmJlxuICAgICAgICAhaXNFcXVhbChyYXdWYWx1ZSwgdGhpcy5jb250cm9sLnZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShyYXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRDdXJyZW50VmFsdWUoKSB7XG4gICAgbGV0IHZhbHVlID0gZ2V0Rm9ybURhdGEodGhpcy5mb3JtRGF0YVN0YXRlLCB0aGlzLmZpZWxkLnBhdGgsIGZhbHNlKTtcblxuICAgIC8vIOWmguaenOWAvOaYryBJbW11dGFibGUgb2JqZWN0IOexu+Wei++8jOmcgOimgei9rOaIkOWOn+WniyBKUyBPYmplY3RcbiAgICBpZiAoaXNJbW11dGFibGUodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvSlMoKSBhcyBGb3JtRGF0YVN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBnZXRGaWVsZFZhbHVlKHVzZURlZmF1bHQgPSB0cnVlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXRGaWVsZEN1cnJlbnRWYWx1ZSgpO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIHVzZURlZmF1bHQpIHtcbiAgICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUodGhpcy5maWVsZCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gIH1cblxuICBnZXRPcHRpb25EaXNwbGF5KFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyBkaXNwbGF5OiBUcmFuc2xhdGlvbiB9PixcbiAgKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKT8uZGlzcGxheTtcbiAgfVxuXG4gIGdldFNlbGVjdE9wdGlvbnMoZmllbGQ6IE9wZXJhbmRGaWVsZCkge1xuICAgIHJldHVybiBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgIC5maWx0ZXIoYyA9PiBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuc2VsZWN0KSlcbiAgICAgIC5tYXAoYyA9PiBjLnNwbGl0KFNwZWNDYXBhYmlsaXR5LnNlbGVjdCk/LlsxXSk7XG4gIH1cblxuICBnZXRFbmNvZGluZyhmaWVsZDogT3BlcmFuZEZpZWxkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcmVmaXggPSBgdXJuOmFsbTpkZXNjcmlwdG9yOiR7dHlwZX06ZW5jb2Rpbmc6YDtcbiAgICBjb25zdCBjYXBhYmlsaXR5ID0gZmllbGQuY2FwYWJpbGl0aWVzLmZpbmQoaXQgPT4gaXQuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgZW5jb2Rpbmc6IEVuY29kaW5nO1xuICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICBlbmNvZGluZyA9IEVOQ09ESU5HX01BUFBFUltjYXBhYmlsaXR5LnNsaWNlKHByZWZpeC5sZW5ndGgpXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGVuY29kaW5nIHx8IHtcbiAgICAgICAgZW5jb2RlOiBpZGVudGl0eSxcbiAgICAgICAgZGVjb2RlOiBpZGVudGl0eSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNGaWVsZERlcGVuZGVuY3koKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQuY2FwYWJpbGl0aWVzLnNvbWUoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGaWVsZERlcGVuZGVuY3koZmllbGQ6IE9wZXJhbmRGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBmaWVsZD8uY2FwYWJpbGl0aWVzXG4gICAgICAgIC5maWx0ZXIoYyA9PiBjLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuZmllbGREZXBlbmRlbmN5KSlcbiAgICAgICAgLm1hcChpID0+IGkuc3BsaXQoU3BlY0NhcGFiaWxpdHkuZmllbGREZXBlbmRlbmN5KVsxXSk7XG4gICAgICBpZiAoIWRlcGVuZGVuY2llcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGF0aHMgPSBkZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5zcGxpdCgnOicpKTtcbiAgICAgIGNvbnN0IHN0YXRlID0gcGFyZW50UGF0aHMuZXZlcnkoKFtwYXRoLCAuLi52YWx1ZXNdKSA9PiB7XG4gICAgICAgIC8vIFN1cHBvcnQgZGVwZW5kIG9uZSBvZiB2YWx1ZXNcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeUZpZWxkID0gdGhpcy5maWVsZHMuZmluZChcbiAgICAgICAgICBmID0+IGYucGF0aCA9PT0gbm9ybWFsaXplUGF0aChwYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeURlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShkZXBlbmRlbmN5RmllbGQpO1xuICAgICAgICBjb25zdCBmb3JtU3RhdGVWYWx1ZSA9IGdldEZvcm1EYXRhKHRoaXMuZm9ybURhdGFTdGF0ZSwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9XG4gICAgICAgICAgZm9ybVN0YXRlVmFsdWUgPT09IG51bGwgfHwgZm9ybVN0YXRlVmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBkZXBlbmRlbmN5RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA6IGZvcm1TdGF0ZVZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoXG4gICAgICAgICAgdmFsID0+IGNvbnZlcnRWYWx1ZSh2YWwsIGRlcGVuZGVuY3lGaWVsZC50eXBlKSA9PT0gY3VycmVudFZhbHVlLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICog54i2IGZpZWxkIGRlcGVuZGVuY3kg5LiN5ruh6Laz5pe277yM5Y2z6ZqQ6JeP5pe277yM5pysIGZpZWxkIOS5n+W6lOW9k+makOiXj+OAglxuICAgICAgICog5Zug5Li65Zyo5aSn6YOo5YiG5oOF5b2i5LiL77yMZmllbGREZXBlbmRlbmN5IOS4jiBvbmVPZiDmkK3phY3mnaXmj4/ov7DkuIDnu4TlhbPogZTlhbPns7vvvIzlvojlsJHlj6rmnIkgYiDku4Xkvp3otZbkuo4gYe+8jOW9kyBhIOmakOiXj+WQju+8jOi/mOimgeagueaNriBhIOeahOm7mOiupOWAvOimgeaxguaYvuekuiBiIOeahOaDheWGte+8jFxuICAgICAgICog5a+55LqO6K+l5oOF5Ya177yM5Y+v5Lul5aSa5Yqg5LiA5Liq6YWN5aSH5LqG6aKd5aSWIGZpZWxkRGVwZW5kZW5jeSDnmoQgRGVzY3JpcHRvciDmnaXmj4/ov7AgYlxuICAgICAgICovXG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXJlbnRQYXRocy5ldmVyeSgoW3BhdGhdKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tGaWVsZERlcGVuZGVuY3kodGhpcy5maWVsZHMuZmluZChpID0+IGkucGF0aCA9PT0gcGF0aCkpLFxuICAgICAgICApICYmIHN0YXRlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkeW5hbWljT3B0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuZmllbGQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGR5bmFtaWNFeHByZXNzaW9uID0gbmV3IFByb3BzRmllbGRFeHByZXNzaW9uKGZpZWxkKS5leHByZXNzaW9ucztcbiAgICAgIGlmICghZHluYW1pY0V4cHJlc3Npb24ub3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgdGhpcy5nZXRTZWxlY3RPcHRpb25zKGZpZWxkKS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jcmRGb3JtLmZvcm1Db250ZXh0JCxcbiAgICAgICAgdGhpcy5mb3JtRGF0YVN0YXRlJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhkeW5hbWljRXhwcmVzc2lvbiwgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIHN3aXRjaE1hcCgoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT4ge1xuICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgICBjb25zdCB7IGFwaSwgbGFiZWxQYXRoLCB2YWx1ZVBhdGgsIGV4cHJlc3Npb24gfSA9XG4gICAgICAgICAgICBkeW5hbWljRXhwcmVzc2lvbi5vcHRpb25zO1xuICAgICAgICAgIGNvbnN0IHN0cmluZ0V4cHJlc3Npb25Db250ZXh0ID0gdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChcbiAgICAgICAgICAgIGZvcm1Db250ZXh0LFxuICAgICAgICAgICAgZm9ybURhdGFTdGF0ZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXBpICYmIGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGV2YWxJbkNvbnRleHQoZXhwcmVzc2lvbiwgc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQuZmV0Y2hSZXNvdXJjZUxpc3QoXG4gICAgICAgICAgICAgIHRlbXBsYXRlKGFwaSkoc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQpLFxuICAgICAgICAgICAgICAoaXRlbTogU3RyaW5nTWFwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQoaXRlbSwgdmFsdWVQYXRoLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXQoaXRlbSwgbGFiZWxQYXRoLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHJlc3VsdCkgPyByZXN1bHQgOiBvZihyZXN1bHQpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGR5bmFtaWNEZWZhdWx0VmFsdWUkID0gdGhpcy5maWVsZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiA9IG5ldyBQcm9wc0ZpZWxkRXhwcmVzc2lvbihmaWVsZClcbiAgICAgICAgLmV4cHJlc3Npb25zO1xuICAgICAgaWYgKFxuICAgICAgICAhZGVmYXVsdFZhbHVlRXhwcmVzc2lvbi5kZWZhdWx0IHx8XG4gICAgICAgIHRoaXMuZ2V0RmllbGRDdXJyZW50VmFsdWUoKSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRGaWVsZFZhbHVlKCksXG4gICAgICAgICAgaXNEeW5hbWljOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhkZWZhdWx0VmFsdWVFeHByZXNzaW9uLCBwLCBuKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PlxuICAgICAgICAgIHRlbXBsYXRlKGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24uZGVmYXVsdCkoXG4gICAgICAgICAgICB0aGlzLmdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0KGZvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBtYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBpc0R5bmFtaWM6IHRydWUsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGR5bmFtaWNIaWRkZW5WYWx1ZSQgPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgIHN3aXRjaE1hcChmaWVsZCA9PiB7XG4gICAgICBjb25zdCB7IGV4cHJlc3Npb25zIH0gPSBuZXcgUHJvcHNGaWVsZEV4cHJlc3Npb24oZmllbGQpO1xuICAgICAgaWYgKCFleHByZXNzaW9ucy5oaWRkZW4pIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jcmRGb3JtLmZvcm1Db250ZXh0JCxcbiAgICAgICAgdGhpcy5mb3JtRGF0YVN0YXRlJCxcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBuKSA9PlxuICAgICAgICAgIGNvbXBhcmVXaXRoU3Vic2NyaWJlZFBhdGhzKGV4cHJlc3Npb25zLCBwLCBuKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PlxuICAgICAgICAgICAgdGVtcGxhdGUoZXhwcmVzc2lvbnMuaGlkZGVuKShcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZSksXG4gICAgICAgICAgICApID09PSAndHJ1ZScsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pLFxuICApO1xuXG4gIGdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0ID0gKFxuICAgIGZvcm1Db250ZXh0OiBhbnksXG4gICAgZm9ybURhdGFTdGF0ZTogRm9ybURhdGFTdGF0ZSxcbiAgKSA9PiAoe1xuICAgIGZldGNoUmVzb3VyY2VMaXN0OiB0aGlzLmZldGNoUmVzb3VyY2VMaXN0LFxuICAgIGNvbnRleHQ6IGZvcm1Db250ZXh0LFxuICAgIGZvcm1EYXRhOiBmb3JtRGF0YVN0YXRlLnRvSlMoKT8uc3BlYyB8fCB7fSxcbiAgfSk7XG5cbiAgZmV0Y2hSZXNvdXJjZUxpc3QgPSAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChyZXNvdXJjZTogS3ViZXJuZXRlc1Jlc291cmNlKSA9PiB2b2lkLFxuICApID0+IHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IGl0ZW1zOiBLdWJlcm5ldGVzUmVzb3VyY2VbXSB9PihgJHtBUElfR0FURVdBWX0ke3VybH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzLml0ZW1zLm1hcChpdGVtID0+IGNhbGxiYWNrLmNhbGwodGhpcywgaXRlbSkpKSxcbiAgICAgICAgc2tpcEVycm9yKFtdKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICBmaWVsZFR5cGU6IGZpZWxkIHwgcHVyZTogZ2V0RmllbGRUeXBlLFxuICAgICAgaXNCYXNpY1R5cGVGaWVsZDogZmllbGQgfCBwdXJlOiBpc0Jhc2ljVHlwZUZpZWxkXG4gICAgfSBhcyBtZXRhXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXRhLmlzQmFzaWNUeXBlRmllbGQ7IGVsc2UgYWR2YW5jZWRGaWxlZFwiPlxuICAgICAgPGFjbC1jcmQtZm9ybS1pdGVtXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIShmaWVsZC5jYXBhYmlsaXRpZXMgfCBwdXJlOiBnZXRXaWRnZXRzKSAmJlxuICAgICAgICAgICEoZmllbGQgfCBwdXJlOiBpc1JlbW90ZUZpZWxkKVxuICAgICAgICBcIlxuICAgICAgICBbbmdTd2l0Y2hdPVwibWV0YS5maWVsZFR5cGVcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkubnVtYmVyXCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIGZpZWxkLmNhcGFiaWxpdGllc1xuICAgICAgICAgICAgICB8IHB1cmU6IGdldERpc3BsYXlCeUNhcGFiaWxpdHk6U3BlY0NhcGFiaWxpdHkucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5ib29sZWFuU3dpdGNoXCI+XG4gICAgICAgICAgPGF1aS1zd2l0Y2hcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInN3aXRjaFJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICA+PC9hdWktc3dpdGNoPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3dpdGNoUmVhZG9ubHk+e3tcbiAgICAgICAgICAgIChjb250cm9sLnZhbHVlIHwgcHVyZTogY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZTogZmllbGQuY2FwYWJpbGl0aWVzKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnNlbGVjdFwiPlxuICAgICAgICAgIDxhdWktbXVsdGktc2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlwbGVcIlxuICAgICAgICAgICAgW21heFJvd0NvdW50XT1cIjNcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2FsbG93Q3JlYXRlXT1cImlzQWxsb3dDcmVhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZHluYW1pY09wdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPGF1aS1vcHRpb24tcGxhY2Vob2xkZXI+e3tcbiAgICAgICAgICAgICAgJ25vX2RhdGEnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvYXVpLW9wdGlvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2F1aS1tdWx0aS1zZWxlY3Q+XG5cbiAgICAgICAgICA8YXVpLXNlbGVjdFxuICAgICAgICAgICAgKm5nSWY9XCIhaXNNdWx0aXBsZVwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbYWxsb3dDcmVhdGVdPVwiaXNBbGxvd0NyZWF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkeW5hbWljT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwib3B0aW9uLmxhYmVsIHwgYWNsUGFyc2VKc29uVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIHwgYWNsUGFyc2VKc29uVHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8YXVpLW9wdGlvbi1wbGFjZWhvbGRlcj57e1xuICAgICAgICAgICAgICAnbm9fZGF0YScgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9hdWktb3B0aW9uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvYXVpLXNlbGVjdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxhdWktcmFkaW8tZ3JvdXBcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkucmFkaW9cIlxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJyYWRpb0xhYmVsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YXVpLXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFJhZGlvT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hdWktcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYWRpb0xhYmVsPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgIHwgcHVyZVxuICAgICAgICAgICAgICAgICAgICA6IGdldE9wdGlvbkRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgOiAoZmllbGQuY2FwYWJpbGl0aWVzIHwgcHVyZTogZ2V0UmFkaW9PcHRpb25zKVxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXVpLXJhZGlvLWdyb3VwPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5yZXNvdXJjZVJlcXVpcmVtZW50c1wiPlxuICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXJlcXVpcmVtZW50c1xuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwicmVzb3VyY2VSZXF1aXJlbWVudHNSZWFkb25seVwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHM+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZXNvdXJjZVJlcXVpcmVtZW50c1JlYWRvbmx5PlxuICAgICAgICAgICAgPGFjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHM+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnlhbWxcIj5cbiAgICAgICAgICA8YWNsLWNyZC15YW1sLWVkaXRvclxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYWN0aW9uc0NvbmZpZ109XCJlZGl0b3JBY3Rpb25zXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInlhbWxSZWFkb25seVwiXG4gICAgICAgICAgPjwvYWNsLWNyZC15YW1sLWVkaXRvcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3lhbWxSZWFkb25seT5cbiAgICAgICAgICAgIDxhY2wtY3JkLXlhbWwtZWRpdG9yXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2FjdGlvbnNDb25maWddPVwidmlld0FjdGlvbnNcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ2aWV3T3B0aW9uc1wiXG4gICAgICAgICAgICA+PC9hY2wtY3JkLXlhbWwtZWRpdG9yPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5rOHNSZXNvdXJjZVByZWZpeFwiPlxuICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXByZWZpeFxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZm9ybUVycm9yc109XCJjb250cm9sLmVycm9yc1wiXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInJlc291cmNlUHJlZml4UmVhZG9ubHlcIlxuICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcHJlZml4PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVzb3VyY2VQcmVmaXhSZWFkb25seT5cbiAgICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXByZWZpeFxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcHJlZml4PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5iYXNpY0F1dGhTZWNyZXRcIj5cbiAgICAgICAgICA8YWNsLWNyZC1iYXNpYy1hdXRoLXNlY3JldFxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1iYXNpYy1hdXRoLXNlY3JldD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS50ZXh0YXJlYVwiXG4gICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgfCBwdXJlOiBnZXREaXNwbGF5QnlDYXBhYmlsaXR5OlNwZWNDYXBhYmlsaXR5LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDxhdWktdGFncy1pbnB1dFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS50YWdzSW5wdXRcIlxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIGNsYXNzPVwidHctZmxleC0xXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIGZpZWxkLmNhcGFiaWxpdGllc1xuICAgICAgICAgICAgICB8IHB1cmU6IGdldERpc3BsYXlCeUNhcGFiaWxpdHk6U3BlY0NhcGFiaWxpdHkucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGVhcmFibGVdPVwiaXNDbGVhcmFibGVcIlxuICAgICAgICA+PC9hdWktdGFncy1pbnB1dD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxhY2wtY3JkLWxpbmtcbiAgICAgICAgICAgICpuZ0lmPVwiKGZpZWxkIHwgcHVyZTogaXNMaW5rKSAmJiBpc0Rpc2FibGVkOyBlbHNlIHRleHRGaWVsZFwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgPjwvYWNsLWNyZC1saW5rPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0RmllbGQ+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgIHwgcHVyZTogZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTpTcGVjQ2FwYWJpbGl0eS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9hY2wtY3JkLWZvcm0taXRlbT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LXctZnVsbCB0dy1mbGV4LWNvbFwiXG4gICAgICAgICpuZ0lmPVwiZmllbGQuY2FwYWJpbGl0aWVzIHwgcHVyZTogZ2V0V2lkZ2V0cyBhcyB3aWRnZXRcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIndpZGdldC5jb21wb25lbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkIHwgcHVyZTogaXNSZW1vdGVGaWVsZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVtb3RlTW9kdWxlJCB8IGFzeW5jIGFzIHJlbW90ZU1vZHVsZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZERpc3BsYXlOYW1lIGFzIGxhYmVsOyBlbHNlIHB1cmVSZW1vdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktZm9ybS1pdGVtIFtlbXB0eUFkZG9uXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGF1aUZvcm1JdGVtTGFiZWxcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGREaXNwbGF5TmFtZSBhcyBsYWJlbFwiXG4gICAgICAgICAgICAgICAgPnt7IGxhYmVsIHwgdHJhbnNsYXRlIH19PC9sYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW90ZU1vZHVsZS5jb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICBpbmplY3RvcjogcmVtb3RlTW9kdWxlLmluamVjdG9yXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGF1aUZvcm1JdGVtSGludD5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGVzY3JpcHRpb24gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F1aS1mb3JtLWl0ZW0+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwdXJlUmVtb3RlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICByZW1vdGVNb2R1bGUuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGluamVjdG9yOiByZW1vdGVNb2R1bGUuaW5qZWN0b3JcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lclxuICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWR2YW5jZWRGaWxlZD5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBtZXRhLmZpZWxkVHlwZSA9PT0gU3BlY0NhcGFiaWxpdHkucGFzc3dvcmQgfHxcbiAgICAgICAgICBtZXRhLmZpZWxkVHlwZSA9PT0gU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkIHx8XG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmV4dGVybmFsUGFzc3dvcmRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGFjbC1jcmQtZm9ybS1pdGVtXG4gICAgICAgICAgKm5nSWY9XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbcGxhaW5dPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFzc3dvcmRWaWV3XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYWNsLWNyZC1mb3JtLWl0ZW0+XG4gICAgICAgIDxhY2wtcGFzc3dvcmQtaW5wdXRcbiAgICAgICAgICAqbmdJZj1cIiFpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbaW5pdFBhc3N3b3JkXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGlzcGxheU5hbWUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtoaW50XT1cIlxuICAgICAgICAgICAgY3VzdG9tRGVzY3JpcHRpb24/LnRlbXBsYXRlUmVmIHx8XG4gICAgICAgICAgICAoZmllbGQgfCBwdXJlOiBnZXRGaWVsZERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiY3JkRm9ybS5yZWFkb25seVwiXG4gICAgICAgICAgW2lzVXBkYXRlXT1cIiEhY29udHJvbC52YWx1ZSAmJiAhY29udHJvbC5kaXJ0eVwiXG4gICAgICAgICAgW3N0cm9uZ1Bhc3N3b3JkXT1cIm1ldGEuZmllbGRUeXBlICE9PSBTcGVjQ2FwYWJpbGl0eS5leHRlcm5hbFBhc3N3b3JkXCJcbiAgICAgICAgICBbZW5hYmxlQ29uZmlybV09XCJtZXRhLmZpZWxkVHlwZSA9PT0gU3BlY0NhcGFiaWxpdHkuY29uZmlybVBhc3N3b3JkXCJcbiAgICAgICAgICB3aWR0aD1cImxhcmdlXCJcbiAgICAgICAgICBbZW5jb2RpbmddPVwiZmllbGQgfCBwdXJlOiBnZXRFbmNvZGluZzoncGFzc3dvcmQnXCJcbiAgICAgICAgICBbcGF0dGVybl09XCJmaWVsZC52YWxpZGF0aW9ucz8ucGF0dGVyblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAgICAgICAgIHwgcHVyZTogZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eTpTcGVjQ2FwYWJpbGl0eS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIFwiXG4gICAgICAgID48L2FjbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBncm91cCBmaWVsZCAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHcm91cEZpZWxkKGZpZWxkKSAmJiBmaWVsZC5maWVsZExpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGFjbC1vcGVyYW5kLWZpZWxkLWdyb3VwXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgIFtmaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICAgICAgW2Zvcm1FcnJvcnNdPVwiZm9ybUVycm9yc1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9hY2wtb3BlcmFuZC1maWVsZC1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBhcnJheSBmaWVsZCBncm91cHMgLS0+XG4gICAgICA8IS0tIGFycmF5IGZpZWxkIHRhYmxlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXJyYXlGaWVsZChmaWVsZClcIj5cbiAgICAgICAgPGFjbC1jcmQtYXJyYXktdGFibGVcbiAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogaXNBcnJheUZpZWxkVGFibGU7IGVsc2UgZGVmYXVsdEFycmF5RmlsZWRcIlxuICAgICAgICAgIFthcnJheUZpZWxkR3JvdXBdPVwiZmllbGRcIlxuICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1jcmQtYXJyYXktdGFibGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFycmF5RmlsZWQ+XG4gICAgICAgICAgPGFjbC1vcGVyYW5kLWFycmF5LWZpZWxkLWdyb3VwXG4gICAgICAgICAgICBbYXJyYXlGaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYWNsLW9wZXJhbmQtYXJyYXktZmllbGQtZ3JvdXA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3Bhc3N3b3JkVmlldz5cbiAge3sgUEFTU1dPUkRfUkVWRUFMIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|