@dignite-ng/expand.cms 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/README.md +24 -0
- package/config/cms-config.module.d.ts +8 -0
- package/config/enums/index.d.ts +1 -0
- package/config/enums/route-names.d.ts +8 -0
- package/config/index.d.ts +5 -0
- package/config/providers/index.d.ts +1 -0
- package/config/providers/route.provider.d.ts +8 -0
- package/config/public-api.d.ts +3 -0
- package/esm2022/config/cms-config.module.mjs +19 -0
- package/esm2022/config/dignite-ng-expand.cms-config.mjs +5 -0
- package/esm2022/config/enums/index.mjs +2 -0
- package/esm2022/config/enums/route-names.mjs +2 -0
- package/esm2022/config/providers/index.mjs +2 -0
- package/esm2022/config/providers/route.provider.mjs +85 -0
- package/esm2022/config/public-api.mjs +4 -0
- package/esm2022/dignite-ng-expand.cms.mjs +5 -0
- package/esm2022/lib/cms-routing.module.mjs +96 -0
- package/esm2022/lib/cms.module.mjs +141 -0
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +227 -0
- package/esm2022/lib/components/admin/entries/create-or-update-entry-input-base.mjs +43 -0
- package/esm2022/lib/components/admin/entries/create.component.mjs +100 -0
- package/esm2022/lib/components/admin/entries/edit.component.mjs +110 -0
- package/esm2022/lib/components/admin/entries/entries.component.mjs +187 -0
- package/esm2022/lib/components/admin/entries/index.mjs +5 -0
- package/esm2022/lib/components/admin/fields/create-field.component.mjs +66 -0
- package/esm2022/lib/components/admin/fields/create-or-edit-field.component.mjs +116 -0
- package/esm2022/lib/components/admin/fields/create-or-update-field-input-base.mjs +25 -0
- package/esm2022/lib/components/admin/fields/edit-field.component.mjs +100 -0
- package/esm2022/lib/components/admin/fields/field-group.component.mjs +124 -0
- package/esm2022/lib/components/admin/fields/fields.component.mjs +108 -0
- package/esm2022/lib/components/admin/fields/index.mjs +7 -0
- package/esm2022/lib/components/admin/index.mjs +5 -0
- package/esm2022/lib/components/admin/sections/create-or-update-sections-input-base.mjs +27 -0
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.mjs +71 -0
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +403 -0
- package/esm2022/lib/components/admin/sections/entry-types/index.mjs +3 -0
- package/esm2022/lib/components/admin/sections/index.mjs +4 -0
- package/esm2022/lib/components/admin/sections/sections.component.mjs +305 -0
- package/esm2022/lib/components/admin/sites/create-or-update-sites-input-base.mjs +23 -0
- package/esm2022/lib/components/admin/sites/index.mjs +3 -0
- package/esm2022/lib/components/admin/sites/sites.component.mjs +286 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-config.component.mjs +124 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-config.mjs +18 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-control.component.mjs +114 -0
- package/esm2022/lib/components/dynamic-form/entry/index.mjs +4 -0
- package/esm2022/lib/components/dynamic-form/form-control-group.mjs +30 -0
- package/esm2022/lib/components/dynamic-form/index.mjs +5 -0
- package/esm2022/lib/components/dynamic-form/matrix/index.mjs +4 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.component.mjs +229 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.mjs +64 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +104 -0
- package/esm2022/lib/components/dynamic-form/table/index.mjs +4 -0
- package/esm2022/lib/components/dynamic-form/table/table-config.component.mjs +172 -0
- package/esm2022/lib/components/dynamic-form/table/table-config.mjs +38 -0
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +101 -0
- package/esm2022/lib/components/index.mjs +3 -0
- package/esm2022/lib/constants/index.mjs +2 -0
- package/esm2022/lib/constants/styles.mjs +25 -0
- package/esm2022/lib/enums/ecms-component.mjs +13 -0
- package/esm2022/lib/enums/index.mjs +2 -0
- package/esm2022/lib/proxy/admin/dynamic-forms/form-admin.service.mjs +24 -0
- package/esm2022/lib/proxy/admin/dynamic-forms/index.mjs +3 -0
- package/esm2022/lib/proxy/admin/dynamic-forms/models.mjs +2 -0
- package/esm2022/lib/proxy/admin/entries/entry-admin.service.mjs +67 -0
- package/esm2022/lib/proxy/admin/entries/index.mjs +3 -0
- package/esm2022/lib/proxy/admin/entries/models.mjs +2 -0
- package/esm2022/lib/proxy/admin/fields/field-admin.service.mjs +47 -0
- package/esm2022/lib/proxy/admin/fields/field-group-admin.service.mjs +43 -0
- package/esm2022/lib/proxy/admin/fields/index.mjs +4 -0
- package/esm2022/lib/proxy/admin/fields/models.mjs +2 -0
- package/esm2022/lib/proxy/admin/index.mjs +7 -0
- package/esm2022/lib/proxy/admin/sections/entry-type-admin.service.mjs +43 -0
- package/esm2022/lib/proxy/admin/sections/index.mjs +4 -0
- package/esm2022/lib/proxy/admin/sections/models.mjs +2 -0
- package/esm2022/lib/proxy/admin/sections/section-admin.service.mjs +53 -0
- package/esm2022/lib/proxy/admin/sites/index.mjs +3 -0
- package/esm2022/lib/proxy/admin/sites/models.mjs +2 -0
- package/esm2022/lib/proxy/admin/sites/site-admin.service.mjs +51 -0
- package/esm2022/lib/proxy/dignite/abp/data/index.mjs +2 -0
- package/esm2022/lib/proxy/dignite/abp/data/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/abp/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.mjs +48 -0
- package/esm2022/lib/proxy/dignite/file-explorer/directories/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/file-explorer/directories/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/file-explorer/files/file-descriptor.service.mjs +60 -0
- package/esm2022/lib/proxy/dignite/file-explorer/files/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/file-explorer/files/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/file-explorer/index.mjs +4 -0
- package/esm2022/lib/proxy/dignite/index.mjs +4 -0
- package/esm2022/lib/proxy/entries/entry-status.enum.mjs +8 -0
- package/esm2022/lib/proxy/entries/index.mjs +2 -0
- package/esm2022/lib/proxy/fields/index.mjs +2 -0
- package/esm2022/lib/proxy/fields/models.mjs +2 -0
- package/esm2022/lib/proxy/index.mjs +10 -0
- package/esm2022/lib/proxy/microsoft/asp-net-core/index.mjs +3 -0
- package/esm2022/lib/proxy/microsoft/asp-net-core/mvc/index.mjs +2 -0
- package/esm2022/lib/proxy/microsoft/asp-net-core/mvc/models.mjs +2 -0
- package/esm2022/lib/proxy/microsoft/extensions/index.mjs +3 -0
- package/esm2022/lib/proxy/microsoft/extensions/primitives/index.mjs +2 -0
- package/esm2022/lib/proxy/microsoft/extensions/primitives/models.mjs +2 -0
- package/esm2022/lib/proxy/microsoft/index.mjs +5 -0
- package/esm2022/lib/proxy/microsoft/net/http/headers/index.mjs +2 -0
- package/esm2022/lib/proxy/microsoft/net/http/headers/models.mjs +2 -0
- package/esm2022/lib/proxy/microsoft/net/http/index.mjs +3 -0
- package/esm2022/lib/proxy/microsoft/net/index.mjs +3 -0
- package/esm2022/lib/proxy/sections/index.mjs +3 -0
- package/esm2022/lib/proxy/sections/models.mjs +2 -0
- package/esm2022/lib/proxy/sections/section-type.enum.mjs +9 -0
- package/esm2022/lib/proxy/sites/index.mjs +2 -0
- package/esm2022/lib/proxy/sites/models.mjs +2 -0
- package/esm2022/lib/proxy/volo/abp/content/index.mjs +2 -0
- package/esm2022/lib/proxy/volo/abp/content/models.mjs +2 -0
- package/esm2022/lib/proxy/volo/abp/index.mjs +3 -0
- package/esm2022/lib/proxy/volo/cms-kit/index.mjs +3 -0
- package/esm2022/lib/proxy/volo/cms-kit/users/index.mjs +2 -0
- package/esm2022/lib/proxy/volo/cms-kit/users/models.mjs +2 -0
- package/esm2022/lib/proxy/volo/index.mjs +4 -0
- package/esm2022/lib/services/appent-content.mjs +15 -0
- package/esm2022/lib/services/cms-api.service.mjs +75 -0
- package/esm2022/lib/services/cms.service.mjs +23 -0
- package/esm2022/lib/services/field-abstracts.service.mjs +44 -0
- package/esm2022/lib/services/index.mjs +4 -0
- package/esm2022/lib/toolbar/index.mjs +3 -0
- package/esm2022/lib/toolbar/toolbar-btn-default-action.mjs +160 -0
- package/esm2022/lib/toolbar/toolbar-config.mjs +81 -0
- package/esm2022/public-api.mjs +12 -0
- package/fesm2022/dignite-ng-expand.cms-config.mjs +108 -0
- package/fesm2022/dignite-ng-expand.cms-config.mjs.map +1 -0
- package/fesm2022/dignite-ng-expand.cms.mjs +4267 -0
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/cms-routing.module.d.ts +7 -0
- package/lib/cms.module.d.ts +38 -0
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +79 -0
- package/lib/components/admin/entries/create-or-update-entry-input-base.d.ts +23 -0
- package/lib/components/admin/entries/create.component.d.ts +39 -0
- package/lib/components/admin/entries/edit.component.d.ts +43 -0
- package/lib/components/admin/entries/entries.component.d.ts +61 -0
- package/lib/components/admin/entries/index.d.ts +4 -0
- package/lib/components/admin/fields/create-field.component.d.ts +25 -0
- package/lib/components/admin/fields/create-or-edit-field.component.d.ts +33 -0
- package/lib/components/admin/fields/create-or-update-field-input-base.d.ts +15 -0
- package/lib/components/admin/fields/edit-field.component.d.ts +36 -0
- package/lib/components/admin/fields/field-group.component.d.ts +51 -0
- package/lib/components/admin/fields/fields.component.d.ts +33 -0
- package/lib/components/admin/fields/index.d.ts +6 -0
- package/lib/components/admin/index.d.ts +4 -0
- package/lib/components/admin/sections/create-or-update-sections-input-base.d.ts +17 -0
- package/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.d.ts +37 -0
- package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +130 -0
- package/lib/components/admin/sections/entry-types/index.d.ts +2 -0
- package/lib/components/admin/sections/index.d.ts +3 -0
- package/lib/components/admin/sections/sections.component.d.ts +82 -0
- package/lib/components/admin/sites/create-or-update-sites-input-base.d.ts +12 -0
- package/lib/components/admin/sites/index.d.ts +2 -0
- package/lib/components/admin/sites/sites.component.d.ts +72 -0
- package/lib/components/dynamic-form/entry/entry-config.component.d.ts +39 -0
- package/lib/components/dynamic-form/entry/entry-config.d.ts +9 -0
- package/lib/components/dynamic-form/entry/entry-control.component.d.ts +36 -0
- package/lib/components/dynamic-form/entry/index.d.ts +3 -0
- package/lib/components/dynamic-form/form-control-group.d.ts +4 -0
- package/lib/components/dynamic-form/index.d.ts +4 -0
- package/lib/components/dynamic-form/matrix/index.d.ts +3 -0
- package/lib/components/dynamic-form/matrix/matrix-config.component.d.ts +73 -0
- package/lib/components/dynamic-form/matrix/matrix-config.d.ts +30 -0
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +36 -0
- package/lib/components/dynamic-form/table/index.d.ts +3 -0
- package/lib/components/dynamic-form/table/table-config.component.d.ts +59 -0
- package/lib/components/dynamic-form/table/table-config.d.ts +18 -0
- package/lib/components/dynamic-form/table/table-control.component.d.ts +32 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/constants/index.d.ts +1 -0
- package/lib/constants/styles.d.ts +2 -0
- package/lib/enums/ecms-component.d.ts +11 -0
- package/lib/enums/index.d.ts +1 -0
- package/lib/proxy/admin/dynamic-forms/form-admin.service.d.ts +12 -0
- package/lib/proxy/admin/dynamic-forms/index.d.ts +2 -0
- package/lib/proxy/admin/dynamic-forms/models.d.ts +4 -0
- package/lib/proxy/admin/entries/entry-admin.service.d.ts +21 -0
- package/lib/proxy/admin/entries/index.d.ts +2 -0
- package/lib/proxy/admin/entries/models.d.ts +60 -0
- package/lib/proxy/admin/fields/field-admin.service.d.ts +17 -0
- package/lib/proxy/admin/fields/field-group-admin.service.d.ts +16 -0
- package/lib/proxy/admin/fields/index.d.ts +3 -0
- package/lib/proxy/admin/fields/models.d.ts +34 -0
- package/lib/proxy/admin/index.d.ts +6 -0
- package/lib/proxy/admin/sections/entry-type-admin.service.d.ts +15 -0
- package/lib/proxy/admin/sections/index.d.ts +3 -0
- package/lib/proxy/admin/sections/models.d.ts +74 -0
- package/lib/proxy/admin/sections/section-admin.service.d.ts +18 -0
- package/lib/proxy/admin/sites/index.d.ts +2 -0
- package/lib/proxy/admin/sites/models.d.ts +30 -0
- package/lib/proxy/admin/sites/site-admin.service.d.ts +18 -0
- package/lib/proxy/dignite/abp/data/index.d.ts +1 -0
- package/lib/proxy/dignite/abp/data/models.d.ts +3 -0
- package/lib/proxy/dignite/abp/index.d.ts +2 -0
- package/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.d.ts +17 -0
- package/lib/proxy/dignite/file-explorer/directories/index.d.ts +2 -0
- package/lib/proxy/dignite/file-explorer/directories/models.d.ts +29 -0
- package/lib/proxy/dignite/file-explorer/files/file-descriptor.service.d.ts +20 -0
- package/lib/proxy/dignite/file-explorer/files/index.d.ts +2 -0
- package/lib/proxy/dignite/file-explorer/files/models.d.ts +50 -0
- package/lib/proxy/dignite/file-explorer/index.d.ts +3 -0
- package/lib/proxy/dignite/index.d.ts +3 -0
- package/lib/proxy/entries/entry-status.enum.d.ts +5 -0
- package/lib/proxy/entries/index.d.ts +1 -0
- package/lib/proxy/fields/index.d.ts +1 -0
- package/lib/proxy/fields/models.d.ts +8 -0
- package/lib/proxy/index.d.ts +9 -0
- package/lib/proxy/microsoft/asp-net-core/index.d.ts +2 -0
- package/lib/proxy/microsoft/asp-net-core/mvc/index.d.ts +1 -0
- package/lib/proxy/microsoft/asp-net-core/mvc/models.d.ts +10 -0
- package/lib/proxy/microsoft/extensions/index.d.ts +2 -0
- package/lib/proxy/microsoft/extensions/primitives/index.d.ts +1 -0
- package/lib/proxy/microsoft/extensions/primitives/models.d.ts +8 -0
- package/lib/proxy/microsoft/index.d.ts +4 -0
- package/lib/proxy/microsoft/net/http/headers/index.d.ts +1 -0
- package/lib/proxy/microsoft/net/http/headers/models.d.ts +6 -0
- package/lib/proxy/microsoft/net/http/index.d.ts +2 -0
- package/lib/proxy/microsoft/net/index.d.ts +2 -0
- package/lib/proxy/sections/index.d.ts +2 -0
- package/lib/proxy/sections/models.d.ts +12 -0
- package/lib/proxy/sections/section-type.enum.d.ts +6 -0
- package/lib/proxy/sites/index.d.ts +1 -0
- package/lib/proxy/sites/models.d.ts +4 -0
- package/lib/proxy/volo/abp/content/index.d.ts +1 -0
- package/lib/proxy/volo/abp/content/models.d.ts +5 -0
- package/lib/proxy/volo/abp/index.d.ts +2 -0
- package/lib/proxy/volo/cms-kit/index.d.ts +2 -0
- package/lib/proxy/volo/cms-kit/users/index.d.ts +1 -0
- package/lib/proxy/volo/cms-kit/users/models.d.ts +7 -0
- package/lib/proxy/volo/index.d.ts +3 -0
- package/lib/services/appent-content.d.ts +1 -0
- package/lib/services/cms-api.service.d.ts +16 -0
- package/lib/services/cms.service.d.ts +10 -0
- package/lib/services/field-abstracts.service.d.ts +20 -0
- package/lib/services/index.d.ts +3 -0
- package/lib/toolbar/index.d.ts +2 -0
- package/lib/toolbar/toolbar-btn-default-action.d.ts +19 -0
- package/lib/toolbar/toolbar-config.d.ts +57 -0
- package/package.json +41 -0
- package/public-api.d.ts +8 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { LIST_QUERY_DEBOUNCE_TIME, ListService } from '@abp/ng.core';
|
|
2
|
+
import { Component, ViewChild, } from '@angular/core';
|
|
3
|
+
import { FormControl, Validators, } from '@angular/forms';
|
|
4
|
+
import { ColumnMode } from "@swimlane/ngx-datatable";
|
|
5
|
+
import { finalize } from 'rxjs/operators';
|
|
6
|
+
import { CreateOrUpdateSectionsInputBase } from './create-or-update-sections-input-base';
|
|
7
|
+
import { SectionType, sectionTypeOptions } from '../../../proxy/sections';
|
|
8
|
+
import { EXTENSIONS_IDENTIFIER } from '@abp/ng.theme.shared/extensions';
|
|
9
|
+
import { ECmsComponent } from '../../../enums';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@abp/ng.core";
|
|
12
|
+
import * as i2 from "../../../proxy/admin/sections";
|
|
13
|
+
import * as i3 from "../../../proxy/admin/sites";
|
|
14
|
+
import * as i4 from "@abp/ng.theme.shared";
|
|
15
|
+
import * as i5 from "@angular/forms";
|
|
16
|
+
import * as i6 from "../../../services/cms-api.service";
|
|
17
|
+
import * as i7 from "@angular/common";
|
|
18
|
+
import * as i8 from "@angular/router";
|
|
19
|
+
import * as i9 from "@swimlane/ngx-datatable";
|
|
20
|
+
import * as i10 from "@ngx-validate/core";
|
|
21
|
+
import * as i11 from "@ng-bootstrap/ng-bootstrap";
|
|
22
|
+
import * as i12 from "@abp/ng.components/page";
|
|
23
|
+
class SectionsComponent {
|
|
24
|
+
list;
|
|
25
|
+
_SectionAdminService;
|
|
26
|
+
_SiteAdminService;
|
|
27
|
+
toaster;
|
|
28
|
+
confirmation;
|
|
29
|
+
fb;
|
|
30
|
+
configState;
|
|
31
|
+
_EntryTypeAdminService;
|
|
32
|
+
_LocalizationService;
|
|
33
|
+
_CmsApiService;
|
|
34
|
+
constructor(list, _SectionAdminService, _SiteAdminService, toaster, confirmation, fb, configState, _EntryTypeAdminService, _LocalizationService, _CmsApiService) {
|
|
35
|
+
this.list = list;
|
|
36
|
+
this._SectionAdminService = _SectionAdminService;
|
|
37
|
+
this._SiteAdminService = _SiteAdminService;
|
|
38
|
+
this.toaster = toaster;
|
|
39
|
+
this.confirmation = confirmation;
|
|
40
|
+
this.fb = fb;
|
|
41
|
+
this.configState = configState;
|
|
42
|
+
this._EntryTypeAdminService = _EntryTypeAdminService;
|
|
43
|
+
this._LocalizationService = _LocalizationService;
|
|
44
|
+
this._CmsApiService = _CmsApiService;
|
|
45
|
+
}
|
|
46
|
+
/**版块列表 */
|
|
47
|
+
siteList = [];
|
|
48
|
+
/*** */
|
|
49
|
+
ColumnMode = ColumnMode;
|
|
50
|
+
data = {
|
|
51
|
+
items: [],
|
|
52
|
+
totalCount: 0,
|
|
53
|
+
};
|
|
54
|
+
/** */
|
|
55
|
+
filters = {};
|
|
56
|
+
/**获取页面列表 */
|
|
57
|
+
hookToQuery() {
|
|
58
|
+
const getData = (query) => this._SectionAdminService.getList({
|
|
59
|
+
...query,
|
|
60
|
+
...this.filters,
|
|
61
|
+
});
|
|
62
|
+
const setData = (list) => (this.data = list);
|
|
63
|
+
this.list.hookToQuery(getData).subscribe(setData);
|
|
64
|
+
}
|
|
65
|
+
async ngOnInit() {
|
|
66
|
+
await this.getSiteList();
|
|
67
|
+
this.hookToQuery();
|
|
68
|
+
}
|
|
69
|
+
/**站点切换 */
|
|
70
|
+
siteIdChange() {
|
|
71
|
+
this.list.get();
|
|
72
|
+
}
|
|
73
|
+
/**获取版块列表 */
|
|
74
|
+
getSiteList() {
|
|
75
|
+
return new Promise((resolve, rejects) => {
|
|
76
|
+
this._SiteAdminService.getList({}).subscribe(res => {
|
|
77
|
+
this.siteList = res.items;
|
|
78
|
+
this.filters.siteId = res.items[0]?.id || '';
|
|
79
|
+
resolve(true);
|
|
80
|
+
rejects(false);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**创建版块模态框状态 */
|
|
85
|
+
visibleOpen = false;
|
|
86
|
+
/**用于确定模态的繁忙状态是否为真 */
|
|
87
|
+
modalBusy = false;
|
|
88
|
+
/**创建版块表单 */
|
|
89
|
+
createOrEditForm;
|
|
90
|
+
/**版块给定的表单值 */
|
|
91
|
+
selected;
|
|
92
|
+
_SectionType = SectionType;
|
|
93
|
+
_sectionTypeOptions = sectionTypeOptions;
|
|
94
|
+
/**表单控件模板-动态赋值表单控件 */
|
|
95
|
+
createOrEditModalSubmitBtn;
|
|
96
|
+
/**创建版块模态框状态改变 */
|
|
97
|
+
VisibleChange(event) {
|
|
98
|
+
if (!event) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**创建版块,打开模态框 */
|
|
103
|
+
createSectionBtn() {
|
|
104
|
+
this.visibleOpen = true;
|
|
105
|
+
this.createOrEditForm = this.fb.group(new CreateOrUpdateSectionsInputBase());
|
|
106
|
+
this.setAsyncValidatorsFn();
|
|
107
|
+
}
|
|
108
|
+
/**编辑版块,打开模态框 */
|
|
109
|
+
editSectionBtn(row) {
|
|
110
|
+
this.visibleOpen = true;
|
|
111
|
+
this.createOrEditForm = this.fb.group(new CreateOrUpdateSectionsInputBase());
|
|
112
|
+
this.setAsyncValidatorsFn();
|
|
113
|
+
this._SectionAdminService.get(row.id).subscribe(res => {
|
|
114
|
+
this.createOrEditForm.patchValue(res);
|
|
115
|
+
this.selected = res;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**删除某个条目类型 */
|
|
119
|
+
deleteEntryType(row) {
|
|
120
|
+
this.confirmation.warn(row.displayName,
|
|
121
|
+
// "确定要删除这个条目类型吗?",
|
|
122
|
+
this._LocalizationService.instant(`AbpUi::ItemWillBeDeletedMessage`)).subscribe((status) => {
|
|
123
|
+
if (status == 'confirm') {
|
|
124
|
+
this._EntryTypeAdminService.delete(row.id).pipe(finalize(() => {
|
|
125
|
+
})).subscribe(res => {
|
|
126
|
+
this.toaster.success(this._LocalizationService.instant(`AbpUi::SuccessfullyDeleted`));
|
|
127
|
+
this.list.get();
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**表单保存提交 */
|
|
133
|
+
createOrEditSave() {
|
|
134
|
+
if (this.selected) {
|
|
135
|
+
return this.EditSave();
|
|
136
|
+
}
|
|
137
|
+
this.createSave();
|
|
138
|
+
}
|
|
139
|
+
/**创建版块保存 */
|
|
140
|
+
createSave() {
|
|
141
|
+
let input = this.createOrEditForm.value;
|
|
142
|
+
input.siteId = this.filters.siteId;
|
|
143
|
+
if (!this.createOrEditForm.valid)
|
|
144
|
+
return;
|
|
145
|
+
this.modalBusy = true;
|
|
146
|
+
this._SectionAdminService.create(input).pipe(finalize(() => {
|
|
147
|
+
this.modalBusy = false;
|
|
148
|
+
this.visibleOpen = false;
|
|
149
|
+
})).subscribe(res => {
|
|
150
|
+
this.toaster.success(this._LocalizationService.instant(`CmsKit::SavedSuccessfully`));
|
|
151
|
+
this.list.get();
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**创建版块保存 */
|
|
155
|
+
EditSave() {
|
|
156
|
+
let input = this.createOrEditForm.value;
|
|
157
|
+
input.siteId = this.filters.siteId;
|
|
158
|
+
input.concurrencyStamp = this.selected.concurrencyStamp;
|
|
159
|
+
if (!this.createOrEditForm.valid)
|
|
160
|
+
return;
|
|
161
|
+
this.modalBusy = true;
|
|
162
|
+
this._SectionAdminService.update(this.selected.id, input).pipe(finalize(() => {
|
|
163
|
+
this.modalBusy = false;
|
|
164
|
+
this.visibleOpen = false;
|
|
165
|
+
})).subscribe(res => {
|
|
166
|
+
this.toaster.success(this._LocalizationService.instant(`CmsKit::SavedSuccessfully`));
|
|
167
|
+
this.list.get();
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**删除版块 */
|
|
171
|
+
deletefield(row) {
|
|
172
|
+
this.confirmation.warn(row.displayName, this._LocalizationService.instant(`AbpUi::ItemWillBeDeletedMessage`)).subscribe((status) => {
|
|
173
|
+
this._SectionAdminService.delete(row.id).pipe(finalize(() => {
|
|
174
|
+
})).subscribe(res => {
|
|
175
|
+
this.toaster.success(this._LocalizationService.instant(`AbpUi::SuccessfullyDeleted`));
|
|
176
|
+
this.list.get();
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**name表单控件 */
|
|
181
|
+
get displayNameInput() {
|
|
182
|
+
return this.createOrEditForm.get('displayName');
|
|
183
|
+
}
|
|
184
|
+
/**name表单控件 */
|
|
185
|
+
get nameInput() {
|
|
186
|
+
return this.createOrEditForm.get('name');
|
|
187
|
+
}
|
|
188
|
+
/**route表单控件 */
|
|
189
|
+
get routeInput() {
|
|
190
|
+
return this.createOrEditForm.get('route');
|
|
191
|
+
}
|
|
192
|
+
/**route表单控件 */
|
|
193
|
+
get templateInput() {
|
|
194
|
+
return this.createOrEditForm.get('template');
|
|
195
|
+
}
|
|
196
|
+
/**字段标签input失去标点生成字段名字 */
|
|
197
|
+
disPlayNameInputBlur(event) {
|
|
198
|
+
let value = event.target.value;
|
|
199
|
+
let pinyin = this._CmsApiService.chineseToPinyin(value);
|
|
200
|
+
let nameInput = this.nameInput;
|
|
201
|
+
let routeInput = this.routeInput;
|
|
202
|
+
let templateInput = this.templateInput;
|
|
203
|
+
if (nameInput.value)
|
|
204
|
+
return;
|
|
205
|
+
nameInput.patchValue(pinyin);
|
|
206
|
+
if (routeInput.value)
|
|
207
|
+
return;
|
|
208
|
+
routeInput.patchValue(pinyin);
|
|
209
|
+
if (templateInput.value)
|
|
210
|
+
return;
|
|
211
|
+
templateInput.patchValue(pinyin + '/index');
|
|
212
|
+
}
|
|
213
|
+
/**设置字段控件异步验证 */
|
|
214
|
+
setAsyncValidatorsFn() {
|
|
215
|
+
this.createOrEditForm.setControl('name', new FormControl(this.nameInput.value || '', {
|
|
216
|
+
validators: Validators.required,
|
|
217
|
+
asyncValidators: this.nameRepetitionAsyncValidator(),
|
|
218
|
+
// updateOn: 'blur'
|
|
219
|
+
}));
|
|
220
|
+
this.createOrEditForm.setControl('route', new FormControl(this.routeInput.value || '', {
|
|
221
|
+
validators: Validators.required,
|
|
222
|
+
asyncValidators: this.routeRepetitionAsyncValidator(),
|
|
223
|
+
// updateOn: 'blur'
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
//定义异步验证方法
|
|
227
|
+
nameRepetitionAsyncValidator() {
|
|
228
|
+
return (ctrl) => {
|
|
229
|
+
return new Promise(resolve => {
|
|
230
|
+
let subslug = this.createOrEditForm?.get('name');
|
|
231
|
+
if (subslug.value == this.selected?.name) {
|
|
232
|
+
resolve(null);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
this._SectionAdminService.nameExists({
|
|
236
|
+
siteId: this.filters.siteId,
|
|
237
|
+
name: subslug.value
|
|
238
|
+
}).subscribe(res => {
|
|
239
|
+
if (res) {
|
|
240
|
+
resolve({ repetition: this._LocalizationService.instant(`Cms::SectionName{0}AlreadyExist`, ctrl.value) });
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
resolve(null);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
//定义异步验证方法
|
|
250
|
+
routeRepetitionAsyncValidator() {
|
|
251
|
+
return (ctrl) => {
|
|
252
|
+
return new Promise(resolve => {
|
|
253
|
+
let subslug = this.createOrEditForm?.get('route').value;
|
|
254
|
+
if (subslug == this.selected?.route) {
|
|
255
|
+
resolve(null);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
this._SectionAdminService.routeExists({
|
|
259
|
+
siteId: this.filters.siteId,
|
|
260
|
+
route: subslug
|
|
261
|
+
}).subscribe(res => {
|
|
262
|
+
if (res) {
|
|
263
|
+
resolve({ repetition: this._LocalizationService.instant(`Cms::SectionRoute{0}AlreadyExist`, ctrl.value) });
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
resolve(null);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SectionsComponent, deps: [{ token: i1.ListService }, { token: i2.SectionAdminService }, { token: i3.SiteAdminService }, { token: i4.ToasterService }, { token: i4.ConfirmationService }, { token: i5.FormBuilder }, { token: i1.ConfigStateService }, { token: i2.EntryTypeAdminService }, { token: i1.LocalizationService }, { token: i6.CmsApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
273
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SectionsComponent, selector: "cms-sections", providers: [
|
|
274
|
+
// [Required]
|
|
275
|
+
ListService,
|
|
276
|
+
// [Optional]
|
|
277
|
+
// Provide this token if you want a different debounce time.
|
|
278
|
+
// Default is 300. Cannot be 0. Any value below 100 is not recommended.
|
|
279
|
+
{ provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },
|
|
280
|
+
{
|
|
281
|
+
provide: EXTENSIONS_IDENTIFIER,
|
|
282
|
+
useValue: ECmsComponent.Sections,
|
|
283
|
+
},
|
|
284
|
+
], viewQueries: [{ propertyName: "createOrEditModalSubmitBtn", first: true, predicate: ["createOrEditModalSubmitBtn"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"'Cms::Sections' | abpLocalization\" [toolbar]=\"true\">\n <div class=\"sections-page\">\n <div class=\"card mb-0\">\n <div class=\"card-header px-2 py-sm-2 border-bottom\">\n <div class=\"input-group\">\n <select class=\"form-select col-auto\" [(ngModel)]=\"filters.siteId\" (change)=\"siteIdChange()\">\n <ng-container *ngFor=\"let item of siteList\">\n <option [value]=\"item.id\">{{item.displayName}}</option>\n </ng-container>\n </select>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"filters.filter\" [placeholder]=\"'AbpUi::Search' | abpLocalization\" />\n <button class=\"btn btn-outline-primary px-2\" type=\"button\" id=\"button-addon2\" (click)=\"list.get()\">\n <i class=\"fa fa-search\"></i>\n </button>\n </div>\n </div>\n <div class=\"card-body p-0\">\n <div class=\"table-responsive table-fixed-header\">\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\"\n [columnMode]=\"'force'\" [headerHeight]=\"50\" [footerHeight]=\"50\"\n rowHeight=\"auto\" [scrollbarV]=\"true\" [virtualization]=\"false\" [externalPaging]=\"true\"\n [count]=\"data.totalCount\">\n <ngx-datatable-column [name]=\"'Cms::DisplayName' | abpLocalization\" prop=\"displayName\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::Name' | abpLocalization\" prop=\"name\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::SectionType' | abpLocalization\" prop=\"type\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{('Cms::Enum:SectionType:'+_SectionType[value]) | abpLocalization}}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::Default' | abpLocalization\" prop=\"isDefault\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <i class=\"fas fa-check text-success\" *ngIf=\"value\"></i>\n <i class=\"fas fa-times text-danger\" *ngIf=\"!value\"></i>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::IsActive' | abpLocalization\" prop=\"isActive\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <i class=\"fas fa-check text-success\" *ngIf=\"value\"></i>\n <i class=\"fas fa-times text-danger\" *ngIf=\"!value\"></i>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::EntryType' | abpLocalization\" prop=\"SiteId\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div ngbDropdown container=\"body\">\n <button type=\"button\" class=\"btn btn-link\" ngbDropdownToggle>\n {{'Cms::EntryType' | abpLocalization}}\n </button>\n <div ngbDropdownMenu>\n <ng-container *ngFor=\"let item of row.entryTypes;let i =index\">\n <button ngbDropdownItem\n class=\"d-flex align-items-center justify-content-between\"\n routerLink=\"/cms/admin/sections/{{row.id}}/entry-types/{{item.id}}/edit\">{{item.displayName}}\n <button class=\"btn btn-light btn-sm p-0\"\n (click.stop)=\"deleteEntryType(item)\"><i class=\"fas fa-trash p-sm-1\"\n style=\"font-size: 12px;\" role=\"button\"></i></button>\n\n </button>\n </ng-container>\n <button ngbDropdownItem\n routerLink=\"/cms/admin/sections/{{row.id}}/entry-types/create\"><i\n class=\"fas fa-plus-circle me-2\"></i>{{'Cms::New' | abpLocalization}}</button>\n </div>\n </div>\n\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::CreationTime' | abpLocalization\" prop=\"creationTime\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'yyyy-MM-dd hh-mm-ss' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [sortable]=\"false\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div ngbDropdown container=\"body\">\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" ngbDropdownToggle>\n {{'AbpUi::Actions' | abpLocalization}}\n </button>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"editSectionBtn(row)\">{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click)=\"deletefield(row)\">{{'AbpUi::Delete' | abpLocalization}}</button>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n </div>\n </div>\n\n </div>\n\n\n</abp-page>\n\n\n\n\n<abp-modal [(visible)]=\"visibleOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{selected?('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"createOrEditForm; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"createOrEditForm\" (ngSubmit)=\"createOrEditSave()\">\n <button type=\"submit\" #createOrEditModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::EntryType' | abpLocalization}}</label>\n <div>\n <ng-container *ngFor=\"let item of _sectionTypeOptions;let i =index\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"radio\" [value]=\"item.value\" formControlName=\"type\"\n id=\"flexRadioDefault{{i}}\">\n <label class=\"form-check-label\" for=\"flexRadioDefault{{i}}\">\n {{ 'Cms::Enum:SectionType:'+item.key | abpLocalization }}\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n <div class=\"text-danger invalid-feedback\" *ngIf=\"nameInput.errors?.repetition\">\n {{nameInput.errors?.repetition}}\n </div>\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::Route' | abpLocalization}} </label>\n <input type=\"text\" class=\"form-control\" formControlName=\"route\" placeholder=\"\" />\n <div class=\"text-danger invalid-feedback\" *ngIf=\"routeInput.errors?.repetition\">\n {{routeInput.errors?.repetition}}\n </div>\n <div class=\"form-text\">\n {{'Cms::RouteTips' | abpLocalization}}<br>\n blog<br>\n {{'blog/{slug}'}}<br>\n {{'blog/{publishTime:yyyy}/{publishTime:MM}/{slug}'}}\n\n </div>\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::Template' | abpLocalization}} </label>\n <input type=\"text\" class=\"form-control\" formControlName=\"template\" placeholder=\"\" />\n <div class=\"form-text\">\n {{\"Cms::TemplateTips\" | abpLocalization}}\n </div>\n </div>\n <div class=\"mb-2\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"isDefault\"\n id=\"isDefault\" />\n <label class=\"form-check-label\" for=\"isDefault\"> {{'Cms::Default' | abpLocalization}} </label>\n </div>\n </div>\n <div class=\"mb-2\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"isActive\"\n id=\"isActive\" />\n <label class=\"form-check-label\" for=\"isActive\"> {{'Cms::IsActive' | abpLocalization}}</label>\n </div>\n </div>\n\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!createOrEditForm.valid\" (click)=\"createOrEditModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .sections-page .dignite_page{background:transparent}::ng-deep .sections-page .list-group-flush>.list-group-item:first-child{border-top-width:var(--bs-list-group-border-width)}::ng-deep .sections-page .card-header{height:57px}::ng-deep .sections-page .card-header input,::ng-deep .sections-page .card-header .form-select{height:34px}::ng-deep .sections-page .card-header input{flex:2 1 auto}::ng-deep .sections-page .card-header .form-select{padding:.475rem 3.75rem .475rem 1.25rem}::ng-deep .sections-page .container-height{height:calc(100vh - 180px)}::ng-deep .sites-modal-form .form-control{padding:.4rem 1.25rem}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "directive", type: i1.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "component", type: i9.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i9.DataTableColumnDirective, selector: "ngx-datatable-column", inputs: ["name", "prop", "frozenLeft", "frozenRight", "flexGrow", "resizeable", "comparator", "pipe", "sortable", "draggable", "canAutoResize", "minWidth", "width", "maxWidth", "checkboxable", "headerCheckboxable", "headerClass", "cellClass", "isTreeColumn", "treeLevelIndent", "summaryFunc", "summaryTemplate", "cellTemplate", "headerTemplate", "treeToggleTemplate"] }, { kind: "directive", type: i9.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i10.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i10.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i4.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i4.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i4.NgxDatatableListDirective, selector: "ngx-datatable[list]", inputs: ["list"], exportAs: ["ngxDatatableList"] }, { kind: "directive", type: i4.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i11.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i11.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i11.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i11.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }] });
|
|
285
|
+
}
|
|
286
|
+
export { SectionsComponent };
|
|
287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SectionsComponent, decorators: [{
|
|
288
|
+
type: Component,
|
|
289
|
+
args: [{ selector: 'cms-sections', providers: [
|
|
290
|
+
// [Required]
|
|
291
|
+
ListService,
|
|
292
|
+
// [Optional]
|
|
293
|
+
// Provide this token if you want a different debounce time.
|
|
294
|
+
// Default is 300. Cannot be 0. Any value below 100 is not recommended.
|
|
295
|
+
{ provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },
|
|
296
|
+
{
|
|
297
|
+
provide: EXTENSIONS_IDENTIFIER,
|
|
298
|
+
useValue: ECmsComponent.Sections,
|
|
299
|
+
},
|
|
300
|
+
], template: "<abp-page [title]=\"'Cms::Sections' | abpLocalization\" [toolbar]=\"true\">\n <div class=\"sections-page\">\n <div class=\"card mb-0\">\n <div class=\"card-header px-2 py-sm-2 border-bottom\">\n <div class=\"input-group\">\n <select class=\"form-select col-auto\" [(ngModel)]=\"filters.siteId\" (change)=\"siteIdChange()\">\n <ng-container *ngFor=\"let item of siteList\">\n <option [value]=\"item.id\">{{item.displayName}}</option>\n </ng-container>\n </select>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"filters.filter\" [placeholder]=\"'AbpUi::Search' | abpLocalization\" />\n <button class=\"btn btn-outline-primary px-2\" type=\"button\" id=\"button-addon2\" (click)=\"list.get()\">\n <i class=\"fa fa-search\"></i>\n </button>\n </div>\n </div>\n <div class=\"card-body p-0\">\n <div class=\"table-responsive table-fixed-header\">\n <ngx-datatable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\"\n [columnMode]=\"'force'\" [headerHeight]=\"50\" [footerHeight]=\"50\"\n rowHeight=\"auto\" [scrollbarV]=\"true\" [virtualization]=\"false\" [externalPaging]=\"true\"\n [count]=\"data.totalCount\">\n <ngx-datatable-column [name]=\"'Cms::DisplayName' | abpLocalization\" prop=\"displayName\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::Name' | abpLocalization\" prop=\"name\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::SectionType' | abpLocalization\" prop=\"type\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{('Cms::Enum:SectionType:'+_SectionType[value]) | abpLocalization}}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::Default' | abpLocalization\" prop=\"isDefault\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <i class=\"fas fa-check text-success\" *ngIf=\"value\"></i>\n <i class=\"fas fa-times text-danger\" *ngIf=\"!value\"></i>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::IsActive' | abpLocalization\" prop=\"isActive\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <i class=\"fas fa-check text-success\" *ngIf=\"value\"></i>\n <i class=\"fas fa-times text-danger\" *ngIf=\"!value\"></i>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::EntryType' | abpLocalization\" prop=\"SiteId\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div ngbDropdown container=\"body\">\n <button type=\"button\" class=\"btn btn-link\" ngbDropdownToggle>\n {{'Cms::EntryType' | abpLocalization}}\n </button>\n <div ngbDropdownMenu>\n <ng-container *ngFor=\"let item of row.entryTypes;let i =index\">\n <button ngbDropdownItem\n class=\"d-flex align-items-center justify-content-between\"\n routerLink=\"/cms/admin/sections/{{row.id}}/entry-types/{{item.id}}/edit\">{{item.displayName}}\n <button class=\"btn btn-light btn-sm p-0\"\n (click.stop)=\"deleteEntryType(item)\"><i class=\"fas fa-trash p-sm-1\"\n style=\"font-size: 12px;\" role=\"button\"></i></button>\n\n </button>\n </ng-container>\n <button ngbDropdownItem\n routerLink=\"/cms/admin/sections/{{row.id}}/entry-types/create\"><i\n class=\"fas fa-plus-circle me-2\"></i>{{'Cms::New' | abpLocalization}}</button>\n </div>\n </div>\n\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Cms::CreationTime' | abpLocalization\" prop=\"creationTime\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'yyyy-MM-dd hh-mm-ss' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [sortable]=\"false\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div ngbDropdown container=\"body\">\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" ngbDropdownToggle>\n {{'AbpUi::Actions' | abpLocalization}}\n </button>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"editSectionBtn(row)\">{{'AbpUi::Edit' | abpLocalization}}</button>\n <button ngbDropdownItem (click)=\"deletefield(row)\">{{'AbpUi::Delete' | abpLocalization}}</button>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n </div>\n </div>\n\n </div>\n\n\n</abp-page>\n\n\n\n\n<abp-modal [(visible)]=\"visibleOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{selected?('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"createOrEditForm; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"createOrEditForm\" (ngSubmit)=\"createOrEditSave()\">\n <button type=\"submit\" #createOrEditModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::EntryType' | abpLocalization}}</label>\n <div>\n <ng-container *ngFor=\"let item of _sectionTypeOptions;let i =index\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"radio\" [value]=\"item.value\" formControlName=\"type\"\n id=\"flexRadioDefault{{i}}\">\n <label class=\"form-check-label\" for=\"flexRadioDefault{{i}}\">\n {{ 'Cms::Enum:SectionType:'+item.key | abpLocalization }}\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n <div class=\"text-danger invalid-feedback\" *ngIf=\"nameInput.errors?.repetition\">\n {{nameInput.errors?.repetition}}\n </div>\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::Route' | abpLocalization}} </label>\n <input type=\"text\" class=\"form-control\" formControlName=\"route\" placeholder=\"\" />\n <div class=\"text-danger invalid-feedback\" *ngIf=\"routeInput.errors?.repetition\">\n {{routeInput.errors?.repetition}}\n </div>\n <div class=\"form-text\">\n {{'Cms::RouteTips' | abpLocalization}}<br>\n blog<br>\n {{'blog/{slug}'}}<br>\n {{'blog/{publishTime:yyyy}/{publishTime:MM}/{slug}'}}\n\n </div>\n </div>\n <div class=\"mb-2\">\n <label class=\"form-label\">{{'Cms::Template' | abpLocalization}} </label>\n <input type=\"text\" class=\"form-control\" formControlName=\"template\" placeholder=\"\" />\n <div class=\"form-text\">\n {{\"Cms::TemplateTips\" | abpLocalization}}\n </div>\n </div>\n <div class=\"mb-2\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"isDefault\"\n id=\"isDefault\" />\n <label class=\"form-check-label\" for=\"isDefault\"> {{'Cms::Default' | abpLocalization}} </label>\n </div>\n </div>\n <div class=\"mb-2\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"isActive\"\n id=\"isActive\" />\n <label class=\"form-check-label\" for=\"isActive\"> {{'Cms::IsActive' | abpLocalization}}</label>\n </div>\n </div>\n\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!createOrEditForm.valid\" (click)=\"createOrEditModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .sections-page .dignite_page{background:transparent}::ng-deep .sections-page .list-group-flush>.list-group-item:first-child{border-top-width:var(--bs-list-group-border-width)}::ng-deep .sections-page .card-header{height:57px}::ng-deep .sections-page .card-header input,::ng-deep .sections-page .card-header .form-select{height:34px}::ng-deep .sections-page .card-header input{flex:2 1 auto}::ng-deep .sections-page .card-header .form-select{padding:.475rem 3.75rem .475rem 1.25rem}::ng-deep .sections-page .container-height{height:calc(100vh - 180px)}::ng-deep .sites-modal-form .form-control{padding:.4rem 1.25rem}\n"] }]
|
|
301
|
+
}], ctorParameters: function () { return [{ type: i1.ListService }, { type: i2.SectionAdminService }, { type: i3.SiteAdminService }, { type: i4.ToasterService }, { type: i4.ConfirmationService }, { type: i5.FormBuilder }, { type: i1.ConfigStateService }, { type: i2.EntryTypeAdminService }, { type: i1.LocalizationService }, { type: i6.CmsApiService }]; }, propDecorators: { createOrEditModalSubmitBtn: [{
|
|
302
|
+
type: ViewChild,
|
|
303
|
+
args: ['createOrEditModalSubmitBtn', { static: false }]
|
|
304
|
+
}] } });
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zZWN0aW9ucy9zZWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NlY3Rpb25zL3NlY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsd0JBQXdCLEVBQUUsV0FBVyxFQUF1QyxNQUFNLGNBQWMsQ0FBQztBQUVuSSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFnQyxXQUFXLEVBQStCLFVBQVUsR0FBRyxNQUFNLGdCQUFnQixDQUFDO0FBR3JILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFJL0MsTUFpQmEsaUJBQWlCO0lBRVY7SUFDUjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNBO0lBQ0E7SUFWVCxZQUNrQixJQUFpQixFQUN6QixvQkFBeUMsRUFDekMsaUJBQW1DLEVBQ25DLE9BQXVCLEVBQ3ZCLFlBQWlDLEVBQ2pDLEVBQWUsRUFDZixXQUErQixFQUNoQyxzQkFBNkMs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RTt3QkFDUCxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUM1Rzt5QkFBTTt3QkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUNKLENBQUM7d0dBdlFVLGlCQUFpQjs0RkFBakIsaUJBQWlCLHVDQWJqQjtZQUNULGFBQWE7WUFDYixXQUFXO1lBQ1gsYUFBYTtZQUNiLDREQUE0RDtZQUM1RCx1RUFBdUU7WUFDdkUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNwRDtnQkFDRSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7YUFDakM7U0FDRixvS0M5QkgseXlYQXdMWTs7U0R4SkMsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBakI3QixTQUFTOytCQUNFLGNBQWMsYUFHYjt3QkFDVCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYiw0REFBNEQ7d0JBQzVELHVFQUF1RTt3QkFDdkUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFDcEQ7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO3lCQUNqQztxQkFDRjsrWEE2RTJELDBCQUEwQjtzQkFBckYsU0FBUzt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQlAsIENvbmZpZ1N0YXRlU2VydmljZSwgTElTVF9RVUVSWV9ERUJPVU5DRV9USU1FLCBMaXN0U2VydmljZSwgTG9jYWxpemF0aW9uU2VydmljZSwgUGFnZWRSZXN1bHREdG8gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UsIENvbmZpcm1hdGlvblNlcnZpY2UsIENvbmZpcm1hdGlvbiwgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9ycywgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFbnRyeVR5cGVBZG1pblNlcnZpY2UsIEdldFNlY3Rpb25zSW5wdXQsIFNlY3Rpb25BZG1pblNlcnZpY2UsIFNlY3Rpb25EdG8gfSBmcm9tICcuLi8uLi8uLi9wcm94eS9hZG1pbi9zZWN0aW9ucyc7XG5pbXBvcnQgeyBTaXRlQWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvYWRtaW4vc2l0ZXMnO1xuaW1wb3J0IHsgQ29sdW1uTW9kZSB9IGZyb20gXCJAc3dpbWxhbmUvbmd4LWRhdGF0YWJsZVwiO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDcmVhdGVPclVwZGF0ZVNlY3Rpb25zSW5wdXRCYXNlIH0gZnJvbSAnLi9jcmVhdGUtb3ItdXBkYXRlLXNlY3Rpb25zLWlucHV0LWJhc2UnO1xuaW1wb3J0IHsgU2VjdGlvblR5cGUsIHNlY3Rpb25UeXBlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3Byb3h5L3NlY3Rpb25zJztcbmltcG9ydCB7IEVYVEVOU0lPTlNfSURFTlRJRklFUiB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHsgRUNtc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcbmltcG9ydCB7IENtc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jbXMtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbXMtc2VjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VjdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBbUmVxdWlyZWRdXG4gICAgTGlzdFNlcnZpY2UsXG4gICAgLy8gW09wdGlvbmFsXVxuICAgIC8vIFByb3ZpZGUgdGhpcyB0b2tlbiBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBkZWJvdW5jZSB0aW1lLlxuICAgIC8vIERlZmF1bHQgaXMgMzAwLiBDYW5ub3QgYmUgMC4gQW55IHZhbHVlIGJlbG93IDEwMCBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgeyBwcm92aWRlOiBMSVNUX1FVRVJZX0RFQk9VTkNFX1RJTUUsIHVzZVZhbHVlOiA1MDAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBFWFRFTlNJT05TX0lERU5USUZJRVIsXG4gICAgICB1c2VWYWx1ZTogRUNtc0NvbXBvbmVudC5TZWN0aW9ucyxcbiAgICB9LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGxpc3Q6IExpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgX1NlY3Rpb25BZG1pblNlcnZpY2U6IFNlY3Rpb25BZG1pblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfU2l0ZUFkbWluU2VydmljZTogU2l0ZUFkbWluU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgX0VudHJ5VHlwZUFkbWluU2VydmljZTogRW50cnlUeXBlQWRtaW5TZXJ2aWNlLFxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgX0Ntc0FwaVNlcnZpY2U6IENtc0FwaVNlcnZpY2UsXG4gICkge1xuXG4gIH1cbiAgLyoq54mI5Z2X5YiX6KGoICovXG4gIHNpdGVMaXN0OiBhbnlbXSA9IFtdXG4gIC8qKiogKi9cbiAgQ29sdW1uTW9kZSA9IENvbHVtbk1vZGU7XG4gIGRhdGE6IFBhZ2VkUmVzdWx0RHRvPFNlY3Rpb25EdG8+ID0ge1xuICAgIGl0ZW1zOiBbXSxcbiAgICB0b3RhbENvdW50OiAwLFxuICB9O1xuICAvKiogKi9cbiAgZmlsdGVycyA9IHt9IGFzIEdldFNlY3Rpb25zSW5wdXQ7XG4gIC8qKuiOt+WPlumhtemdouWIl+ihqCAqL1xuICBob29rVG9RdWVyeSgpIHtcbiAgICBjb25zdCBnZXREYXRhID0gKHF1ZXJ5OiBBQlAuUGFnZVF1ZXJ5UGFyYW1zKSA9PiB0aGlzLl9TZWN0aW9uQWRtaW5TZXJ2aWNlLmdldExpc3Qoe1xuICAgICAgLi4ucXVlcnksXG4gICAgICAuLi50aGlzLmZpbHRlcnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXREYXRhID0gKGxpc3Q6IFBhZ2VkUmVzdWx0RHRvPFNlY3Rpb25EdG8+KSA9PiAodGhpcy5kYXRhID0gbGlzdCk7XG4gICAgdGhpcy5saXN0Lmhvb2tUb1F1ZXJ5KGdldERhdGEpLnN1YnNjcmliZShzZXREYXRhKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ2V0U2l0ZUxpc3QoKVxuICAgIHRoaXMuaG9va1RvUXVlcnkoKVxuICB9XG5cbiAgLyoq56uZ54K55YiH5o2iICovXG4gIHNpdGVJZENoYW5nZSgpIHtcbiAgICB0aGlzLmxpc3QuZ2V0KClcbiAgfVxuXG4gIC8qKuiOt+WPlueJiOWdl+WIl+ihqCAqL1xuICBnZXRTaXRlTGlzdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIHRoaXMuX1NpdGVBZG1pblNlcnZpY2UuZ2V0TGlzdCh7fSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuc2l0ZUxpc3QgPSByZXMuaXRlbXNcbiAgICAgICAgdGhpcy5maWx0ZXJzLnNpdGVJZCA9IHJlcy5pdGVtc1swXT8uaWQgfHwgJydcbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICByZWplY3RzKGZhbHNlKVxuXG4gICAgICB9KVxuICAgIH0pXG5cbiAgfVxuXG4gIC8qKuWIm+W7uueJiOWdl+aooeaAgeahhueKtuaAgSAqL1xuICB2aXNpYmxlT3BlbjogYm9vbGVhbiA9IGZhbHNlXG5cbiAgLyoq55So5LqO56Gu5a6a5qih5oCB55qE57mB5b+Z54q25oCB5piv5ZCm5Li655yfICovXG4gIG1vZGFsQnVzeTogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKuWIm+W7uueJiOWdl+ihqOWNlSAqL1xuICBjcmVhdGVPckVkaXRGb3JtOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgLyoq54mI5Z2X57uZ5a6a55qE6KGo5Y2V5YC8ICovXG4gIHNlbGVjdGVkOiBhbnlcblxuICBfU2VjdGlvblR5cGUgPSBTZWN0aW9uVHlwZVxuICBfc2VjdGlvblR5cGVPcHRpb25zID0gc2VjdGlvblR5cGVPcHRpb25zXG5cbiAgLyoq6KGo5Y2V5o6n5Lu25qih5p2/LeWKqOaAgei1i+WAvOihqOWNleaOp+S7tiAqL1xuICBAVmlld0NoaWxkKCdjcmVhdGVPckVkaXRNb2RhbFN1Ym1pdEJ0bicsIHsgc3RhdGljOiBmYWxzZSB9KSBjcmVhdGVPckVkaXRNb2RhbFN1Ym1pdEJ0bjogRWxlbWVudFJlZjtcblxuICAvKirliJvlu7rniYjlnZfmqKHmgIHmoYbnirbmgIHmlLnlj5ggKi9cbiAgVmlzaWJsZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICAvKirliJvlu7rniYjlnZfvvIzmiZPlvIDmqKHmgIHmoYYgKi9cbiAgY3JlYXRlU2VjdGlvbkJ0bigpIHtcbiAgICB0aGlzLnZpc2libGVPcGVuID0gdHJ1ZVxuICAgIHRoaXMuY3JlYXRlT3JFZGl0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAobmV3IENyZWF0ZU9yVXBkYXRlU2VjdGlvbnNJbnB1dEJhc2UoKSlcbiAgICB0aGlzLnNldEFzeW5jVmFsaWRhdG9yc0ZuKClcbiAgfVxuICAvKirnvJbovpHniYjlnZfvvIzmiZPlvIDmqKHmgIHmoYYgKi9cbiAgZWRpdFNlY3Rpb25CdG4ocm93KSB7XG4gICAgdGhpcy52aXNpYmxlT3BlbiA9IHRydWVcbiAgICB0aGlzLmNyZWF0ZU9yRWRpdEZvcm0gPSB0aGlzLmZiLmdyb3VwKG5ldyBDcmVhdGVPclVwZGF0ZVNlY3Rpb25zSW5wdXRCYXNlKCkpXG4gICAgdGhpcy5zZXRBc3luY1ZhbGlkYXRvcnNGbigpXG4gICAgdGhpcy5fU2VjdGlvbkFkbWluU2VydmljZS5nZXQocm93LmlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlT3JFZGl0Rm9ybS5wYXRjaFZhbHVlKHJlcylcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSByZXNcbiAgICB9KVxuICB9XG4gIC8qKuWIoOmZpOafkOS4quadoeebruexu+WeiyAqL1xuICBkZWxldGVFbnRyeVR5cGUocm93KSB7XG4gICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcbiAgICAgIHJvdy5kaXNwbGF5TmFtZSxcbiAgICAgIC8vIFwi56Gu5a6a6KaB5Yig6Zmk6L+Z5Liq5p2h55uu57G75Z6L5ZCXP1wiLFxuICAgICAgdGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBBYnBVaTo6SXRlbVdpbGxCZURlbGV0ZWRNZXNzYWdlYCksXG4gICAgKS5zdWJzY3JpYmUoKHN0YXR1czogQ29uZmlybWF0aW9uLlN0YXR1cykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PSAnY29uZmlybScpIHtcbiAgICAgICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlLmRlbGV0ZShyb3cuaWQpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgICB9KSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBBYnBVaTo6U3VjY2Vzc2Z1bGx5RGVsZXRlZGApKTtcbiAgICAgICAgICB0aGlzLmxpc3QuZ2V0KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoq6KGo5Y2V5L+d5a2Y5o+Q5LqkICovXG4gIGNyZWF0ZU9yRWRpdFNhdmUoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLkVkaXRTYXZlKClcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVTYXZlKClcbiAgfVxuXG4gIC8qKuWIm+W7uueJiOWdl+S/neWtmCAqL1xuICBjcmVhdGVTYXZlKCkge1xuICAgIGxldCBpbnB1dCA9IHRoaXMuY3JlYXRlT3JFZGl0Rm9ybS52YWx1ZVxuICAgIGlucHV0LnNpdGVJZCA9IHRoaXMuZmlsdGVycy5zaXRlSWRcbiAgICBpZiAoIXRoaXMuY3JlYXRlT3JFZGl0Rm9ybS52YWxpZCkgcmV0dXJuXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlXG4gICAgdGhpcy5fU2VjdGlvbkFkbWluU2VydmljZS5jcmVhdGUoaW5wdXQpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RhbEJ1c3kgPSBmYWxzZVxuICAgICAgdGhpcy52aXNpYmxlT3BlbiA9IGZhbHNlXG4gICAgfSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXNLaXQ6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgdGhpcy5saXN0LmdldCgpXG4gICAgfSlcbiAgfVxuICAvKirliJvlu7rniYjlnZfkv53lrZggKi9cbiAgRWRpdFNhdmUoKSB7XG4gICAgbGV0IGlucHV0ID0gdGhpcy5jcmVhdGVPckVkaXRGb3JtLnZhbHVlXG4gICAgaW5wdXQuc2l0ZUlkID0gdGhpcy5maWx0ZXJzLnNpdGVJZFxuICAgIGlucHV0LmNvbmN1cnJlbmN5U3RhbXAgPSB0aGlzLnNlbGVjdGVkLmNvbmN1cnJlbmN5U3RhbXBcbiAgICBpZiAoIXRoaXMuY3JlYXRlT3JFZGl0Rm9ybS52YWxpZCkgcmV0dXJuXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlXG4gICAgdGhpcy5fU2VjdGlvbkFkbWluU2VydmljZS51cGRhdGUodGhpcy5zZWxlY3RlZC5pZCwgaW5wdXQpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RhbEJ1c3kgPSBmYWxzZVxuICAgICAgdGhpcy52aXNpYmxlT3BlbiA9IGZhbHNlXG4gICAgfSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXNLaXQ6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgdGhpcy5saXN0LmdldCgpXG4gICAgfSlcbiAgfVxuICAvKirliKDpmaTniYjlnZcgKi9cbiAgZGVsZXRlZmllbGQocm93KSB7XG4gICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcbiAgICAgIHJvdy5kaXNwbGF5TmFtZSxcbiAgICAgIHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6Okl0ZW1XaWxsQmVEZWxldGVkTWVzc2FnZWApLFxuICAgICkuc3Vic2NyaWJlKChzdGF0dXM6IENvbmZpcm1hdGlvbi5TdGF0dXMpID0+IHtcbiAgICAgIHRoaXMuX1NlY3Rpb25BZG1pblNlcnZpY2UuZGVsZXRlKHJvdy5pZCkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICB9KSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6OlN1Y2Nlc3NmdWxseURlbGV0ZWRgKSk7XG4gICAgICAgIHRoaXMubGlzdC5nZXQoKVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipuYW1l6KGo5Y2V5o6n5Lu2ICovXG4gIGdldCBkaXNwbGF5TmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yRWRpdEZvcm0uZ2V0KCdkaXNwbGF5TmFtZScpXG4gIH1cbiAgLyoqbmFtZeihqOWNleaOp+S7tiAqL1xuICBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yRWRpdEZvcm0uZ2V0KCduYW1lJylcbiAgfVxuICAvKipyb3V0ZeihqOWNleaOp+S7tiAqL1xuICBnZXQgcm91dGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPckVkaXRGb3JtLmdldCgncm91dGUnKVxuICB9XG4gIC8qKnJvdXRl6KGo5Y2V5o6n5Lu2ICovXG4gIGdldCB0ZW1wbGF0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yRWRpdEZvcm0uZ2V0KCd0ZW1wbGF0ZScpXG4gIH1cblxuXG4gIC8qKuWtl+auteagh+etvmlucHV05aSx5Y675qCH54K555Sf5oiQ5a2X5q615ZCN5a2XICovXG4gIGRpc1BsYXlOYW1lSW5wdXRCbHVyKGV2ZW50KSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgbGV0IHBpbnlpbiA9IHRoaXMuX0Ntc0FwaVNlcnZpY2UuY2hpbmVzZVRvUGlueWluKHZhbHVlKVxuICAgIGxldCBuYW1lSW5wdXQgPSB0aGlzLm5hbWVJbnB1dFxuICAgIGxldCByb3V0ZUlucHV0ID0gdGhpcy5yb3V0ZUlucHV0XG4gICAgbGV0IHRlbXBsYXRlSW5wdXQgPSB0aGlzLnRlbXBsYXRlSW5wdXRcbiAgICBpZiAobmFtZUlucHV0LnZhbHVlKSByZXR1cm5cbiAgICBuYW1lSW5wdXQucGF0Y2hWYWx1ZShwaW55aW4pXG4gICAgaWYgKHJvdXRlSW5wdXQudmFsdWUpIHJldHVyblxuICAgIHJvdXRlSW5wdXQucGF0Y2hWYWx1ZShwaW55aW4pXG4gICAgaWYgKHRlbXBsYXRlSW5wdXQudmFsdWUpIHJldHVyblxuICAgIHRlbXBsYXRlSW5wdXQucGF0Y2hWYWx1ZShwaW55aW4gKyAnL2luZGV4JylcbiAgfVxuXG5cblxuICAvKirorr7nva7lrZfmrrXmjqfku7blvILmraXpqozor4EgKi9cbiAgc2V0QXN5bmNWYWxpZGF0b3JzRm4oKSB7XG4gICAgdGhpcy5jcmVhdGVPckVkaXRGb3JtLnNldENvbnRyb2woJ25hbWUnLCBuZXcgRm9ybUNvbnRyb2wodGhpcy5uYW1lSW5wdXQudmFsdWUgfHwgJycsIHtcbiAgICAgIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMubmFtZVJlcGV0aXRpb25Bc3luY1ZhbGlkYXRvcigpLFxuICAgICAgLy8gdXBkYXRlT246ICdibHVyJ1xuICAgIH0pKVxuICAgIHRoaXMuY3JlYXRlT3JFZGl0Rm9ybS5zZXRDb250cm9sKCdyb3V0ZScsIG5ldyBGb3JtQ29udHJvbCh0aGlzLnJvdXRlSW5wdXQudmFsdWUgfHwgJycsIHtcbiAgICAgIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMucm91dGVSZXBldGl0aW9uQXN5bmNWYWxpZGF0b3IoKSxcbiAgICAgIC8vIHVwZGF0ZU9uOiAnYmx1cidcbiAgICB9KSlcbiAgfVxuXG5cbiAgLy/lrprkuYnlvILmraXpqozor4Hmlrnms5VcbiAgbmFtZVJlcGV0aXRpb25Bc3luY1ZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gKGN0cmw6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgc3Vic2x1ZyA9IHRoaXMuY3JlYXRlT3JFZGl0Rm9ybT8uZ2V0KCduYW1lJylcbiAgICAgICAgaWYgKHN1YnNsdWcudmFsdWUgPT0gdGhpcy5zZWxlY3RlZD8ubmFtZSkge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fU2VjdGlvbkFkbWluU2VydmljZS5uYW1lRXhpc3RzKHtcbiAgICAgICAgICBzaXRlSWQ6IHRoaXMuZmlsdGVycy5zaXRlSWQsXG4gICAgICAgICAgbmFtZTogc3Vic2x1Zy52YWx1ZVxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgcmVwZXRpdGlvbjogdGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXM6OlNlY3Rpb25OYW1lezB9QWxyZWFkeUV4aXN0YCwgY3RybC52YWx1ZSkgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICAvL+WumuS5ieW8guatpemqjOivgeaWueazlVxuICByb3V0ZVJlcGV0aXRpb25Bc3luY1ZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gKGN0cmw6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgc3Vic2x1ZyA9IHRoaXMuY3JlYXRlT3JFZGl0Rm9ybT8uZ2V0KCdyb3V0ZScpLnZhbHVlXG4gICAgICAgIGlmIChzdWJzbHVnID09IHRoaXMuc2VsZWN0ZWQ/LnJvdXRlKSB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9TZWN0aW9uQWRtaW5TZXJ2aWNlLnJvdXRlRXhpc3RzKHtcbiAgICAgICAgICBzaXRlSWQ6IHRoaXMuZmlsdGVycy5zaXRlSWQsXG4gICAgICAgICAgcm91dGU6IHN1YnNsdWdcbiAgICAgICAgfSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IHJlcGV0aXRpb246IHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQ21zOjpTZWN0aW9uUm91dGV7MH1BbHJlYWR5RXhpc3RgLCBjdHJsLnZhbHVlKSB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cblxufVxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInQ21zOjpTZWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb25cIiBbdG9vbGJhcl09XCJ0cnVlXCI+XG4gICAgPGRpdiBjbGFzcz1cInNlY3Rpb25zLXBhZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHB4LTIgcHktc20tMiBib3JkZXItYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjb2wtYXV0b1wiIFsobmdNb2RlbCldPVwiZmlsdGVycy5zaXRlSWRcIiAoY2hhbmdlKT1cInNpdGVJZENoYW5nZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNpdGVMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaXRlbS5pZFwiPnt7aXRlbS5kaXNwbGF5TmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzLmZpbHRlclwiICBbcGxhY2Vob2xkZXJdPVwiJ0FicFVpOjpTZWFyY2gnIHwgYWJwTG9jYWxpemF0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHB4LTJcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidXR0b24tYWRkb24yXCIgKGNsaWNrKT1cImxpc3QuZ2V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZSB0YWJsZS1maXhlZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5neC1kYXRhdGFibGUgY2xhc3M9XCJtYXRlcmlhbCBjb250YWluZXItaGVpZ2h0XCIgW3Jvd3NdPVwiZGF0YS5pdGVtc1wiIFtsaXN0XT1cImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1vZGVdPVwiJ2ZvcmNlJ1wiIFtoZWFkZXJIZWlnaHRdPVwiNTBcIiBbZm9vdGVySGVpZ2h0XT1cIjUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodD1cImF1dG9cIiBbc2Nyb2xsYmFyVl09XCJ0cnVlXCIgW3ZpcnR1YWxpemF0aW9uXT1cImZhbHNlXCIgW2V4dGVybmFsUGFnaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cImRhdGEudG90YWxDb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICBbbmFtZV09XCInQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwiZGlzcGxheU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT1cInZhbHVlXCIgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uICBbbmFtZV09XCInQ21zOjpOYW1lJyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgIFtuYW1lXT1cIidDbXM6OlNlY3Rpb25UeXBlJyB8IGFicExvY2FsaXphdGlvblwiIHByb3A9XCJ0eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3soJ0Ntczo6RW51bTpTZWN0aW9uVHlwZTonK19TZWN0aW9uVHlwZVt2YWx1ZV0pIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgW25hbWVdPVwiJ0Ntczo6RGVmYXVsdCcgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwiaXNEZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2sgdGV4dC1zdWNjZXNzXCIgKm5nSWY9XCJ2YWx1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgdGV4dC1kYW5nZXJcIiAqbmdJZj1cIiF2YWx1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgW25hbWVdPVwiJ0Ntczo6SXNBY3RpdmUnIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cImlzQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2sgdGV4dC1zdWNjZXNzXCIgKm5nSWY9XCJ2YWx1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgdGV4dC1kYW5nZXJcIiAqbmdJZj1cIiF2YWx1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtZGF0YXRhYmxlLWNvbHVtbiAgIFtuYW1lXT1cIidDbXM6OkVudHJ5VHlwZScgfCBhYnBMb2NhbGl6YXRpb25cIiBwcm9wPVwiU2l0ZUlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiIG5neC1kYXRhdGFibGUtY2VsbC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjb250YWluZXI9XCJib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlua1wiIG5nYkRyb3Bkb3duVG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0Ntczo6RW50cnlUeXBlJyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93LmVudHJ5VHlwZXM7bGV0IGkgPWluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9jbXMvYWRtaW4vc2VjdGlvbnMve3tyb3cuaWR9fS9lbnRyeS10eXBlcy97e2l0ZW0uaWR9fS9lZGl0XCI+e3tpdGVtLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBwLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljay5zdG9wKT1cImRlbGV0ZUVudHJ5VHlwZShpdGVtKVwiPjxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoIHAtc20tMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiIHJvbGU9XCJidXR0b25cIj48L2k+PC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9jbXMvYWRtaW4vc2VjdGlvbnMve3tyb3cuaWR9fS9lbnRyeS10eXBlcy9jcmVhdGVcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtcGx1cy1jaXJjbGUgbWUtMlwiPjwvaT57eydDbXM6Ok5ldycgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmd4LWRhdGF0YWJsZS1jb2x1bW4gICBbbmFtZV09XCInQ21zOjpDcmVhdGlvblRpbWUnIHwgYWJwTG9jYWxpemF0aW9uXCIgcHJvcD1cImNyZWF0aW9uVGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSA6ICd5eXl5LU1NLWRkIGhoLW1tLXNzJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1kYXRhdGFibGUtY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1kYXRhdGFibGUtY29sdW1uIFtzb3J0YWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIiBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc21cIiBuZ2JEcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBYnBVaTo6QWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZWRpdFNlY3Rpb25CdG4ocm93KVwiPnt7J0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cImRlbGV0ZWZpZWxkKHJvdylcIj57eydBYnBVaTo6RGVsZXRlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LWRhdGF0YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG5cbjwvYWJwLXBhZ2U+XG5cblxuXG5cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIlZpc2libGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3tzZWxlY3RlZD8oJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbik6KCdDbXM6Ok5ldycgfCBhYnBMb2NhbGl6YXRpb24pfX08L2gzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRlclJlZj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNyZWF0ZU9yRWRpdEZvcm07IGVsc2UgbG9hZGVyUmVmXCI+XG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cInNpdGVzLW1vZGFsLWZvcm1cIiBbZm9ybUdyb3VwXT1cImNyZWF0ZU9yRWRpdEZvcm1cIiAobmdTdWJtaXQpPVwiY3JlYXRlT3JFZGl0U2F2ZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgI2NyZWF0ZU9yRWRpdE1vZGFsU3VibWl0QnRuIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6OkVudHJ5VHlwZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9zZWN0aW9uVHlwZU9wdGlvbnM7bGV0IGkgPWluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImZsZXhSYWRpb0RlZmF1bHR7e2l9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleFJhZGlvRGVmYXVsdHt7aX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQ21zOjpFbnVtOlNlY3Rpb25UeXBlOicraXRlbS5rZXkgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpEaXNwbGF5TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIiAoYmx1cik9XCJkaXNQbGF5TmFtZUlucHV0Qmx1cigkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6Ok5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhbmdlciBpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJuYW1lSW5wdXQuZXJyb3JzPy5yZXBldGl0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e25hbWVJbnB1dC5lcnJvcnM/LnJlcGV0aXRpb259fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3snQ21zOjpSb3V0ZScgfCBhYnBMb2NhbGl6YXRpb259fSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInJvdXRlXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1kYW5nZXIgaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwicm91dGVJbnB1dC5lcnJvcnM/LnJlcGV0aXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cm91dGVJbnB1dC5lcnJvcnM/LnJlcGV0aXRpb259fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3snQ21zOjpSb3V0ZVRpcHMnIHwgYWJwTG9jYWxpemF0aW9ufX08YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtibG9nPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7e3snYmxvZy97c2x1Z30nfX08YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDt7eydibG9nL3twdWJsaXNoVGltZTp5eXl5fS97cHVibGlzaFRpbWU6TU19L3tzbHVnfSd9fVxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6OlRlbXBsYXRlJyB8IGFicExvY2FsaXphdGlvbn19ICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRlbXBsYXRlXCIgIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcIkNtczo6VGVtcGxhdGVUaXBzXCIgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cImlzRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpc0RlZmF1bHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImlzRGVmYXVsdFwiPiB7eydDbXM6OkRlZmF1bHQnIHwgYWJwTG9jYWxpemF0aW9ufX0gPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJpc0FjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpc0FjdGl2ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiaXNBY3RpdmVcIj4gIHt7J0Ntczo6SXNBY3RpdmUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3snQWJwVWk6OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbn19PC9idXR0b24+XG4gICAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgW2Rpc2FibGVkXT1cIiFjcmVhdGVPckVkaXRGb3JtLnZhbGlkXCIgKGNsaWNrKT1cImNyZWF0ZU9yRWRpdE1vZGFsU3VibWl0QnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKVwiPnt7J0FicFVpOjpTYXZlJyB8IGFicExvY2FsaXphdGlvbn19PC9hYnAtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2FicC1tb2RhbD4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Validators } from "@angular/forms";
|
|
2
|
+
export class CreateOrUpdateSitesInputBase {
|
|
3
|
+
/**字段名称 Display name of this field */
|
|
4
|
+
displayName = ['', [Validators.required]];
|
|
5
|
+
/**字段唯一名称 Unique Name*/
|
|
6
|
+
name = ['', [Validators.required]];
|
|
7
|
+
/**主机地址 */
|
|
8
|
+
host = ['https://', [Validators.required]];
|
|
9
|
+
/**是否激活 */
|
|
10
|
+
isActive = [true, []];
|
|
11
|
+
// 语言
|
|
12
|
+
languages = [[], [Validators.required]];
|
|
13
|
+
constructor(data) {
|
|
14
|
+
if (data) {
|
|
15
|
+
for (const key in data) {
|
|
16
|
+
if (data.hasOwnProperty(key)) {
|
|
17
|
+
this[key] = data[key];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLXVwZGF0ZS1zaXRlcy1pbnB1dC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zaXRlcy9jcmVhdGUtb3ItdXBkYXRlLXNpdGVzLWlucHV0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RixNQUFNLE9BQU8sNEJBQTRCO0lBRXJDLHFDQUFxQztJQUNyQyxXQUFXLEdBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUUvQyx1QkFBdUI7SUFDdkIsSUFBSSxHQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFeEMsVUFBVTtJQUNWLElBQUksR0FBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRWhELFVBQVU7SUFDVixRQUFRLEdBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0IsS0FBSztJQUNMLFNBQVMsR0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRzNDLFlBQVksSUFBbUM7UUFDM0MsSUFBSSxJQUFJLEVBQUU7WUFDTixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN6QjthQUNKO1NBQ0o7SUFFTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlT3JVcGRhdGVTaXRlc0lucHV0QmFzZSB7XHJcblxyXG4gICAgLyoq5a2X5q615ZCN56ewIERpc3BsYXkgbmFtZSBvZiB0aGlzIGZpZWxkICovXHJcbiAgICBkaXNwbGF5TmFtZTogYW55ID0gWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dO1xyXG5cclxuICAgIC8qKuWtl+auteWUr+S4gOWQjeensCBVbmlxdWUgTmFtZSovXHJcbiAgICBuYW1lOiBhbnkgPSBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV07XHJcblxyXG4gICAgLyoq5Li75py65Zyw5Z2AICovXHJcbiAgICBob3N0OiBhbnkgPSBbJ2h0dHBzOi8vJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXTtcclxuXHJcbiAgICAvKirmmK/lkKbmv4DmtLsgKi9cclxuICAgIGlzQWN0aXZlOiBhbnkgPSBbdHJ1ZSwgW11dO1xyXG4gICAgLy8g6K+t6KiAXHJcbiAgICBsYW5ndWFnZXM6YW55ID0gW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBDcmVhdGVPclVwZGF0ZVNpdGVzSW5wdXRCYXNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './sites.component';
|
|
2
|
+
export * from './create-or-update-sites-input-base';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NpdGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUE7QUFDakMsY0FBYyxxQ0FBcUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2l0ZXMuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZS1vci11cGRhdGUtc2l0ZXMtaW5wdXQtYmFzZSciXX0=
|