@dignite-ng/expand.cms 0.0.54 → 0.0.56
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/config/components/domains/domains.component.mjs +5 -4
- package/esm2022/config/components/site-language/site-language.component.mjs +3 -3
- package/esm2022/lib/cms-routing.module.mjs +1 -1
- package/esm2022/lib/cms.module.mjs +6 -3
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +145 -222
- package/esm2022/lib/components/admin/entries/create-or-update-entry-input-base.mjs +4 -11
- package/esm2022/lib/components/admin/entries/create.component.mjs +78 -54
- package/esm2022/lib/components/admin/entries/edit.component.mjs +78 -52
- package/esm2022/lib/components/admin/entries/entries.component.mjs +9 -5
- package/esm2022/lib/components/admin/fields/create-field.component.mjs +12 -4
- package/esm2022/lib/components/admin/fields/create-or-edit-field.component.mjs +12 -6
- package/esm2022/lib/components/admin/fields/edit-field.component.mjs +9 -6
- package/esm2022/lib/components/admin/fields/field-group.component.mjs +5 -5
- package/esm2022/lib/components/admin/fields/fields.component.mjs +2 -2
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +15 -9
- package/esm2022/lib/components/admin/sections/sections.component.mjs +16 -9
- package/esm2022/lib/components/dynamic-form/entry/entry-config.component.mjs +15 -13
- package/esm2022/lib/components/dynamic-form/entry/entry-control.component.mjs +9 -13
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.component.mjs +15 -17
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +18 -22
- package/esm2022/lib/components/dynamic-form/table/table-config.component.mjs +3 -3
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +3 -3
- package/esm2022/lib/constants/styles.mjs +2 -4
- package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +1 -1
- package/esm2022/lib/resolvers/table-default-entity-props.mjs +1 -2
- package/fesm2022/dignite-ng-expand.cms-config.mjs +7 -83
- package/fesm2022/dignite-ng-expand.cms-config.mjs.map +1 -1
- package/fesm2022/dignite-ng-expand.cms.mjs +407 -500
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -1
- package/lib/cms.module.d.ts +2 -1
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +35 -68
- package/lib/components/admin/entries/create-or-update-entry-input-base.d.ts +3 -3
- package/lib/components/admin/entries/create.component.d.ts +26 -23
- package/lib/components/admin/entries/edit.component.d.ts +29 -23
- package/lib/components/admin/entries/entries.component.d.ts +1 -0
- package/lib/components/admin/sections/sections.component.d.ts +1 -0
- package/lib/components/dynamic-form/entry/entry-config.component.d.ts +4 -4
- package/lib/components/dynamic-form/matrix/matrix-config.component.d.ts +4 -4
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +5 -5
- package/lib/constants/styles.d.ts +1 -1
- package/package.json +1 -1
- package/config/services/validators.service.d.ts +0 -16
- package/esm2022/config/services/validators.service.mjs +0 -83
- package/esm2022/lib/services/validators.service.mjs +0 -83
- package/lib/services/validators.service.d.ts +0 -15
package/lib/cms.module.d.ts
CHANGED
|
@@ -26,10 +26,11 @@ import * as i23 from "@abp/ng.components/page";
|
|
|
26
26
|
import * as i24 from "ng-zorro-antd/select";
|
|
27
27
|
import * as i25 from "@dignite-ng/expand.dynamic-form";
|
|
28
28
|
import * as i26 from "@abp/ng.components/extensible";
|
|
29
|
+
import * as i27 from "@dignite-ng/expand.core";
|
|
29
30
|
export declare class CmsModule {
|
|
30
31
|
static forChild(options?: any): ModuleWithProviders<CmsModule>;
|
|
31
32
|
static forLazy(options?: any): NgModuleFactory<CmsModule>;
|
|
32
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<CmsModule, never>;
|
|
33
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<CmsModule, [typeof i1.EntriesComponent, typeof i2.FieldsComponent, typeof i3.SectionsComponent, typeof i4.FieldGroupComponent, typeof i5.CreateFieldComponent, typeof i6.EditFieldComponent, typeof i7.CreateOrEditFieldComponent, typeof i8.CreateOrEditComponent, typeof i9.CreateComponent, typeof i10.EditComponent, typeof i11.CreateOrEditEntriesComponent, typeof i12.TableConfigComponent, typeof i13.TableControlComponent, typeof i14.MatrixConfigComponent, typeof i15.MatrixControlComponent, typeof i16.EntryConfigComponent, typeof i17.EntryControlComponent], [typeof i18.CoreModule, typeof i19.ThemeSharedModule, typeof i20.FormsModule, typeof i21.CmsRoutingModule, typeof i22.NgbNavModule, typeof i22.NgbAccordionModule, typeof i22.NgbDropdownModule, typeof i23.PageModule, typeof i24.NzSelectModule, typeof i25.DynamicFormModule, typeof i26.ExtensibleModule], [typeof i12.TableConfigComponent, typeof i13.TableControlComponent, typeof i14.MatrixConfigComponent, typeof i15.MatrixControlComponent, typeof i16.EntryConfigComponent, typeof i17.EntryControlComponent]>;
|
|
34
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<CmsModule, [typeof i1.EntriesComponent, typeof i2.FieldsComponent, typeof i3.SectionsComponent, typeof i4.FieldGroupComponent, typeof i5.CreateFieldComponent, typeof i6.EditFieldComponent, typeof i7.CreateOrEditFieldComponent, typeof i8.CreateOrEditComponent, typeof i9.CreateComponent, typeof i10.EditComponent, typeof i11.CreateOrEditEntriesComponent, typeof i12.TableConfigComponent, typeof i13.TableControlComponent, typeof i14.MatrixConfigComponent, typeof i15.MatrixControlComponent, typeof i16.EntryConfigComponent, typeof i17.EntryControlComponent], [typeof i18.CoreModule, typeof i19.ThemeSharedModule, typeof i20.FormsModule, typeof i21.CmsRoutingModule, typeof i22.NgbNavModule, typeof i22.NgbAccordionModule, typeof i22.NgbDropdownModule, typeof i23.PageModule, typeof i24.NzSelectModule, typeof i25.DynamicFormModule, typeof i26.ExtensibleModule, typeof i27.KeydownPreventDefaultDirective], [typeof i12.TableConfigComponent, typeof i13.TableControlComponent, typeof i14.MatrixConfigComponent, typeof i15.MatrixControlComponent, typeof i16.EntryConfigComponent, typeof i17.EntryControlComponent]>;
|
|
34
35
|
static ɵinj: i0.ɵɵInjectorDeclaration<CmsModule>;
|
|
35
36
|
}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { AbstractControl, FormGroup, ValidationErrors } from '@angular/forms';
|
|
5
|
-
import { Router } from '@angular/router';
|
|
6
|
-
import { EntryAdminService } from '../../../proxy/admin/entries';
|
|
7
|
-
import { SectionAdminService } from '../../../proxy/admin/sections';
|
|
8
|
-
import { Observable } from 'rxjs';
|
|
9
|
-
import { DatePipe, Location } from '@angular/common';
|
|
10
|
-
import { CmsApiService } from '../../../services';
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { Location } from '@angular/common';
|
|
11
4
|
import * as i0 from "@angular/core";
|
|
12
|
-
export declare class CreateOrEditEntriesComponent
|
|
5
|
+
export declare class CreateOrEditEntriesComponent {
|
|
13
6
|
private toaster;
|
|
14
7
|
_location: Location;
|
|
15
8
|
private configState;
|
|
@@ -19,72 +12,46 @@ export declare class CreateOrEditEntriesComponent implements AfterContentInit {
|
|
|
19
12
|
private _LocalizationService;
|
|
20
13
|
private router;
|
|
21
14
|
private _CmsApiService;
|
|
22
|
-
constructor(toaster: ToasterService, _location: Location, configState: ConfigStateService, _SectionAdminService: SectionAdminService, _EntryAdminService: EntryAdminService, datePipe: DatePipe, _LocalizationService: LocalizationService, router: Router, _CmsApiService: CmsApiService);
|
|
23
|
-
/**语言 */
|
|
24
|
-
cultureName: string;
|
|
25
|
-
/**条目类型id */
|
|
26
|
-
entryTypeId: string;
|
|
27
|
-
/**新建版本的版本id,同条目id */
|
|
28
|
-
RevisionEntryId: any;
|
|
29
|
-
/**选择的条目项 */
|
|
30
|
-
entryTypesItem: any;
|
|
31
|
-
/**版块id */
|
|
32
|
-
sectionId: string;
|
|
33
|
-
/**版块详情 */
|
|
34
|
-
SectionSelect: any;
|
|
35
15
|
/**语言列表 */
|
|
36
16
|
languagesList: any[];
|
|
37
|
-
|
|
38
|
-
|
|
17
|
+
/**条目列表-选择上级条目 */
|
|
18
|
+
entryList: any[];
|
|
19
|
+
/**条目信息 */
|
|
20
|
+
entryInfo: any;
|
|
21
|
+
/**版本信息 */
|
|
22
|
+
sectionInfo: any;
|
|
23
|
+
/**需要展示的b板块下条目类型 */
|
|
24
|
+
showEntryType: any;
|
|
25
|
+
/**版本条目id */
|
|
26
|
+
entryVersionId: any;
|
|
39
27
|
/**版本列表 */
|
|
40
28
|
AllVersionsList: any[];
|
|
41
|
-
/**是否是编辑 */
|
|
42
29
|
isEdit: boolean;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
set
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
/**语言表单实体 */
|
|
57
|
-
get cultureinput(): AbstractControl<any, any>;
|
|
58
|
-
/**语言表单实体影子 */
|
|
59
|
-
get culture_shadowInput(): AbstractControl<any, any>;
|
|
60
|
-
/**extraProperties配置表单实体 */
|
|
61
|
-
get extraProperties(): FormGroup;
|
|
62
|
-
ngAfterContentInit(): Promise<void>;
|
|
63
|
-
/**表单控件模板-动态表单配置组件 */
|
|
64
|
-
FormDynamicontrolRef: QueryList<ViewContainerRef>;
|
|
65
|
-
/**定义自定义异步验证 */
|
|
66
|
-
cultureAsyncValidator_test(): (ctrl: AbstractControl) => Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;
|
|
67
|
-
/**
|
|
68
|
-
* 设置条目详情
|
|
69
|
-
* @param {object} source - 数据源对象
|
|
70
|
-
*/
|
|
71
|
-
setEntryconfig(source: any): void;
|
|
72
|
-
time: number;
|
|
30
|
+
sectionId: string;
|
|
31
|
+
entryTypeId: string;
|
|
32
|
+
set select(v: any);
|
|
33
|
+
formEntity: FormGroup | undefined;
|
|
34
|
+
set entity(value: FormGroup | undefined);
|
|
35
|
+
/**是否加载完成 */
|
|
36
|
+
isLoad: boolean;
|
|
37
|
+
/**语言控件 */
|
|
38
|
+
get cultureInput(): FormControl;
|
|
39
|
+
/**获取提交按钮替身,用于真实触发表单提交 */
|
|
40
|
+
submitclick: ElementRef;
|
|
41
|
+
/**加载数据 */
|
|
42
|
+
loadData(): Promise<void>;
|
|
73
43
|
/**定义自定义异步验证 */
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
getTypeEntryList(): Promise<unknown>;
|
|
44
|
+
cultureAsyncValidator(): Promise<unknown>;
|
|
45
|
+
/**获取板块信息 */
|
|
46
|
+
getSectionInfo(): Promise<unknown>;
|
|
47
|
+
/**获取板块下所有条目 */
|
|
48
|
+
getEntryList(): Promise<unknown>;
|
|
80
49
|
/**对数组按照父子关系进行分组 */
|
|
81
50
|
groupByParentId(arr: any, id: string, layer: any): any[];
|
|
82
|
-
/**获取条目版本列表 */
|
|
83
|
-
getAllVersionsList(): Promise<unknown>;
|
|
84
51
|
/**标题转化别名 */
|
|
85
52
|
setTitleToSlugBlur(event: any): void;
|
|
86
|
-
|
|
87
|
-
|
|
53
|
+
/**获取条目版本列表 */
|
|
54
|
+
getAllVersionsList(): Promise<unknown>;
|
|
88
55
|
/**激活 */
|
|
89
56
|
ActivatedVersion(VersionId: any): void;
|
|
90
57
|
/**编辑版本 */
|
|
@@ -92,5 +59,5 @@ export declare class CreateOrEditEntriesComponent implements AfterContentInit {
|
|
|
92
59
|
/**删除版本 */
|
|
93
60
|
delectVersion(vid: any): void;
|
|
94
61
|
static ɵfac: i0.ɵɵFactoryDeclaration<CreateOrEditEntriesComponent, never>;
|
|
95
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CreateOrEditEntriesComponent, "cms-create-or-edit-entries", never, { "isEdit": { "alias": "isEdit"; "required": false; }; "
|
|
62
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CreateOrEditEntriesComponent, "cms-create-or-edit-entries", never, { "isEdit": { "alias": "isEdit"; "required": false; }; "sectionId": { "alias": "sectionId"; "required": false; }; "entryTypeId": { "alias": "entryTypeId"; "required": false; }; "select": { "alias": "select"; "required": false; }; "entity": { "alias": "entity"; "required": false; }; }, {}, never, never, false, never>;
|
|
96
63
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { FormGroup } from "@angular/forms";
|
|
2
2
|
export declare class CreateOrUpdateEntryInputBase {
|
|
3
|
-
/**语言 */
|
|
4
|
-
culture: any;
|
|
5
3
|
/**条目id */
|
|
6
4
|
entryTypeId: any;
|
|
7
5
|
/**标题 */
|
|
8
6
|
title: any;
|
|
9
7
|
/**别名 */
|
|
10
8
|
slug: any;
|
|
9
|
+
/**语言 */
|
|
10
|
+
culture: any;
|
|
11
11
|
/**是否是草稿 */
|
|
12
12
|
draft: any;
|
|
13
13
|
/**发布时间 */
|
|
@@ -19,5 +19,5 @@ export declare class CreateOrUpdateEntryInputBase {
|
|
|
19
19
|
/**版本 */
|
|
20
20
|
initialVersionId: any;
|
|
21
21
|
extraProperties: FormGroup | undefined;
|
|
22
|
-
constructor(
|
|
22
|
+
constructor();
|
|
23
23
|
}
|
|
@@ -1,44 +1,47 @@
|
|
|
1
|
-
import { LocalizationService } from '@abp/ng.core';
|
|
2
|
-
import { ToasterService } from '@abp/ng.theme.shared';
|
|
3
1
|
import { Location } from '@angular/common';
|
|
4
2
|
import { OnInit, ElementRef } from '@angular/core';
|
|
5
|
-
import { FormGroup } from '@angular/forms';
|
|
6
|
-
import { ActivatedRoute } from '@angular/router';
|
|
7
|
-
import { EntryAdminService } from '../../../proxy/admin/entries';
|
|
3
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
8
4
|
import * as i0 from "@angular/core";
|
|
9
5
|
export declare class CreateComponent implements OnInit {
|
|
6
|
+
private fb;
|
|
7
|
+
private _updateListService;
|
|
10
8
|
private toaster;
|
|
11
9
|
_location: Location;
|
|
12
10
|
private route;
|
|
13
11
|
private _EntryAdminService;
|
|
14
12
|
private _LocalizationService;
|
|
15
|
-
|
|
16
|
-
private fb;
|
|
17
|
-
private _updateListService;
|
|
18
|
-
/**表单实体 */
|
|
19
|
-
newEntity: FormGroup | undefined;
|
|
20
|
-
/**是否是草稿 */
|
|
21
|
-
draftType: boolean;
|
|
22
|
-
/**页面传值用于传递到子组件 */
|
|
23
|
-
queryParams: any;
|
|
24
|
-
/**指定id的条目信息 */
|
|
25
|
-
entrySelect: any;
|
|
13
|
+
private _ValidatorsService;
|
|
26
14
|
/**获取提交按钮替身,用于真实触发表单提交 */
|
|
27
15
|
submitclick: ElementRef;
|
|
28
|
-
ngOnInit(): Promise<void>;
|
|
29
|
-
/**获取条目信息 */
|
|
30
|
-
getEntrySelect(): Promise<unknown>;
|
|
31
|
-
private _ValidatorsService;
|
|
32
16
|
/**表单验证状态
|
|
33
17
|
* {
|
|
34
18
|
* title:true,
|
|
35
19
|
* }
|
|
36
20
|
*/
|
|
37
21
|
formValidation: any;
|
|
38
|
-
|
|
39
|
-
|
|
22
|
+
/**表单实体 */
|
|
23
|
+
formEntity: FormGroup | undefined;
|
|
24
|
+
/**语言 */
|
|
25
|
+
cultureName: string;
|
|
26
|
+
/**条目类型id */
|
|
27
|
+
entryTypeId: string;
|
|
28
|
+
/**版块id */
|
|
29
|
+
sectionId: string;
|
|
30
|
+
/**条目版本id */
|
|
31
|
+
entryVersionId: string;
|
|
32
|
+
/**条目信息 */
|
|
33
|
+
entryInfo: any;
|
|
34
|
+
/**是否草稿控件*/
|
|
35
|
+
get draftInput(): FormControl;
|
|
36
|
+
/**语言控件 */
|
|
37
|
+
get cultureInput(): FormControl;
|
|
38
|
+
ngOnInit(): Promise<void>;
|
|
39
|
+
/**获取条目信息 */
|
|
40
|
+
getEntryInfo(): Promise<unknown>;
|
|
41
|
+
/**提交 */
|
|
42
|
+
save(): void;
|
|
40
43
|
isSubmit: boolean;
|
|
41
|
-
|
|
44
|
+
/**点击提交 */
|
|
42
45
|
clickSubmit(type: any): void;
|
|
43
46
|
/**返回上一页 */
|
|
44
47
|
backTo(): void;
|
|
@@ -1,44 +1,50 @@
|
|
|
1
|
-
import { LocalizationService } from '@abp/ng.core';
|
|
2
|
-
import { ToasterService } from '@abp/ng.theme.shared';
|
|
3
1
|
import { Location } from '@angular/common';
|
|
4
2
|
import { OnInit, ElementRef } from '@angular/core';
|
|
5
|
-
import { FormGroup } from '@angular/forms';
|
|
6
|
-
import { ActivatedRoute } from '@angular/router';
|
|
7
|
-
import { EntryAdminService } from '../../../proxy/admin/entries';
|
|
3
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
8
4
|
import * as i0 from "@angular/core";
|
|
9
5
|
export declare class EditComponent implements OnInit {
|
|
6
|
+
private fb;
|
|
7
|
+
private _updateListService;
|
|
10
8
|
private toaster;
|
|
11
9
|
_location: Location;
|
|
12
10
|
private route;
|
|
13
11
|
private _EntryAdminService;
|
|
14
12
|
private _LocalizationService;
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
private _updateListService;
|
|
18
|
-
/**表单实体 */
|
|
19
|
-
newEntity: FormGroup | undefined;
|
|
20
|
-
/**是否是草稿 */
|
|
21
|
-
draftType: boolean;
|
|
22
|
-
/**页面传值用于传递到子组件 */
|
|
23
|
-
queryParams: any;
|
|
24
|
-
/**指定id的条目信息 */
|
|
25
|
-
entrySelect: any;
|
|
13
|
+
private _ValidatorsService;
|
|
14
|
+
private datePipe;
|
|
26
15
|
/**获取提交按钮替身,用于真实触发表单提交 */
|
|
27
16
|
submitclick: ElementRef;
|
|
28
|
-
ngOnInit(): Promise<void>;
|
|
29
|
-
/**获取条目信息 */
|
|
30
|
-
getEntrySelect(): Promise<unknown>;
|
|
31
|
-
private _ValidatorsService;
|
|
32
17
|
/**表单验证状态
|
|
33
18
|
* {
|
|
34
19
|
* title:true,
|
|
35
20
|
* }
|
|
36
21
|
*/
|
|
37
22
|
formValidation: any;
|
|
38
|
-
|
|
39
|
-
|
|
23
|
+
/**表单实体 */
|
|
24
|
+
formEntity: FormGroup | undefined;
|
|
25
|
+
/**语言 */
|
|
26
|
+
cultureName: string;
|
|
27
|
+
/**条目类型id */
|
|
28
|
+
entryTypeId: string;
|
|
29
|
+
/**版块id */
|
|
30
|
+
sectionId: string;
|
|
31
|
+
/**条目版本id */
|
|
32
|
+
entryVersionId: string;
|
|
33
|
+
/**条目id */
|
|
34
|
+
entrieId: string;
|
|
35
|
+
/**条目信息 */
|
|
36
|
+
entryInfo: any;
|
|
37
|
+
/**是否草稿控件*/
|
|
38
|
+
get draftInput(): FormControl;
|
|
39
|
+
/**语言控件 */
|
|
40
|
+
get cultureInput(): FormControl;
|
|
41
|
+
ngOnInit(): Promise<void>;
|
|
42
|
+
/**获取条目信息 */
|
|
43
|
+
getEntryInfo(): Promise<unknown>;
|
|
44
|
+
/**提交 */
|
|
45
|
+
save(): void;
|
|
40
46
|
isSubmit: boolean;
|
|
41
|
-
|
|
47
|
+
/**点击提交 */
|
|
42
48
|
clickSubmit(type: any): void;
|
|
43
49
|
/**返回上一页 */
|
|
44
50
|
backTo(): void;
|
|
@@ -9,15 +9,15 @@ export declare class EntryConfigComponent implements AfterContentInit {
|
|
|
9
9
|
/**表单控件类型 */
|
|
10
10
|
_type: any;
|
|
11
11
|
set type(v: any);
|
|
12
|
-
/**表单实体 */
|
|
13
|
-
_Entity: FormGroup | undefined;
|
|
14
|
-
set Entity(v: FormGroup);
|
|
15
12
|
/**选择的表单信息 */
|
|
16
13
|
_selected: any;
|
|
17
14
|
set selected(v: any);
|
|
18
15
|
/**语言 */
|
|
19
16
|
_culture: any;
|
|
20
17
|
set culture(v: any);
|
|
18
|
+
/**表单实体 */
|
|
19
|
+
_Entity: FormGroup | undefined;
|
|
20
|
+
set Entity(v: FormGroup);
|
|
21
21
|
get formConfiguration(): FormGroup;
|
|
22
22
|
submitclick: ElementRef;
|
|
23
23
|
/**站点列表 */
|
|
@@ -35,5 +35,5 @@ export declare class EntryConfigComponent implements AfterContentInit {
|
|
|
35
35
|
/**切换站点 */
|
|
36
36
|
siteIdChange(): Promise<void>;
|
|
37
37
|
static ɵfac: i0.ɵɵFactoryDeclaration<EntryConfigComponent, never>;
|
|
38
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EntryConfigComponent, "cms-entry-config", never, { "type": { "alias": "type"; "required": false; }; "
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EntryConfigComponent, "cms-entry-config", never, { "type": { "alias": "type"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "culture": { "alias": "culture"; "required": false; }; "Entity": { "alias": "Entity"; "required": false; }; }, {}, never, never, false, never>;
|
|
39
39
|
}
|
|
@@ -12,12 +12,12 @@ export declare class MatrixConfigComponent {
|
|
|
12
12
|
/**表单控件类型 */
|
|
13
13
|
_type: any;
|
|
14
14
|
set type(v: any);
|
|
15
|
-
/**表单实体 */
|
|
16
|
-
_Entity: FormGroup | undefined;
|
|
17
|
-
set Entity(v: FormGroup);
|
|
18
15
|
/**选择的表单信息 */
|
|
19
16
|
_selected: any;
|
|
20
17
|
set selected(v: any);
|
|
18
|
+
/**表单实体 */
|
|
19
|
+
_Entity: FormGroup | undefined;
|
|
20
|
+
set Entity(v: FormGroup);
|
|
21
21
|
submitclick: ElementRef;
|
|
22
22
|
dataLoaded(): Promise<void>;
|
|
23
23
|
AfterInit(): Promise<unknown>;
|
|
@@ -69,5 +69,5 @@ export declare class MatrixConfigComponent {
|
|
|
69
69
|
/**矩阵displayNameInput字段失去焦点 */
|
|
70
70
|
MatrixFieldDisplayNameInputBlur(event: any): void;
|
|
71
71
|
static ɵfac: i0.ɵɵFactoryDeclaration<MatrixConfigComponent, never>;
|
|
72
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MatrixConfigComponent, "df-matrix-config", never, { "type": { "alias": "type"; "required": false; }; "
|
|
72
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MatrixConfigComponent, "df-matrix-config", never, { "type": { "alias": "type"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "Entity": { "alias": "Entity"; "required": false; }; }, {}, never, never, false, never>;
|
|
73
73
|
}
|
|
@@ -4,9 +4,6 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class MatrixControlComponent {
|
|
5
5
|
private fb;
|
|
6
6
|
constructor(fb: FormBuilder);
|
|
7
|
-
/**表单实体 */
|
|
8
|
-
_entity: FormGroup | undefined;
|
|
9
|
-
set entity(v: any);
|
|
10
7
|
/**字段配置列表 */
|
|
11
8
|
_fields: any;
|
|
12
9
|
set fields(v: any);
|
|
@@ -19,6 +16,9 @@ export declare class MatrixControlComponent {
|
|
|
19
16
|
/**语言 */
|
|
20
17
|
_culture: any;
|
|
21
18
|
set culture(v: any);
|
|
19
|
+
/**表单实体 */
|
|
20
|
+
_entity: FormGroup | undefined;
|
|
21
|
+
set entity(v: any);
|
|
22
22
|
submitclick: ElementRef;
|
|
23
23
|
/** 获取父级字段代表的表单组*/
|
|
24
24
|
extraProperties: FormGroup | undefined;
|
|
@@ -33,7 +33,7 @@ export declare class MatrixControlComponent {
|
|
|
33
33
|
/**增加指定矩阵控件项 */
|
|
34
34
|
addMatrixControl(item: any): void;
|
|
35
35
|
/**删除矩阵控件 */
|
|
36
|
-
deleteMatrixControl(index: any): void;
|
|
36
|
+
deleteMatrixControl(index: any, item: any): void;
|
|
37
37
|
static ɵfac: i0.ɵɵFactoryDeclaration<MatrixControlComponent, never>;
|
|
38
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MatrixControlComponent, "df-matrix-control", never, { "
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MatrixControlComponent, "df-matrix-control", never, { "fields": { "alias": "fields"; "required": false; }; "parentFiledName": { "alias": "parentFiledName"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "culture": { "alias": "culture"; "required": false; }; "entity": { "alias": "entity"; "required": false; }; }, {}, never, never, false, never>;
|
|
39
39
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: "\n.lpx-content-container .lpx-content{min-height:calc(100vh - 34px);padding:1.25em 2em 1.25em}h1,h2,h3,h4,h5,h6{color:inherit}.lpx-settings .lpx-context-menu{overflow:auto}\na {\n text-decoration: unset;\n}\n\n
|
|
1
|
+
declare const _default: "\n.lpx-content-container .lpx-content{min-height:calc(100vh - 34px);padding:1.25em 2em 1.25em}h1,h2,h3,h4,h5,h6{color:inherit}.lpx-settings .lpx-context-menu{overflow:auto}\na {\n text-decoration: unset;\n}\n\n\n:root select{\n cursor: pointer; /* this will show the pointer when hovering */\n} \n.cdk-global-overlay-wrapper, .cdk-overlay-container {pointer-events: none;top: 0;left: 0;height: 100%;width: 100% }.cdk-overlay-container {position: fixed;z-index: 1000 }.cdk-overlay-container:empty {display: none }.cdk-global-overlay-wrapper, .cdk-overlay-connected-position-bounding-box, .cdk-overlay-pane {position: absolute;z-index: 1000;display: flex }.cdk-overlay-pane {pointer-events: auto;box-sizing: border-box;max-width: 100%;max-height: 100% }.cdk-overlay-backdrop {position: absolute;top: 0;bottom: 0;left: 0;right: 0;z-index: 1000;pointer-events: auto;transition: opacity .4s cubic-bezier(.25, .8, .25, 1);opacity: 0 }.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {opacity: 1 }.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing {opacity: .6 }.cdk-overlay-dark-backdrop {background: rgba(0, 0, 0, .32) }.cdk-overlay-transparent-backdrop {transition: visibility 1ms linear, opacity 1ms linear;visibility: hidden;opacity: 1 }.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {opacity: 0;visibility: visible }.cdk-overlay-backdrop-noop-animation {transition: none }.cdk-overlay-connected-position-bounding-box {flex-direction: column;min-width: 1px;min-height: 1px }.cdk-global-scrollblock {position: fixed;width: 100%;overflow-y: scroll }.cdk-visually-hidden {border: 0;clip: rect(0 0 0 0);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;outline: 0;-webkit-appearance: none;-moz-appearance: none }.nz-overlay-transparent-backdrop, .nz-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {opacity: 0 }.ant-select, .ant-select-dropdown {margin: 0;line-height: 1.5715;box-sizing: border-box;font-feature-settings: 'tnum';list-style: none }.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottom, .ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft, .ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight, .ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottom, .ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft, .ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight, .ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft, .ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft {animation-name: antSlideUpIn }.ant-select-dropdown.ant-select-tree-dropdown {top: 100%;left: 0;position: relative;width: 100%;margin-top: 4px;margin-bottom: 4px;overflow: auto }.ant-select-dropdown-hidden, .ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete, .ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye, .ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info::before {display: none }.ant-select-dropdown {top: 100%;left: 0;position: relative;width: 100%;margin-top: 4px;margin-bottom: 4px;display: block }.ant-select-dropdown .cdk-virtual-scroll-content-wrapper {right: 0 }.ant-select-dropdown .full-width {contain: initial }.ant-select-dropdown .full-width .cdk-virtual-scroll-content-wrapper {position: static }.ant-select-dropdown .full-width .cdk-virtual-scroll-spacer {position: absolute;top: 0;width: 1px }.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft, .ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft {animation-name: antSlideDownIn }.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft {animation-name: antSlideUpOut }.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft {animation-name: antSlideDownOut }\n\n/*** 表单验证样式 start */\n.was-validated .form-control:invalid, .form-control.is-invalid{\n border-color: #c00d49 !important;\n}\n/*** 表单验证样式 end */\n";
|
|
2
2
|
export default _default;
|
package/package.json
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { FormGroup, FormArray } from '@angular/forms';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class ValidatorsService {
|
|
4
|
-
constructor();
|
|
5
|
-
private fb;
|
|
6
|
-
private toaster;
|
|
7
|
-
private _LocalizationService;
|
|
8
|
-
/**检查表单- */
|
|
9
|
-
isCheckForm(input: any, module?: string): boolean;
|
|
10
|
-
/**获取表单所有字段是否通过验证 */
|
|
11
|
-
getFormValidationStatus(formEntity: FormGroup | FormArray): {
|
|
12
|
-
[key: string]: any;
|
|
13
|
-
};
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ValidatorsService, never>;
|
|
15
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<ValidatorsService>;
|
|
16
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { LocalizationService } from '@abp/ng.core';
|
|
2
|
-
import { ToasterService } from '@abp/ng.theme.shared';
|
|
3
|
-
import { inject, Injectable } from '@angular/core';
|
|
4
|
-
import { FormGroup, FormArray, FormControl, FormBuilder } from '@angular/forms';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class ValidatorsService {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.fb = inject(FormBuilder);
|
|
9
|
-
this.toaster = inject(ToasterService);
|
|
10
|
-
this._LocalizationService = inject(LocalizationService);
|
|
11
|
-
}
|
|
12
|
-
/**检查表单- */
|
|
13
|
-
isCheckForm(input, module = 'AbpValidation') {
|
|
14
|
-
let keys = Object.keys(input);
|
|
15
|
-
for (let i = 0; i < keys.length; i++) {
|
|
16
|
-
const element = keys[i];
|
|
17
|
-
if (input[element] == false) {
|
|
18
|
-
let info = `"${this._LocalizationService.instant(`${module}::${element}`)}" `;
|
|
19
|
-
if (element.includes('.') && !element.includes('].')) {
|
|
20
|
-
let arr = element.split('.');
|
|
21
|
-
info = `"${this._LocalizationService.instant(`CmsKit::${arr[0]}`)}.${this._LocalizationService.instant(`CmsKit::${arr[1]}`)}"`;
|
|
22
|
-
}
|
|
23
|
-
if (element.includes('].')) {
|
|
24
|
-
let arr = element.split('].');
|
|
25
|
-
let arrStart = arr[0].split('[');
|
|
26
|
-
info = `"${this._LocalizationService.instant(`CmsKit::${arrStart[0]}`)}[${arrStart[1]}].${this._LocalizationService.instant(`CmsKit::${arr[1]}`)}"`;
|
|
27
|
-
}
|
|
28
|
-
info += `${this._LocalizationService.instant(`AbpValidation::ThisFieldIsNotValid`)}`;
|
|
29
|
-
//使用abp多语言提示
|
|
30
|
-
this.toaster.warn(info);
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
/**获取表单所有字段是否通过验证 */
|
|
37
|
-
getFormValidationStatus(formEntity) {
|
|
38
|
-
let validationStatus = {};
|
|
39
|
-
// 递归遍历表单组和表单控件集合
|
|
40
|
-
const traverseForm = (form, prefix = '') => {
|
|
41
|
-
if (form instanceof FormGroup) {
|
|
42
|
-
Object.keys(form.controls).forEach(key => {
|
|
43
|
-
const control = form.controls[key];
|
|
44
|
-
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
45
|
-
if (control instanceof FormControl) {
|
|
46
|
-
validationStatus[fullKey] = control.valid;
|
|
47
|
-
}
|
|
48
|
-
else if (control instanceof FormArray) {
|
|
49
|
-
traverseForm(control, fullKey);
|
|
50
|
-
}
|
|
51
|
-
else if (control instanceof FormGroup) {
|
|
52
|
-
traverseForm(control, fullKey);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
else if (form instanceof FormArray) {
|
|
57
|
-
form.controls.forEach((control, index) => {
|
|
58
|
-
const fullKey = prefix ? `${prefix}[${index}]` : `[${index}]`;
|
|
59
|
-
if (control instanceof FormControl) {
|
|
60
|
-
validationStatus[fullKey] = control.valid;
|
|
61
|
-
}
|
|
62
|
-
else if (control instanceof FormArray) {
|
|
63
|
-
traverseForm(control, fullKey);
|
|
64
|
-
}
|
|
65
|
-
else if (control instanceof FormGroup) {
|
|
66
|
-
traverseForm(control, fullKey);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
traverseForm(formEntity);
|
|
72
|
-
return validationStatus;
|
|
73
|
-
}
|
|
74
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValidatorsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
75
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValidatorsService, providedIn: 'root' }); }
|
|
76
|
-
}
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValidatorsService, decorators: [{
|
|
78
|
-
type: Injectable,
|
|
79
|
-
args: [{
|
|
80
|
-
providedIn: 'root'
|
|
81
|
-
}]
|
|
82
|
-
}], ctorParameters: () => [] });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21zL2NvbmZpZy9zcmMvc2VydmljZXMvdmFsaWRhdG9ycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUtoRixNQUFNLE9BQU8saUJBQWlCO0lBRTVCO1FBRVEsT0FBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixZQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBSjNDLENBQUM7SUFNZixXQUFXO0lBQ1gsV0FBVyxDQUFDLEtBQVUsRUFBQyxNQUFNLEdBQUMsZUFBZTtRQUMzQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFN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TyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUM7b0JBQzlELElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRSxDQUFDO3dCQUNuQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUM1QyxDQUFDO3lCQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO3dCQUN4QyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNqQyxDQUFDO3lCQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRSxDQUFDO3dCQUN4QyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7OEdBckVVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yc1NlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcclxuICBwcml2YXRlIHRvYXN0ZXIgPSBpbmplY3QoVG9hc3RlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX0xvY2FsaXphdGlvblNlcnZpY2UgPSBpbmplY3QoTG9jYWxpemF0aW9uU2VydmljZSk7XHJcblxyXG4gICAgLyoq5qOA5p+l6KGo5Y2VLSAqL1xyXG4gICAgaXNDaGVja0Zvcm0oaW5wdXQ6IGFueSxtb2R1bGU9J0FicFZhbGlkYXRpb24nKSB7XHJcbiAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5wdXQpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0ga2V5c1tpXTtcclxuICAgICAgICBpZiAoaW5wdXRbZWxlbWVudF0gPT0gZmFsc2UpIHtcclxuICAgICAgICAgIGxldCBpbmZvID0gYFwiJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYCR7bW9kdWxlfTo6JHtlbGVtZW50fWApfVwiIGA7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5pbmNsdWRlcygnLicpICYmICFlbGVtZW50LmluY2x1ZGVzKCddLicpKSB7XHJcbiAgICAgICAgICAgIGxldCBhcnIgPSBlbGVtZW50LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgIGluZm89YFwiJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYENtc0tpdDo6JHthcnJbMF19YCl9LiR7dGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXNLaXQ6OiR7YXJyWzFdfWApfVwiYFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuaW5jbHVkZXMoJ10uJykpIHtcclxuICAgICAgICAgICAgbGV0IGFyciA9IGVsZW1lbnQuc3BsaXQoJ10uJyk7XHJcbiAgICAgICAgICAgIGxldCBhcnJTdGFydCA9IGFyclswXS5zcGxpdCgnWycpO1xyXG4gICAgICAgICAgICBpbmZvPWBcIiR7dGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXNLaXQ6OiR7YXJyU3RhcnRbMF19YCl9WyR7YXJyU3RhcnRbMV19XS4ke3RoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQ21zS2l0Ojoke2FyclsxXX1gKX1cImBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluZm8rPSBgJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFZhbGlkYXRpb246OlRoaXNGaWVsZElzTm90VmFsaWRgKX1gXHJcbiAgICAgICAgICAvL+S9v+eUqGFicOWkmuivreiogOaPkOekulxyXG4gICAgICAgICAgdGhpcy50b2FzdGVyLndhcm4oaW5mbyk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgLyoq6I635Y+W6KGo5Y2V5omA5pyJ5a2X5q615piv5ZCm6YCa6L+H6aqM6K+BICovXHJcbiAgZ2V0Rm9ybVZhbGlkYXRpb25TdGF0dXMoZm9ybUVudGl0eTogRm9ybUdyb3VwIHwgRm9ybUFycmF5KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcbiAgICBsZXQgdmFsaWRhdGlvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAgIC8vIOmAkuW9kumBjeWOhuihqOWNlee7hOWSjOihqOWNleaOp+S7tumbhuWQiFxyXG4gICAgY29uc3QgdHJhdmVyc2VGb3JtID0gKGZvcm06IEZvcm1Hcm91cCB8IEZvcm1BcnJheSwgcHJlZml4ID0gJycpID0+IHtcclxuICAgICAgaWYgKGZvcm0gaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5jb250cm9sc1trZXldO1xyXG4gICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZWZpeCA/IGAke3ByZWZpeH0uJHtrZXl9YCA6IGtleTtcclxuICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvblN0YXR1c1tmdWxsS2V5XSA9IGNvbnRyb2wudmFsaWQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRyYXZlcnNlRm9ybShjb250cm9sLCBmdWxsS2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChmb3JtIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgZm9ybS5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZWZpeCA/IGAke3ByZWZpeH1bJHtpbmRleH1dYCA6IGBbJHtpbmRleH1dYDtcclxuICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvblN0YXR1c1tmdWxsS2V5XSA9IGNvbnRyb2wudmFsaWQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgdHJhdmVyc2VGb3JtKGNvbnRyb2wsIGZ1bGxLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRyYXZlcnNlRm9ybShjb250cm9sLCBmdWxsS2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0cmF2ZXJzZUZvcm0oZm9ybUVudGl0eSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkYXRpb25TdGF0dXM7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|