@bizdoc/core 1.16.27 → 1.16.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/themes/brown.min.css +8 -8
- package/assets/themes/dark.min.css +8 -8
- package/assets/themes/deep-purple-light-blue.min.css +8 -8
- package/assets/themes/deep-purple-teal.min.css +8 -8
- package/assets/themes/default.min.css +8 -8
- package/assets/themes/green.min.css +8 -8
- package/assets/themes/indigo.min.css +8 -8
- package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +3 -3
- package/esm2020/lib/admin/localized-string.component.mjs +52 -0
- package/esm2020/lib/core/controls/signature.input.mjs +149 -0
- package/esm2020/lib/core/mailbox.service.mjs +11 -2
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/pipes/localized-string.pipe.mjs +24 -0
- package/esm2020/lib/core/slots/pane-ref.mjs +3 -2
- package/esm2020/lib/core/translations.mjs +45 -4
- package/esm2020/lib/reports/report-ref.mjs +1 -1
- package/esm2020/lib/reports/report-viewer.component.mjs +5 -2
- package/esm2020/lib/shared.module.mjs +11 -8
- package/esm2020/lib/system.module.mjs +8 -11
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/bizdoc-core.mjs +346 -323
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +346 -320
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/localized-string.component.d.ts +20 -0
- package/lib/core/controls/signature.input.d.ts +53 -0
- package/lib/core/mailbox.service.d.ts +2 -1
- package/lib/core/models.d.ts +7 -0
- package/lib/core/pipes/localized-string.pipe.d.ts +11 -0
- package/lib/core/slots/pane-ref.d.ts +10 -9
- package/lib/core/translations.d.ts +41 -0
- package/lib/reports/report-ref.d.ts +2 -0
- package/lib/shared.module.d.ts +137 -136
- package/lib/system.module.d.ts +31 -32
- package/package.json +11 -9
- package/public-api.d.ts +3 -2
- package/esm2020/lib/admin/configuration-designer/elements/survey-form.component.mjs +0 -44
- package/esm2020/lib/admin/form/survey/survey.component.mjs +0 -180
- package/esm2020/lib/compose/survey/survey.component.mjs +0 -73
- package/lib/admin/configuration-designer/elements/survey-form.component.d.ts +0 -18
- package/lib/admin/form/survey/survey.component.d.ts +0 -123
- package/lib/compose/survey/survey.component.d.ts +0 -17
package/lib/system.module.d.ts
CHANGED
@@ -36,40 +36,39 @@ import * as i33 from "./admin/configuration-designer/elements/parallel-view.comp
|
|
36
36
|
import * as i34 from "./admin/configuration-designer/elements/sum-view.component";
|
37
37
|
import * as i35 from "./admin/configuration-designer/elements/matrix-view.component";
|
38
38
|
import * as i36 from "./admin/configuration-designer/elements/analysis-view.component";
|
39
|
-
import * as i37 from "./admin/configuration-designer/
|
40
|
-
import * as i38 from "./admin/form/
|
41
|
-
import * as i39 from "./admin/
|
42
|
-
import * as i40 from "./admin/
|
43
|
-
import * as i41 from "./admin/
|
44
|
-
import * as i42 from "./admin/
|
45
|
-
import * as i43 from "./admin/
|
46
|
-
import * as i44 from "./admin/
|
47
|
-
import * as i45 from "./admin/
|
48
|
-
import * as i46 from "./admin/
|
49
|
-
import * as i47 from "./admin/
|
50
|
-
import * as i48 from "./admin/document-trace/
|
51
|
-
import * as i49 from "./admin/
|
52
|
-
import * as i50 from "./admin/
|
53
|
-
import * as i51 from "./admin/
|
54
|
-
import * as i52 from "./admin/
|
55
|
-
import * as i53 from "./admin/
|
56
|
-
import * as i54 from "./admin/
|
57
|
-
import * as i55 from "./admin/form/workflow/
|
58
|
-
import * as i56 from "./admin/
|
59
|
-
import * as i57 from "./admin/
|
60
|
-
import * as i58 from "
|
61
|
-
import * as i59 from "@angular/common";
|
62
|
-
import * as i60 from "@angular/
|
63
|
-
import * as i61 from "@angular/
|
64
|
-
import * as i62 from "@angular/
|
65
|
-
import * as i63 from "@angular/
|
66
|
-
import * as i64 from "
|
67
|
-
import * as i65 from "./modules/
|
68
|
-
import * as i66 from "./
|
69
|
-
import * as i67 from "./shared.module";
|
39
|
+
import * as i37 from "./admin/configuration-designer/designer.component";
|
40
|
+
import * as i38 from "./admin/form/designer/designer.component";
|
41
|
+
import * as i39 from "./admin/permissions/permissions.component";
|
42
|
+
import * as i40 from "./admin/indices/manage-cube-index.component";
|
43
|
+
import * as i41 from "./admin/profiler/outofoffice.component";
|
44
|
+
import * as i42 from "./admin/utility-wrapper.component";
|
45
|
+
import * as i43 from "./admin/utility.pane.component";
|
46
|
+
import * as i44 from "./admin/core/search.input";
|
47
|
+
import * as i45 from "./admin/core/color-picker.input";
|
48
|
+
import * as i46 from "./admin/document-trace/reassign.dialog";
|
49
|
+
import * as i47 from "./admin/diff/configuration-diff.component";
|
50
|
+
import * as i48 from "./admin/document-trace/document-trace.component";
|
51
|
+
import * as i49 from "./admin/document-trace/trace-element.component";
|
52
|
+
import * as i50 from "./admin/profiler/profiler.component";
|
53
|
+
import * as i51 from "./admin/positions/positions.component";
|
54
|
+
import * as i52 from "./admin/positions/positions-popup.component";
|
55
|
+
import * as i53 from "./admin/form/workflow/workflow.component";
|
56
|
+
import * as i54 from "./admin/form/workflow/node.component";
|
57
|
+
import * as i55 from "./admin/form/workflow/role-node.component";
|
58
|
+
import * as i56 from "./admin/patterns/patterns.component";
|
59
|
+
import * as i57 from "./admin/localized-string.component";
|
60
|
+
import * as i58 from "@angular/common";
|
61
|
+
import * as i59 from "@angular/common/http";
|
62
|
+
import * as i60 from "@angular/forms";
|
63
|
+
import * as i61 from "@angular/flex-layout";
|
64
|
+
import * as i62 from "@angular/router";
|
65
|
+
import * as i63 from "@angular/cdk/scrolling";
|
66
|
+
import * as i64 from "./modules/diagram.module";
|
67
|
+
import * as i65 from "./modules/chart.module";
|
68
|
+
import * as i66 from "./shared.module";
|
70
69
|
export declare class SystemModule {
|
71
70
|
static forChild(): ModuleWithProviders<SystemModule>;
|
72
71
|
static ɵfac: i0.ɵɵFactoryDeclaration<SystemModule, never>;
|
73
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SystemModule, [typeof i1.DesignerPrivilegesComponent, typeof i2.AddContentDirective, typeof i3.IconPickerComponent, typeof i2.EditContentDirective, typeof i2.WidgetContentDirective, typeof i4.PolicyDesignComponent, typeof i5.StateDesignComponent, typeof i6.RoleDesignComponent, typeof i7.GuideDesignComponent, typeof i8.RuleDesignComponent, typeof i9.ReportDesignerComponent, typeof i10.FolderDesignComponent, typeof i11.UtilityDesignComponent, typeof i12.FormDesignComponent, typeof i13.WidgetDesignComponent, typeof i14.CubeDesignComponent, typeof i15.ActionDesignerComponent, typeof i9.ReportDesignerComponent, typeof i16.ViewDesignComponent, typeof i17.TypeDesignComponent, typeof i18.DesignerCubeFilterComponent, typeof i19.CubeIndexDesignComponent, typeof i20.ConfigurationDatasourceDesignComponent, typeof i21.ReturnToRoleActionDesignComponent, typeof i22.PivotViewDesignComponent, typeof i23.CubeViewDesignComponent, typeof i24.BoxFormDesignComponent, typeof i25.AnomalyRuleDesignComponent, typeof i26.UsageReportDesignComponent, typeof i27.DocumentsWidgetDesignComponent, typeof i28.PerformanceWidgetDesignComponent, typeof i29.DocumentsReportDesignComponent, typeof i30.TasksReportDesignComponent, typeof i31.ExploreViewDesignComponent, typeof i32.AnalysisWidgetDesignComponent, typeof i33.ParallelViewDesignComponent, typeof i34.SumViewDesignComponent, typeof i35.MatrixViewDesignComponent, typeof i36.ChartViewDesignComponent, typeof i37.
|
72
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SystemModule, [typeof i1.DesignerPrivilegesComponent, typeof i2.AddContentDirective, typeof i3.IconPickerComponent, typeof i2.EditContentDirective, typeof i2.WidgetContentDirective, typeof i4.PolicyDesignComponent, typeof i5.StateDesignComponent, typeof i6.RoleDesignComponent, typeof i7.GuideDesignComponent, typeof i8.RuleDesignComponent, typeof i9.ReportDesignerComponent, typeof i10.FolderDesignComponent, typeof i11.UtilityDesignComponent, typeof i12.FormDesignComponent, typeof i13.WidgetDesignComponent, typeof i14.CubeDesignComponent, typeof i15.ActionDesignerComponent, typeof i9.ReportDesignerComponent, typeof i16.ViewDesignComponent, typeof i17.TypeDesignComponent, typeof i18.DesignerCubeFilterComponent, typeof i19.CubeIndexDesignComponent, typeof i20.ConfigurationDatasourceDesignComponent, typeof i21.ReturnToRoleActionDesignComponent, typeof i22.PivotViewDesignComponent, typeof i23.CubeViewDesignComponent, typeof i24.BoxFormDesignComponent, typeof i25.AnomalyRuleDesignComponent, typeof i26.UsageReportDesignComponent, typeof i27.DocumentsWidgetDesignComponent, typeof i28.PerformanceWidgetDesignComponent, typeof i29.DocumentsReportDesignComponent, typeof i30.TasksReportDesignComponent, typeof i31.ExploreViewDesignComponent, typeof i32.AnalysisWidgetDesignComponent, typeof i33.ParallelViewDesignComponent, typeof i34.SumViewDesignComponent, typeof i35.MatrixViewDesignComponent, typeof i36.ChartViewDesignComponent, typeof i37.ConfigurationDesignerComponent, typeof i38.FormDesignerComponent, typeof i2.DesignerItemComponent, typeof i39.PermissionsUtility, typeof i40.ManageCubeIndexUtility, typeof i41.ProfileSettingsDialog, typeof i42.UtilityWrapperComponent, typeof i43.UtilityPaneComponent, typeof i44.SearchInput, typeof i45.ColorPicker, typeof i46.ReassignDialog, typeof i47.SystemDiffComponent, typeof i48.DocumentTraceComponent, typeof i49.TraceElementComponent, typeof i50.ProfilerComponent, typeof i51.PositionsComponent, typeof i52.PositionsPopup, typeof i53.WorkflowComponent, typeof i54.WorkflowNodeComponent, typeof i55.RoleNodeComponent, typeof i56.PatternsComponent, typeof i57.LocalizedStringComponent], [typeof i58.CommonModule, typeof i59.HttpClientModule, typeof i60.ReactiveFormsModule, typeof i61.FlexLayoutModule, typeof i62.RouterModule, typeof i63.ScrollingModule, typeof i64.SyncfusionDiagramModule, typeof i65.SyncfusionChartModule, typeof i66.SharedModule], [typeof i39.PermissionsUtility, typeof i40.ManageCubeIndexUtility, typeof i42.UtilityWrapperComponent, typeof i43.UtilityPaneComponent, typeof i47.SystemDiffComponent, typeof i48.DocumentTraceComponent, typeof i50.ProfilerComponent, typeof i51.PositionsComponent, typeof i53.WorkflowComponent, typeof i55.RoleNodeComponent, typeof i56.PatternsComponent]>;
|
74
73
|
static ɵinj: i0.ɵɵInjectorDeclaration<SystemModule>;
|
75
74
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@bizdoc/core",
|
3
|
-
"version": "1.16.
|
3
|
+
"version": "1.16.28",
|
4
4
|
"author": "Moding Ltd.",
|
5
5
|
"homepage": "https://github.com/moding-il/bizdoc.core",
|
6
6
|
"license": "https://github.com/moding-il/bizdoc.core/blob/master/License.md",
|
@@ -9,25 +9,27 @@
|
|
9
9
|
"private": true
|
10
10
|
},
|
11
11
|
"dependencies": {
|
12
|
+
"ajv": "^8.11.0",
|
12
13
|
"@ctrl/ngx-emoji-mart": "^7.0.0",
|
13
14
|
"@microsoft/signalr": "^6.0.8",
|
14
|
-
"@syncfusion/ej2": "^20.2.
|
15
|
-
"@syncfusion/ej2-angular-charts": "^20.2.
|
15
|
+
"@syncfusion/ej2": "^20.2.48",
|
16
|
+
"@syncfusion/ej2-angular-charts": "^20.2.48",
|
16
17
|
"@syncfusion/ej2-angular-circulargauge": "^20.2.45",
|
17
18
|
"@syncfusion/ej2-angular-diagrams": "^20.2.45",
|
18
|
-
"@syncfusion/ej2-angular-gantt": "^20.2.
|
19
|
-
"@syncfusion/ej2-angular-grids": "^20.2.
|
19
|
+
"@syncfusion/ej2-angular-gantt": "^20.2.46",
|
20
|
+
"@syncfusion/ej2-angular-grids": "^20.2.48",
|
20
21
|
"@syncfusion/ej2-angular-kanban": "^20.2.45",
|
21
22
|
"@syncfusion/ej2-angular-pivotview": "^20.2.45",
|
22
|
-
"@syncfusion/ej2-angular-richtexteditor": "^20.2.
|
23
|
+
"@syncfusion/ej2-angular-richtexteditor": "^20.2.46",
|
23
24
|
"@syncfusion/ej2-angular-schedule": "^20.2.45",
|
24
|
-
"@syncfusion/ej2-angular-spreadsheet": "^20.2.
|
25
|
-
"@syncfusion/ej2-
|
25
|
+
"@syncfusion/ej2-angular-spreadsheet": "^20.2.48",
|
26
|
+
"@syncfusion/ej2-angular-inputs": "^20.2.48",
|
27
|
+
"@syncfusion/ej2-base": "^20.2.48",
|
26
28
|
"@teamhive/lottie-player": "^1.0.0",
|
27
29
|
"brace": "^0.11.1",
|
28
30
|
"cookie": "^0.5.0",
|
29
31
|
"dayjs": "^1.11.5",
|
30
|
-
"firebase": "^9.9.
|
32
|
+
"firebase": "^9.9.4",
|
31
33
|
"hammerjs": "~2",
|
32
34
|
"lottie-web": "^5.9.6",
|
33
35
|
"ngx-cookie-service": "14",
|
package/public-api.d.ts
CHANGED
@@ -9,7 +9,8 @@ export { isMobile, isArray, isBoolean, isDate, isObject, isString, isFunction, i
|
|
9
9
|
export { BizDoc, ComponentType } from './lib/core/decorators';
|
10
10
|
export * from './lib/core/configuration';
|
11
11
|
export { BizDocApp, BrokenPage } from './lib/app.component';
|
12
|
-
export {
|
12
|
+
export { LocalizedStringPipe } from './lib/core/pipes/localized-string.pipe';
|
13
|
+
export { ChartType, Type, Folder, Form, LatLng, Dimentions, Guide, GuideStep, Gender, CubeAxis, AxisValue, RecipientModel, Action, State, HeaderModel, LogType, Role, Comment, Attachment, DocumentModel, DRAFT, INBOX, ScheduledEvent, CubeEntry, Log, Recipient, Cube, Widget, Report, CubeIndex, AxesMap, CubeView, Notification, FieldKind, LocalizedString, UserInfo } from './lib/core/models';
|
13
14
|
export { AxisClickEvent, AxisPlace, AxisType } from './lib/cube/declarations';
|
14
15
|
export { UtilityRef } from "./lib/admin/utility-ref";
|
15
16
|
export { ReportRef, ExportEventArgs } from "./lib/reports/report-ref";
|
@@ -56,7 +57,7 @@ export { ActionPipe } from './lib/core/pipes/action.pipe';
|
|
56
57
|
export { StatePipe } from './lib/core/pipes/state.pipe';
|
57
58
|
export { UserNamePipe } from './lib/core/pipes/user-name.pipe';
|
58
59
|
export { DateRangePipe, AgoPipe } from './lib/core/pipes/daterange.pipe';
|
59
|
-
export { PaneRef, PaneOptions, QueryParamNavigation, ParamNavigation, NavigationStart, NavigationEnd, NavigationFocus, NavigationResize, NavigationMode, NavigationExpand, NavigationClose, CollapseNavigation, BackNavigation } from './lib/core/slots/pane-ref';
|
60
|
+
export { PaneRef, PaneOptions, NavigationBase, NavigationPaneBase, QueryParamNavigation, ParamNavigation, NavigationStart, NavigationEnd, NavigationFocus, NavigationResize, NavigationMode, NavigationExpand, NavigationClose, CollapseNavigation, BackNavigation } from './lib/core/slots/pane-ref';
|
60
61
|
export { PanesRouter } from './lib/core/slots/router.service';
|
61
62
|
export { SlotRouterDirective } from './lib/core/slots/router.directive';
|
62
63
|
export { Popup } from './lib/core/popup/popup.service';
|
@@ -1,44 +0,0 @@
|
|
1
|
-
import { __decorate } from "tslib";
|
2
|
-
import { Component, Inject } from "@angular/core";
|
3
|
-
import { BizDoc } from "../../../core/decorators";
|
4
|
-
import { DesignerRef } from "../declarations";
|
5
|
-
import { DesignerElementComponentBase } from "../designer.base";
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "@angular/forms";
|
8
|
-
import * as i2 from "../../../core/slots/router.service";
|
9
|
-
import * as i3 from "@angular/common";
|
10
|
-
import * as i4 from "@angular/material/button";
|
11
|
-
import * as i5 from "@angular/material/icon";
|
12
|
-
import * as i6 from "../../../core/popup/tooltip.directive";
|
13
|
-
import * as i7 from "../../../core/pipes/translate.pipe";
|
14
|
-
import * as i8 from "../declarations";
|
15
|
-
let SurveyFormDesignComponent = class SurveyFormDesignComponent extends DesignerElementComponentBase {
|
16
|
-
constructor(fb, element, ref, _router) {
|
17
|
-
super(fb, element, ref);
|
18
|
-
this._router = _router;
|
19
|
-
this.form = this._fb.group({
|
20
|
-
questions: []
|
21
|
-
});
|
22
|
-
}
|
23
|
-
ngOnInit() {
|
24
|
-
if (!this.model.icon)
|
25
|
-
this.model.icon = 'list_alt';
|
26
|
-
}
|
27
|
-
design() {
|
28
|
-
this._router.navigate(['admin/tools/survey-designer'], { queryParams: { formId: this.model.name } });
|
29
|
-
}
|
30
|
-
};
|
31
|
-
SurveyFormDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyFormDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }, { token: i2.PanesRouter }], target: i0.ɵɵFactoryTarget.Component });
|
32
|
-
SurveyFormDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SurveyFormDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"mode === 'widget'\">\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"design()\" [bizdocTooltip]=\"'Designer'|translate\" [disabled]=\"model.draft\"><mat-icon>list_alt</mat-icon></button>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
33
|
-
SurveyFormDesignComponent = __decorate([
|
34
|
-
BizDoc({ selector: 'survey-designer' })
|
35
|
-
], SurveyFormDesignComponent);
|
36
|
-
export { SurveyFormDesignComponent };
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyFormDesignComponent, decorators: [{
|
38
|
-
type: Component,
|
39
|
-
args: [{ template: "<ng-container *ngIf=\"mode === 'widget'\">\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"design()\" [bizdocTooltip]=\"'Designer'|translate\" [disabled]=\"model.draft\"><mat-icon>list_alt</mat-icon></button>\r\n </div>\r\n</ng-container>\r\n" }]
|
40
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ElementRef }, { type: i8.DesignerRef, decorators: [{
|
41
|
-
type: Inject,
|
42
|
-
args: [DesignerRef]
|
43
|
-
}] }, { type: i2.PanesRouter }]; } });
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uLWRlc2lnbmVyL2VsZW1lbnRzL3N1cnZleS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9lbGVtZW50cy9zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQUl6RCxJQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUEwQixTQUFRLDRCQUE0QztJQUl6RixZQUFZLEVBQWUsRUFDekIsT0FBd0IsRUFDSCxHQUFnQixFQUM3QixPQUFvQjtRQUM1QixLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQURoQixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBTnJCLFNBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM3QixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUMsQ0FBQztJQU1ILENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsNkJBQTZCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDOztzSEFmVSx5QkFBeUIsdUVBTTFCLFdBQVc7MEdBTlYseUJBQXlCLDJFQ1Z0Qyw4U0FNQTtBRElhLHlCQUF5QjtJQURuQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztHQUM3Qix5QkFBeUIsQ0FnQnJDO1NBaEJZLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQUZyQyxTQUFTOzs7MEJBUUwsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zbG90cy9yb3V0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlNZXRhZGF0YSB9IGZyb20gXCIuLi8uLi9mb3JtL3N1cnZleS9zdXJ2ZXkuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERlc2lnbmVyUmVmIH0gZnJvbSBcIi4uL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEZXNpZ25lckVsZW1lbnRDb21wb25lbnRCYXNlIH0gZnJvbSBcIi4uL2Rlc2lnbmVyLmJhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoeyB0ZW1wbGF0ZVVybDogJ3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sJyB9KVxyXG4gIEBCaXpEb2MoeyBzZWxlY3RvcjogJ3N1cnZleS1kZXNpZ25lcicgfSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1EZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBEZXNpZ25lckVsZW1lbnRDb21wb25lbnRCYXNlPFN1cnZleU1ldGFkYXRhPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHF1ZXN0aW9uczogW11cclxuICB9KTtcclxuICBjb25zdHJ1Y3RvcihmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBlbGVtZW50OiBFbGVtZW50UmVmPGFueT4sXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSByZWY6IERlc2lnbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcikge1xyXG4gICAgc3VwZXIoZmIsIGVsZW1lbnQsIHJlZik7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLmljb24pIHRoaXMubW9kZWwuaWNvbiA9ICdsaXN0X2FsdCc7XHJcbiAgfVxyXG4gIGRlc2lnbigpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2FkbWluL3Rvb2xzL3N1cnZleS1kZXNpZ25lciddLCB7IHF1ZXJ5UGFyYW1zOiB7IGZvcm1JZDogdGhpcy5tb2RlbC5uYW1lIH0gfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnd2lkZ2V0J1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkZXNpZ24oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEZXNpZ25lcid8dHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cIm1vZGVsLmRyYWZ0XCI+PG1hdC1pY29uPmxpc3RfYWx0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|
@@ -1,180 +0,0 @@
|
|
1
|
-
import { __decorate } from "tslib";
|
2
|
-
import { Component, HostListener } from "@angular/core";
|
3
|
-
import { Validators } from "@angular/forms";
|
4
|
-
import { BizDoc } from "../../../core/decorators";
|
5
|
-
import { cleanup } from "../../../core/functions";
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "@angular/forms";
|
8
|
-
import * as i2 from "../../../core/slots/pane-ref";
|
9
|
-
import * as i3 from "../../../core/prompt.service";
|
10
|
-
import * as i4 from "../../../core/session.service";
|
11
|
-
import * as i5 from "../../utility-ref";
|
12
|
-
import * as i6 from "@angular/common";
|
13
|
-
import * as i7 from "@angular/cdk/drag-drop";
|
14
|
-
import * as i8 from "@angular/material/toolbar";
|
15
|
-
import * as i9 from "@angular/material/core";
|
16
|
-
import * as i10 from "@angular/material/form-field";
|
17
|
-
import * as i11 from "@angular/material/select";
|
18
|
-
import * as i12 from "@angular/material/button";
|
19
|
-
import * as i13 from "@angular/material/checkbox";
|
20
|
-
import * as i14 from "@angular/cdk/text-field";
|
21
|
-
import * as i15 from "@angular/material/input";
|
22
|
-
import * as i16 from "@angular/material/icon";
|
23
|
-
import * as i17 from "@angular/material/menu";
|
24
|
-
import * as i18 from "../../../core/popup/tooltip.directive";
|
25
|
-
import * as i19 from "../../core/ace.input";
|
26
|
-
import * as i20 from "../../../core/pipes/translate.pipe";
|
27
|
-
const NAME = /^[A-Za-z]+\w*$/;
|
28
|
-
/** */
|
29
|
-
let SurveyDesignerComponent = class SurveyDesignerComponent {
|
30
|
-
constructor(_fb, _pane, _cd, _ps, _session, _el, _ref) {
|
31
|
-
this._fb = _fb;
|
32
|
-
this._pane = _pane;
|
33
|
-
this._cd = _cd;
|
34
|
-
this._ps = _ps;
|
35
|
-
this._session = _session;
|
36
|
-
this._el = _el;
|
37
|
-
this._ref = _ref;
|
38
|
-
this.loading = true;
|
39
|
-
this.tools = true;
|
40
|
-
this.saving = false;
|
41
|
-
this.history = [];
|
42
|
-
this.historyIndex = -1;
|
43
|
-
this.questions = this._fb.array([]);
|
44
|
-
this.form = this._fb.group({
|
45
|
-
questions: this.questions
|
46
|
-
});
|
47
|
-
this.settings = false;
|
48
|
-
this.datatypes = this._session.profile.types;
|
49
|
-
this.cubes = this._session.profile.cubes;
|
50
|
-
}
|
51
|
-
ngOnInit() {
|
52
|
-
this._pane.queryParamsChange.subscribe(p => {
|
53
|
-
const { formId } = p;
|
54
|
-
formId && this._open(formId);
|
55
|
-
});
|
56
|
-
this.form.valueChanges.pipe().
|
57
|
-
subscribe(v => {
|
58
|
-
//this._notifyChange();
|
59
|
-
});
|
60
|
-
}
|
61
|
-
_open(formId) {
|
62
|
-
this._ref.populate(formId).subscribe(r => {
|
63
|
-
this._formId = formId;
|
64
|
-
this._assign(r);
|
65
|
-
this.loading = false;
|
66
|
-
});
|
67
|
-
}
|
68
|
-
_assign(model) {
|
69
|
-
this.model = model || { questions: [] };
|
70
|
-
this.questions.clear({ emitEvent: false });
|
71
|
-
this.form.patchValue(this.model, { emitEvent: false });
|
72
|
-
model.questions?.forEach(q => this.questions.push(this._questionform(q), { emitEvent: false }));
|
73
|
-
}
|
74
|
-
_questionform(model) {
|
75
|
-
const name = this._fb.control(model.name, [Validators.required, Validators.pattern(NAME)]), label = this._fb.control(model.label, Validators.required);
|
76
|
-
return this._fb.group({
|
77
|
-
name,
|
78
|
-
label,
|
79
|
-
description: model.description,
|
80
|
-
type: model.type,
|
81
|
-
defaultValue: model.defaultValue,
|
82
|
-
dataType: model.dataType,
|
83
|
-
placeholder: model.placeholder,
|
84
|
-
pattern: model.pattern,
|
85
|
-
kind: model.kind,
|
86
|
-
minLength: model.minLength,
|
87
|
-
maxLength: model.maxLength,
|
88
|
-
min: model.min,
|
89
|
-
max: model.max,
|
90
|
-
required: model.required,
|
91
|
-
options: this._fb.array(model.options ? [] : [])
|
92
|
-
});
|
93
|
-
}
|
94
|
-
add(type, evt) {
|
95
|
-
let n = 0, name, label;
|
96
|
-
do {
|
97
|
-
n++;
|
98
|
-
name = 'question' + '_' + n;
|
99
|
-
label = 'Question' + ' ' + n;
|
100
|
-
} while (this.questions.controls.
|
101
|
-
find(c => c.get('name').value === name || c.get('label').value === label));
|
102
|
-
this._notifyChange();
|
103
|
-
this.questions.push(this._questionform({
|
104
|
-
type,
|
105
|
-
name,
|
106
|
-
label,
|
107
|
-
}));
|
108
|
-
this._cd.detectChanges();
|
109
|
-
setTimeout(() => this._el.nativeElement.querySelector('.designer-field:last-child input')?.focus());
|
110
|
-
}
|
111
|
-
remove(question) {
|
112
|
-
this._notifyChange();
|
113
|
-
this.questions.controls.remove(question);
|
114
|
-
}
|
115
|
-
_notifyChange() {
|
116
|
-
this.history.push(JSON.stringify(this.form.value));
|
117
|
-
this.historyIndex = this.history.length - 1;
|
118
|
-
this.form.markAsDirty();
|
119
|
-
}
|
120
|
-
undo() {
|
121
|
-
this._restore();
|
122
|
-
this.historyIndex--;
|
123
|
-
}
|
124
|
-
redo() {
|
125
|
-
this._restore();
|
126
|
-
this.historyIndex++;
|
127
|
-
}
|
128
|
-
_restore() {
|
129
|
-
this._assign(JSON.parse(this.history[this.historyIndex]));
|
130
|
-
}
|
131
|
-
/**
|
132
|
-
* Ctrl-s save; Ctrl-z undo
|
133
|
-
* @param event
|
134
|
-
*/
|
135
|
-
handleKeyboardEvent(event) {
|
136
|
-
if (event.ctrlKey) {
|
137
|
-
if (event.which === 83 || event.which === 115) {
|
138
|
-
this.form.dirty && this.save();
|
139
|
-
event.preventDefault();
|
140
|
-
event.stopPropagation();
|
141
|
-
}
|
142
|
-
}
|
143
|
-
}
|
144
|
-
drop(event, collection) {
|
145
|
-
this._notifyChange();
|
146
|
-
const element = collection.at(event.previousIndex);
|
147
|
-
collection.removeAt(event.previousIndex);
|
148
|
-
collection.insert(event.currentIndex, element);
|
149
|
-
//moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
|
150
|
-
}
|
151
|
-
save() {
|
152
|
-
this.saving = true;
|
153
|
-
Object.assign(this.model, this.form.value);
|
154
|
-
this._ref.execute({ metadata: cleanup(this.model), formId: this._formId }).subscribe(() => {
|
155
|
-
this._ps.toast('ChangesSaved');
|
156
|
-
this.form.markAsPristine();
|
157
|
-
const form = this._session.profile.forms.find(f => f.name == this._formId);
|
158
|
-
if (form)
|
159
|
-
form.options = this.model;
|
160
|
-
this.saving = false;
|
161
|
-
}, () => {
|
162
|
-
this._ps.error();
|
163
|
-
this.saving = false;
|
164
|
-
});
|
165
|
-
}
|
166
|
-
};
|
167
|
-
SurveyDesignerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyDesignerComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PaneRef }, { token: i0.ChangeDetectorRef }, { token: i3.PromptService }, { token: i4.SessionService }, { token: i0.ElementRef }, { token: i5.UtilityRef }], target: i0.ɵɵFactoryTarget.Component });
|
168
|
-
SurveyDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SurveyDesignerComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon>redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"settings = !settings\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div class=\"column\" *ngIf=\"settings\">\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Subject'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"subject\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Summary'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"summary\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, questions)\">\r\n <div class=\"column\" *ngFor=\"let q of questions.controls; let i = index\" cdkDrag [attr.data-index]=\"i\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"q\">\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"q.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"q.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Label'|translate}}</mat-label>\r\n <input matInput required formControlName=\"label\" />\r\n <mat-error *ngIf=\"q.get('label').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Label'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Description'|translate}}</mat-label>\r\n <textarea matInput formControlName=\"description\" cdkTextareaAutosize></textarea>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <ng-container [ngSwitch]=\"q.get('type').value\">\r\n <div *ngSwitchCase=\"'Date'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Text'\">\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"kind\">\r\n <mat-option value=\"String\">{{'Text'|translate}}</mat-option>\r\n <mat-option value=\"PhoneNumber\">{{'Tel'|translate}}</mat-option>\r\n <mat-option value=\"EmailAddress\">{{'Email'|translate}}</mat-option>\r\n <mat-option value=\"Address\">{{'Address'|translate}}</mat-option>\r\n <mat-option value=\"Url\">{{'Url'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngSwitchCase=\"'Number'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Choice'\">\r\n </div>\r\n <mat-form-field *ngSwitchCase=\"'Select'\">\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <mat-option *ngFor=\"let t of datatypes\" [value]=\"t.name\">{{t.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"q.get('dataType').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'DataType'\"></mat-error>\r\n </mat-form-field>\r\n <div *ngSwitchDefault>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"actions\">\r\n <button mat-stroked-button (click)=\"remove(q)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"questionTypeMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #questionTypeMenu>\r\n <button mat-menu-item (click)=\"add('Text', $event)\">{{'Text'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('HTML', $event)\">{{'HTML'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Number', $event)\">{{'Numeric'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Date', $event)\">{{'Date'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Select', $event)\">{{'Select'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Choice', $event)\">{{'Choice'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('YesNo', $event)\">{{'YesNo'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Checkbox', $event)\">{{'Checkbox'|translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}section,.designer-row,.designer-field{border:2px solid transparent;border-radius:3px;padding:8px}section:hover,.designer-row:hover,.designer-field:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i17.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i17.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i17.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i18.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i19.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i20.TranslatePipe, name: "translate" }] });
|
169
|
-
SurveyDesignerComponent = __decorate([
|
170
|
-
BizDoc({ selector: 'bizdoc-survey-designer' })
|
171
|
-
], SurveyDesignerComponent);
|
172
|
-
export { SurveyDesignerComponent };
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyDesignerComponent, decorators: [{
|
174
|
-
type: Component,
|
175
|
-
args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon>redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"settings = !settings\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div class=\"column\" *ngIf=\"settings\">\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Subject'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"subject\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Summary'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"summary\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, questions)\">\r\n <div class=\"column\" *ngFor=\"let q of questions.controls; let i = index\" cdkDrag [attr.data-index]=\"i\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"q\">\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"q.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"q.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Label'|translate}}</mat-label>\r\n <input matInput required formControlName=\"label\" />\r\n <mat-error *ngIf=\"q.get('label').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Label'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Description'|translate}}</mat-label>\r\n <textarea matInput formControlName=\"description\" cdkTextareaAutosize></textarea>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <ng-container [ngSwitch]=\"q.get('type').value\">\r\n <div *ngSwitchCase=\"'Date'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Text'\">\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"kind\">\r\n <mat-option value=\"String\">{{'Text'|translate}}</mat-option>\r\n <mat-option value=\"PhoneNumber\">{{'Tel'|translate}}</mat-option>\r\n <mat-option value=\"EmailAddress\">{{'Email'|translate}}</mat-option>\r\n <mat-option value=\"Address\">{{'Address'|translate}}</mat-option>\r\n <mat-option value=\"Url\">{{'Url'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngSwitchCase=\"'Number'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Choice'\">\r\n </div>\r\n <mat-form-field *ngSwitchCase=\"'Select'\">\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <mat-option *ngFor=\"let t of datatypes\" [value]=\"t.name\">{{t.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"q.get('dataType').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'DataType'\"></mat-error>\r\n </mat-form-field>\r\n <div *ngSwitchDefault>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"actions\">\r\n <button mat-stroked-button (click)=\"remove(q)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"questionTypeMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #questionTypeMenu>\r\n <button mat-menu-item (click)=\"add('Text', $event)\">{{'Text'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('HTML', $event)\">{{'HTML'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Number', $event)\">{{'Numeric'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Date', $event)\">{{'Date'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Select', $event)\">{{'Select'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Choice', $event)\">{{'Choice'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('YesNo', $event)\">{{'YesNo'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Checkbox', $event)\">{{'Checkbox'|translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}section,.designer-row,.designer-field{border:2px solid transparent;border-radius:3px;padding:8px}section:hover,.designer-row:hover,.designer-field:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
|
176
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.PaneRef }, { type: i0.ChangeDetectorRef }, { type: i3.PromptService }, { type: i4.SessionService }, { type: i0.ElementRef }, { type: i5.UtilityRef }]; }, propDecorators: { handleKeyboardEvent: [{
|
177
|
-
type: HostListener,
|
178
|
-
args: ['document:keydown', ['$event']]
|
179
|
-
}] } });
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9zdXJ2ZXkvc3VydmV5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9zdXJ2ZXkvc3VydmV5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFrRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT2xELE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDO0FBRTlCLE1BQU07QUFNQyxJQUFNLHVCQUF1QixHQUE3QixNQUFNLHVCQUF1QjtJQWdCbEMsWUFDVSxHQUFnQixFQUNoQixLQUFtQixFQUNuQixHQUFzQixFQUN0QixHQUFrQixFQUNsQixRQUF3QixFQUN4QixHQUFlLEVBQ2YsSUFBK0Y7UUFOL0YsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLFNBQUksR0FBSixJQUFJLENBQTJGO1FBdEJ6RyxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFTixZ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SSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNFLElBQUksSUFBSTtnQkFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztvSEFsSlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsZ0lDbkJwQyx5c0xBK0ZBO0FENUVhLHVCQUF1QjtJQURuQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztHQUNsQyx1QkFBdUIsQ0FtSm5DO1NBbkpZLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQUxuQyxTQUFTOzttUUEwSFIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQml6RG9jIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZGVjb3JhdG9yc1wiO1xyXG5pbXBvcnQgeyBjbGVhbnVwIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IEN1YmUsIEZpZWxkS2luZCwgVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlSZWYgfSBmcm9tIFwiLi4vLi4vdXRpbGl0eS1yZWZcIjtcclxuXHJcbmNvbnN0IE5BTUUgPSAvXltBLVphLXpdK1xcdyokLztcclxuXHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ3N1cnZleS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ3N1cnZleS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1zdXJ2ZXktZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlEZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgbG9hZGluZyA9IHRydWU7XHJcbiAgdG9vbHMgPSB0cnVlO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIG1vZGVsOiBTdXJ2ZXlNZXRhZGF0YTtcclxuICByZWFkb25seSBoaXN0b3J5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGhpc3RvcnlJbmRleCA9IC0xO1xyXG4gIHJlYWRvbmx5IGRhdGF0eXBlczogVHlwZVtdO1xyXG4gIHJlYWRvbmx5IGN1YmVzOiBDdWJlW107XHJcbiAgcmVhZG9ubHkgcXVlc3Rpb25zID0gdGhpcy5fZmIuYXJyYXkoW10pO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBxdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zXHJcbiAgfSk7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBzZXR0aW5ncyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Zvcm1JZDogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcHM6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IFN1cnZleU1ldGFkYXRhLCBmb3JtSWQ6IHN0cmluZyB9LCBTdXJ2ZXlNZXRhZGF0YSwgc3RyaW5nPikge1xyXG4gICAgdGhpcy5kYXRhdHlwZXMgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudHlwZXM7XHJcbiAgICB0aGlzLmN1YmVzID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BhbmUucXVlcnlQYXJhbXNDaGFuZ2Uuc3Vic2NyaWJlKHAgPT4ge1xyXG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gcDtcclxuICAgICAgZm9ybUlkICYmIHRoaXMuX29wZW4oZm9ybUlkKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKCkuXHJcbiAgICAgIHN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgICAvL3RoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb3Blbihmb3JtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLl9mb3JtSWQgPSBmb3JtSWQ7XHJcbiAgICAgIHRoaXMuX2Fzc2lnbihyKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYXNzaWduKG1vZGVsOiBTdXJ2ZXlNZXRhZGF0YSkge1xyXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsIHx8IHsgcXVlc3Rpb25zOiBbXSB9O1xyXG4gICAgdGhpcy5xdWVzdGlvbnMuY2xlYXIoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbCBhcyBhbnksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIG1vZGVsLnF1ZXN0aW9ucz8uZm9yRWFjaChxID0+IHRoaXMucXVlc3Rpb25zLnB1c2godGhpcy5fcXVlc3Rpb25mb3JtKHEpIGFzIGFueSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlc3Rpb25mb3JtKG1vZGVsOiBRdWVzdGlvbik6IGFueSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChtb2RlbC5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKE5BTUUpXSksXHJcbiAgICAgIGxhYmVsID0gdGhpcy5fZmIuY29udHJvbChtb2RlbC5sYWJlbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBsYWJlbCxcclxuICAgICAgZGVzY3JpcHRpb246IG1vZGVsLmRlc2NyaXB0aW9uLFxyXG4gICAgICB0eXBlOiBtb2RlbC50eXBlLFxyXG4gICAgICBkZWZhdWx0VmFsdWU6IChtb2RlbCBhcyBOdW1iZXIpLmRlZmF1bHRWYWx1ZSxcclxuICAgICAgZGF0YVR5cGU6IChtb2RlbCBhcyBTZWxlY3QpLmRhdGFUeXBlLFxyXG4gICAgICBwbGFjZWhvbGRlcjogKG1vZGVsIGFzIFRleHQpLnBsYWNlaG9sZGVyLFxyXG4gICAgICBwYXR0ZXJuOiAobW9kZWwgYXMgVGV4dCkucGF0dGVybixcclxuICAgICAga2luZDogKG1vZGVsIGFzIFRleHQpLmtpbmQsXHJcbiAgICAgIG1pbkxlbmd0aDogKG1vZGVsIGFzIFRleHQpLm1pbkxlbmd0aCxcclxuICAgICAgbWF4TGVuZ3RoOiAobW9kZWwgYXMgVGV4dCkubWF4TGVuZ3RoLFxyXG4gICAgICBtaW46IChtb2RlbCBhcyBOdW1iZXIpLm1pbixcclxuICAgICAgbWF4OiAobW9kZWwgYXMgTnVtYmVyKS5tYXgsXHJcbiAgICAgIHJlcXVpcmVkOiBtb2RlbC5yZXF1aXJlZCxcclxuICAgICAgb3B0aW9uczogdGhpcy5fZmIuYXJyYXkoKG1vZGVsIGFzIENob2ljZSkub3B0aW9ucyA/IFtdOiBbXSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIGFkZCh0eXBlOiBhbnksIGV2dD86IEV2ZW50KSB7XHJcbiAgICBsZXQgbiA9IDAsIG5hbWUsIGxhYmVsO1xyXG4gICAgZG8ge1xyXG4gICAgICBuKys7XHJcbiAgICAgIG5hbWUgPSAncXVlc3Rpb24nICsgJ18nICsgbjtcclxuICAgICAgbGFiZWwgPSAnUXVlc3Rpb24nICsgJyAnICsgbjtcclxuICAgIH0gd2hpbGUgKHRoaXMucXVlc3Rpb25zLmNvbnRyb2xzLlxyXG4gICAgICAgIGZpbmQoYyA9PiBjLmdldCgnbmFtZScpLnZhbHVlID09PSBuYW1lIHx8IGMuZ2V0KCdsYWJlbCcpLnZhbHVlID09PSBsYWJlbCkpO1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICB0aGlzLnF1ZXN0aW9ucy5wdXNoKHRoaXMuX3F1ZXN0aW9uZm9ybSh7XHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PlxyXG4gICAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZXNpZ25lci1maWVsZDpsYXN0LWNoaWxkIGlucHV0Jyk/LmZvY3VzKClcclxuICAgIClcclxuICB9XHJcbiAgcmVtb3ZlKHF1ZXN0aW9uOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgdGhpcy5xdWVzdGlvbnMuY29udHJvbHMucmVtb3ZlKHF1ZXN0aW9uIGFzIGFueSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX25vdGlmeUNoYW5nZSgpIHtcclxuICAgIHRoaXMuaGlzdG9yeS5wdXNoKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS52YWx1ZSkpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXggPSB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuICB1bmRvKCkge1xyXG4gICAgdGhpcy5fcmVzdG9yZSgpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcclxuICB9XHJcbiAgcmVkbygpIHtcclxuICAgIHRoaXMuX3Jlc3RvcmUoKTtcclxuICAgIHRoaXMuaGlzdG9yeUluZGV4Kys7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jlc3RvcmUoKSB7XHJcbiAgICB0aGlzLl9hc3NpZ24oSlNPTi5wYXJzZSh0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5SW5kZXhdKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlOyBDdHJsLXogdW5kb1xyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgIGlmIChldmVudC53aGljaCA9PT0gODMgfHwgZXZlbnQud2hpY2ggPT09IDExNSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5kaXJ0eSAmJiB0aGlzLnNhdmUoKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEZvcm1Hcm91cD4sIGNvbGxlY3Rpb246IEZvcm1BcnJheSkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gY29sbGVjdGlvbi5hdChldmVudC5wcmV2aW91c0luZGV4KTtcclxuICAgIGNvbGxlY3Rpb24ucmVtb3ZlQXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICBjb2xsZWN0aW9uLmluc2VydChldmVudC5jdXJyZW50SW5kZXgsIGVsZW1lbnQpO1xyXG4gICAgLy9tb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICB0aGlzLl9yZWYuZXhlY3V0ZSh7IG1ldGFkYXRhOiBjbGVhbnVwKHRoaXMubW9kZWwpLCBmb3JtSWQ6IHRoaXMuX2Zvcm1JZCB9KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9wcy50b2FzdCgnQ2hhbmdlc1NhdmVkJyk7XHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT0gdGhpcy5fZm9ybUlkKTtcclxuICAgICAgaWYgKGZvcm0pIGZvcm0ub3B0aW9ucyA9IHRoaXMubW9kZWw7XHJcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTdXJ2ZXlNZXRhZGF0YSB7XHJcbiAgcXVlc3Rpb25zOiBRdWVzdGlvbltdO1xyXG59XHJcbmV4cG9ydCB0eXBlIFF1ZXN0aW9uID0gVGV4dCB8IEh0bWwgfCBEYXRlIHwgTnVtYmVyIHwgU2VsZWN0IHwgQ2hvaWNlIHwgWWVzTm8gfCBDaGVja2JveDtcclxuaW50ZXJmYWNlIFF1ZXN0aW9uQmFzZSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSHRtbCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgdHlwZTogJ0h0bWwnO1xyXG4gIGxpbmVzPzogbnVtYmVyO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGV4dCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgdHlwZTogJ1RleHQnO1xyXG4gIHBhdHRlcm4/OiBzdHJpbmc7XHJcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1heExlbmd0aD86IG51bWJlcjtcclxuICBwcmVmaXhJY29uPzogc3RyaW5nO1xyXG4gIHN1Zml4SWNvbj86IHN0cmluZztcclxuICBsaW5lcz86IG51bWJlcjtcclxuICBraW5kPzogRmllbGRLaW5kO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3ggZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gIHR5cGU6ICdDaGVja2JveCc7XHJcbiAgZGVmYXVsdFZhbHVlPzogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFllc05vIGV4dGVuZHMgUXVlc3Rpb25CYXNlIHtcclxuICB0eXBlOiAnWWVzTm8nO1xyXG4gIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEYXRlIGV4dGVuZHMgUXVlc3Rpb25CYXNlIHtcclxuICB0eXBlOiAnRGF0ZSc7XHJcbiAgcHJlZml4SWNvbj86IHN0cmluZztcclxuICBzdWZpeEljb24/OiBzdHJpbmc7XHJcbiAgZGVmYXVsdFZhbHVlPzogRGF0ZTtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlciBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgdHlwZTogJ051bWJlcic7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgZGVmYXVsdFZhbHVlPzogbnVtYmVyO1xyXG4gIHByZWZpeEljb24/OiBzdHJpbmc7XHJcbiAgc3VmaXhJY29uPzogc3RyaW5nO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3QgZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gIHR5cGU6ICdTZWxlY3QnO1xyXG4gIHByZWZpeEljb24/OiBzdHJpbmc7XHJcbiAgc3VmaXhJY29uPzogc3RyaW5nO1xyXG4gIGRhdGFUeXBlPzogc3RyaW5nO1xyXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICBtdWx0aXBsZT86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBDaG9pY2UgZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gIHR5cGU6ICdDaG9pY2UnO1xyXG4gIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS5kaXJ0eSB8fCBsb2FkaW5nIHx8IHNhdmluZ1wiIFtiaXpkb2NUb29sdGlwXT1cIidTYXZlJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJoaXN0b3J5SW5kZXggPT09IC0xXCI+PG1hdC1pY29uPnVuZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiaGlzdG9yeUluZGV4ID09PSBoaXN0b3J5Lmxlbmd0aCAtIDFcIj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzZXR0aW5ncyA9ICFzZXR0aW5nc1wiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XHJcbjwvbWF0LXRvb2xiYXI+XHJcbjxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwibW9kZWxcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJzZXR0aW5nc1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1ZhbHVlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU3ViamVjdCd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGJpemRvYy1hY2UtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3ViamVjdFwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU3VtbWFyeSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGJpemRvYy1hY2UtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCBxdWVzdGlvbnMpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nRm9yPVwibGV0IHEgb2YgcXVlc3Rpb25zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgY2RrRHJhZyBbYXR0ci5kYXRhLWluZGV4XT1cImlcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VjdGlvbi1kcmFnXCIgY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiBbZm9ybUdyb3VwXT1cInFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XHJcbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicS5nZXQoJ25hbWUnKS5oYXNFcnJvcigncGF0dGVybicpXCIgW2lubmVySFRNTF09XCInUHJvZ3JhbVBhdHRlcm5FcnInfHRyYW5zbGF0ZVwiPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInEuZ2V0KCduYW1lJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOidGaWVsZCdcIj48L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snTGFiZWwnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxcIiAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInEuZ2V0KCdsYWJlbCcpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTonTGFiZWwnXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J0Rlc2NyaXB0aW9uJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgY2RrVGV4dGFyZWFBdXRvc2l6ZT48L3RleHRhcmVhPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJyZXF1aXJlZFwiPnt7J01hbmRhdG9yeSd8dHJhbnNsYXRlfX08L21hdC1jaGVja2JveD5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJxLmdldCgndHlwZScpLnZhbHVlXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInRGF0ZSdcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1RleHQnXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J1R5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwia2luZFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdHJpbmdcIj57eydUZXh0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUGhvbmVOdW1iZXJcIj57eydUZWwnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJFbWFpbEFkZHJlc3NcIj57eydFbWFpbCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFkZHJlc3NcIj57eydBZGRyZXNzJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiVXJsXCI+e3snVXJsJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidOdW1iZXInXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidDaG9pY2UnXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiJ1NlbGVjdCdcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydEYXRhVHlwZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZGF0YVR5cGVcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBkYXRhdHlwZXNcIiBbdmFsdWVdPVwidC5uYW1lXCI+e3t0LnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInEuZ2V0KCdkYXRhVHlwZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTonRGF0YVR5cGUnXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmUocSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLTxkaXYgKmNka0RyYWdQbGFjZWhvbGRlciBjbGFzcz1cImRyYWctcGxhY2Vob2xkZXJcIj48L2Rpdj4tLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJxdWVzdGlvblR5cGVNZW51XCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPG1hdC1tZW51ICNxdWVzdGlvblR5cGVNZW51PlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnVGV4dCcsICRldmVudClcIj57eydUZXh0J3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnSFRNTCcsICRldmVudClcIj57eydIVE1MJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnTnVtYmVyJywgJGV2ZW50KVwiPnt7J051bWVyaWMnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkKCdEYXRlJywgJGV2ZW50KVwiPnt7J0RhdGUnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkKCdTZWxlY3QnLCAkZXZlbnQpXCI+e3snU2VsZWN0J3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnQ2hvaWNlJywgJGV2ZW50KVwiPnt7J0Nob2ljZSd8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhZGQoJ1llc05vJywgJGV2ZW50KVwiPnt7J1llc05vJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnQ2hlY2tib3gnLCAkZXZlbnQpXCI+e3snQ2hlY2tib3gnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|