@acorex/layout 1.3.90
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +2 -0
- package/acorex-layout.d.ts +6 -0
- package/acorex-layout.metadata.json +1 -0
- package/bundles/acorex-layout.umd.js +1479 -0
- package/bundles/acorex-layout.umd.js.map +1 -0
- package/bundles/acorex-layout.umd.min.js +16 -0
- package/bundles/acorex-layout.umd.min.js.map +1 -0
- package/esm2015/acorex-layout.js +7 -0
- package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +49 -0
- package/esm2015/lib/widget-board/editors/widget-size-editor/widget-size.module.js +22 -0
- package/esm2015/lib/widget-board/widget-board.component.js +468 -0
- package/esm2015/lib/widget-board/widget-board.module.js +69 -0
- package/esm2015/lib/widget-board/widget-config.component.js +86 -0
- package/esm2015/lib/widget-board/widget-host.component.js +313 -0
- package/esm2015/lib/widget-board/widget-save.component.js +79 -0
- package/esm2015/lib/widget-board/widget.class.js +123 -0
- package/esm2015/public-api.js +7 -0
- package/esm5/acorex-layout.js +7 -0
- package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.editor.js +52 -0
- package/esm5/lib/widget-board/editors/widget-size-editor/widget-size.module.js +23 -0
- package/esm5/lib/widget-board/widget-board.component.js +494 -0
- package/esm5/lib/widget-board/widget-board.module.js +70 -0
- package/esm5/lib/widget-board/widget-config.component.js +90 -0
- package/esm5/lib/widget-board/widget-host.component.js +349 -0
- package/esm5/lib/widget-board/widget-save.component.js +83 -0
- package/esm5/lib/widget-board/widget.class.js +134 -0
- package/esm5/public-api.js +7 -0
- package/fesm2015/acorex-layout.js +1171 -0
- package/fesm2015/acorex-layout.js.map +1 -0
- package/fesm5/acorex-layout.js +1256 -0
- package/fesm5/acorex-layout.js.map +1 -0
- package/lib/widget-board/editors/widget-size-editor/widget-size.editor.d.ts +16 -0
- package/lib/widget-board/editors/widget-size-editor/widget-size.module.d.ts +3 -0
- package/lib/widget-board/widget-board.component.d.ts +58 -0
- package/lib/widget-board/widget-board.module.d.ts +6 -0
- package/lib/widget-board/widget-config.component.d.ts +20 -0
- package/lib/widget-board/widget-host.component.d.ts +48 -0
- package/lib/widget-board/widget-save.component.d.ts +16 -0
- package/lib/widget-board/widget.class.d.ts +53 -0
- package/package.json +21 -0
- package/public-api.d.ts +6 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
2
|
+
import { NgModule } from '@angular/core';
|
3
|
+
import { AXWidgetBoardComponent } from './widget-board.component';
|
4
|
+
import { CommonModule } from '@angular/common';
|
5
|
+
import { AXWidgetHostComponent } from './widget-host.component';
|
6
|
+
import { AXSearchBoxModule, AXLoadingModule, AXProppertyEditorModule, AXPageModule, AXLabelModule, AXToolbarModule, AXTabStripModule, AXMenuModule, AXFormGroupModule, AXTextAreaModule, AXTextBoxModule, AXFieldsetModule, AXCheckBoxModule, AXValidationModule } from '@acorex/components';
|
7
|
+
import { RouterModule } from '@angular/router';
|
8
|
+
import { AXWidgetConfigComponent } from './widget-config.component';
|
9
|
+
import { AXTranslator, AXTranslatorModule } from '@acorex/core';
|
10
|
+
import { AXWidgetSizePropertyEditorComponent } from './editors/widget-size-editor/widget-size.editor';
|
11
|
+
import { AXWidgetSizePropertyEditorModule } from './editors/widget-size-editor/widget-size.module';
|
12
|
+
import { AXWidgetSaveComponent } from './widget-save.component';
|
13
|
+
var AXWidgetBoardModule = /** @class */ (function () {
|
14
|
+
/**
|
15
|
+
*
|
16
|
+
*/
|
17
|
+
function AXWidgetBoardModule() {
|
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
|
+
AXWidgetBoardModule = __decorate([
|
32
|
+
NgModule({
|
33
|
+
imports: [
|
34
|
+
CommonModule,
|
35
|
+
AXSearchBoxModule,
|
36
|
+
AXLoadingModule,
|
37
|
+
RouterModule,
|
38
|
+
AXProppertyEditorModule,
|
39
|
+
AXPageModule,
|
40
|
+
AXToolbarModule,
|
41
|
+
AXTranslatorModule,
|
42
|
+
AXLabelModule,
|
43
|
+
AXTextAreaModule,
|
44
|
+
AXFieldsetModule,
|
45
|
+
AXTextBoxModule,
|
46
|
+
AXFormGroupModule,
|
47
|
+
AXTabStripModule,
|
48
|
+
AXCheckBoxModule,
|
49
|
+
AXMenuModule,
|
50
|
+
AXTranslatorModule,
|
51
|
+
AXWidgetSizePropertyEditorModule,
|
52
|
+
AXValidationModule,
|
53
|
+
RouterModule.forChild([
|
54
|
+
{
|
55
|
+
component: AXWidgetSizePropertyEditorComponent,
|
56
|
+
path: 'ax/editors/widget-size'
|
57
|
+
},
|
58
|
+
])
|
59
|
+
],
|
60
|
+
exports: [AXWidgetBoardComponent, AXProppertyEditorModule],
|
61
|
+
declarations: [AXWidgetBoardComponent, AXWidgetHostComponent, AXWidgetConfigComponent, AXWidgetSaveComponent],
|
62
|
+
entryComponents: [AXWidgetConfigComponent, AXWidgetSaveComponent],
|
63
|
+
providers: []
|
64
|
+
}),
|
65
|
+
__metadata("design:paramtypes", [])
|
66
|
+
], AXWidgetBoardModule);
|
67
|
+
return AXWidgetBoardModule;
|
68
|
+
}());
|
69
|
+
export { AXWidgetBoardModule };
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWJvYXJkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvbGF5b3V0LyIsInNvdXJjZXMiOlsibGliL3dpZGdldC1ib2FyZC93aWRnZXQtYm9hcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsWUFBWSxFQUFFLGFBQWEsRUFDM0IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFDNUYsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQW1DaEU7SUFDSTs7T0FFRztJQUNIO1FBQ0ksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDcEIsY0FBYyxFQUFFO2dCQUNaLG9CQUFvQixFQUFFLHlCQUF5QjtnQkFDL0MsU0FBUyxFQUFFLGtCQUFrQjthQUNoQztTQUNKLENBQUMsQ0FBQztRQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3BCLGNBQWMsRUFBRTtnQkFDWixvQkFBb0IsRUFBRSxzQkFBc0I7Z0JBQzVDLFNBQVMsRUFBRSxrQkFBa0I7YUFDaEM7U0FDSixDQUFDLENBQUM7SUFFUCxDQUFDO0lBbEJRLG1CQUFtQjtRQWpDL0IsUUFBUSxDQUFDO1lBQ04sT0FBTyxFQUFFO2dCQUNMLFlBQVk7Z0JBQ1osaUJBQWlCO2dCQUNqQixlQUFlO2dCQUNmLFlBQVk7Z0JBQ1osdUJBQXVCO2dCQUN2QixZQUFZO2dCQUNaLGVBQWU7Z0JBQ2Ysa0JBQWtCO2dCQUNsQixhQUFhO2dCQUNiLGdCQUFnQjtnQkFDaEIsZ0JBQWdCO2dCQUNoQixlQUFlO2dCQUNmLGlCQUFpQjtnQkFDakIsZ0JBQWdCO2dCQUNoQixnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixnQ0FBZ0M7Z0JBQ2hDLGtCQUFrQjtnQkFDbEIsWUFBWSxDQUFDLFFBQVEsQ0FBQztvQkFDbEI7d0JBQ0ksU0FBUyxFQUFFLG1DQUFtQzt3QkFDOUMsSUFBSSxFQUFFLHdCQUF3QjtxQkFDakM7aUJBQ0osQ0FBQzthQUNMO1lBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUM7WUFDMUQsWUFBWSxFQUFFLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLENBQUM7WUFDN0csZUFBZSxFQUFFLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLENBQUM7WUFDakUsU0FBUyxFQUFFLEVBQUU7U0FDaEIsQ0FBQzs7T0FDVyxtQkFBbUIsQ0FvQi9CO0lBQUQsMEJBQUM7Q0FBQSxBQXBCRCxJQW9CQztTQXBCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldEJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtYm9hcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQVhXaWRnZXRIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXHJcbiAgICBBWExvYWRpbmdNb2R1bGUsXHJcbiAgICBBWFByb3BwZXJ0eUVkaXRvck1vZHVsZSxcclxuICAgIEFYUGFnZU1vZHVsZSwgQVhMYWJlbE1vZHVsZSxcclxuICAgIEFYVG9vbGJhck1vZHVsZSxcclxuICAgIEFYVGFiU3RyaXBNb2R1bGUsXHJcbiAgICBBWE1lbnVNb2R1bGUsXHJcbiAgICBBWEZvcm1Hcm91cE1vZHVsZSxcclxuICAgIEFYVGV4dEFyZWFNb2R1bGUsIEFYVGV4dEJveE1vZHVsZSwgQVhGaWVsZHNldE1vZHVsZSwgQVhDaGVja0JveE1vZHVsZSwgQVhWYWxpZGF0aW9uTW9kdWxlXHJcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQVhXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhUcmFuc2xhdG9yLCBBWFRyYW5zbGF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldFNpemVQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vZWRpdG9ycy93aWRnZXQtc2l6ZS1lZGl0b3Ivd2lkZ2V0LXNpemUuZWRpdG9yJztcclxuaW1wb3J0IHsgQVhXaWRnZXRTaXplUHJvcGVydHlFZGl0b3JNb2R1bGUgfSBmcm9tICcuL2VkaXRvcnMvd2lkZ2V0LXNpemUtZWRpdG9yL3dpZGdldC1zaXplLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFYV2lkZ2V0U2F2ZUNvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LXNhdmUuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEFYU2VhcmNoQm94TW9kdWxlLFxyXG4gICAgICAgIEFYTG9hZGluZ01vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICAgICAgQVhQcm9wcGVydHlFZGl0b3JNb2R1bGUsXHJcbiAgICAgICAgQVhQYWdlTW9kdWxlLFxyXG4gICAgICAgIEFYVG9vbGJhck1vZHVsZSxcclxuICAgICAgICBBWFRyYW5zbGF0b3JNb2R1bGUsXHJcbiAgICAgICAgQVhMYWJlbE1vZHVsZSxcclxuICAgICAgICBBWFRleHRBcmVhTW9kdWxlLFxyXG4gICAgICAgIEFYRmllbGRzZXRNb2R1bGUsXHJcbiAgICAgICAgQVhUZXh0Qm94TW9kdWxlLFxyXG4gICAgICAgIEFYRm9ybUdyb3VwTW9kdWxlLFxyXG4gICAgICAgIEFYVGFiU3RyaXBNb2R1bGUsXHJcbiAgICAgICAgQVhDaGVja0JveE1vZHVsZSxcclxuICAgICAgICBBWE1lbnVNb2R1bGUsXHJcbiAgICAgICAgQVhUcmFuc2xhdG9yTW9kdWxlLFxyXG4gICAgICAgIEFYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yTW9kdWxlLFxyXG4gICAgICAgIEFYVmFsaWRhdGlvbk1vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEFYV2lkZ2V0U2l6ZVByb3BlcnR5RWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJ2F4L2VkaXRvcnMvd2lkZ2V0LXNpemUnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSlcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbQVhXaWRnZXRCb2FyZENvbXBvbmVudCwgQVhQcm9wcGVydHlFZGl0b3JNb2R1bGVdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbQVhXaWRnZXRCb2FyZENvbXBvbmVudCwgQVhXaWRnZXRIb3N0Q29tcG9uZW50LCBBWFdpZGdldENvbmZpZ0NvbXBvbmVudCwgQVhXaWRnZXRTYXZlQ29tcG9uZW50XSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW0FYV2lkZ2V0Q29uZmlnQ29tcG9uZW50LCBBWFdpZGdldFNhdmVDb21wb25lbnRdLFxyXG4gICAgcHJvdmlkZXJzOiBbXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhXaWRnZXRCb2FyZE1vZHVsZSB7XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIEFYVHJhbnNsYXRvci5sb2FkKCdlbicsIHtcclxuICAgICAgICAgICAgJ3dpZGdldC1ib2FyZCc6IHtcclxuICAgICAgICAgICAgICAgICdjb25maWd1cmFibGUtcHJvcHMnOiAnQ29uZmlndXJhYmxlIFByb3BlcnRpZXMnLFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJlOiAnQ29uZmlndXJlIFdpZGdldCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEFYVHJhbnNsYXRvci5sb2FkKCdmYScsIHtcclxuICAgICAgICAgICAgJ3dpZGdldC1ib2FyZCc6IHtcclxuICAgICAgICAgICAgICAgICdjb25maWd1cmFibGUtcHJvcHMnOiAn2YjbjNqY2q/bjCDZh9in24wg2YLYp9io2YQg2KrZhti424zZhScsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmU6ICfZvtuM2qnYsSDYqNmG2K/bjCDYp9io2LLYp9ix2qknXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import { __decorate, __extends, __metadata } from "tslib";
|
2
|
+
import { Component, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild } from '@angular/core';
|
3
|
+
import { AXBasePopupPageComponent, AXValidationFormComponent } from '@acorex/components';
|
4
|
+
import { AXTranslator } from '@acorex/core';
|
5
|
+
var AXWidgetConfigComponent = /** @class */ (function (_super) {
|
6
|
+
__extends(AXWidgetConfigComponent, _super);
|
7
|
+
function AXWidgetConfigComponent(cdr) {
|
8
|
+
var _this = _super.call(this) || this;
|
9
|
+
_this.cdr = cdr;
|
10
|
+
_this.props = [];
|
11
|
+
_this.displayProps = [];
|
12
|
+
_this.changes = [];
|
13
|
+
_this.context = {};
|
14
|
+
return _this;
|
15
|
+
}
|
16
|
+
AXWidgetConfigComponent.prototype.getFooterButtons = function () {
|
17
|
+
return [
|
18
|
+
{
|
19
|
+
name: 'okay',
|
20
|
+
submitBehavior: true,
|
21
|
+
text: AXTranslator.get('common.confirm'),
|
22
|
+
style: 'success'
|
23
|
+
},
|
24
|
+
{
|
25
|
+
name: 'cancel',
|
26
|
+
cancelBehavior: true,
|
27
|
+
text: AXTranslator.get('common.cancel'),
|
28
|
+
style: 'danger blank'
|
29
|
+
}
|
30
|
+
];
|
31
|
+
};
|
32
|
+
AXWidgetConfigComponent.prototype.onFooterButtonClick = function (e) {
|
33
|
+
var _this = this;
|
34
|
+
if (e.name === 'cancel') {
|
35
|
+
this.close();
|
36
|
+
}
|
37
|
+
if (e.name === 'okay') {
|
38
|
+
this.form.validate().then(function (c) {
|
39
|
+
if (c.result) {
|
40
|
+
_this.close(_this.changes);
|
41
|
+
}
|
42
|
+
});
|
43
|
+
}
|
44
|
+
};
|
45
|
+
AXWidgetConfigComponent.prototype.handleValueChange = function (e) {
|
46
|
+
var prop = this.changes.find(function (c) { return 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
|
+
AXWidgetConfigComponent.prototype.ngOnInit = function () {
|
56
|
+
this.displayProps = this.props.filter(function (c) { return c.property.visible !== false; }).sort(function (a, b) { return a.property.order - b.property.order; });
|
57
|
+
this.updateContext();
|
58
|
+
};
|
59
|
+
AXWidgetConfigComponent.prototype.updateContext = function () {
|
60
|
+
var ctx = {};
|
61
|
+
this.props.forEach(function (p) {
|
62
|
+
ctx[p.property.name] = p.value;
|
63
|
+
});
|
64
|
+
this.changes.forEach(function (p) {
|
65
|
+
ctx[p.property.name] = p.value;
|
66
|
+
});
|
67
|
+
this.context = ctx;
|
68
|
+
};
|
69
|
+
AXWidgetConfigComponent.prototype.identify = function (index, item) {
|
70
|
+
return item.property.name;
|
71
|
+
};
|
72
|
+
AXWidgetConfigComponent.ctorParameters = function () { return [
|
73
|
+
{ type: ChangeDetectorRef }
|
74
|
+
]; };
|
75
|
+
__decorate([
|
76
|
+
ViewChild(AXValidationFormComponent),
|
77
|
+
__metadata("design:type", AXValidationFormComponent)
|
78
|
+
], AXWidgetConfigComponent.prototype, "form", void 0);
|
79
|
+
AXWidgetConfigComponent = __decorate([
|
80
|
+
Component({
|
81
|
+
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>",
|
82
|
+
encapsulation: ViewEncapsulation.None,
|
83
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
84
|
+
}),
|
85
|
+
__metadata("design:paramtypes", [ChangeDetectorRef])
|
86
|
+
], AXWidgetConfigComponent);
|
87
|
+
return AXWidgetConfigComponent;
|
88
|
+
}(AXBasePopupPageComponent));
|
89
|
+
export { AXWidgetConfigComponent };
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWNvcmV4L2xheW91dC8iLCJzb3VyY2VzIjpbImxpYi93aWRnZXQtYm9hcmQvd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBb0Isd0JBQXdCLEVBQXlELHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEssT0FBTyxFQUFnQixZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVMUQ7SUFBNkMsMkNBQXdCO0lBSWpFLGlDQUFvQixHQUFzQjtRQUExQyxZQUNJLGlCQUFPLFNBQ1Y7UUFGbUIsU0FBRyxHQUFILEdBQUcsQ0FBbUI7UUFNMUMsV0FBSyxHQUF1QixFQUFFLENBQUM7UUFDL0Isa0JBQVksR0FBdUIsRUFBRSxDQUFDO1FBR3RDLGFBQU8sR0FBdUIsRUFBRSxDQUFDO1FBRWpDLGFBQU8sR0FBUSxFQUFFLENBQUM7O0lBVmxCLENBQUM7SUFhRCxrREFBZ0IsR0FBaEI7UUFDSSxPQUFPO1lBQ0g7Z0JBQ0ksSUFBSSxFQUFFLE1BQU07Z0JBQ1osY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUN4QyxLQUFLLEVBQUUsU0FBUzthQUNuQjtZQUNEO2dCQUNJLElBQUksRUFBRSxRQUFRO2dCQUNkLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZDLEtBQUssRUFBRSxjQUFjO2FBQ3hCO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFNRCxxREFBbUIsR0FBbkIsVUFBb0IsQ0FBdUI7UUFBM0MsaUJBV0M7UUFW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cHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWFByb3BlcnR5Q29uZmlnLCBBWEJhc2VQb3B1cFBhZ2VDb21wb25lbnQsIEFYTWVudUl0ZW1DbGlja0V2ZW50LCBBWFByb3BlcnlFZGl0b3JWYWx1ZUNoYW5nZUV2ZW50LCBBWFZhbGlkYXRpb25Gb3JtQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgQVhCdXR0b25JdGVtLCBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4vd2lkZ2V0LmNsYXNzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFYV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlUG9wdXBQYWdlQ29tcG9uZW50IHtcclxuXHJcbiAgICBAVmlld0NoaWxkKEFYVmFsaWRhdGlvbkZvcm1Db21wb25lbnQpIGZvcm06IEFYVmFsaWRhdGlvbkZvcm1Db21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgd2lkZ2V0OiBBWFdpZGdldENvbXBvbmVudDtcclxuICAgIHByb3BzOiBBWFByb3BlcnR5Q29uZmlnW10gPSBbXTtcclxuICAgIGRpc3BsYXlQcm9wczogQVhQcm9wZXJ0eUNvbmZpZ1tdID0gW107XHJcblxyXG5cclxuICAgIGNoYW5nZXM6IEFYUHJvcGVydHlDb25maWdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnRleHQ6IGFueSA9IHt9O1xyXG5cclxuXHJcbiAgICBnZXRGb290ZXJCdXR0b25zKCk6IEFYQnV0dG9uSXRlbVtdIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnb2theScsXHJcbiAgICAgICAgICAgICAgICBzdWJtaXRCZWhhdmlvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5jb25maXJtJyksXHJcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdjYW5jZWwnLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQmVoYXZpb3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBBWFRyYW5zbGF0b3IuZ2V0KCdjb21tb24uY2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2RhbmdlciBibGFuaydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIG9uRm9vdGVyQnV0dG9uQ2xpY2soZTogQVhNZW51SXRlbUNsaWNrRXZlbnQpIHtcclxuICAgICAgICBpZiAoZS5uYW1lID09PSAnY2FuY2VsJykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdva2F5Jykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0udmFsaWRhdGUoKS50aGVuKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGMucmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSh0aGlzLmNoYW5nZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVmFsdWVDaGFuZ2UoZTogQVhQcm9wZXJ5RWRpdG9yVmFsdWVDaGFuZ2VFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSB0aGlzLmNoYW5nZXMuZmluZChjID0+IGMucHJvcGVydHkubmFtZSA9PT0gZS5wcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICBpZiAocHJvcCkge1xyXG4gICAgICAgICAgICBwcm9wLnZhbHVlID0gZS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5wdXNoKHsgcHJvcGVydHk6IGUucHJvcGVydHksIHZhbHVlOiBlLnZhbHVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlQcm9wcyA9IHRoaXMucHJvcHMuZmlsdGVyKGMgPT4gYy5wcm9wZXJ0eS52aXNpYmxlICE9PSBmYWxzZSkuc29ydCgoYSwgYikgPT4gYS5wcm9wZXJ0eS5vcmRlciAtIGIucHJvcGVydHkub3JkZXIpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29udGV4dCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbnRleHQoKSB7XHJcbiAgICAgICAgY29uc3QgY3R4ID0ge307XHJcbiAgICAgICAgdGhpcy5wcm9wcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICBjdHhbcC5wcm9wZXJ0eS5uYW1lXSA9IHAudmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIGN0eFtwLnByb3BlcnR5Lm5hbWVdID0gcC52YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjdHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlkZW50aWZ5KGluZGV4LCBpdGVtOiBBWFByb3BlcnR5Q29uZmlnKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydHkubmFtZTtcclxuICAgIH1cclxuXHJcbn0iXX0=
|
@@ -0,0 +1,349 @@
|
|
1
|
+
import { __awaiter, __decorate, __generator, __metadata } from "tslib";
|
2
|
+
import { Component, ViewEncapsulation, Input, ElementRef, HostBinding, ComponentFactoryResolver, ViewChild, ViewContainerRef, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, ComponentRef } from '@angular/core';
|
3
|
+
import { AXObjectUtil, AXRenderService } from '@acorex/core';
|
4
|
+
import { AXPopupService, AXPropertyDecorators, AXPropertyDecorator, AXLoadingService } from '@acorex/components';
|
5
|
+
import { AXWidgetConfigComponent } from './widget-config.component';
|
6
|
+
import { AXTranslator } from '@acorex/core';
|
7
|
+
import { AXWidgetSaveComponent } from './widget-save.component';
|
8
|
+
var AXWidgetHostComponent = /** @class */ (function () {
|
9
|
+
function AXWidgetHostComponent(ref, componentFactoryResolver, rendererService, cdr, popup, loadingService) {
|
10
|
+
this.ref = ref;
|
11
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
12
|
+
this.rendererService = rendererService;
|
13
|
+
this.cdr = cdr;
|
14
|
+
this.popup = popup;
|
15
|
+
this.loadingService = loadingService;
|
16
|
+
this._hasProps = false;
|
17
|
+
this._hasMenu = false;
|
18
|
+
this.configMenuItem = [
|
19
|
+
{
|
20
|
+
icon: 'far fa-ellipsis-h',
|
21
|
+
items: []
|
22
|
+
}
|
23
|
+
];
|
24
|
+
this.onRemove = new EventEmitter();
|
25
|
+
this.onConfigChanged = new EventEmitter();
|
26
|
+
this.onResized = new EventEmitter();
|
27
|
+
this.onSave = new EventEmitter();
|
28
|
+
this._isLoading = false;
|
29
|
+
this.sizeX = 1;
|
30
|
+
this.sizeY = 1;
|
31
|
+
this.col = 1;
|
32
|
+
this.row = 1;
|
33
|
+
}
|
34
|
+
Object.defineProperty(AXWidgetHostComponent.prototype, "widget", {
|
35
|
+
get: function () {
|
36
|
+
return this._widget;
|
37
|
+
},
|
38
|
+
enumerable: true,
|
39
|
+
configurable: true
|
40
|
+
});
|
41
|
+
Object.defineProperty(AXWidgetHostComponent.prototype, "element", {
|
42
|
+
get: function () {
|
43
|
+
return this.ref.nativeElement;
|
44
|
+
},
|
45
|
+
enumerable: true,
|
46
|
+
configurable: true
|
47
|
+
});
|
48
|
+
Object.defineProperty(AXWidgetHostComponent.prototype, "isLoading", {
|
49
|
+
get: function () {
|
50
|
+
return this._isLoading;
|
51
|
+
},
|
52
|
+
set: function (v) {
|
53
|
+
this._isLoading = v;
|
54
|
+
if (this._loadingId && !v) {
|
55
|
+
this.loadingService.hide(this._loadingId);
|
56
|
+
this._loadingId = null;
|
57
|
+
}
|
58
|
+
if (v) {
|
59
|
+
this._loadingId = this.loadingService.show(this.ref.nativeElement);
|
60
|
+
}
|
61
|
+
},
|
62
|
+
enumerable: true,
|
63
|
+
configurable: true
|
64
|
+
});
|
65
|
+
Object.defineProperty(AXWidgetHostComponent.prototype, "isConfigured", {
|
66
|
+
get: function () {
|
67
|
+
var _a;
|
68
|
+
return ((_a = this._widget) === null || _a === void 0 ? void 0 : _a.isConfigured) || false;
|
69
|
+
},
|
70
|
+
enumerable: true,
|
71
|
+
configurable: true
|
72
|
+
});
|
73
|
+
AXWidgetHostComponent.prototype.ngOnInit = function () {
|
74
|
+
this.isLoading = true;
|
75
|
+
};
|
76
|
+
AXWidgetHostComponent.prototype.ngAfterViewInit = function () {
|
77
|
+
var _a;
|
78
|
+
return __awaiter(this, void 0, void 0, function () {
|
79
|
+
var component, route, widgetFactory;
|
80
|
+
var _this = this;
|
81
|
+
return __generator(this, function (_b) {
|
82
|
+
switch (_b.label) {
|
83
|
+
case 0:
|
84
|
+
if (!(typeof this.config.component === 'string')) return [3 /*break*/, 2];
|
85
|
+
return [4 /*yield*/, this.rendererService.findLoadedComponentByRoute(this.config.component, 20)];
|
86
|
+
case 1:
|
87
|
+
route = _b.sent();
|
88
|
+
component = (_a = route) === null || _a === void 0 ? void 0 : _a.component;
|
89
|
+
return [3 /*break*/, 3];
|
90
|
+
case 2:
|
91
|
+
if (typeof this.config.component === 'function') {
|
92
|
+
component = this.config.component;
|
93
|
+
}
|
94
|
+
_b.label = 3;
|
95
|
+
case 3:
|
96
|
+
if (component == null) {
|
97
|
+
console.error("Invalid Widget Component!", this.config);
|
98
|
+
this.onRemove.emit(this);
|
99
|
+
return [2 /*return*/];
|
100
|
+
}
|
101
|
+
widgetFactory = this.componentFactoryResolver.resolveComponentFactory(component);
|
102
|
+
this.componentRef = this.vc.createComponent(widgetFactory);
|
103
|
+
this._widget = this.componentRef.instance;
|
104
|
+
this._widget.provideValue = this.provideValue;
|
105
|
+
if (this._widget.onBusyChanged) {
|
106
|
+
this._widget.onBusyChanged.subscribe(function (d) {
|
107
|
+
if (!_this._widget.widgetSize) {
|
108
|
+
_this._widget.setValue('widgetSize', [_this.sizeX, _this.sizeY]);
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
_this.setSizeFromOptions();
|
112
|
+
}
|
113
|
+
_this.isLoading = d.value;
|
114
|
+
_this.cdr.detectChanges();
|
115
|
+
});
|
116
|
+
}
|
117
|
+
if (this._widget.onConfiguredChanged) {
|
118
|
+
this._widget.onConfiguredChanged.subscribe(function () {
|
119
|
+
_this.setSizeFromOptions();
|
120
|
+
});
|
121
|
+
}
|
122
|
+
//
|
123
|
+
if (this.config.options) {
|
124
|
+
Object.assign(this._widget, this.config.options);
|
125
|
+
}
|
126
|
+
this._hasProps = AXPropertyDecorators.getProperties(this._widget).length > 0;
|
127
|
+
this.isLoading = false;
|
128
|
+
this.config['__meta__'].instance = this;
|
129
|
+
this._widget['__meta__'] = {};
|
130
|
+
this._widget['__meta__'].config = this.config;
|
131
|
+
//
|
132
|
+
if (this._hasProps) {
|
133
|
+
this.configMenuItem[0].items.push({
|
134
|
+
name: 'configs',
|
135
|
+
icon: 'far fa-cogs',
|
136
|
+
text: AXTranslator.get('common.configs'),
|
137
|
+
onClick: function () {
|
138
|
+
_this.openConfigDialog();
|
139
|
+
}
|
140
|
+
});
|
141
|
+
}
|
142
|
+
this.configMenuItem[0].items.push({
|
143
|
+
name: 'save',
|
144
|
+
icon: 'far fa-save',
|
145
|
+
text: AXTranslator.get('common.save-as'),
|
146
|
+
onClick: function () {
|
147
|
+
_this.openSaveDialog();
|
148
|
+
}
|
149
|
+
});
|
150
|
+
if (true) {
|
151
|
+
this.configMenuItem[0].items.push({
|
152
|
+
name: 'remove',
|
153
|
+
icon: 'far fa-times',
|
154
|
+
style: 'ax danger blank',
|
155
|
+
text: AXTranslator.get('common.remove'),
|
156
|
+
onClick: function () {
|
157
|
+
_this.onRemove.emit(_this);
|
158
|
+
}
|
159
|
+
});
|
160
|
+
}
|
161
|
+
this._hasMenu = this.configMenuItem[0].items.length > 0;
|
162
|
+
this.cdr.detectChanges();
|
163
|
+
return [2 /*return*/];
|
164
|
+
}
|
165
|
+
});
|
166
|
+
});
|
167
|
+
};
|
168
|
+
AXWidgetHostComponent.prototype.setSizeFromOptions = function () {
|
169
|
+
var _this = this;
|
170
|
+
this._widget.getValue('widgetSize').then(function (c) {
|
171
|
+
var oldSizeX = _this.sizeX;
|
172
|
+
var oldSizeY = _this.sizeY;
|
173
|
+
if (c && Array.isArray(c) && (oldSizeX !== c[0] || oldSizeY !== c[1])) {
|
174
|
+
_this.config.sizeX = _this.sizeX = c[0];
|
175
|
+
_this.config.sizeY = _this.sizeY = c[1];
|
176
|
+
_this.onResized.emit({
|
177
|
+
component: _this._widget,
|
178
|
+
config: _this.config
|
179
|
+
});
|
180
|
+
}
|
181
|
+
_this.cdr.detectChanges();
|
182
|
+
});
|
183
|
+
};
|
184
|
+
AXWidgetHostComponent.prototype.remove = function (e) {
|
185
|
+
e.preventDefault();
|
186
|
+
e.stopPropagation();
|
187
|
+
this.onRemove.emit(this);
|
188
|
+
return false;
|
189
|
+
};
|
190
|
+
AXWidgetHostComponent.prototype.handleConfig = function (e) {
|
191
|
+
e.preventDefault();
|
192
|
+
e.stopPropagation();
|
193
|
+
this.openConfigDialog();
|
194
|
+
return false;
|
195
|
+
};
|
196
|
+
AXWidgetHostComponent.prototype.openConfigDialog = function () {
|
197
|
+
var _this = this;
|
198
|
+
var ppp = this.getMergedProps();
|
199
|
+
this.popup.open(AXWidgetConfigComponent, {
|
200
|
+
title: AXTranslator.get('common.configs'),
|
201
|
+
size: 'sm',
|
202
|
+
data: {
|
203
|
+
props: ppp.map(function (c) { return ({ property: c.options, value: _this._widget[c.options.name] }); }),
|
204
|
+
widget: this.widget
|
205
|
+
}
|
206
|
+
}).then(function (c) {
|
207
|
+
if (c.data) {
|
208
|
+
if (!_this.config.options) {
|
209
|
+
_this.config.options = {};
|
210
|
+
}
|
211
|
+
c.data.forEach(function (p) {
|
212
|
+
_this._widget.setValue(p.property.name, p.value);
|
213
|
+
_this.config.options[p.property.name] = p.value;
|
214
|
+
});
|
215
|
+
_this.emitConfigChanged();
|
216
|
+
_this._widget.redraw();
|
217
|
+
_this.cdr.detectChanges();
|
218
|
+
}
|
219
|
+
});
|
220
|
+
};
|
221
|
+
AXWidgetHostComponent.prototype.openSaveDialog = function () {
|
222
|
+
var _this = this;
|
223
|
+
var ppp = this.getMergedProps();
|
224
|
+
this.popup.open(AXWidgetSaveComponent, {
|
225
|
+
title: AXTranslator.get('common.save-as'),
|
226
|
+
size: 'sm',
|
227
|
+
data: {
|
228
|
+
config: this.config,
|
229
|
+
props: ppp.map(function (c) { return ({ property: c.options, value: _this._widget[c.options.name] }); })
|
230
|
+
}
|
231
|
+
}).then(function (c) {
|
232
|
+
if (c.data) {
|
233
|
+
_this.onSave.emit({
|
234
|
+
component: _this._widget,
|
235
|
+
data: c.data
|
236
|
+
});
|
237
|
+
}
|
238
|
+
});
|
239
|
+
};
|
240
|
+
AXWidgetHostComponent.prototype.handleOptionClick = function (e) {
|
241
|
+
e.preventDefault();
|
242
|
+
e.stopPropagation();
|
243
|
+
this.openConfigDialog();
|
244
|
+
return false;
|
245
|
+
};
|
246
|
+
AXWidgetHostComponent.prototype.ngOnDestroy = function () {
|
247
|
+
this.vc.clear();
|
248
|
+
if (this.componentRef) {
|
249
|
+
this.componentRef.destroy();
|
250
|
+
}
|
251
|
+
};
|
252
|
+
AXWidgetHostComponent.prototype.getMergedProps = function () {
|
253
|
+
var ppp = AXObjectUtil.deepCopy(AXPropertyDecorators.getProperties(this._widget));
|
254
|
+
var _loop_1 = function (key) {
|
255
|
+
if (Object.prototype.hasOwnProperty.call(this_1.config.props, key)) {
|
256
|
+
var newP = this_1.config.props[key];
|
257
|
+
var existPropDec = ppp.find(function (p) { return p.property === key; });
|
258
|
+
if (existPropDec) {
|
259
|
+
Object.assign(existPropDec.options, newP);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
};
|
263
|
+
var this_1 = this;
|
264
|
+
for (var key in this.config.props) {
|
265
|
+
_loop_1(key);
|
266
|
+
}
|
267
|
+
return ppp;
|
268
|
+
};
|
269
|
+
AXWidgetHostComponent.prototype.emitConfigChanged = function () {
|
270
|
+
this.onConfigChanged.emit({
|
271
|
+
component: this._widget,
|
272
|
+
config: this.config
|
273
|
+
});
|
274
|
+
};
|
275
|
+
AXWidgetHostComponent.ctorParameters = function () { return [
|
276
|
+
{ type: ElementRef },
|
277
|
+
{ type: ComponentFactoryResolver },
|
278
|
+
{ type: AXRenderService },
|
279
|
+
{ type: ChangeDetectorRef },
|
280
|
+
{ type: AXPopupService },
|
281
|
+
{ type: AXLoadingService }
|
282
|
+
]; };
|
283
|
+
__decorate([
|
284
|
+
Input(),
|
285
|
+
__metadata("design:type", Function)
|
286
|
+
], AXWidgetHostComponent.prototype, "provideValue", void 0);
|
287
|
+
__decorate([
|
288
|
+
Output(),
|
289
|
+
__metadata("design:type", EventEmitter)
|
290
|
+
], AXWidgetHostComponent.prototype, "onRemove", void 0);
|
291
|
+
__decorate([
|
292
|
+
Output(),
|
293
|
+
__metadata("design:type", EventEmitter)
|
294
|
+
], AXWidgetHostComponent.prototype, "onConfigChanged", void 0);
|
295
|
+
__decorate([
|
296
|
+
Output(),
|
297
|
+
__metadata("design:type", EventEmitter)
|
298
|
+
], AXWidgetHostComponent.prototype, "onResized", void 0);
|
299
|
+
__decorate([
|
300
|
+
Output(),
|
301
|
+
__metadata("design:type", EventEmitter)
|
302
|
+
], AXWidgetHostComponent.prototype, "onSave", void 0);
|
303
|
+
__decorate([
|
304
|
+
Input(),
|
305
|
+
__metadata("design:type", Object)
|
306
|
+
], AXWidgetHostComponent.prototype, "config", void 0);
|
307
|
+
__decorate([
|
308
|
+
ViewChild('vc', { read: ViewContainerRef }),
|
309
|
+
__metadata("design:type", ViewContainerRef)
|
310
|
+
], AXWidgetHostComponent.prototype, "vc", void 0);
|
311
|
+
__decorate([
|
312
|
+
HostBinding('attr.data-size-x'),
|
313
|
+
Input(),
|
314
|
+
__metadata("design:type", Number)
|
315
|
+
], AXWidgetHostComponent.prototype, "sizeX", void 0);
|
316
|
+
__decorate([
|
317
|
+
HostBinding('attr.data-size-y'),
|
318
|
+
Input(),
|
319
|
+
__metadata("design:type", Number)
|
320
|
+
], AXWidgetHostComponent.prototype, "sizeY", void 0);
|
321
|
+
__decorate([
|
322
|
+
HostBinding('attr.data-col'),
|
323
|
+
Input(),
|
324
|
+
__metadata("design:type", Number)
|
325
|
+
], AXWidgetHostComponent.prototype, "col", void 0);
|
326
|
+
__decorate([
|
327
|
+
HostBinding('attr.data-row'),
|
328
|
+
Input(),
|
329
|
+
__metadata("design:type", Number)
|
330
|
+
], AXWidgetHostComponent.prototype, "row", void 0);
|
331
|
+
AXWidgetHostComponent = __decorate([
|
332
|
+
Component({
|
333
|
+
selector: 'ax-widget-host',
|
334
|
+
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\"></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\"></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\"></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>",
|
335
|
+
host: { class: 'ax widget-host', tabindex: '0' },
|
336
|
+
encapsulation: ViewEncapsulation.None,
|
337
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
338
|
+
}),
|
339
|
+
__metadata("design:paramtypes", [ElementRef,
|
340
|
+
ComponentFactoryResolver,
|
341
|
+
AXRenderService,
|
342
|
+
ChangeDetectorRef,
|
343
|
+
AXPopupService,
|
344
|
+
AXLoadingService])
|
345
|
+
], AXWidgetHostComponent);
|
346
|
+
return AXWidgetHostComponent;
|
347
|
+
}());
|
348
|
+
export { AXWidgetHostComponent };
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFjb3JleC9sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvd2lkZ2V0LWJvYXJkL3dpZGdldC1ob3N0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxpQkFBaUIsRUFBRSxLQUFLLEVBQ3hCLFVBQVUsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUM1RCxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUMvRCxpQkFBaUIsRUFBRSxZQUFZLEVBQ2xDLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBY2hFO0lBK0VJLCtCQUNZLEdBQStCLEVBQy9CLHdCQUFrRCxFQUNsRCxlQUFnQyxFQUNoQyxHQUFzQixFQUN0QixLQUFxQixFQUNyQixjQUFnQztRQUxoQyxRQUFHLEdBQUgsR0FBRyxDQUE0QjtRQUMvQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUE5RTVDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFHM0IsYUFBUSxHQUFZLEtBQUss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LEVBQUU7O3NEQUNRO0lBaE1QLHFCQUFxQjtRQVJqQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLHc3Q0FBMkM7WUFDM0MsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDaEQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7WUFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07U0FDbEQsQ0FBQzt5Q0FrRm1CLFVBQVU7WUFDVyx3QkFBd0I7WUFDakMsZUFBZTtZQUMzQixpQkFBaUI7WUFDZixjQUFjO1lBQ0wsZ0JBQWdCO09BckZuQyxxQkFBcUIsQ0FrVGpDO0lBQUQsNEJBQUM7Q0FBQSxBQWxURCxJQWtUQztTQWxUWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LFxyXG4gICAgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgVmlld0NoaWxkLFxyXG4gICAgVmlld0NvbnRhaW5lclJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudFJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldENvbmZpZywgQVhXaWRnZXRDb21wb25lbnQsIEFYV2lkZ2V0Q29uZmlnQ2hhbmdlZCwgQVhXaWRnZXRDb25maWdTYXZlZEV2ZW50IH0gZnJvbSAnLi93aWRnZXQuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWE9iamVjdFV0aWwsIEFYUmVuZGVyU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZSc7XHJcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlLCBBWFByb3BlcnR5RGVjb3JhdG9ycywgQVhQcm9wZXJ0eURlY29yYXRvciwgQVhMb2FkaW5nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IEFYV2lkZ2V0Q29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXQtY29uZmlnLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBBWFdpZGdldFNhdmVDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1zYXZlLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2F4LXdpZGdldC1ob3N0JyxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vd2lkZ2V0LWhvc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGhvc3Q6IHsgY2xhc3M6ICdheCB3aWRnZXQtaG9zdCcsIHRhYmluZGV4OiAnMCcgfSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFYV2lkZ2V0SG9zdENvbXBvbmVudCB7XHJcblxyXG4gICAgcHJpdmF0ZSBfd2lkZ2V0OiBBWFdpZGdldENvbXBvbmVudDtcclxuICAgIHB1YmxpYyBnZXQgd2lkZ2V0KCk6IEFYV2lkZ2V0Q29tcG9uZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIF9oYXNQcm9wczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBfaGFzTWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwcm92aWRlVmFsdWU6IChlOiBhbnkpID0+IGFueTtcclxuXHJcblxyXG4gICAgZ2V0IGVsZW1lbnQoKTogSFRNTERpdkVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25maWdNZW51SXRlbTogQVhNZW51SXRlbVtdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWNvbjogJ2ZhciBmYS1lbGxpcHNpcy1oJyxcclxuICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBvblJlbW92ZTogRXZlbnRFbWl0dGVyPEFYV2lkZ2V0SG9zdENvbXBvbmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYV2lkZ2V0SG9zdENvbXBvbmVudD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIG9uQ29uZmlnQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Q29uZmlnQ2hhbmdlZD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYV2lkZ2V0Q29uZmlnQ2hhbmdlZD4oKTtcclxuXHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBvblJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxBWFdpZGdldENvbmZpZ0NoYW5nZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFdpZGdldENvbmZpZ0NoYW5nZWQ+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBvblNhdmU6IEV2ZW50RW1pdHRlcjxBWFdpZGdldENvbmZpZ1NhdmVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFdpZGdldENvbmZpZ1NhdmVkRXZlbnQ+KCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGNvbmZpZzogQVhXaWRnZXRDb25maWc7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndmMnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICAgIHZjOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PjtcclxuICAgIC8vcHJpdmF0ZSBpc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8vIGdldCBpc0J1c3koKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX3dpZGdldD8uaXNCdXN5IHx8IHRoaXMuaXNMb2FkaW5nO1xyXG4gICAgLy8gfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9sb2FkaW5nSWQ6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIF9pc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGlzTG9hZGluZyh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdjtcclxuICAgICAgICBpZiAodGhpcy5fbG9hZGluZ0lkICYmICF2KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UuaGlkZSh0aGlzLl9sb2FkaW5nSWQpO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSWQgPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLnNob3codGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXQgaXNDb25maWd1cmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWRnZXQ/LmlzQ29uZmlndXJlZCB8fCBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlclNlcnZpY2U6IEFYUmVuZGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBwb3B1cDogQVhQb3B1cFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogQVhMb2FkaW5nU2VydmljZVxyXG5cclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgbGV0IGNvbXBvbmVudDogYW55O1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCByb3V0ZSA9IGF3YWl0IHRoaXMucmVuZGVyZXJTZXJ2aWNlLmZpbmRMb2FkZWRDb21wb25lbnRCeVJvdXRlKHRoaXMuY29uZmlnLmNvbXBvbmVudCwgMjApO1xyXG4gICAgICAgICAgICBjb21wb25lbnQgPSByb3V0ZT8uY29tcG9uZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb25maWcuY29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMuY29uZmlnLmNvbXBvbmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgV2lkZ2V0IENvbXBvbmVudCFgLCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmUuZW1pdCh0aGlzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgd2lkZ2V0RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnZjLmNyZWF0ZUNvbXBvbmVudCh3aWRnZXRGYWN0b3J5KTtcclxuICAgICAgICB0aGlzLl93aWRnZXQgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBBWFdpZGdldENvbXBvbmVudDtcclxuICAgICAgICB0aGlzLl93aWRnZXQucHJvdmlkZVZhbHVlID0gdGhpcy5wcm92aWRlVmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldC5vbkJ1c3lDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldC5vbkJ1c3lDaGFuZ2VkLnN1YnNjcmliZSgoZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl93aWRnZXQud2lkZ2V0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpZGdldC5zZXRWYWx1ZSgnd2lkZ2V0U2l6ZScsIFt0aGlzLnNpemVYLCB0aGlzLnNpemVZXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNpemVGcm9tT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBkLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpZGdldC5vbkNvbmZpZ3VyZWRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZGdldC5vbkNvbmZpZ3VyZWRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNpemVGcm9tT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAodGhpcy5jb25maWcub3B0aW9ucykge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3dpZGdldCwgdGhpcy5jb25maWcub3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2hhc1Byb3BzID0gQVhQcm9wZXJ0eURlY29yYXRvcnMuZ2V0UHJvcGVydGllcyh0aGlzLl93aWRnZXQpLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb25maWdbJ19fbWV0YV9fJ10uaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3dpZGdldFsnX19tZXRhX18nXSA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3dpZGdldFsnX19tZXRhX18nXS5jb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgICAvL1xyXG4gICAgICAgIGlmICh0aGlzLl9oYXNQcm9wcykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvbmZpZ3MnLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogJ2ZhciBmYS1jb2dzJyxcclxuICAgICAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5jb25maWdzJyksXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuQ29uZmlnRGlhbG9nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiAnc2F2ZScsXHJcbiAgICAgICAgICAgIGljb246ICdmYXIgZmEtc2F2ZScsXHJcbiAgICAgICAgICAgIHRleHQ6IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5zYXZlLWFzJyksXHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlblNhdmVEaWFsb2coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnTWVudUl0ZW1bMF0uaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAncmVtb3ZlJyxcclxuICAgICAgICAgICAgICAgIGljb246ICdmYXIgZmEtdGltZXMnLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdheCBkYW5nZXIgYmxhbmsnLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLnJlbW92ZScpLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUuZW1pdCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2hhc01lbnUgPSB0aGlzLmNvbmZpZ01lbnVJdGVtWzBdLml0ZW1zLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNpemUteCcpXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2l6ZVg6IG51bWJlciA9IDE7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2l6ZS15JylcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzaXplWTogbnVtYmVyID0gMTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1jb2wnKVxyXG4gICAgQElucHV0KClcclxuICAgIGNvbDogbnVtYmVyID0gMTtcclxuXHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcm93JylcclxuICAgIEBJbnB1dCgpXHJcbiAgICByb3c6IG51bWJlciA9IDE7XHJcblxyXG5cclxuICAgIHByaXZhdGUgc2V0U2l6ZUZyb21PcHRpb25zKCkge1xyXG4gICAgICAgIHRoaXMuX3dpZGdldC5nZXRWYWx1ZSgnd2lkZ2V0U2l6ZScpLnRoZW4oYyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZFNpemVYID0gdGhpcy5zaXplWDtcclxuICAgICAgICAgICAgY29uc3Qgb2xkU2l6ZVkgPSB0aGlzLnNpemVZO1xyXG4gICAgICAgICAgICBpZiAoYyAmJiBBcnJheS5pc0FycmF5KGMpICYmIChvbGRTaXplWCAhPT0gY1swXSB8fCBvbGRTaXplWSAhPT0gY1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnNpemVYID0gdGhpcy5zaXplWCA9IGNbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zaXplWSA9IHRoaXMuc2l6ZVkgPSBjWzFdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlc2l6ZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLl93aWRnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDb25maWcoZTogTW91c2VFdmVudCkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMub3BlbkNvbmZpZ0RpYWxvZygpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9wZW5Db25maWdEaWFsb2coKSB7XHJcbiAgICAgICAgY29uc3QgcHBwID0gdGhpcy5nZXRNZXJnZWRQcm9wcygpO1xyXG4gICAgICAgIHRoaXMucG9wdXAub3BlbihBWFdpZGdldENvbmZpZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB0aXRsZTogQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLmNvbmZpZ3MnKSxcclxuICAgICAgICAgICAgc2l6ZTogJ3NtJyxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHBwcC5tYXAoYyA9PiAoeyBwcm9wZXJ0eTogYy5vcHRpb25zLCB2YWx1ZTogdGhpcy5fd2lkZ2V0W2Mub3B0aW9ucy5uYW1lXSB9KSksXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQ6IHRoaXMud2lkZ2V0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS50aGVuKGMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjLmRhdGEuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93aWRnZXQuc2V0VmFsdWUocC5wcm9wZXJ0eS5uYW1lLCBwLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5vcHRpb25zW3AucHJvcGVydHkubmFtZV0gPSBwLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93aWRnZXQucmVkcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9wZW5TYXZlRGlhbG9nKCkge1xyXG4gICAgICAgIGNvbnN0IHBwcCA9IHRoaXMuZ2V0TWVyZ2VkUHJvcHMoKTtcclxuICAgICAgICB0aGlzLnBvcHVwLm9wZW4oQVhXaWRnZXRTYXZlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBBWFRyYW5zbGF0b3IuZ2V0KCdjb21tb24uc2F2ZS1hcycpLFxyXG4gICAgICAgICAgICBzaXplOiAnc20nLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHBwcC5tYXAoYyA9PiAoeyBwcm9wZXJ0eTogYy5vcHRpb25zLCB2YWx1ZTogdGhpcy5fd2lkZ2V0W2Mub3B0aW9ucy5uYW1lXSB9KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLnRoZW4oYyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5fd2lkZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGMuZGF0YVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGhhbmRsZU9wdGlvbkNsaWNrKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLm9wZW5Db25maWdEaWFsb2coKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy52Yy5jbGVhcigpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TWVyZ2VkUHJvcHMoKTogQVhQcm9wZXJ0eURlY29yYXRvcltdIHtcclxuICAgICAgICBjb25zdCBwcHAgPSBBWE9iamVjdFV0aWwuZGVlcENvcHkoQVhQcm9wZXJ0eURlY29yYXRvcnMuZ2V0UHJvcGVydGllcyh0aGlzLl93aWRnZXQpKSBhcyBBWFByb3BlcnR5RGVjb3JhdG9yW107XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb25maWcucHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZy5wcm9wcywga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UCA9IHRoaXMuY29uZmlnLnByb3BzW2tleV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdFByb3BEZWMgPSBwcHAuZmluZChwID0+IHAucHJvcGVydHkgPT09IGtleSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RQcm9wRGVjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihleGlzdFByb3BEZWMub3B0aW9ucywgbmV3UCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBwcDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25Db25maWdDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuX3dpZGdldCxcclxuICAgICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufSJdfQ==
|