@acorex/layout 3.0.63 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/acorex-layout.d.ts +1 -2
- package/esm2020/acorex-layout.mjs +5 -0
- package/esm2020/lib/widget-board/editors/widget-size-editor/widget-size.editor.mjs +46 -0
- package/esm2020/lib/widget-board/editors/widget-size-editor/widget-size.module.mjs +21 -0
- package/esm2020/lib/widget-board/widget-board.component.mjs +441 -0
- package/esm2020/lib/widget-board/widget-board.module.mjs +111 -0
- package/esm2020/lib/widget-board/widget-config.component.mjs +82 -0
- package/esm2020/lib/widget-board/widget-host.component.mjs +290 -0
- package/esm2020/lib/widget-board/widget-save.component.mjs +79 -0
- package/esm2020/lib/widget-board/widget.class.mjs +127 -0
- package/esm2020/public-api.mjs +7 -0
- package/fesm2015/acorex-layout.mjs +1166 -0
- package/fesm2015/acorex-layout.mjs.map +1 -0
- package/fesm2020/acorex-layout.mjs +1159 -0
- package/fesm2020/acorex-layout.mjs.map +1 -0
- package/lib/widget-board/editors/widget-size-editor/widget-size.editor.d.ts +3 -0
- package/lib/widget-board/editors/widget-size-editor/widget-size.module.d.ts +8 -0
- package/lib/widget-board/widget-board.component.d.ts +3 -0
- package/lib/widget-board/widget-board.module.d.ts +12 -0
- package/lib/widget-board/widget-config.component.d.ts +3 -0
- package/lib/widget-board/widget-host.component.d.ts +3 -0
- package/lib/widget-board/widget-save.component.d.ts +3 -0
- package/lib/widget-board/widget.class.d.ts +3 -0
- package/package.json +23 -13
- package/acorex-layout.metadata.json +0 -1
- package/bundles/acorex-layout.umd.js +0 -1487
- package/bundles/acorex-layout.umd.js.map +0 -1
- package/bundles/acorex-layout.umd.min.js +0 -16
- package/bundles/acorex-layout.umd.min.js.map +0 -1
- package/esm2015/acorex-layout.js +0 -7
- package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +0 -49
- package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.module.js +0 -19
- package/esm2015/lib/widget-board/widget-board.component.js +0 -468
- package/esm2015/lib/widget-board/widget-board.module.js +0 -67
- package/esm2015/lib/widget-board/widget-config.component.js +0 -86
- package/esm2015/lib/widget-board/widget-host.component.js +0 -323
- package/esm2015/lib/widget-board/widget-save.component.js +0 -79
- package/esm2015/lib/widget-board/widget.class.js +0 -123
- package/esm2015/public-api.js +0 -7
- package/esm5/acorex-layout.js +0 -7
- package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +0 -52
- package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.module.js +0 -22
- package/esm5/lib/widget-board/widget-board.component.js +0 -494
- package/esm5/lib/widget-board/widget-board.module.js +0 -68
- package/esm5/lib/widget-board/widget-config.component.js +0 -90
- package/esm5/lib/widget-board/widget-host.component.js +0 -359
- package/esm5/lib/widget-board/widget-save.component.js +0 -83
- package/esm5/lib/widget-board/widget.class.js +0 -134
- package/esm5/public-api.js +0 -7
- package/fesm2015/acorex-layout.js +0 -1177
- package/fesm2015/acorex-layout.js.map +0 -1
- package/fesm5/acorex-layout.js +0 -1264
- package/fesm5/acorex-layout.js.map +0 -1
@@ -0,0 +1,111 @@
|
|
1
|
+
import { NgModule } from '@angular/core';
|
2
|
+
import { AXWidgetBoardComponent } from './widget-board.component';
|
3
|
+
import { CommonModule } from '@angular/common';
|
4
|
+
import { AXWidgetHostComponent } from './widget-host.component';
|
5
|
+
import { AXSearchBoxModule, AXLoadingModule, AXProppertyEditorModule, AXPageModule, AXLabelModule, AXToolbarModule, AXTabStripModule, AXMenuModule, AXFormGroupModule, AXTextAreaModule, AXTextBoxModule, AXFieldsetModule, AXCheckBoxModule, AXValidationModule } from '@acorex/components';
|
6
|
+
import { RouterModule } from '@angular/router';
|
7
|
+
import { AXWidgetConfigComponent } from './widget-config.component';
|
8
|
+
import { AXTranslator, AXTranslatorModule } from '@acorex/core';
|
9
|
+
import { AXWidgetSizePropertyEditorComponent } from './editors/widget-size-editor/widget-size.editor';
|
10
|
+
import { AXWidgetSaveComponent } from './widget-save.component';
|
11
|
+
import * as i0 from "@angular/core";
|
12
|
+
import * as i1 from "@angular/router";
|
13
|
+
export class AXWidgetBoardModule {
|
14
|
+
/**
|
15
|
+
*
|
16
|
+
*/
|
17
|
+
constructor() {
|
18
|
+
AXTranslator.load('en', {
|
19
|
+
'widget-board': {
|
20
|
+
'configurable-props': 'Configurable Properties',
|
21
|
+
configure: 'Configure Widget'
|
22
|
+
}
|
23
|
+
});
|
24
|
+
AXTranslator.load('fa', {
|
25
|
+
'widget-board': {
|
26
|
+
'configurable-props': 'ویژگی های قابل تنظیم',
|
27
|
+
configure: 'پیکر بندی ابزارک'
|
28
|
+
}
|
29
|
+
});
|
30
|
+
}
|
31
|
+
}
|
32
|
+
AXWidgetBoardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetBoardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
33
|
+
AXWidgetBoardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetBoardModule, declarations: [AXWidgetBoardComponent, AXWidgetHostComponent, AXWidgetConfigComponent, AXWidgetSaveComponent], imports: [CommonModule,
|
34
|
+
AXSearchBoxModule,
|
35
|
+
AXLoadingModule,
|
36
|
+
RouterModule,
|
37
|
+
AXProppertyEditorModule,
|
38
|
+
AXPageModule,
|
39
|
+
AXToolbarModule,
|
40
|
+
AXTranslatorModule,
|
41
|
+
AXLabelModule,
|
42
|
+
AXTextAreaModule,
|
43
|
+
AXFieldsetModule,
|
44
|
+
AXTextBoxModule,
|
45
|
+
AXFormGroupModule,
|
46
|
+
AXTabStripModule,
|
47
|
+
AXCheckBoxModule,
|
48
|
+
AXMenuModule,
|
49
|
+
AXTranslatorModule,
|
50
|
+
AXValidationModule, i1.RouterModule], exports: [AXWidgetBoardComponent, AXProppertyEditorModule] });
|
51
|
+
AXWidgetBoardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetBoardModule, providers: [], imports: [[
|
52
|
+
CommonModule,
|
53
|
+
AXSearchBoxModule,
|
54
|
+
AXLoadingModule,
|
55
|
+
RouterModule,
|
56
|
+
AXProppertyEditorModule,
|
57
|
+
AXPageModule,
|
58
|
+
AXToolbarModule,
|
59
|
+
AXTranslatorModule,
|
60
|
+
AXLabelModule,
|
61
|
+
AXTextAreaModule,
|
62
|
+
AXFieldsetModule,
|
63
|
+
AXTextBoxModule,
|
64
|
+
AXFormGroupModule,
|
65
|
+
AXTabStripModule,
|
66
|
+
AXCheckBoxModule,
|
67
|
+
AXMenuModule,
|
68
|
+
AXTranslatorModule,
|
69
|
+
AXValidationModule,
|
70
|
+
RouterModule.forChild([
|
71
|
+
{
|
72
|
+
component: AXWidgetSizePropertyEditorComponent,
|
73
|
+
path: 'ax/editors/widget-size'
|
74
|
+
},
|
75
|
+
])
|
76
|
+
], AXProppertyEditorModule] });
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetBoardModule, decorators: [{
|
78
|
+
type: NgModule,
|
79
|
+
args: [{
|
80
|
+
imports: [
|
81
|
+
CommonModule,
|
82
|
+
AXSearchBoxModule,
|
83
|
+
AXLoadingModule,
|
84
|
+
RouterModule,
|
85
|
+
AXProppertyEditorModule,
|
86
|
+
AXPageModule,
|
87
|
+
AXToolbarModule,
|
88
|
+
AXTranslatorModule,
|
89
|
+
AXLabelModule,
|
90
|
+
AXTextAreaModule,
|
91
|
+
AXFieldsetModule,
|
92
|
+
AXTextBoxModule,
|
93
|
+
AXFormGroupModule,
|
94
|
+
AXTabStripModule,
|
95
|
+
AXCheckBoxModule,
|
96
|
+
AXMenuModule,
|
97
|
+
AXTranslatorModule,
|
98
|
+
AXValidationModule,
|
99
|
+
RouterModule.forChild([
|
100
|
+
{
|
101
|
+
component: AXWidgetSizePropertyEditorComponent,
|
102
|
+
path: 'ax/editors/widget-size'
|
103
|
+
},
|
104
|
+
])
|
105
|
+
],
|
106
|
+
exports: [AXWidgetBoardComponent, AXProppertyEditorModule],
|
107
|
+
declarations: [AXWidgetBoardComponent, AXWidgetHostComponent, AXWidgetConfigComponent, AXWidgetSaveComponent],
|
108
|
+
providers: []
|
109
|
+
}]
|
110
|
+
}], ctorParameters: function () { return []; } });
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWJvYXJkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9sYXlvdXQvc3JjL2xpYi93aWRnZXQtYm9hcmQvd2lkZ2V0LWJvYXJkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsWUFBWSxFQUFFLGFBQWEsRUFDM0IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFDNUYsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBaUNoRSxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCOztPQUVHO0lBQ0g7UUFDSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNwQixjQUFjLEVBQUU7Z0JBQ1osb0JBQW9CLEVBQUUseUJBQXlCO2dCQUMvQyxTQUFTLEVBQUUsa0JBQWtCO2FBQ2hDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDcEIsY0FBYyxFQUFFO2dCQUNaLG9CQUFvQixFQUFFLHNCQUFzQjtnQkFDNUMsU0FBUyxFQUFFLGtCQUFrQjthQUNoQztTQUNKLENBQUMsQ0FBQztJQUVQLENBQUM7O2dIQWxCUSxtQkFBbUI7aUhBQW5CLG1CQUFtQixpQkFIYixzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsYUExQnhHLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLFlBQVk7UUFDWix1QkFBdUI7UUFDdkIsWUFBWTtRQUNaLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsa0JBQWtCLDhCQVFaLHNCQUFzQixFQUFFLHVCQUF1QjtpSEFJaEQsbUJBQW1CLGFBRmpCLEVBQUUsWUE1Qko7WUFDTCxZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixZQUFZO1lBQ1osdUJBQXVCO1lBQ3ZCLFlBQVk7WUFDWixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQixZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUNsQjtvQkFDSSxTQUFTLEVBQUUsbUNBQW1DO29CQUM5QyxJQUFJLEVBQUUsd0JBQXdCO2lCQUNqQzthQUNKLENBQUM7U0FDTCxFQUNpQyx1QkFBdUI7MkZBSWhELG1CQUFtQjtrQkEvQi9CLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2QixZQUFZO3dCQUNaLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLFlBQVksQ0FBQyxRQUFRLENBQUM7NEJBQ2xCO2dDQUNJLFNBQVMsRUFBRSxtQ0FBbUM7Z0NBQzlDLElBQUksRUFBRSx3QkFBd0I7NkJBQ2pDO3lCQUNKLENBQUM7cUJBQ0w7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUM7b0JBQzFELFlBQVksRUFBRSxDQUFDLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDO29CQUM3RyxTQUFTLEVBQUUsRUFBRTtpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldEJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtYm9hcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQVhXaWRnZXRIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXHJcbiAgICBBWExvYWRpbmdNb2R1bGUsXHJcbiAgICBBWFByb3BwZXJ0eUVkaXRvck1vZHVsZSxcclxuICAgIEFYUGFnZU1vZHVsZSwgQVhMYWJlbE1vZHVsZSxcclxuICAgIEFYVG9vbGJhck1vZHVsZSxcclxuICAgIEFYVGFiU3RyaXBNb2R1bGUsXHJcbiAgICBBWE1lbnVNb2R1bGUsXHJcbiAgICBBWEZvcm1Hcm91cE1vZHVsZSxcclxuICAgIEFYVGV4dEFyZWFNb2R1bGUsIEFYVGV4dEJveE1vZHVsZSwgQVhGaWVsZHNldE1vZHVsZSwgQVhDaGVja0JveE1vZHVsZSwgQVhWYWxpZGF0aW9uTW9kdWxlXHJcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQVhXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhUcmFuc2xhdG9yLCBBWFRyYW5zbGF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldFNpemVQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vZWRpdG9ycy93aWRnZXQtc2l6ZS1lZGl0b3Ivd2lkZ2V0LXNpemUuZWRpdG9yJztcclxuaW1wb3J0IHsgQVhXaWRnZXRTaXplUHJvcGVydHlFZGl0b3JNb2R1bGUgfSBmcm9tICcuL2VkaXRvcnMvd2lkZ2V0LXNpemUtZWRpdG9yL3dpZGdldC1zaXplLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFYV2lkZ2V0U2F2ZUNvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LXNhdmUuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEFYU2VhcmNoQm94TW9kdWxlLFxyXG4gICAgICAgIEFYTG9hZGluZ01vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICAgICAgQVhQcm9wcGVydHlFZGl0b3JNb2R1bGUsXHJcbiAgICAgICAgQVhQYWdlTW9kdWxlLFxyXG4gICAgICAgIEFYVG9vbGJhck1vZHVsZSxcclxuICAgICAgICBBWFRyYW5zbGF0b3JNb2R1bGUsXHJcbiAgICAgICAgQVhMYWJlbE1vZHVsZSxcclxuICAgICAgICBBWFRleHRBcmVhTW9kdWxlLFxyXG4gICAgICAgIEFYRmllbGRzZXRNb2R1bGUsXHJcbiAgICAgICAgQVhUZXh0Qm94TW9kdWxlLFxyXG4gICAgICAgIEFYRm9ybUdyb3VwTW9kdWxlLFxyXG4gICAgICAgIEFYVGFiU3RyaXBNb2R1bGUsXHJcbiAgICAgICAgQVhDaGVja0JveE1vZHVsZSxcclxuICAgICAgICBBWE1lbnVNb2R1bGUsXHJcbiAgICAgICAgQVhUcmFuc2xhdG9yTW9kdWxlLFxyXG4gICAgICAgIEFYVmFsaWRhdGlvbk1vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEFYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJ2F4L2VkaXRvcnMvd2lkZ2V0LXNpemUnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSlcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbQVhXaWRnZXRCb2FyZENvbXBvbmVudCwgQVhQcm9wcGVydHlFZGl0b3JNb2R1bGVdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbQVhXaWRnZXRCb2FyZENvbXBvbmVudCwgQVhXaWRnZXRIb3N0Q29tcG9uZW50LCBBWFdpZGdldENvbmZpZ0NvbXBvbmVudCwgQVhXaWRnZXRTYXZlQ29tcG9uZW50XSxcclxuICAgIHByb3ZpZGVyczogW11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFYV2lkZ2V0Qm9hcmRNb2R1bGUge1xyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBBWFRyYW5zbGF0b3IubG9hZCgnZW4nLCB7XHJcbiAgICAgICAgICAgICd3aWRnZXQtYm9hcmQnOiB7XHJcbiAgICAgICAgICAgICAgICAnY29uZmlndXJhYmxlLXByb3BzJzogJ0NvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzJyxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZTogJ0NvbmZpZ3VyZSBXaWRnZXQnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBBWFRyYW5zbGF0b3IubG9hZCgnZmEnLCB7XHJcbiAgICAgICAgICAgICd3aWRnZXQtYm9hcmQnOiB7XHJcbiAgICAgICAgICAgICAgICAnY29uZmlndXJhYmxlLXByb3BzJzogJ9mI24zamNqv24wg2YfYp9uMINmC2KfYqNmEINiq2YbYuNuM2YUnLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJlOiAn2b7bjNqp2LEg2KjZhtiv24wg2KfYqNiy2KfYsdqpJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { Component, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild } from '@angular/core';
|
2
|
+
import { AXBasePopupPageComponent, AXValidationFormComponent } from '@acorex/components';
|
3
|
+
import { AXTranslator } from '@acorex/core';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
import * as i1 from "@acorex/components";
|
6
|
+
import * as i2 from "@angular/common";
|
7
|
+
import * as i3 from "@acorex/core";
|
8
|
+
export class AXWidgetConfigComponent extends AXBasePopupPageComponent {
|
9
|
+
constructor(cdr) {
|
10
|
+
super();
|
11
|
+
this.cdr = cdr;
|
12
|
+
this.props = [];
|
13
|
+
this.displayProps = [];
|
14
|
+
this.changes = [];
|
15
|
+
this.context = {};
|
16
|
+
}
|
17
|
+
getFooterButtons() {
|
18
|
+
return [
|
19
|
+
{
|
20
|
+
name: 'okay',
|
21
|
+
submitBehavior: true,
|
22
|
+
text: AXTranslator.get('common.confirm'),
|
23
|
+
style: 'success'
|
24
|
+
},
|
25
|
+
{
|
26
|
+
name: 'cancel',
|
27
|
+
cancelBehavior: true,
|
28
|
+
text: AXTranslator.get('common.cancel'),
|
29
|
+
style: 'danger blank'
|
30
|
+
}
|
31
|
+
];
|
32
|
+
}
|
33
|
+
onFooterButtonClick(e) {
|
34
|
+
if (e.name === 'cancel') {
|
35
|
+
this.close();
|
36
|
+
}
|
37
|
+
if (e.name === 'okay') {
|
38
|
+
this.form.validate().then(c => {
|
39
|
+
if (c.result) {
|
40
|
+
this.close(this.changes);
|
41
|
+
}
|
42
|
+
});
|
43
|
+
}
|
44
|
+
}
|
45
|
+
handleValueChange(e) {
|
46
|
+
const prop = this.changes.find(c => c.property.name === e.property.name);
|
47
|
+
if (prop) {
|
48
|
+
prop.value = e.value;
|
49
|
+
}
|
50
|
+
else {
|
51
|
+
this.changes.push({ property: e.property, value: e.value });
|
52
|
+
}
|
53
|
+
this.updateContext();
|
54
|
+
}
|
55
|
+
ngOnInit() {
|
56
|
+
this.displayProps = this.props.filter(c => c.property.visible !== false).sort((a, b) => a.property.order - b.property.order);
|
57
|
+
this.updateContext();
|
58
|
+
}
|
59
|
+
updateContext() {
|
60
|
+
const ctx = {};
|
61
|
+
this.props.forEach(p => {
|
62
|
+
ctx[p.property.name] = p.value;
|
63
|
+
});
|
64
|
+
this.changes.forEach(p => {
|
65
|
+
ctx[p.property.name] = p.value;
|
66
|
+
});
|
67
|
+
this.context = ctx;
|
68
|
+
}
|
69
|
+
identify(index, item) {
|
70
|
+
return item.property.name;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
AXWidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetConfigComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
74
|
+
AXWidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: AXWidgetConfigComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: AXValidationFormComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ax-page>\r\n <ax-page-content>\r\n <div class=\"container\">\r\n <ax-validation-form #form>\r\n <div class=\"row\" *ngFor=\"let p of displayProps; trackBy: identify\">\r\n <div class=\"col-12\">\r\n <ax-label>{{p.property.title | trans}}</ax-label>\r\n <ng-container ax-property-editor-renderer [property]=\"p\" [context]=\"context\" [host]=\"widget\" [validationForm]=\"form\"\r\n (onValueChange)=\"handleValueChange($event)\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ax-validation-form>\r\n </div>\r\n </ax-page-content>\r\n</ax-page>", components: [{ type: i1.AXPageComponent, selector: "ax-page" }, { type: i1.AXPageContentComponent, selector: "ax-page-content" }, { type: i1.AXValidationFormComponent, selector: "ax-validation-form", inputs: ["validateOn"], outputs: ["onInit"] }, { type: i1.AXLabelComponent, selector: "ax-label", inputs: ["size"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.AXPropertyEditorRendererDirective, selector: "[ax-property-editor-renderer]", inputs: ["property", "validationForm", "context", "host", "groupId"], outputs: ["onValueChange"] }], pipes: { "trans": i3.AXTranslatorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetConfigComponent, decorators: [{
|
76
|
+
type: Component,
|
77
|
+
args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-page>\r\n <ax-page-content>\r\n <div class=\"container\">\r\n <ax-validation-form #form>\r\n <div class=\"row\" *ngFor=\"let p of displayProps; trackBy: identify\">\r\n <div class=\"col-12\">\r\n <ax-label>{{p.property.title | trans}}</ax-label>\r\n <ng-container ax-property-editor-renderer [property]=\"p\" [context]=\"context\" [host]=\"widget\" [validationForm]=\"form\"\r\n (onValueChange)=\"handleValueChange($event)\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ax-validation-form>\r\n </div>\r\n </ax-page-content>\r\n</ax-page>" }]
|
78
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { form: [{
|
79
|
+
type: ViewChild,
|
80
|
+
args: [AXValidationFormComponent]
|
81
|
+
}] } });
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvbGF5b3V0L3NyYy9saWIvd2lkZ2V0LWJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2xheW91dC9zcmMvbGliL3dpZGdldC1ib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBb0Isd0JBQXdCLEVBQXlELHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEssT0FBTyxFQUFnQixZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBVTFELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx3QkFBd0I7SUFJakUsWUFBb0IsR0FBc0I7UUFDdEMsS0FBSyxFQUFFLENBQUM7UUFEUSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQU0xQyxVQUFLLEdBQXVCLEVBQUUsQ0FBQztRQUMvQixpQkFBWSxHQUF1QixFQUFFLENBQUM7UUFHdEMsWUFBTyxHQUF1QixFQUFFLENBQUM7UUFFakMsWUFBTyxHQUFRLEVBQUUsQ0FBQztJQVZsQixDQUFDO0lBYUQsZ0JBQWdCO1FBQ1osT0FBTztZQUNIO2dCQUNJLElBQUksRUFBRSxNQUFNO2dCQUNaLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDeEMsS0FBSyxFQUFFLFNBQVM7YUFDbkI7WUFDRDtnQkFDSSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxjQUFjLEVBQUUsSUFBSTtnQkFDcEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN2QyxLQUFLLEVBQUUsY0FBYzthQUN4QjtTQUNKLENBQUM7SUFDTixDQUFDO0lBTUQsbUJBQW1CLENBQUMsQ0FBdUI7UUFDdkMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzVCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxDQUFrQztRQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDeEI7YUFDSTtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFHTyxhQUFhO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUdELFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBc0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDOztvSEFwRlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMEZBRXJCLHlCQUF5Qix1RUNkeEMsa3ZCQWVVOzJGREhHLHVCQUF1QjtrQkFObkMsU0FBUztvQ0FFUyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUtULElBQUk7c0JBQXpDLFNBQVM7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQVhQcm9wZXJ0eUNvbmZpZywgQVhCYXNlUG9wdXBQYWdlQ29tcG9uZW50LCBBWE1lbnVJdGVtQ2xpY2tFdmVudCwgQVhQcm9wZXJ5RWRpdG9yVmFsdWVDaGFuZ2VFdmVudCwgQVhWYWxpZGF0aW9uRm9ybUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IEFYQnV0dG9uSXRlbSwgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgQVhXaWRnZXRDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC5jbGFzcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBWFdpZGdldENvbmZpZ0NvbXBvbmVudCBleHRlbmRzIEFYQmFzZVBvcHVwUGFnZUNvbXBvbmVudCB7XHJcblxyXG4gICAgQFZpZXdDaGlsZChBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50KSBmb3JtOiBBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHdpZGdldDogQVhXaWRnZXRDb21wb25lbnQ7XHJcbiAgICBwcm9wczogQVhQcm9wZXJ0eUNvbmZpZ1tdID0gW107XHJcbiAgICBkaXNwbGF5UHJvcHM6IEFYUHJvcGVydHlDb25maWdbXSA9IFtdO1xyXG5cclxuXHJcbiAgICBjaGFuZ2VzOiBBWFByb3BlcnR5Q29uZmlnW10gPSBbXTtcclxuXHJcbiAgICBjb250ZXh0OiBhbnkgPSB7fTtcclxuXHJcblxyXG4gICAgZ2V0Rm9vdGVyQnV0dG9ucygpOiBBWEJ1dHRvbkl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ29rYXknLFxyXG4gICAgICAgICAgICAgICAgc3VibWl0QmVoYXZpb3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdjb21tb24uY29uZmlybScpLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJlaGF2aW9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLmNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdkYW5nZXIgYmxhbmsnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBvbkZvb3RlckJ1dHRvbkNsaWNrKGU6IEFYTWVudUl0ZW1DbGlja0V2ZW50KSB7XHJcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZS5uYW1lID09PSAnb2theScpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnZhbGlkYXRlKCkudGhlbihjID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjLnJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UodGhpcy5jaGFuZ2VzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVZhbHVlQ2hhbmdlKGU6IEFYUHJvcGVyeUVkaXRvclZhbHVlQ2hhbmdlRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gdGhpcy5jaGFuZ2VzLmZpbmQoYyA9PiBjLnByb3BlcnR5Lm5hbWUgPT09IGUucHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgcHJvcC52YWx1ZSA9IGUudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMucHVzaCh7IHByb3BlcnR5OiBlLnByb3BlcnR5LCB2YWx1ZTogZS52YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVDb250ZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5UHJvcHMgPSB0aGlzLnByb3BzLmZpbHRlcihjID0+IGMucHJvcGVydHkudmlzaWJsZSAhPT0gZmFsc2UpLnNvcnQoKGEsIGIpID0+IGEucHJvcGVydHkub3JkZXIgLSBiLnByb3BlcnR5Lm9yZGVyKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRleHQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb250ZXh0KCkge1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IHt9O1xyXG4gICAgICAgIHRoaXMucHJvcHMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgY3R4W3AucHJvcGVydHkubmFtZV0gPSBwLnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICBjdHhbcC5wcm9wZXJ0eS5uYW1lXSA9IHAudmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY3R4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZGVudGlmeShpbmRleCwgaXRlbTogQVhQcm9wZXJ0eUNvbmZpZykge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnByb3BlcnR5Lm5hbWU7XHJcbiAgICB9XHJcblxyXG59IiwiPGF4LXBhZ2U+XHJcbiAgICA8YXgtcGFnZS1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGF4LXZhbGlkYXRpb24tZm9ybSAjZm9ybT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgcCBvZiBkaXNwbGF5UHJvcHM7IHRyYWNrQnk6IGlkZW50aWZ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtbGFiZWw+e3twLnByb3BlcnR5LnRpdGxlIHwgdHJhbnN9fTwvYXgtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgYXgtcHJvcGVydHktZWRpdG9yLXJlbmRlcmVyIFtwcm9wZXJ0eV09XCJwXCIgW2NvbnRleHRdPVwiY29udGV4dFwiIFtob3N0XT1cIndpZGdldFwiICBbdmFsaWRhdGlvbkZvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZSk9XCJoYW5kbGVWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYXgtdmFsaWRhdGlvbi1mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9heC1wYWdlLWNvbnRlbnQ+XHJcbjwvYXgtcGFnZT4iXX0=
|
@@ -0,0 +1,290 @@
|
|
1
|
+
import { Component, ViewEncapsulation, Input, ElementRef, HostBinding, ComponentFactoryResolver, ViewChild, ViewContainerRef, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
|
2
|
+
import { AXObjectUtil, AXRenderService } from '@acorex/core';
|
3
|
+
import { AXPopupService, AXPropertyDecorators, AXLoadingService } from '@acorex/components';
|
4
|
+
import { AXWidgetConfigComponent } from './widget-config.component';
|
5
|
+
import { AXTranslator } from '@acorex/core';
|
6
|
+
import { AXWidgetSaveComponent } from './widget-save.component';
|
7
|
+
import * as i0 from "@angular/core";
|
8
|
+
import * as i1 from "@acorex/core";
|
9
|
+
import * as i2 from "@acorex/components";
|
10
|
+
import * as i3 from "@angular/common";
|
11
|
+
export class AXWidgetHostComponent {
|
12
|
+
constructor(ref, componentFactoryResolver, rendererService, cdr, popup, loadingService) {
|
13
|
+
this.ref = ref;
|
14
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
15
|
+
this.rendererService = rendererService;
|
16
|
+
this.cdr = cdr;
|
17
|
+
this.popup = popup;
|
18
|
+
this.loadingService = loadingService;
|
19
|
+
this._hasProps = false;
|
20
|
+
this._hasMenu = false;
|
21
|
+
this.configMenuItem = [
|
22
|
+
{
|
23
|
+
icon: 'far fa-ellipsis-h',
|
24
|
+
items: []
|
25
|
+
}
|
26
|
+
];
|
27
|
+
this.onRemove = new EventEmitter();
|
28
|
+
this.onConfigChanged = new EventEmitter();
|
29
|
+
this.onResized = new EventEmitter();
|
30
|
+
this.onSave = new EventEmitter();
|
31
|
+
this._isLoading = false;
|
32
|
+
this.sizeX = 1;
|
33
|
+
this.sizeY = 1;
|
34
|
+
this.col = 1;
|
35
|
+
this.row = 1;
|
36
|
+
}
|
37
|
+
get widget() {
|
38
|
+
return this._widget;
|
39
|
+
}
|
40
|
+
get element() {
|
41
|
+
return this.ref.nativeElement;
|
42
|
+
}
|
43
|
+
get isLoading() {
|
44
|
+
return this._isLoading;
|
45
|
+
}
|
46
|
+
set isLoading(v) {
|
47
|
+
this._isLoading = v;
|
48
|
+
if (this._loadingId && !v) {
|
49
|
+
this.loadingService.hide(this._loadingId);
|
50
|
+
this._loadingId = null;
|
51
|
+
}
|
52
|
+
if (v) {
|
53
|
+
this._loadingId = this.loadingService.show(this.ref.nativeElement);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
get isConfigured() {
|
57
|
+
return this._widget?.isConfigured || false;
|
58
|
+
}
|
59
|
+
ngOnInit() {
|
60
|
+
this.isLoading = true;
|
61
|
+
}
|
62
|
+
async ngAfterViewInit() {
|
63
|
+
let component;
|
64
|
+
if (typeof this.config.component === 'string') {
|
65
|
+
const route = await this.rendererService.findLoadedComponentByRoute(this.config.component, 20);
|
66
|
+
component = route?.component;
|
67
|
+
}
|
68
|
+
else if (typeof this.config.component === 'function') {
|
69
|
+
component = this.config.component;
|
70
|
+
}
|
71
|
+
if (component == null) {
|
72
|
+
console.error(`Invalid Widget Component!`, this.config);
|
73
|
+
this.onRemove.emit(this);
|
74
|
+
return;
|
75
|
+
}
|
76
|
+
const widgetFactory = this.componentFactoryResolver.resolveComponentFactory(component);
|
77
|
+
this.componentRef = this.vc.createComponent(widgetFactory);
|
78
|
+
this._widget = this.componentRef.instance;
|
79
|
+
this._widget.provideValue = this.provideValue;
|
80
|
+
if (this._widget.onBusyChanged) {
|
81
|
+
this._widget.onBusyChanged.subscribe((d) => {
|
82
|
+
if (!this._widget.widgetSize) {
|
83
|
+
this._widget.setValue('widgetSize', [this.sizeX, this.sizeY]);
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
this.setSizeFromOptions();
|
87
|
+
}
|
88
|
+
this.isLoading = d.value;
|
89
|
+
this.cdr.detectChanges();
|
90
|
+
});
|
91
|
+
}
|
92
|
+
if (this._widget.onConfiguredChanged) {
|
93
|
+
this._widget.onConfiguredChanged.subscribe(() => {
|
94
|
+
this.setSizeFromOptions();
|
95
|
+
});
|
96
|
+
}
|
97
|
+
//
|
98
|
+
if (this.config.options) {
|
99
|
+
Object.assign(this._widget, this.config.options);
|
100
|
+
}
|
101
|
+
this._hasProps = AXPropertyDecorators.getProperties(this._widget).length > 0;
|
102
|
+
this.isLoading = false;
|
103
|
+
this.config['__meta__'].instance = this;
|
104
|
+
this._widget['__meta__'] = {};
|
105
|
+
this._widget['__meta__'].config = this.config;
|
106
|
+
//
|
107
|
+
this.configMenuItem[0].items.push({
|
108
|
+
name: 'refresh',
|
109
|
+
icon: 'far fa-undo',
|
110
|
+
text: AXTranslator.get('common.refresh'),
|
111
|
+
onClick: () => {
|
112
|
+
this?.widget?.refresh();
|
113
|
+
}
|
114
|
+
});
|
115
|
+
//
|
116
|
+
if (this._hasProps) {
|
117
|
+
this.configMenuItem[0].items.push({
|
118
|
+
name: 'configs',
|
119
|
+
icon: 'far fa-cogs',
|
120
|
+
text: AXTranslator.get('common.configs'),
|
121
|
+
onClick: () => {
|
122
|
+
this.openConfigDialog();
|
123
|
+
}
|
124
|
+
});
|
125
|
+
}
|
126
|
+
this.configMenuItem[0].items.push({
|
127
|
+
name: 'save',
|
128
|
+
icon: 'far fa-save',
|
129
|
+
text: AXTranslator.get('common.save-as'),
|
130
|
+
onClick: () => {
|
131
|
+
this.openSaveDialog();
|
132
|
+
}
|
133
|
+
});
|
134
|
+
if (true) {
|
135
|
+
this.configMenuItem[0].items.push({
|
136
|
+
name: 'remove',
|
137
|
+
icon: 'far fa-times',
|
138
|
+
style: 'ax danger blank',
|
139
|
+
text: AXTranslator.get('common.remove'),
|
140
|
+
onClick: () => {
|
141
|
+
this.onRemove.emit(this);
|
142
|
+
}
|
143
|
+
});
|
144
|
+
}
|
145
|
+
this._hasMenu = this.configMenuItem[0].items.length > 0;
|
146
|
+
this.cdr.detectChanges();
|
147
|
+
}
|
148
|
+
setSizeFromOptions() {
|
149
|
+
this._widget.getValue('widgetSize').then(c => {
|
150
|
+
const oldSizeX = this.sizeX;
|
151
|
+
const oldSizeY = this.sizeY;
|
152
|
+
if (c && Array.isArray(c) && (oldSizeX !== c[0] || oldSizeY !== c[1])) {
|
153
|
+
this.config.sizeX = this.sizeX = c[0];
|
154
|
+
this.config.sizeY = this.sizeY = c[1];
|
155
|
+
this.onResized.emit({
|
156
|
+
component: this._widget,
|
157
|
+
config: this.config
|
158
|
+
});
|
159
|
+
}
|
160
|
+
this.cdr.detectChanges();
|
161
|
+
});
|
162
|
+
}
|
163
|
+
remove(e) {
|
164
|
+
e.preventDefault();
|
165
|
+
e.stopPropagation();
|
166
|
+
this.onRemove.emit(this);
|
167
|
+
return false;
|
168
|
+
}
|
169
|
+
handleConfig(e) {
|
170
|
+
e.preventDefault();
|
171
|
+
e.stopPropagation();
|
172
|
+
this.openConfigDialog();
|
173
|
+
return false;
|
174
|
+
}
|
175
|
+
openConfigDialog() {
|
176
|
+
const ppp = this.getMergedProps();
|
177
|
+
this.popup.open(AXWidgetConfigComponent, {
|
178
|
+
title: AXTranslator.get('common.configs'),
|
179
|
+
size: 'sm',
|
180
|
+
data: {
|
181
|
+
props: ppp.map(c => ({ property: c.options, value: this._widget[c.options.name] })),
|
182
|
+
widget: this.widget
|
183
|
+
}
|
184
|
+
}).then(c => {
|
185
|
+
if (c.data) {
|
186
|
+
if (!this.config.options) {
|
187
|
+
this.config.options = {};
|
188
|
+
}
|
189
|
+
c.data.forEach(p => {
|
190
|
+
this._widget.setValue(p.property.name, p.value);
|
191
|
+
this.config.options[p.property.name] = p.value;
|
192
|
+
});
|
193
|
+
this.emitConfigChanged();
|
194
|
+
this._widget.redraw();
|
195
|
+
this.cdr.detectChanges();
|
196
|
+
}
|
197
|
+
});
|
198
|
+
}
|
199
|
+
openSaveDialog() {
|
200
|
+
const ppp = this.getMergedProps();
|
201
|
+
this.popup.open(AXWidgetSaveComponent, {
|
202
|
+
title: AXTranslator.get('common.save-as'),
|
203
|
+
size: 'sm',
|
204
|
+
data: {
|
205
|
+
config: this.config,
|
206
|
+
props: ppp.map(c => ({ property: c.options, value: this._widget[c.options.name] }))
|
207
|
+
}
|
208
|
+
}).then(c => {
|
209
|
+
if (c.data) {
|
210
|
+
this.onSave.emit({
|
211
|
+
component: this._widget,
|
212
|
+
data: c.data
|
213
|
+
});
|
214
|
+
}
|
215
|
+
});
|
216
|
+
}
|
217
|
+
handleOptionClick(e) {
|
218
|
+
e.preventDefault();
|
219
|
+
e.stopPropagation();
|
220
|
+
this.openConfigDialog();
|
221
|
+
return false;
|
222
|
+
}
|
223
|
+
ngOnDestroy() {
|
224
|
+
this.vc.clear();
|
225
|
+
if (this.componentRef) {
|
226
|
+
this.componentRef.destroy();
|
227
|
+
}
|
228
|
+
}
|
229
|
+
getMergedProps() {
|
230
|
+
const ppp = AXObjectUtil.deepCopy(AXPropertyDecorators.getProperties(this._widget));
|
231
|
+
for (const key in this.config.props) {
|
232
|
+
if (Object.prototype.hasOwnProperty.call(this.config.props, key)) {
|
233
|
+
const newP = this.config.props[key];
|
234
|
+
const existPropDec = ppp.find(p => p.property === key);
|
235
|
+
if (existPropDec) {
|
236
|
+
Object.assign(existPropDec.options, newP);
|
237
|
+
}
|
238
|
+
}
|
239
|
+
}
|
240
|
+
return ppp;
|
241
|
+
}
|
242
|
+
emitConfigChanged() {
|
243
|
+
this.onConfigChanged.emit({
|
244
|
+
component: this._widget,
|
245
|
+
config: this.config
|
246
|
+
});
|
247
|
+
}
|
248
|
+
}
|
249
|
+
AXWidgetHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetHostComponent, deps: [{ token: i0.ElementRef }, { token: i0.ComponentFactoryResolver }, { token: i1.AXRenderService }, { token: i0.ChangeDetectorRef }, { token: i2.AXPopupService }, { token: i2.AXLoadingService }], target: i0.ɵɵFactoryTarget.Component });
|
250
|
+
AXWidgetHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: AXWidgetHostComponent, selector: "ax-widget-host", inputs: { provideValue: "provideValue", config: "config", sizeX: "sizeX", sizeY: "sizeY", col: "col", row: "row" }, outputs: { onRemove: "onRemove", onConfigChanged: "onConfigChanged", onResized: "onResized", onSave: "onSave" }, host: { attributes: { "tabindex": "0" }, properties: { "attr.data-size-x": "this.sizeX", "attr.data-size-y": "this.sizeY", "attr.data-col": "this.col", "attr.data-row": "this.row" }, classAttribute: "ax widget-host" }, viewQueries: [{ propertyName: "vc", first: true, predicate: ["vc"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class='widget-container'>\r\n <div class=\"widget-config-overlay\" *ngIf=\"!isConfigured\" (click)=\"handleConfig($event)\">\r\n <div class=\"widget-title\">{{config.title}}</div>\r\n <div class=\"widget-config-box\">\r\n <div class=\"config-title\">{{ 'widget-board.configure' | trans}}</div>\r\n <div class=\"config-icon\"><i class=\"fas fa-cogs fa-5x\" aria-hidden=\"true\"></i></div>\r\n </div>\r\n </div>\r\n <div class='widget-edit-overlay'>\r\n <div class='widget-edit-menu'>\r\n <button class=\"widget-edit-menu-button\" (click)=\"handleConfig($event)\"\r\n (mousedown)=\"$event.stopPropagation()\" *ngIf=\"_hasProps\" (mouseup)=\"$event.stopPropagation()\">\r\n <i class=\"far fa-cogs\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button class=\"widget-edit-menu-button\" (click)=\"remove($event)\" (mousedown)=\"$event.stopPropagation()\"\r\n (mouseup)=\"$event.stopPropagation()\">\r\n <i class=\"far fa-times\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <div class=\"widget-options-menu\" *ngIf=\"_hasMenu\">\r\n <ax-menu [items]='configMenuItem' direction=\"horizontal\"></ax-menu>\r\n </div>\r\n <!-- <ax-loading-panel [visible]=\"isBusy\">\r\n </ax-loading-panel> -->\r\n <div class=\"widget-content\">\r\n <ng-container #vc></ng-container>\r\n </div>\r\n</div>", components: [{ type: i2.AXMenuComponent, selector: "ax-menu", inputs: ["menuTemplate", "rtl", "size", "selection", "mode", "target", "floatAlignment", "floatPlacemnet", "direction", "items"], outputs: ["onItemClick"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "trans": i1.AXTranslatorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AXWidgetHostComponent, decorators: [{
|
252
|
+
type: Component,
|
253
|
+
args: [{ selector: 'ax-widget-host', host: { class: 'ax widget-host', tabindex: '0' }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class='widget-container'>\r\n <div class=\"widget-config-overlay\" *ngIf=\"!isConfigured\" (click)=\"handleConfig($event)\">\r\n <div class=\"widget-title\">{{config.title}}</div>\r\n <div class=\"widget-config-box\">\r\n <div class=\"config-title\">{{ 'widget-board.configure' | trans}}</div>\r\n <div class=\"config-icon\"><i class=\"fas fa-cogs fa-5x\" aria-hidden=\"true\"></i></div>\r\n </div>\r\n </div>\r\n <div class='widget-edit-overlay'>\r\n <div class='widget-edit-menu'>\r\n <button class=\"widget-edit-menu-button\" (click)=\"handleConfig($event)\"\r\n (mousedown)=\"$event.stopPropagation()\" *ngIf=\"_hasProps\" (mouseup)=\"$event.stopPropagation()\">\r\n <i class=\"far fa-cogs\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button class=\"widget-edit-menu-button\" (click)=\"remove($event)\" (mousedown)=\"$event.stopPropagation()\"\r\n (mouseup)=\"$event.stopPropagation()\">\r\n <i class=\"far fa-times\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n <div class=\"widget-options-menu\" *ngIf=\"_hasMenu\">\r\n <ax-menu [items]='configMenuItem' direction=\"horizontal\"></ax-menu>\r\n </div>\r\n <!-- <ax-loading-panel [visible]=\"isBusy\">\r\n </ax-loading-panel> -->\r\n <div class=\"widget-content\">\r\n <ng-container #vc></ng-container>\r\n </div>\r\n</div>" }]
|
254
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ComponentFactoryResolver }, { type: i1.AXRenderService }, { type: i0.ChangeDetectorRef }, { type: i2.AXPopupService }, { type: i2.AXLoadingService }]; }, propDecorators: { provideValue: [{
|
255
|
+
type: Input
|
256
|
+
}], onRemove: [{
|
257
|
+
type: Output
|
258
|
+
}], onConfigChanged: [{
|
259
|
+
type: Output
|
260
|
+
}], onResized: [{
|
261
|
+
type: Output
|
262
|
+
}], onSave: [{
|
263
|
+
type: Output
|
264
|
+
}], config: [{
|
265
|
+
type: Input
|
266
|
+
}], vc: [{
|
267
|
+
type: ViewChild,
|
268
|
+
args: ['vc', { read: ViewContainerRef }]
|
269
|
+
}], sizeX: [{
|
270
|
+
type: HostBinding,
|
271
|
+
args: ['attr.data-size-x']
|
272
|
+
}, {
|
273
|
+
type: Input
|
274
|
+
}], sizeY: [{
|
275
|
+
type: HostBinding,
|
276
|
+
args: ['attr.data-size-y']
|
277
|
+
}, {
|
278
|
+
type: Input
|
279
|
+
}], col: [{
|
280
|
+
type: HostBinding,
|
281
|
+
args: ['attr.data-col']
|
282
|
+
}, {
|
283
|
+
type: Input
|
284
|
+
}], row: [{
|
285
|
+
type: HostBinding,
|
286
|
+
args: ['attr.data-row']
|
287
|
+
}, {
|
288
|
+
type: Input
|
289
|
+
}] } });
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2xheW91dC9zcmMvbGliL3dpZGdldC1ib2FyZC93aWRnZXQtaG9zdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvbGF5b3V0L3NyYy9saWIvd2lkZ2V0LWJvYXJkL3dpZGdldC1ob3N0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQUUsS0FBSyxFQUN4QixVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFDNUQsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFDL0QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQXVCLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFjaEUsTUFBTSxPQUFPLHFCQUFxQjtJQStFOUIsWUFDWSxHQUErQixFQUMvQix3QkFBa0QsRUFDbEQsZUFBZ0MsRUFDaEMsR0FBc0IsRUFDdEIsS0FBcUIsRUFDckIsY0FBZ0M7UUFMaEMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFDL0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsUUFBRyxHQUFI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QUU7Z0JBK0kzQyxLQUFLO3NCQUZKLFdBQVc7dUJBQUMsa0JBQWtCOztzQkFDOUIsS0FBSztnQkFLTixLQUFLO3NCQUZKLFdBQVc7dUJBQUMsa0JBQWtCOztzQkFDOUIsS0FBSztnQkFLTixHQUFHO3NCQUZGLFdBQVc7dUJBQUMsZUFBZTs7c0JBQzNCLEtBQUs7Z0JBTU4sR0FBRztzQkFGRixXQUFXO3VCQUFDLGVBQWU7O3NCQUMzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCxcclxuICAgIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIFZpZXdDaGlsZCxcclxuICAgIFZpZXdDb250YWluZXJSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnRSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQVhXaWRnZXRDb25maWcsIEFYV2lkZ2V0Q29tcG9uZW50LCBBWFdpZGdldENvbmZpZ0NoYW5nZWQsIEFYV2lkZ2V0Q29uZmlnU2F2ZWRFdmVudCB9IGZyb20gJy4vd2lkZ2V0LmNsYXNzJztcclxuaW1wb3J0IHsgQVhPYmplY3RVdGlsLCBBWFJlbmRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSwgQVhQcm9wZXJ0eURlY29yYXRvcnMsIEFYUHJvcGVydHlEZWNvcmF0b3IsIEFYTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBBWFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWE1lbnVJdGVtIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgQVhXaWRnZXRTYXZlQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtc2F2ZS5jb21wb25lbnQnO1xyXG5cclxuXHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdheC13aWRnZXQtaG9zdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3dpZGdldC1ob3N0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBob3N0OiB7IGNsYXNzOiAnYXggd2lkZ2V0LWhvc3QnLCB0YWJpbmRleDogJzAnIH0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBWFdpZGdldEhvc3RDb21wb25lbnQge1xyXG5cclxuICAgIHByaXZhdGUgX3dpZGdldDogQVhXaWRnZXRDb21wb25lbnQ7XHJcbiAgICBwdWJsaWMgZ2V0IHdpZGdldCgpOiBBWFdpZGdldENvbXBvbmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZGdldDtcclxuICAgIH1cclxuXHJcbiAgICBfaGFzUHJvcHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gICAgX2hhc01lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHJvdmlkZVZhbHVlOiAoZTogYW55KSA9PiBhbnk7XHJcblxyXG5cclxuICAgIGdldCBlbGVtZW50KCk6IEhUTUxEaXZFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uZmlnTWVudUl0ZW06IEFYTWVudUl0ZW1bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGljb246ICdmYXIgZmEtZWxsaXBzaXMtaCcsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxBWFdpZGdldEhvc3RDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFdpZGdldEhvc3RDb21wb25lbnQ+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBvbkNvbmZpZ0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFdpZGdldENvbmZpZ0NoYW5nZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFdpZGdldENvbmZpZ0NoYW5nZWQ+KCk7XHJcblxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgb25SZXNpemVkOiBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdDaGFuZ2VkPiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdDaGFuZ2VkPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgb25TYXZlOiBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdTYXZlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhXaWRnZXRDb25maWdTYXZlZEV2ZW50PigpO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBjb25maWc6IEFYV2lkZ2V0Q29uZmlnO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3ZjJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgICB2YzogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT47XHJcbiAgICAvL3ByaXZhdGUgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBnZXQgaXNCdXN5KCkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl93aWRnZXQ/LmlzQnVzeSB8fCB0aGlzLmlzTG9hZGluZztcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfbG9hZGluZ0lkOiBudW1iZXI7XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpc0xvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IHY7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdJZCAmJiAhdikge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLmhpZGUodGhpcy5fbG9hZGluZ0lkKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0lkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0lkID0gdGhpcy5sb2FkaW5nU2VydmljZS5zaG93KHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0IGlzQ29uZmlndXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Py5pc0NvbmZpZ3VyZWQgfHwgZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXJTZXJ2aWNlOiBBWFJlbmRlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgcG9wdXA6IEFYUG9wdXBTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9hZGluZ1NlcnZpY2U6IEFYTG9hZGluZ1NlcnZpY2VcclxuXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGxldCBjb21wb25lbnQ6IGFueTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLmNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBhd2FpdCB0aGlzLnJlbmRlcmVyU2VydmljZS5maW5kTG9hZGVkQ29tcG9uZW50QnlSb3V0ZSh0aGlzLmNvbmZpZy5jb21wb25lbnQsIDIwKTtcclxuICAgICAgICAgICAgY29tcG9uZW50ID0gcm91dGU/LmNvbXBvbmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuY29uZmlnLmNvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb21wb25lbnQgPSB0aGlzLmNvbmZpZy5jb21wb25lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIFdpZGdldCBDb21wb25lbnQhYCwgdGhpcy5jb25maWcpO1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQodGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHdpZGdldEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52Yy5jcmVhdGVDb21wb25lbnQod2lkZ2V0RmFjdG9yeSk7XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0ID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgQVhXaWRnZXRDb21wb25lbnQ7XHJcbiAgICAgICAgdGhpcy5fd2lkZ2V0LnByb3ZpZGVWYWx1ZSA9IHRoaXMucHJvdmlkZVZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLl93aWRnZXQub25CdXN5Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93aWRnZXQub25CdXN5Q2hhbmdlZC5zdWJzY3JpYmUoKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fd2lkZ2V0LndpZGdldFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWRnZXQuc2V0VmFsdWUoJ3dpZGdldFNpemUnLCBbdGhpcy5zaXplWCwgdGhpcy5zaXplWV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTaXplRnJvbU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl93aWRnZXQub25Db25maWd1cmVkQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93aWRnZXQub25Db25maWd1cmVkQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTaXplRnJvbU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl93aWRnZXQsIHRoaXMuY29uZmlnLm9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9oYXNQcm9wcyA9IEFYUHJvcGVydHlEZWNvcmF0b3JzLmdldFByb3BlcnRpZXModGhpcy5fd2lkZ2V0KS5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnWydfX21ldGFfXyddLmluc3RhbmNlID0gdGhpcztcclxuICAgICAgICB0aGlzLl93aWRnZXRbJ19fbWV0YV9fJ10gPSB7fTtcclxuICAgICAgICB0aGlzLl93aWRnZXRbJ19fbWV0YV9fJ10uY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgLy9cclxuICAgICAgICB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiAncmVmcmVzaCcsXHJcbiAgICAgICAgICAgIGljb246ICdmYXIgZmEtdW5kbycsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5yZWZyZXNoJyksXHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXM/LndpZGdldD8ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAodGhpcy5faGFzUHJvcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWdNZW51SXRlbVswXS5pdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdjb25maWdzJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdmYXIgZmEtY29ncycsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdjb21tb24uY29uZmlncycpLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ0RpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWdNZW51SXRlbVswXS5pdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogJ3NhdmUnLFxyXG4gICAgICAgICAgICBpY29uOiAnZmFyIGZhLXNhdmUnLFxyXG4gICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdjb21tb24uc2F2ZS1hcycpLFxyXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5TYXZlRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlbW92ZScsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnZmFyIGZhLXRpbWVzJyxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiAnYXggZGFuZ2VyIGJsYW5rJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5yZW1vdmUnKSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9oYXNNZW51ID0gdGhpcy5jb25maWdNZW51SXRlbVswXS5pdGVtcy5sZW5ndGggPiAwO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zaXplLXgnKVxyXG4gICAgQElucHV0KClcclxuICAgIHNpemVYOiBudW1iZXIgPSAxO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNpemUteScpXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2l6ZVk6IG51bWJlciA9IDE7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtY29sJylcclxuICAgIEBJbnB1dCgpXHJcbiAgICBjb2w6IG51bWJlciA9IDE7XHJcblxyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXJvdycpXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcm93OiBudW1iZXIgPSAxO1xyXG5cclxuXHJcbiAgICBwcml2YXRlIHNldFNpemVGcm9tT3B0aW9ucygpIHtcclxuICAgICAgICB0aGlzLl93aWRnZXQuZ2V0VmFsdWUoJ3dpZGdldFNpemUnKS50aGVuKGMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRTaXplWCA9IHRoaXMuc2l6ZVg7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZFNpemVZID0gdGhpcy5zaXplWTtcclxuICAgICAgICAgICAgaWYgKGMgJiYgQXJyYXkuaXNBcnJheShjKSAmJiAob2xkU2l6ZVggIT09IGNbMF0gfHwgb2xkU2l6ZVkgIT09IGNbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaXplWCA9IHRoaXMuc2l6ZVggPSBjWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuc2l6ZVkgPSB0aGlzLnNpemVZID0gY1sxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25SZXNpemVkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5fd2lkZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoZTogTW91c2VFdmVudCkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMub25SZW1vdmUuZW1pdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ29uZmlnKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLm9wZW5Db25maWdEaWFsb2coKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuQ29uZmlnRGlhbG9nKCkge1xyXG4gICAgICAgIGNvbnN0IHBwcCA9IHRoaXMuZ2V0TWVyZ2VkUHJvcHMoKTtcclxuICAgICAgICB0aGlzLnBvcHVwLm9wZW4oQVhXaWRnZXRDb25maWdDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgdGl0bGU6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5jb25maWdzJyksXHJcbiAgICAgICAgICAgIHNpemU6ICdzbScsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHByb3BzOiBwcHAubWFwKGMgPT4gKHsgcHJvcGVydHk6IGMub3B0aW9ucywgdmFsdWU6IHRoaXMuX3dpZGdldFtjLm9wdGlvbnMubmFtZV0gfSkpLFxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0OiB0aGlzLndpZGdldFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihjID0+IHtcclxuICAgICAgICAgICAgaWYgKGMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYy5kYXRhLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2lkZ2V0LnNldFZhbHVlKHAucHJvcGVydHkubmFtZSwgcC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcub3B0aW9uc1twLnByb3BlcnR5Lm5hbWVdID0gcC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2lkZ2V0LnJlZHJhdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuU2F2ZURpYWxvZygpIHtcclxuICAgICAgICBjb25zdCBwcHAgPSB0aGlzLmdldE1lcmdlZFByb3BzKCk7XHJcbiAgICAgICAgdGhpcy5wb3B1cC5vcGVuKEFYV2lkZ2V0U2F2ZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB0aXRsZTogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLnNhdmUtYXMnKSxcclxuICAgICAgICAgICAgc2l6ZTogJ3NtJyxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcclxuICAgICAgICAgICAgICAgIHByb3BzOiBwcHAubWFwKGMgPT4gKHsgcHJvcGVydHk6IGMub3B0aW9ucywgdmFsdWU6IHRoaXMuX3dpZGdldFtjLm9wdGlvbnMubmFtZV0gfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS50aGVuKGMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuX3dpZGdldCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjLmRhdGFcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBoYW5kbGVPcHRpb25DbGljayhlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5vcGVuQ29uZmlnRGlhbG9nKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMudmMuY2xlYXIoKTtcclxuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1lcmdlZFByb3BzKCk6IEFYUHJvcGVydHlEZWNvcmF0b3JbXSB7XHJcbiAgICAgICAgY29uc3QgcHBwID0gQVhPYmplY3RVdGlsLmRlZXBDb3B5KEFYUHJvcGVydHlEZWNvcmF0b3JzLmdldFByb3BlcnRpZXModGhpcy5fd2lkZ2V0KSkgYXMgQVhQcm9wZXJ0eURlY29yYXRvcltdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29uZmlnLnByb3BzKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcucHJvcHMsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1AgPSB0aGlzLmNvbmZpZy5wcm9wc1trZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RQcm9wRGVjID0gcHBwLmZpbmQocCA9PiBwLnByb3BlcnR5ID09PSBrZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0UHJvcERlYykge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXhpc3RQcm9wRGVjLm9wdGlvbnMsIG5ld1ApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcHA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlbWl0Q29uZmlnQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLm9uQ29uZmlnQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLl93aWRnZXQsXHJcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn0iLCI8ZGl2IGNsYXNzPSd3aWRnZXQtY29udGFpbmVyJz5cclxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtY29uZmlnLW92ZXJsYXlcIiAqbmdJZj1cIiFpc0NvbmZpZ3VyZWRcIiAoY2xpY2spPVwiaGFuZGxlQ29uZmlnKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0LXRpdGxlXCI+e3tjb25maWcudGl0bGV9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtY29uZmlnLWJveFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXRpdGxlXCI+e3sgJ3dpZGdldC1ib2FyZC5jb25maWd1cmUnIHwgdHJhbnN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWljb25cIj48aSBjbGFzcz1cImZhcyBmYS1jb2dzIGZhLTV4XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPSd3aWRnZXQtZWRpdC1vdmVybGF5Jz5cclxuICAgICAgICA8ZGl2IGNsYXNzPSd3aWRnZXQtZWRpdC1tZW51Jz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndpZGdldC1lZGl0LW1lbnUtYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZUNvbmZpZygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKm5nSWY9XCJfaGFzUHJvcHNcIiAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNvZ3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid2lkZ2V0LWVkaXQtbWVudS1idXR0b25cIiAoY2xpY2spPVwicmVtb3ZlKCRldmVudClcIiAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtb3B0aW9ucy1tZW51XCIgICpuZ0lmPVwiX2hhc01lbnVcIj5cclxuICAgICAgICA8YXgtbWVudSBbaXRlbXNdPSdjb25maWdNZW51SXRlbScgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiPjwvYXgtbWVudT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8YXgtbG9hZGluZy1wYW5lbCBbdmlzaWJsZV09XCJpc0J1c3lcIj5cclxuICAgIDwvYXgtbG9hZGluZy1wYW5lbD4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0LWNvbnRlbnRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICN2Yz48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|