@abp/ng.setting-management 7.2.2 → 7.3.0-rc.2
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 +129 -2
- package/config/index.d.ts +5 -5
- package/config/lib/components/email-setting-group/email-setting-group.component.d.ts +28 -28
- package/config/lib/enums/index.d.ts +3 -3
- package/config/lib/enums/policy-names.d.ts +3 -3
- package/config/lib/enums/route-names.d.ts +3 -3
- package/config/lib/enums/setting-tab-names.d.ts +3 -3
- package/config/lib/providers/features.token.d.ts +13 -13
- package/config/lib/providers/index.d.ts +3 -3
- package/config/lib/providers/route.provider.d.ts +16 -16
- package/config/lib/providers/setting-tab.provider.d.ts +8 -8
- package/config/lib/providers/visible.provider.d.ts +8 -8
- package/config/lib/proxy/email-settings.service.d.ts +13 -13
- package/config/lib/proxy/index.d.ts +2 -2
- package/config/lib/proxy/models.d.ts +28 -28
- package/config/lib/services/index.d.ts +1 -1
- package/config/lib/services/settings-tabs.service.d.ts +6 -6
- package/config/lib/setting-management-config.module.d.ts +12 -12
- package/config/public-api.d.ts +6 -6
- package/{esm2020 → esm2022}/abp-ng.setting-management.mjs +4 -4
- package/{esm2020 → esm2022}/config/abp-ng.setting-management-config.mjs +4 -4
- package/esm2022/config/lib/components/email-setting-group/email-setting-group.component.mjs +85 -0
- package/{esm2020 → esm2022}/config/lib/enums/index.mjs +3 -3
- package/{esm2020 → esm2022}/config/lib/enums/policy-names.mjs +1 -1
- package/{esm2020 → esm2022}/config/lib/enums/route-names.mjs +1 -1
- package/{esm2020 → esm2022}/config/lib/enums/setting-tab-names.mjs +1 -1
- package/{esm2020 → esm2022}/config/lib/providers/features.token.mjs +29 -29
- package/{esm2020 → esm2022}/config/lib/providers/index.mjs +3 -3
- package/{esm2020 → esm2022}/config/lib/providers/route.provider.mjs +33 -33
- package/{esm2020 → esm2022}/config/lib/providers/setting-tab.provider.mjs +23 -23
- package/{esm2020 → esm2022}/config/lib/providers/visible.provider.mjs +25 -25
- package/esm2022/config/lib/proxy/email-settings.service.mjs +34 -0
- package/{esm2020 → esm2022}/config/lib/proxy/index.mjs +2 -2
- package/{esm2020 → esm2022}/config/lib/proxy/models.mjs +1 -1
- package/{esm2020 → esm2022}/config/lib/services/index.mjs +1 -1
- package/esm2022/config/lib/services/settings-tabs.service.mjs +13 -0
- package/esm2022/config/lib/setting-management-config.module.mjs +36 -0
- package/{esm2020 → esm2022}/config/public-api.mjs +6 -6
- package/esm2022/lib/components/setting-management.component.mjs +34 -0
- package/{esm2020 → esm2022}/lib/enums/components.mjs +1 -1
- package/{esm2020 → esm2022}/lib/enums/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/enums/route-names.mjs +1 -1
- package/esm2022/lib/setting-management-routing.module.mjs +40 -0
- package/esm2022/lib/setting-management.module.mjs +31 -0
- package/{esm2020 → esm2022}/public-api.mjs +3 -3
- package/fesm2022/abp-ng.setting-management-config.mjs +254 -0
- package/fesm2022/abp-ng.setting-management-config.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/abp-ng.setting-management.mjs +78 -78
- package/fesm2022/abp-ng.setting-management.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components/setting-management.component.d.ts +16 -16
- package/lib/enums/components.d.ts +3 -3
- package/lib/enums/index.d.ts +2 -2
- package/lib/enums/route-names.d.ts +3 -3
- package/lib/setting-management-routing.module.d.ts +7 -7
- package/lib/setting-management.module.d.ts +14 -14
- package/package.json +25 -19
- package/public-api.d.ts +3 -3
- package/config/src/lib/proxy/README.md +0 -17
- package/esm2020/config/lib/components/email-setting-group/email-setting-group.component.mjs +0 -84
- package/esm2020/config/lib/proxy/email-settings.service.mjs +0 -33
- package/esm2020/config/lib/services/settings-tabs.service.mjs +0 -12
- package/esm2020/config/lib/setting-management-config.module.mjs +0 -35
- package/esm2020/lib/components/setting-management.component.mjs +0 -33
- package/esm2020/lib/setting-management-routing.module.mjs +0 -39
- package/esm2020/lib/setting-management.module.mjs +0 -30
- package/fesm2015/abp-ng.setting-management-config.mjs +0 -254
- package/fesm2015/abp-ng.setting-management-config.mjs.map +0 -1
- package/fesm2015/abp-ng.setting-management.mjs +0 -100
- package/fesm2015/abp-ng.setting-management.mjs.map +0 -1
- package/fesm2020/abp-ng.setting-management-config.mjs +0 -254
- package/fesm2020/abp-ng.setting-management-config.mjs.map +0 -1
- package/fesm2020/abp-ng.setting-management.mjs.map +0 -1
|
@@ -9,91 +9,91 @@ import * as i1 from '@abp/ng.setting-management/config';
|
|
|
9
9
|
import { Subscription } from 'rxjs';
|
|
10
10
|
import * as i2 from '@angular/common';
|
|
11
11
|
import * as i1$1 from '@angular/router';
|
|
12
|
-
import { RouterModule } from '@angular/router';
|
|
12
|
+
import { mapToCanActivate, RouterModule } from '@angular/router';
|
|
13
13
|
|
|
14
|
-
class SettingManagementComponent {
|
|
15
|
-
constructor(settingTabsService) {
|
|
16
|
-
this.settingTabsService = settingTabsService;
|
|
17
|
-
this.subscription = new Subscription();
|
|
18
|
-
this.settings = [];
|
|
19
|
-
this.trackByFn = (_, item) => item.name;
|
|
20
|
-
}
|
|
21
|
-
ngOnDestroy() {
|
|
22
|
-
this.subscription.unsubscribe();
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
this.subscription.add(this.settingTabsService.visible$.subscribe(settings => {
|
|
26
|
-
this.settings = settings;
|
|
27
|
-
if (!this.selected)
|
|
28
|
-
this.selected = this.settings[0];
|
|
29
|
-
}));
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
35
|
-
type: Component,
|
|
36
|
-
args: [{ selector: 'abp-setting-management', template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
14
|
+
class SettingManagementComponent {
|
|
15
|
+
constructor(settingTabsService) {
|
|
16
|
+
this.settingTabsService = settingTabsService;
|
|
17
|
+
this.subscription = new Subscription();
|
|
18
|
+
this.settings = [];
|
|
19
|
+
this.trackByFn = (_, item) => item.name;
|
|
20
|
+
}
|
|
21
|
+
ngOnDestroy() {
|
|
22
|
+
this.subscription.unsubscribe();
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.subscription.add(this.settingTabsService.visible$.subscribe(settings => {
|
|
26
|
+
this.settings = settings;
|
|
27
|
+
if (!this.selected)
|
|
28
|
+
this.selected = this.settings[0];
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementComponent, deps: [{ token: i1.SettingTabsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: SettingManagementComponent, selector: "abp-setting-management", ngImport: i0, template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForDirective, selector: "[abpFor]", inputs: ["abpForOf", "abpForOrderBy", "abpForOrderDir", "abpForFilterBy", "abpForFilterVal", "abpForTrackBy", "abpForCompareBy", "abpForEmptyRef"] }, { kind: "directive", type: i3.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i3.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'abp-setting-management', template: "<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
37
37
|
}], ctorParameters: function () { return [{ type: i1.SettingTabsService }]; } });
|
|
38
38
|
|
|
39
|
-
const routes = [
|
|
40
|
-
{
|
|
41
|
-
path: '',
|
|
42
|
-
component: RouterOutletComponent,
|
|
43
|
-
canActivate: [AuthGuard],
|
|
44
|
-
children: [
|
|
45
|
-
{
|
|
46
|
-
path: '',
|
|
47
|
-
component: ReplaceableRouteContainerComponent,
|
|
48
|
-
data: {
|
|
49
|
-
requiredPolicy: 'AbpAccount.SettingManagement',
|
|
50
|
-
replaceableComponent: {
|
|
51
|
-
key: "SettingManagement.SettingManagementComponent" /* eSettingManagementComponents.SettingManagement */,
|
|
52
|
-
defaultComponent: SettingManagementComponent,
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
},
|
|
58
|
-
];
|
|
59
|
-
class SettingManagementRoutingModule {
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
65
|
-
type: NgModule,
|
|
66
|
-
args: [{
|
|
67
|
-
imports: [RouterModule.forChild(routes)],
|
|
68
|
-
exports: [RouterModule],
|
|
69
|
-
}]
|
|
39
|
+
const routes = [
|
|
40
|
+
{
|
|
41
|
+
path: '',
|
|
42
|
+
component: RouterOutletComponent,
|
|
43
|
+
canActivate: mapToCanActivate([AuthGuard]),
|
|
44
|
+
children: [
|
|
45
|
+
{
|
|
46
|
+
path: '',
|
|
47
|
+
component: ReplaceableRouteContainerComponent,
|
|
48
|
+
data: {
|
|
49
|
+
requiredPolicy: 'AbpAccount.SettingManagement',
|
|
50
|
+
replaceableComponent: {
|
|
51
|
+
key: "SettingManagement.SettingManagementComponent" /* eSettingManagementComponents.SettingManagement */,
|
|
52
|
+
defaultComponent: SettingManagementComponent,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
class SettingManagementRoutingModule {
|
|
60
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
61
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementRoutingModule, imports: [i1$1.RouterModule], exports: [RouterModule] }); }
|
|
62
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementRoutingModule, decorators: [{
|
|
65
|
+
type: NgModule,
|
|
66
|
+
args: [{
|
|
67
|
+
imports: [RouterModule.forChild(routes)],
|
|
68
|
+
exports: [RouterModule],
|
|
69
|
+
}]
|
|
70
70
|
}] });
|
|
71
71
|
|
|
72
|
-
class SettingManagementModule {
|
|
73
|
-
static forChild() {
|
|
74
|
-
return {
|
|
75
|
-
ngModule: SettingManagementModule,
|
|
76
|
-
providers: [],
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
static forLazy() {
|
|
80
|
-
return new LazyModuleFactory(SettingManagementModule.forChild());
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
87
|
-
type: NgModule,
|
|
88
|
-
args: [{
|
|
89
|
-
declarations: [SettingManagementComponent],
|
|
90
|
-
exports: [SettingManagementComponent],
|
|
91
|
-
imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule],
|
|
92
|
-
}]
|
|
72
|
+
class SettingManagementModule {
|
|
73
|
+
static forChild() {
|
|
74
|
+
return {
|
|
75
|
+
ngModule: SettingManagementModule,
|
|
76
|
+
providers: [],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
static forLazy() {
|
|
80
|
+
return new LazyModuleFactory(SettingManagementModule.forChild());
|
|
81
|
+
}
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
83
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementModule, declarations: [SettingManagementComponent], imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule], exports: [SettingManagementComponent] }); }
|
|
84
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementModule, imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule] }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: SettingManagementModule, decorators: [{
|
|
87
|
+
type: NgModule,
|
|
88
|
+
args: [{
|
|
89
|
+
declarations: [SettingManagementComponent],
|
|
90
|
+
exports: [SettingManagementComponent],
|
|
91
|
+
imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule],
|
|
92
|
+
}]
|
|
93
93
|
}] });
|
|
94
94
|
|
|
95
|
-
/**
|
|
96
|
-
* Generated bundle index. Do not edit.
|
|
95
|
+
/**
|
|
96
|
+
* Generated bundle index. Do not edit.
|
|
97
97
|
*/
|
|
98
98
|
|
|
99
99
|
export { SettingManagementComponent, SettingManagementModule };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abp-ng.setting-management.mjs","sources":["../../../../packages/setting-management/src/lib/components/setting-management.component.ts","../../../../packages/setting-management/src/lib/components/setting-management.component.html","../../../../packages/setting-management/src/lib/setting-management-routing.module.ts","../../../../packages/setting-management/src/lib/setting-management.module.ts","../../../../packages/setting-management/src/abp-ng.setting-management.ts"],"sourcesContent":["import { ABP } from '@abp/ng.core';\r\nimport { SettingTabsService } from '@abp/ng.setting-management/config';\r\nimport { Component, OnDestroy, OnInit, TrackByFunction } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'abp-setting-management',\r\n templateUrl: './setting-management.component.html',\r\n})\r\nexport class SettingManagementComponent implements OnDestroy, OnInit {\r\n private subscription = new Subscription();\r\n settings: ABP.Tab[] = [];\r\n\r\n selected!: ABP.Tab;\r\n\r\n trackByFn: TrackByFunction<ABP.Tab> = (_, item) => item.name;\r\n\r\n constructor(private settingTabsService: SettingTabsService) {}\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription.add(\r\n this.settingTabsService.visible$.subscribe(settings => {\r\n this.settings = settings;\r\n\r\n if (!this.selected) this.selected = this.settings[0];\r\n }),\r\n );\r\n }\r\n}\r\n","<abp-page [title]=\"'AbpSettingManagement::Settings' | abpLocalization\">\r\n <div id=\"SettingManagementWrapper\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-3 mb-2 mb-md-0\">\r\n <ul class=\"nav flex-column nav-pills\" id=\"nav-tab\" role=\"tablist\">\r\n <ng-container *abpFor=\"let setting of settings; trackBy: trackByFn\">\r\n <li\r\n (click)=\"selected = setting\"\r\n class=\"nav-item pointer\"\r\n *abpPermission=\"setting.requiredPolicy\"\r\n >\r\n <a\r\n class=\"nav-link\"\r\n [id]=\"setting.name + '-tab'\"\r\n role=\"tab\"\r\n [class.active]=\"setting.name === selected.name\"\r\n >{{ setting.name | abpLocalization }}</a\r\n >\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n <div class=\"col-12 col-md-9\">\r\n <div *ngIf=\"settings.length\" class=\"tab-content\">\r\n <div class=\"tab-pane fade show active\" [id]=\"selected.name + '-tab'\" role=\"tabpanel\">\r\n <ng-container *ngComponentOutlet=\"selected.component\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes, mapToCanActivate } from '@angular/router';\r\nimport {\r\n AuthGuard,\r\n ReplaceableComponents,\r\n ReplaceableRouteContainerComponent,\r\n RouterOutletComponent,\r\n} from '@abp/ng.core';\r\nimport { SettingManagementComponent } from './components/setting-management.component';\r\nimport { eSettingManagementComponents } from './enums/components';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: RouterOutletComponent,\r\n canActivate: mapToCanActivate([AuthGuard]),\r\n children: [\r\n {\r\n path: '',\r\n component: ReplaceableRouteContainerComponent,\r\n data: {\r\n requiredPolicy: 'AbpAccount.SettingManagement',\r\n replaceableComponent: {\r\n key: eSettingManagementComponents.SettingManagement,\r\n defaultComponent: SettingManagementComponent,\r\n } as ReplaceableComponents.RouteData,\r\n },\r\n },\r\n ],\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class SettingManagementRoutingModule {}\r\n","import { PageModule } from '@abp/ng.components/page';\r\nimport { CoreModule, LazyModuleFactory } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core';\r\nimport { SettingManagementComponent } from './components/setting-management.component';\r\nimport { SettingManagementRoutingModule } from './setting-management-routing.module';\r\n\r\n@NgModule({\r\n declarations: [SettingManagementComponent],\r\n exports: [SettingManagementComponent],\r\n imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule, PageModule],\r\n})\r\nexport class SettingManagementModule {\r\n static forChild(): ModuleWithProviders<SettingManagementModule> {\r\n return {\r\n ngModule: SettingManagementModule,\r\n providers: [],\r\n };\r\n }\r\n\r\n static forLazy(): NgModuleFactory<SettingManagementModule> {\r\n return new LazyModuleFactory(SettingManagementModule.forChild());\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
/// <amd-module name="@abp/ng.setting-management" />
|
|
5
|
-
export * from './public-api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
/// <amd-module name="@abp/ng.setting-management" />
|
|
5
|
+
export * from './public-api';
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { ABP } from '@abp/ng.core';
|
|
2
|
-
import { SettingTabsService } from '@abp/ng.setting-management/config';
|
|
3
|
-
import { OnDestroy, OnInit, TrackByFunction } from '@angular/core';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class SettingManagementComponent implements OnDestroy, OnInit {
|
|
6
|
-
private settingTabsService;
|
|
7
|
-
private subscription;
|
|
8
|
-
settings: ABP.Tab[];
|
|
9
|
-
selected: ABP.Tab;
|
|
10
|
-
trackByFn: TrackByFunction<ABP.Tab>;
|
|
11
|
-
constructor(settingTabsService: SettingTabsService);
|
|
12
|
-
ngOnDestroy(): void;
|
|
13
|
-
ngOnInit(): void;
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SettingManagementComponent, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SettingManagementComponent, "abp-setting-management", never, {}, {}, never, never, false, never>;
|
|
16
|
-
}
|
|
1
|
+
import { ABP } from '@abp/ng.core';
|
|
2
|
+
import { SettingTabsService } from '@abp/ng.setting-management/config';
|
|
3
|
+
import { OnDestroy, OnInit, TrackByFunction } from '@angular/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class SettingManagementComponent implements OnDestroy, OnInit {
|
|
6
|
+
private settingTabsService;
|
|
7
|
+
private subscription;
|
|
8
|
+
settings: ABP.Tab[];
|
|
9
|
+
selected: ABP.Tab;
|
|
10
|
+
trackByFn: TrackByFunction<ABP.Tab>;
|
|
11
|
+
constructor(settingTabsService: SettingTabsService);
|
|
12
|
+
ngOnDestroy(): void;
|
|
13
|
+
ngOnInit(): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SettingManagementComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SettingManagementComponent, "abp-setting-management", never, {}, {}, never, never, false, never>;
|
|
16
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const enum eSettingManagementComponents {
|
|
2
|
-
SettingManagement = "SettingManagement.SettingManagementComponent"
|
|
3
|
-
}
|
|
1
|
+
export declare const enum eSettingManagementComponents {
|
|
2
|
+
SettingManagement = "SettingManagement.SettingManagementComponent"
|
|
3
|
+
}
|
package/lib/enums/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './components';
|
|
2
|
-
export * from './route-names';
|
|
1
|
+
export * from './components';
|
|
2
|
+
export * from './route-names';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const enum eSettingManagementRouteNames {
|
|
2
|
-
Settings = "AbpSettingManagement::Settings"
|
|
3
|
-
}
|
|
1
|
+
export declare const enum eSettingManagementRouteNames {
|
|
2
|
+
Settings = "AbpSettingManagement::Settings"
|
|
3
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
import * as i1 from "@angular/router";
|
|
3
|
-
export declare class SettingManagementRoutingModule {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SettingManagementRoutingModule, never>;
|
|
5
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SettingManagementRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
|
|
6
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<SettingManagementRoutingModule>;
|
|
7
|
-
}
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/router";
|
|
3
|
+
export declare class SettingManagementRoutingModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SettingManagementRoutingModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SettingManagementRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SettingManagementRoutingModule>;
|
|
7
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ModuleWithProviders, NgModuleFactory } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "./components/setting-management.component";
|
|
4
|
-
import * as i2 from "./setting-management-routing.module";
|
|
5
|
-
import * as i3 from "@abp/ng.core";
|
|
6
|
-
import * as i4 from "@abp/ng.theme.shared";
|
|
7
|
-
import * as i5 from "@abp/ng.components/page";
|
|
8
|
-
export declare class SettingManagementModule {
|
|
9
|
-
static forChild(): ModuleWithProviders<SettingManagementModule>;
|
|
10
|
-
static forLazy(): NgModuleFactory<SettingManagementModule>;
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SettingManagementModule, never>;
|
|
12
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SettingManagementModule, [typeof i1.SettingManagementComponent], [typeof i2.SettingManagementRoutingModule, typeof i3.CoreModule, typeof i4.ThemeSharedModule, typeof i5.PageModule], [typeof i1.SettingManagementComponent]>;
|
|
13
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<SettingManagementModule>;
|
|
14
|
-
}
|
|
1
|
+
import { ModuleWithProviders, NgModuleFactory } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./components/setting-management.component";
|
|
4
|
+
import * as i2 from "./setting-management-routing.module";
|
|
5
|
+
import * as i3 from "@abp/ng.core";
|
|
6
|
+
import * as i4 from "@abp/ng.theme.shared";
|
|
7
|
+
import * as i5 from "@abp/ng.components/page";
|
|
8
|
+
export declare class SettingManagementModule {
|
|
9
|
+
static forChild(): ModuleWithProviders<SettingManagementModule>;
|
|
10
|
+
static forLazy(): NgModuleFactory<SettingManagementModule>;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SettingManagementModule, never>;
|
|
12
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SettingManagementModule, [typeof i1.SettingManagementComponent], [typeof i2.SettingManagementRoutingModule, typeof i3.CoreModule, typeof i4.ThemeSharedModule, typeof i5.PageModule], [typeof i1.SettingManagementComponent]>;
|
|
13
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SettingManagementModule>;
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,24 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.setting-management",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.3.0-rc.2",
|
|
4
4
|
"homepage": "https://abp.io",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/abpframework/abp.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@abp/ng.components": "~7.
|
|
11
|
-
"@abp/ng.theme.shared": "~7.
|
|
10
|
+
"@abp/ng.components": "~7.3.0-rc.2",
|
|
11
|
+
"@abp/ng.theme.shared": "~7.3.0-rc.2",
|
|
12
12
|
"tslib": "^2.0.0"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "public"
|
|
16
16
|
},
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
"license": "LGPL-3.0",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"aspnetcore",
|
|
20
|
+
"boilerplate",
|
|
21
|
+
"framework",
|
|
22
|
+
"web",
|
|
23
|
+
"best-practices",
|
|
24
|
+
"angular",
|
|
25
|
+
"maui",
|
|
26
|
+
"blazor",
|
|
27
|
+
"mvc",
|
|
28
|
+
"csharp",
|
|
29
|
+
"webapp"
|
|
30
|
+
],
|
|
31
|
+
"module": "fesm2022/abp-ng.setting-management.mjs",
|
|
22
32
|
"typings": "index.d.ts",
|
|
23
33
|
"exports": {
|
|
24
34
|
"./package.json": {
|
|
@@ -26,23 +36,19 @@
|
|
|
26
36
|
},
|
|
27
37
|
".": {
|
|
28
38
|
"types": "./index.d.ts",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"node": "./fesm2015/abp-ng.setting-management.mjs",
|
|
33
|
-
"default": "./fesm2020/abp-ng.setting-management.mjs"
|
|
39
|
+
"esm2022": "./esm2022/abp-ng.setting-management.mjs",
|
|
40
|
+
"esm": "./esm2022/abp-ng.setting-management.mjs",
|
|
41
|
+
"default": "./fesm2022/abp-ng.setting-management.mjs"
|
|
34
42
|
},
|
|
35
43
|
"./config": {
|
|
36
44
|
"types": "./config/index.d.ts",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"node": "./fesm2015/abp-ng.setting-management-config.mjs",
|
|
41
|
-
"default": "./fesm2020/abp-ng.setting-management-config.mjs"
|
|
45
|
+
"esm2022": "./esm2022/config/abp-ng.setting-management-config.mjs",
|
|
46
|
+
"esm": "./esm2022/config/abp-ng.setting-management-config.mjs",
|
|
47
|
+
"default": "./fesm2022/abp-ng.setting-management-config.mjs"
|
|
42
48
|
}
|
|
43
49
|
},
|
|
44
50
|
"sideEffects": false,
|
|
45
51
|
"peerDependencies": {
|
|
46
|
-
"@abp/ng.core": "7.
|
|
52
|
+
"@abp/ng.core": "7.3.0-rc.2"
|
|
47
53
|
}
|
|
48
54
|
}
|
package/public-api.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './lib/setting-management.module';
|
|
2
|
-
export * from './lib/components/setting-management.component';
|
|
3
|
-
export * from './lib/enums';
|
|
1
|
+
export * from './lib/setting-management.module';
|
|
2
|
+
export * from './lib/components/setting-management.component';
|
|
3
|
+
export * from './lib/enums';
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Proxy Generation Output
|
|
2
|
-
|
|
3
|
-
This directory includes the output of the latest proxy generation.
|
|
4
|
-
The files and folders in it will be overwritten when proxy generation is run again.
|
|
5
|
-
Therefore, please do not place your own content in this folder.
|
|
6
|
-
|
|
7
|
-
In addition, `generate-proxy.json` works like a lock file.
|
|
8
|
-
It includes information used by the proxy generator, so please do not delete or modify it.
|
|
9
|
-
|
|
10
|
-
Finally, the name of the files and folders should not be changed for two reasons:
|
|
11
|
-
- Proxy generator will keep creating them at those paths and you will have multiple copies of the same content.
|
|
12
|
-
- ABP Suite generates files which include imports from this folder.
|
|
13
|
-
|
|
14
|
-
> **Important Notice:** If you are building a module and are planning to publish to npm,
|
|
15
|
-
> some of the generated proxies are likely to be exported from public-api.ts file. In such a case,
|
|
16
|
-
> please make sure you export files directly and not from barrel exports. In other words,
|
|
17
|
-
> do not include index.ts exports in your public-api.ts exports.
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { collapse, ToasterService } from '@abp/ng.theme.shared';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
3
|
-
import { UntypedFormBuilder, Validators } from '@angular/forms';
|
|
4
|
-
import { finalize } from 'rxjs/operators';
|
|
5
|
-
import { EmailSettingsService } from '../../proxy/email-settings.service';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../../proxy/email-settings.service";
|
|
8
|
-
import * as i2 from "@angular/forms";
|
|
9
|
-
import * as i3 from "@abp/ng.theme.shared";
|
|
10
|
-
import * as i4 from "@angular/common";
|
|
11
|
-
import * as i5 from "@abp/ng.core";
|
|
12
|
-
import * as i6 from "@ngx-validate/core";
|
|
13
|
-
export class EmailSettingGroupComponent {
|
|
14
|
-
constructor(emailSettingsService, fb, toasterService) {
|
|
15
|
-
this.emailSettingsService = emailSettingsService;
|
|
16
|
-
this.fb = fb;
|
|
17
|
-
this.toasterService = toasterService;
|
|
18
|
-
this.saving = false;
|
|
19
|
-
this.emailingPolicy = "SettingManagement.Emailing" /* SettingManagementPolicyNames.Emailing */;
|
|
20
|
-
this.isEmailTestModalOpen = false;
|
|
21
|
-
this.modalSize = { size: "lg" };
|
|
22
|
-
}
|
|
23
|
-
ngOnInit() {
|
|
24
|
-
this.getData();
|
|
25
|
-
}
|
|
26
|
-
getData() {
|
|
27
|
-
this.emailSettingsService.get().subscribe(res => {
|
|
28
|
-
this.buildForm(res);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
buildForm(emailSettings) {
|
|
32
|
-
this.form = this.fb.group({
|
|
33
|
-
defaultFromDisplayName: [emailSettings.defaultFromDisplayName, [Validators.required]],
|
|
34
|
-
defaultFromAddress: [emailSettings.defaultFromAddress, [Validators.required]],
|
|
35
|
-
smtpHost: [emailSettings.smtpHost],
|
|
36
|
-
smtpPort: [emailSettings.smtpPort, [Validators.required]],
|
|
37
|
-
smtpEnableSsl: [emailSettings.smtpEnableSsl],
|
|
38
|
-
smtpUseDefaultCredentials: [emailSettings.smtpUseDefaultCredentials],
|
|
39
|
-
smtpDomain: [emailSettings.smtpDomain],
|
|
40
|
-
smtpUserName: [emailSettings.smtpUserName],
|
|
41
|
-
smtpPassword: [emailSettings.smtpPassword],
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
submit() {
|
|
45
|
-
if (this.saving || this.form.invalid)
|
|
46
|
-
return;
|
|
47
|
-
this.saving = true;
|
|
48
|
-
this.emailSettingsService
|
|
49
|
-
.update(this.form.value)
|
|
50
|
-
.pipe(finalize(() => (this.saving = false)))
|
|
51
|
-
.subscribe(() => {
|
|
52
|
-
this.toasterService.success('AbpSettingManagement::SuccessfullySaved');
|
|
53
|
-
this.getData();
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
openSendEmailModal() {
|
|
57
|
-
this.buildEmailTestForm();
|
|
58
|
-
this.isEmailTestModalOpen = true;
|
|
59
|
-
}
|
|
60
|
-
buildEmailTestForm() {
|
|
61
|
-
this.emailTestForm = this.fb.group({
|
|
62
|
-
senderEmailAddress: ['', [Validators.required, Validators.email]],
|
|
63
|
-
targetEmailAddress: ['', [Validators.required, Validators.email]],
|
|
64
|
-
subject: ['', [Validators.required]],
|
|
65
|
-
body: [''],
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
emailTestFormSubmit() {
|
|
69
|
-
if (this.emailTestForm.invalid) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
this.emailSettingsService.sendTestEmail(this.emailTestForm.value).subscribe(res => {
|
|
73
|
-
this.toasterService.success('AbpSettingManagement::SuccessfullySent');
|
|
74
|
-
this.isEmailTestModalOpen = false;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
EmailSettingGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EmailSettingGroupComponent, deps: [{ token: i1.EmailSettingsService }, { token: i2.UntypedFormBuilder }, { token: i3.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
-
EmailSettingGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: EmailSettingGroupComponent, selector: "abp-email-setting-group", ngImport: i0, template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-3\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label>\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input type=\"checkbox\" id=\"smtp-enable-ssl\" class=\"form-check-input\" formControlName=\"smtpEnableSsl\" />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input type=\"checkbox\" id=\"smtp-use-default-credentials\" class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\" />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <button type=\"submit\" class=\"btn btn-primary\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" (click)=\"openSendEmailModal()\" class=\"btn btn-primary mx-2\" *abpPermission=\"emailingPolicy\">\r\n <i class=\"fa f-send\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{\"SendTestEmail\" | abpLocalization}}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SenderEmailAddress' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::TargetEmailAddress' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n\r\n <ng-template #abpFooter>\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-send\" formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\">\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "directive", type: i5.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "directive", type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }], animations: [collapse] });
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EmailSettingGroupComponent, decorators: [{
|
|
81
|
-
type: Component,
|
|
82
|
-
args: [{ selector: 'abp-email-setting-group', animations: [collapse], template: "<h2>{{ 'AbpSettingManagement::Menu:Emailing' | abpLocalization }}</h2>\r\n\r\n<hr class=\"my-3\" />\r\n\r\n<form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\" [validateOnSubmit]=\"true\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromDisplayName\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{\r\n 'AbpSettingManagement::DefaultFromAddress' | abpLocalization\r\n }}<span class=\"ms-1\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"defaultFromAddress\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpHost' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpHost\" />\r\n </div>\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPort' | abpLocalization }}<span class=\"ms-1\">*</span></label>\r\n <input type=\"number\" class=\"form-control\" formControlName=\"smtpPort\" />\r\n </div>\r\n\r\n <div class=\"form-check mb-2\">\r\n <input type=\"checkbox\" id=\"smtp-enable-ssl\" class=\"form-check-input\" formControlName=\"smtpEnableSsl\" />\r\n <label class=\"form-check-label\" for=\"smtp-enable-ssl\">{{\r\n 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization\r\n }}</label>\r\n </div>\r\n <div class=\"form-check mb-2\">\r\n <input type=\"checkbox\" id=\"smtp-use-default-credentials\" class=\"form-check-input\"\r\n formControlName=\"smtpUseDefaultCredentials\" />\r\n <label class=\"form-check-label\" for=\"smtp-use-default-credentials\">{{\r\n 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization\r\n }}</label>\r\n </div>\r\n\r\n <div [@collapse]=\"{\r\n value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',\r\n params: { time: '200ms', easing: 'linear' }\r\n }\">\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpDomain\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpUserName' | abpLocalization }}</label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"smtpUserName\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SmtpPassword' | abpLocalization }}</label>\r\n <input type=\"password\" class=\"form-control\" formControlName=\"smtpPassword\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <button type=\"submit\" class=\"btn btn-primary\">\r\n {{ 'AbpSettingManagement::Save' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" (click)=\"openSendEmailModal()\" class=\"btn btn-primary mx-2\" *abpPermission=\"emailingPolicy\">\r\n <i class=\"fa f-send\"></i>\r\n {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}\r\n </button>\r\n</form>\r\n\r\n<abp-modal [(visible)]=\"isEmailTestModalOpen\" [options]=\"modalSize\">\r\n <ng-template #abpHeader>\r\n <h3>{{\"SendTestEmail\" | abpLocalization}}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"emailTestForm\" id=\"emailTestForm\" (ngSubmit)=\"emailTestFormSubmit()\">\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::SenderEmailAddress' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"senderEmailAddress\" />\r\n </div>\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::TargetEmailAddress' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"targetEmailAddress\" />\r\n </div>\r\n\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>\r\n <input class=\"form-control\" formControlName=\"subject\" />\r\n </div>\r\n\r\n\r\n <div class=\"mb-3 form-group\">\r\n <label class=\"form-label\">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>\r\n <textarea class=\"form-control\" formControlName=\"body\"></textarea>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n\r\n <ng-template #abpFooter>\r\n <abp-button buttonType=\"submit\" iconClass=\"fa fa-send\" formName=\"emailTestForm\"\r\n [disabled]=\"emailTestForm.invalid && emailTestForm.dirty\">\r\n <span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>\r\n </abp-button>\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>Close</button>\r\n </ng-template>\r\n</abp-modal>" }]
|
|
83
|
-
}], ctorParameters: function () { return [{ type: i1.EmailSettingsService }, { type: i2.UntypedFormBuilder }, { type: i3.ToasterService }]; } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtc2V0dGluZy1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXR0aW5nLW1hbmFnZW1lbnQvY29uZmlnL3NyYy9saWIvY29tcG9uZW50cy9lbWFpbC1zZXR0aW5nLWdyb3VwL2VtYWlsLXNldHRpbmctZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2V0dGluZy1tYW5hZ2VtZW50L2NvbmZpZy9zcmMvbGliL2NvbXBvbmVudHMvZW1haWwtc2V0dGluZy1ncm91cC9lbWFpbC1zZXR0aW5nLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLDBCQUEwQjtJQVFyQyxZQUNVLG9CQUEwQyxFQUMxQyxFQUFzQixFQUN0QixjQUE4QjtRQUY5Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVJ4QyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsbUJBQWMsNEVBQXlDO1FBQ3ZELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQWtCLEVBQUUsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFBO0lBTXBDLENBQUM7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SSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzs7dUhBMUVVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLCtEQ2R2QyxzaEtBZ0hZLG1qRkRwR0UsQ0FBQyxRQUFRLENBQUM7MkZBRVgsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QixjQUV2QixDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nYk1vZGFsT3B0aW9ucyB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgY29sbGFwc2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZXR0aW5nTWFuYWdlbWVudFBvbGljeU5hbWVzIH0gZnJvbSAnLi4vLi4vZW51bXMvcG9saWN5LW5hbWVzJztcclxuaW1wb3J0IHsgRW1haWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm94eS9lbWFpbC1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW1haWxTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3Byb3h5L21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1lbWFpbC1zZXR0aW5nLWdyb3VwJyxcclxuICB0ZW1wbGF0ZVVybDogJ2VtYWlsLXNldHRpbmctZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGFuaW1hdGlvbnM6IFtjb2xsYXBzZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbWFpbFNldHRpbmdHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZm9ybSE6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZW1haWxUZXN0Rm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBzYXZpbmcgPSBmYWxzZTtcclxuICBlbWFpbGluZ1BvbGljeSA9IFNldHRpbmdNYW5hZ2VtZW50UG9saWN5TmFtZXMuRW1haWxpbmc7XHJcbiAgaXNFbWFpbFRlc3RNb2RhbE9wZW4gPSBmYWxzZTtcclxuICBtb2RhbFNpemU6TmdiTW9kYWxPcHRpb25zPSB7IHNpemU6XCJsZ1wifSBcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVtYWlsU2V0dGluZ3NTZXJ2aWNlOiBFbWFpbFNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgIHRoaXMuZW1haWxTZXR0aW5nc1NlcnZpY2UuZ2V0KCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuYnVpbGRGb3JtKHJlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKGVtYWlsU2V0dGluZ3M6IEVtYWlsU2V0dGluZ3NEdG8pIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZWZhdWx0RnJvbURpc3BsYXlOYW1lOiBbZW1haWxTZXR0aW5ncy5kZWZhdWx0RnJvbURpc3BsYXlOYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBkZWZhdWx0RnJvbUFkZHJlc3M6IFtlbWFpbFNldHRpbmdzLmRlZmF1bHRGcm9tQWRkcmVzcywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc210cEhvc3Q6IFtlbWFpbFNldHRpbmdzLnNtdHBIb3N0XSxcclxuICAgICAgc210cFBvcnQ6IFtlbWFpbFNldHRpbmdzLnNtdHBQb3J0LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzbXRwRW5hYmxlU3NsOiBbZW1haWxTZXR0aW5ncy5zbXRwRW5hYmxlU3NsXSxcclxuICAgICAgc210cFVzZURlZmF1bHRDcmVkZW50aWFsczogW2VtYWlsU2V0dGluZ3Muc210cFVzZURlZmF1bHRDcmVkZW50aWFsc10sXHJcbiAgICAgIHNtdHBEb21haW46IFtlbWFpbFNldHRpbmdzLnNtdHBEb21haW5dLFxyXG4gICAgICBzbXRwVXNlck5hbWU6IFtlbWFpbFNldHRpbmdzLnNtdHBVc2VyTmFtZV0sXHJcbiAgICAgIHNtdHBQYXNzd29yZDogW2VtYWlsU2V0dGluZ3Muc210cFBhc3N3b3JkXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMuc2F2aW5nIHx8IHRoaXMuZm9ybS5pbnZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5lbWFpbFNldHRpbmdzU2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMuZm9ybS52YWx1ZSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuc2F2aW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U3VjY2Vzc2Z1bGx5U2F2ZWQnKTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG9wZW5TZW5kRW1haWxNb2RhbCgpIHtcclxuICAgIHRoaXMuYnVpbGRFbWFpbFRlc3RGb3JtKCk7XHJcbiAgICB0aGlzLmlzRW1haWxUZXN0TW9kYWxPcGVuID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRW1haWxUZXN0Rm9ybSgpIHtcclxuICAgIHRoaXMuZW1haWxUZXN0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBzZW5kZXJFbWFpbEFkZHJlc3M6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcclxuICAgICAgdGFyZ2V0RW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXHJcbiAgICAgIHN1YmplY3Q6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYm9keTogWycnXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW1haWxUZXN0Rm9ybVN1Ym1pdCgpIHtcclxuXHJcbiAgICBpZih0aGlzLmVtYWlsVGVzdEZvcm0uaW52YWxpZCl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgICB0aGlzLmVtYWlsU2V0dGluZ3NTZXJ2aWNlLnNlbmRUZXN0RW1haWwodGhpcy5lbWFpbFRlc3RGb3JtLnZhbHVlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U3VjY2Vzc2Z1bGx5U2VudCcpO1xyXG4gICAgICB0aGlzLmlzRW1haWxUZXN0TW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gICAgICBcclxuICB9XHJcblxyXG59XHJcbiIsIjxoMj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6Ok1lbnU6RW1haWxpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9oMj5cclxuXHJcbjxociBjbGFzcz1cIm15LTNcIiAvPlxyXG5cclxuPGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCIgW3ZhbGlkYXRlT25TdWJtaXRdPVwidHJ1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57e1xyXG4gICAgICAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OkRlZmF1bHRGcm9tRGlzcGxheU5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgIH19PHNwYW4gY2xhc3M9XCJtcy0xXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWZhdWx0RnJvbURpc3BsYXlOYW1lXCIgLz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3tcclxuICAgICAgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpEZWZhdWx0RnJvbUFkZHJlc3MnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgIH19PHNwYW4gY2xhc3M9XCJtcy0xXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZWZhdWx0RnJvbUFkZHJlc3NcIiAvPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBIb3N0JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNtdHBIb3N0XCIgLz5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwUG9ydCcgfCBhYnBMb2NhbGl6YXRpb24gfX08c3BhbiBjbGFzcz1cIm1zLTFcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cFBvcnRcIiAvPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzbXRwLWVuYWJsZS1zc2xcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBmb3JtQ29udHJvbE5hbWU9XCJzbXRwRW5hYmxlU3NsXCIgLz5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzbXRwLWVuYWJsZS1zc2xcIj57e1xyXG4gICAgICAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNtdHBFbmFibGVTc2wnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgIH19PC9sYWJlbD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzbXRwLXVzZS1kZWZhdWx0LWNyZWRlbnRpYWxzXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic210cFVzZURlZmF1bHRDcmVkZW50aWFsc1wiIC8+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic210cC11c2UtZGVmYXVsdC1jcmVkZW50aWFsc1wiPnt7XHJcbiAgICAgICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U210cFVzZURlZmF1bHRDcmVkZW50aWFscycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IFtAY29sbGFwc2VdPVwie1xyXG4gICAgICB2YWx1ZTogZm9ybS5nZXQoJ3NtdHBVc2VEZWZhdWx0Q3JlZGVudGlhbHMnKT8udmFsdWUgPyAnY29sbGFwc2VkJyA6ICdleHBhbmRlZCcsXHJcbiAgICAgIHBhcmFtczogeyB0aW1lOiAnMjAwbXMnLCBlYXNpbmc6ICdsaW5lYXInIH1cclxuICAgIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U210cERvbWFpbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNtdHBEb21haW5cIiAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwVXNlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzbXRwVXNlck5hbWVcIiAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTbXRwUGFzc3dvcmQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic210cFBhc3N3b3JkXCIgLz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aHIgLz5cclxuXHJcbiAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cclxuICAgIHt7ICdBYnBTZXR0aW5nTWFuYWdlbWVudDo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNlbmRFbWFpbE1vZGFsKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteC0yXCIgKmFicFBlcm1pc3Npb249XCJlbWFpbGluZ1BvbGljeVwiPlxyXG4gICAgPGkgY2xhc3M9XCJmYSBmLXNlbmRcIj48L2k+XHJcbiAgICB7eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNlbmRUZXN0RW1haWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgPC9idXR0b24+XHJcbjwvZm9ybT5cclxuXHJcbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc0VtYWlsVGVzdE1vZGFsT3BlblwiIFtvcHRpb25zXT1cIm1vZGFsU2l6ZVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPnt7XCJTZW5kVGVzdEVtYWlsXCIgfCBhYnBMb2NhbGl6YXRpb259fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJlbWFpbFRlc3RGb3JtXCIgaWQ9XCJlbWFpbFRlc3RGb3JtXCIgKG5nU3VibWl0KT1cImVtYWlsVGVzdEZvcm1TdWJtaXQoKVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlNlbmRlckVtYWlsQWRkcmVzcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNlbmRlckVtYWlsQWRkcmVzc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eyAnQWJwU2V0dGluZ01hbmFnZW1lbnQ6OlRhcmdldEVtYWlsQWRkcmVzcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRhcmdldEVtYWlsQWRkcmVzc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpTdWJqZWN0JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic3ViamVjdFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0FicFNldHRpbmdNYW5hZ2VtZW50OjpCb2R5JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYm9keVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxhYnAtYnV0dG9uIGJ1dHRvblR5cGU9XCJzdWJtaXRcIiBpY29uQ2xhc3M9XCJmYSBmYS1zZW5kXCIgZm9ybU5hbWU9XCJlbWFpbFRlc3RGb3JtXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImVtYWlsVGVzdEZvcm0uaW52YWxpZCAmJiBlbWFpbFRlc3RGb3JtLmRpcnR5XCI+XHJcbiAgICAgIDxzcGFuPnt7ICdBYnBUZW5hbnRNYW5hZ2VtZW50OjpTZW5kJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc3Bhbj5cclxuICAgIDwvYWJwLWJ1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+Q2xvc2U8L2J1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD4iXX0=
|