ngx-rs-ant 2.2.2 → 2.2.3

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.
Files changed (54) hide show
  1. package/esm2020/data-grid/data-grid.component.mjs +3 -3
  2. package/esm2020/data-grid/instance-link-template/instance-link-template.component.mjs +3 -3
  3. package/esm2020/form/form.component.mjs +4 -4
  4. package/esm2020/public-api.mjs +11 -1
  5. package/esm2020/types/component/mark-item-component-base.mjs +8 -0
  6. package/esm2020/types/config/mark-item-config-base.mjs +4 -0
  7. package/esm2020/types/config/modal-config-base.mjs +1 -1
  8. package/esm2020/util/utils.mjs +17 -17
  9. package/esm2020/word/section/color.pipe.mjs +19 -0
  10. package/esm2020/word/section/mark.pipe.mjs +20 -0
  11. package/esm2020/word/section/node/node.component.mjs +31 -0
  12. package/esm2020/word/section/node/paragraph/paragraph.component.mjs +44 -0
  13. package/esm2020/word/section/node/paragraph/run/run.component.mjs +84 -0
  14. package/esm2020/word/section/node/paragraph-for-input/item/item.component.mjs +64 -0
  15. package/esm2020/word/section/node/paragraph-for-input/paragraph-for-input.component.mjs +46 -0
  16. package/esm2020/word/section/pt.pipe.mjs +22 -0
  17. package/esm2020/word/section/section.component.mjs +44 -0
  18. package/esm2020/word/section/section.module.mjs +50 -0
  19. package/esm2020/word/section/section.service.mjs +48 -0
  20. package/esm2020/word/word-designer/mark-config/mark-config.component.mjs +77 -0
  21. package/esm2020/word/word-designer/word-designer.component.mjs +207 -0
  22. package/esm2020/word/word-designer/word-designer.module.mjs +35 -0
  23. package/esm2020/word/word-designer/word-designer.service.mjs +69 -0
  24. package/esm2020/word/word-editor/word-editor.component.mjs +154 -0
  25. package/esm2020/word/word-editor/word-editor.module.mjs +32 -0
  26. package/esm2020/word/word-editor/word-editor.service.mjs +67 -0
  27. package/fesm2015/ngx-rs-ant.mjs +1038 -22
  28. package/fesm2015/ngx-rs-ant.mjs.map +1 -1
  29. package/fesm2020/ngx-rs-ant.mjs +1031 -22
  30. package/fesm2020/ngx-rs-ant.mjs.map +1 -1
  31. package/package.json +2 -2
  32. package/public-api.d.ts +10 -0
  33. package/types/component/mark-item-component-base.d.ts +21 -0
  34. package/types/config/mark-item-config-base.d.ts +17 -0
  35. package/types/config/modal-config-base.d.ts +8 -0
  36. package/util/utils.d.ts +10 -10
  37. package/word/section/color.pipe.d.ts +7 -0
  38. package/word/section/mark.pipe.d.ts +10 -0
  39. package/word/section/node/node.component.d.ts +12 -0
  40. package/word/section/node/paragraph/paragraph.component.d.ts +35 -0
  41. package/word/section/node/paragraph/run/run.component.d.ts +21 -0
  42. package/word/section/node/paragraph-for-input/item/item.component.d.ts +27 -0
  43. package/word/section/node/paragraph-for-input/paragraph-for-input.component.d.ts +35 -0
  44. package/word/section/pt.pipe.d.ts +7 -0
  45. package/word/section/section.component.d.ts +22 -0
  46. package/word/section/section.module.d.ts +16 -0
  47. package/word/section/section.service.d.ts +24 -0
  48. package/word/word-designer/mark-config/mark-config.component.d.ts +21 -0
  49. package/word/word-designer/word-designer.component.d.ts +48 -0
  50. package/word/word-designer/word-designer.module.d.ts +11 -0
  51. package/word/word-designer/word-designer.service.d.ts +13 -0
  52. package/word/word-editor/word-editor.component.d.ts +41 -0
  53. package/word/word-editor/word-editor.module.d.ts +10 -0
  54. package/word/word-editor/word-editor.service.d.ts +14 -0
@@ -0,0 +1,154 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { WordEditorService } from "./word-editor.service";
3
+ import { notifySuccess, validateGroup } from "../../util/utils";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../section/section.service";
6
+ import * as i2 from "./word-editor.service";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "devextreme-angular/ui/nested";
9
+ import * as i5 from "devextreme-angular/ui/button";
10
+ import * as i6 from "devextreme-angular/ui/load-panel";
11
+ import * as i7 from "devextreme-angular/ui/validation-group";
12
+ import * as i8 from "../section/section.component";
13
+ export class WordEditorComponent {
14
+ constructor(service, wordEditorService, viewContainerRef) {
15
+ this.service = service;
16
+ this.wordEditorService = wordEditorService;
17
+ this.viewContainerRef = viewContainerRef;
18
+ this.showPullTemplateButton = true;
19
+ this.showPullDataButton = true;
20
+ this.showCalcButton = true;
21
+ this.showValidateButton = true;
22
+ this.showGenerateFileButton = true;
23
+ this.showCloseButton = true;
24
+ this.readonly = false;
25
+ this.onSaved = new EventEmitter();
26
+ this.onGenerated = new EventEmitter();
27
+ this.onClosed = new EventEmitter();
28
+ this.loading = false;
29
+ }
30
+ ngOnInit() {
31
+ if (!this.oid) {
32
+ return;
33
+ }
34
+ this.service.tenant = this.tenant;
35
+ this.service.templateClassName = this.templateClassName;
36
+ this.service.instanceClassName = this.className;
37
+ this.service.instanceOid = this.oid;
38
+ this.service.params = this.params;
39
+ this.service.tabViewContainerRef = this.tabViewContainerRef;
40
+ this.service.readonly = this.readonly;
41
+ this.loading = true;
42
+ this.wordEditorService.loadTemplate(this.tenant, this.className, this.oid).subscribe(response => {
43
+ this.sections = response.sections || [];
44
+ this.service.marks = response.marks;
45
+ this.loading = false;
46
+ });
47
+ }
48
+ pullTemplate() {
49
+ if (confirm('该操作会清除已录入的数据,确定重新拉取模板配置?')) {
50
+ this.loading = true;
51
+ this.wordEditorService.reloadTemplate(this.tenant, this.className, this.oid, this.templateClassName).subscribe(response => {
52
+ this.sections = response.data?.sections || [];
53
+ this.service.marks = response.data.marks;
54
+ this.loading = false;
55
+ });
56
+ }
57
+ }
58
+ pullData() {
59
+ this.loading = true;
60
+ this.wordEditorService.pullData(this.tenant, this.className, this.oid, {
61
+ marks: JSON.stringify(this.service.marks)
62
+ }).subscribe(response => {
63
+ for (let mark of this.service.marks) {
64
+ if (response.data.hasOwnProperty(mark.name)) {
65
+ mark.value = response.data[mark.name];
66
+ }
67
+ }
68
+ this.service.valueUpdated.emit();
69
+ this.loading = false;
70
+ notifySuccess('拉取完成');
71
+ });
72
+ }
73
+ calc() {
74
+ }
75
+ validate() {
76
+ validateGroup(this.validator).then();
77
+ }
78
+ save() {
79
+ this.loading = true;
80
+ this.wordEditorService.save(this.tenant, this.className, this.oid, {
81
+ templateConfig: JSON.stringify({
82
+ sections: this.sections,
83
+ marks: this.service.marks
84
+ })
85
+ }).subscribe(response => {
86
+ this.loading = false;
87
+ if (response.success) {
88
+ notifySuccess('保存成功');
89
+ this.onSaved.emit();
90
+ }
91
+ });
92
+ }
93
+ generateFile() {
94
+ this.loading = true;
95
+ this.wordEditorService.generateFile(this.tenant, this.className, this.oid, this.generateFileAttribute || 'file', this.generateFileName || '', {
96
+ templateConfig: JSON.stringify({
97
+ sections: this.sections,
98
+ marks: this.service.marks
99
+ })
100
+ }).subscribe(response => {
101
+ this.loading = false;
102
+ if (response.success) {
103
+ notifySuccess('生成附件成功');
104
+ this.onGenerated.emit();
105
+ }
106
+ });
107
+ }
108
+ }
109
+ WordEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorComponent, deps: [{ token: i1.SectionService }, { token: i2.WordEditorService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
110
+ WordEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WordEditorComponent, selector: "rs-word-editor", inputs: { tenant: "tenant", className: "className", oid: "oid", templateClassName: "templateClassName", params: "params", tabViewContainerRef: "tabViewContainerRef", showPullTemplateButton: "showPullTemplateButton", showPullDataButton: "showPullDataButton", showCalcButton: "showCalcButton", showValidateButton: "showValidateButton", showGenerateFileButton: "showGenerateFileButton", generateFileAttribute: "generateFileAttribute", generateFileName: "generateFileName", showCloseButton: "showCloseButton", readonly: "readonly" }, outputs: { onSaved: "onSaved", onGenerated: "onGenerated", onClosed: "onClosed" }, providers: [WordEditorService], viewQueries: [{ propertyName: "validator", first: true, predicate: ["validator"], descendants: true }], ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\" [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<div *ngIf=\"!readonly\" class=\"bar header\">\r\n <dx-button *ngIf=\"showPullTemplateButton\" type=\"success\" text=\"\u66F4\u65B0\u6A21\u677F\" (onClick)=\"pullTemplate()\"\r\n [disabled]=\"loading\"></dx-button>\r\n <dx-button *ngIf=\"showPullDataButton\" type=\"success\" text=\"\u586B\u5145\u6570\u636E\" (onClick)=\"pullData()\"\r\n [disabled]=\"loading\"></dx-button>\r\n <!-- <dx-button *ngIf=\"showCalcButton\" type=\"default\" text=\"\u6267\u884C\u8BA1\u7B97\" (onClick)=\"calc()\"\r\n [disabled]=\"loading\"></dx-button>-->\r\n <dx-button *ngIf=\"showValidateButton\" type=\"default\" text=\"\u6267\u884C\u6821\u9A8C\" (onClick)=\"validate()\"\r\n [disabled]=\"loading\"></dx-button>\r\n</div>\r\n<dx-validation-group [class.validation-group]=\"true\" #validator>\r\n <div class=\"viewer-container\">\r\n <div class=\"viewer\">\r\n <ng-container *ngFor=\"let section of sections\">\r\n <rs-section [section]=\"section\"></rs-section>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</dx-validation-group>\r\n<div class=\"bar footer\">\r\n <dx-button *ngIf=\"!readonly\" type=\"default\" text=\"\u4FDD\u5B58\" (onClick)=\"save()\" [disabled]=\"loading\"></dx-button>\r\n <dx-button *ngIf=\"!readonly && showGenerateFileButton\" type=\"success\" text=\"\u751F\u6210\u9644\u4EF6\" (onClick)=\"generateFile()\"\r\n [disabled]=\"loading\"></dx-button>\r\n <dx-button *ngIf=\"showCloseButton\" type=\"normal\" text=\"\u5173\u95ED\" (onClick)=\"onClosed.emit()\"></dx-button>\r\n</div>\r\n", styles: [":host{flex:1;display:flex;flex-flow:column nowrap;background-color:#f5f5f5}:host .bar{flex:none;padding:12px 24px;background-color:var(--coast-base-bg-color, rgb(255, 255, 255));z-index:1;display:flex;flex-flow:row nowrap}:host .bar>dx-button{width:80px}:host .bar>dx-button:not(:last-child){margin-right:8px}:host .header{border-bottom:1px solid var(--coast-border-color, rgb(221, 221, 221));position:sticky;top:0}:host .validation-group{flex:auto;height:0;overflow-y:auto;background-color:var(--coast-empty-color, rgb(229, 229, 229));display:flex;flex-flow:column nowrap}:host .validation-group .viewer-container{flex:auto;height:0;overflow-x:auto;padding:8px 16px 0;display:flex;flex-flow:row nowrap}:host .validation-group .viewer-container .viewer{margin:auto;display:flex;flex-flow:column nowrap;align-items:center;z-index:0}:host .footer{justify-content:flex-end;border-top:1px solid var(--coast-border-color, rgb(221, 221, 221));position:sticky;bottom:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i5.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i7.DxValidationGroupComponent, selector: "dx-validation-group", inputs: ["elementAttr", "height", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "elementAttrChange", "heightChange", "widthChange"] }, { kind: "component", type: i8.SectionComponent, selector: "rs-section", inputs: ["section", "editMode", "pasteMode", "readonly"] }] });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorComponent, decorators: [{
112
+ type: Component,
113
+ args: [{ selector: 'rs-word-editor', providers: [WordEditorService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\" [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<div *ngIf=\"!readonly\" class=\"bar header\">\r\n <dx-button *ngIf=\"showPullTemplateButton\" type=\"success\" text=\"\u66F4\u65B0\u6A21\u677F\" (onClick)=\"pullTemplate()\"\r\n [disabled]=\"loading\"></dx-button>\r\n <dx-button *ngIf=\"showPullDataButton\" type=\"success\" text=\"\u586B\u5145\u6570\u636E\" (onClick)=\"pullData()\"\r\n [disabled]=\"loading\"></dx-button>\r\n <!-- <dx-button *ngIf=\"showCalcButton\" type=\"default\" text=\"\u6267\u884C\u8BA1\u7B97\" (onClick)=\"calc()\"\r\n [disabled]=\"loading\"></dx-button>-->\r\n <dx-button *ngIf=\"showValidateButton\" type=\"default\" text=\"\u6267\u884C\u6821\u9A8C\" (onClick)=\"validate()\"\r\n [disabled]=\"loading\"></dx-button>\r\n</div>\r\n<dx-validation-group [class.validation-group]=\"true\" #validator>\r\n <div class=\"viewer-container\">\r\n <div class=\"viewer\">\r\n <ng-container *ngFor=\"let section of sections\">\r\n <rs-section [section]=\"section\"></rs-section>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</dx-validation-group>\r\n<div class=\"bar footer\">\r\n <dx-button *ngIf=\"!readonly\" type=\"default\" text=\"\u4FDD\u5B58\" (onClick)=\"save()\" [disabled]=\"loading\"></dx-button>\r\n <dx-button *ngIf=\"!readonly && showGenerateFileButton\" type=\"success\" text=\"\u751F\u6210\u9644\u4EF6\" (onClick)=\"generateFile()\"\r\n [disabled]=\"loading\"></dx-button>\r\n <dx-button *ngIf=\"showCloseButton\" type=\"normal\" text=\"\u5173\u95ED\" (onClick)=\"onClosed.emit()\"></dx-button>\r\n</div>\r\n", styles: [":host{flex:1;display:flex;flex-flow:column nowrap;background-color:#f5f5f5}:host .bar{flex:none;padding:12px 24px;background-color:var(--coast-base-bg-color, rgb(255, 255, 255));z-index:1;display:flex;flex-flow:row nowrap}:host .bar>dx-button{width:80px}:host .bar>dx-button:not(:last-child){margin-right:8px}:host .header{border-bottom:1px solid var(--coast-border-color, rgb(221, 221, 221));position:sticky;top:0}:host .validation-group{flex:auto;height:0;overflow-y:auto;background-color:var(--coast-empty-color, rgb(229, 229, 229));display:flex;flex-flow:column nowrap}:host .validation-group .viewer-container{flex:auto;height:0;overflow-x:auto;padding:8px 16px 0;display:flex;flex-flow:row nowrap}:host .validation-group .viewer-container .viewer{margin:auto;display:flex;flex-flow:column nowrap;align-items:center;z-index:0}:host .footer{justify-content:flex-end;border-top:1px solid var(--coast-border-color, rgb(221, 221, 221));position:sticky;bottom:0}\n"] }]
114
+ }], ctorParameters: function () { return [{ type: i1.SectionService }, { type: i2.WordEditorService }, { type: i0.ViewContainerRef }]; }, propDecorators: { tenant: [{
115
+ type: Input
116
+ }], className: [{
117
+ type: Input
118
+ }], oid: [{
119
+ type: Input
120
+ }], templateClassName: [{
121
+ type: Input
122
+ }], params: [{
123
+ type: Input
124
+ }], tabViewContainerRef: [{
125
+ type: Input
126
+ }], showPullTemplateButton: [{
127
+ type: Input
128
+ }], showPullDataButton: [{
129
+ type: Input
130
+ }], showCalcButton: [{
131
+ type: Input
132
+ }], showValidateButton: [{
133
+ type: Input
134
+ }], showGenerateFileButton: [{
135
+ type: Input
136
+ }], generateFileAttribute: [{
137
+ type: Input
138
+ }], generateFileName: [{
139
+ type: Input
140
+ }], showCloseButton: [{
141
+ type: Input
142
+ }], readonly: [{
143
+ type: Input
144
+ }], onSaved: [{
145
+ type: Output
146
+ }], onGenerated: [{
147
+ type: Output
148
+ }], onClosed: [{
149
+ type: Output
150
+ }], validator: [{
151
+ type: ViewChild,
152
+ args: ['validator']
153
+ }] } });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvd29yZC93b3JkLWVkaXRvci93b3JkLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnMtYW50L3NyYy93b3JkL3dvcmQtZWRpdG9yL3dvcmQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsYUFBYSxFQUFFLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7O0FBUzlELE1BQU0sT0FBTyxtQkFBbUI7SUF5QzlCLFlBQXNCLE9BQXVCLEVBQVUsaUJBQW9DLEVBQVksZ0JBQWtDO1FBQW5ILFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUFZLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEzQnpJLDJCQUFzQixHQUFHLElBQUksQ0FBQztRQUU5Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFFMUIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFdEIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRTFCLDJCQUFzQixHQUFHLElBQUksQ0FBQztRQU05QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUV2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRW5DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUxQixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBSTFCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxPQUFPLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDeEgsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQzFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbkMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSTtJQUVKLENBQUM7SUFFRCxRQUFRO1FBQ04sYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDakUsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSzthQUMxQixDQUFDO1NBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBRTtZQUM1SSxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2FBQzFCLENBQUM7U0FDSCxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDcEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztpSEFoSVUsbUJBQW1CO3FHQUFuQixtQkFBbUIsOG9CQUZuQixDQUFDLGlCQUFpQixDQUFDLGtJQ1ZoQywrd0RBNEJBOzRGRGhCYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBR2YsQ0FBQyxpQkFBaUIsQ0FBQztvS0FJOUIsTUFBTTtzQkFETCxLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUdOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUdOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFHTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBR04sZUFBZTtzQkFEZCxLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixPQUFPO3NCQUROLE1BQU07Z0JBR1AsV0FBVztzQkFEVixNQUFNO2dCQUdQLFFBQVE7c0JBRFAsTUFBTTtnQkFJaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtEeFZhbGlkYXRpb25Hcm91cENvbXBvbmVudH0gZnJvbSBcImRldmV4dHJlbWUtYW5ndWxhci91aS92YWxpZGF0aW9uLWdyb3VwXCI7XHJcbmltcG9ydCB7V29yZEVkaXRvclNlcnZpY2V9IGZyb20gXCIuL3dvcmQtZWRpdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtub3RpZnlTdWNjZXNzLCB2YWxpZGF0ZUdyb3VwfSBmcm9tIFwiLi4vLi4vdXRpbC91dGlsc1wiO1xyXG5pbXBvcnQge1NlY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vc2VjdGlvbi9zZWN0aW9uLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnMtd29yZC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JkLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd29yZC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtXb3JkRWRpdG9yU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFdvcmRFZGl0b3JDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpXHJcbiAgdGVuYW50OiBhbnk7XHJcbiAgQElucHV0KClcclxuICBjbGFzc05hbWU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIG9pZDogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgdGVtcGxhdGVDbGFzc05hbWU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHBhcmFtcz86IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHRhYlZpZXdDb250YWluZXJSZWYhOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBzaG93UHVsbFRlbXBsYXRlQnV0dG9uID0gdHJ1ZTtcclxuICBASW5wdXQoKVxyXG4gIHNob3dQdWxsRGF0YUJ1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBzaG93Q2FsY0J1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBzaG93VmFsaWRhdGVCdXR0b24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2hvd0dlbmVyYXRlRmlsZUJ1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBnZW5lcmF0ZUZpbGVBdHRyaWJ1dGU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIGdlbmVyYXRlRmlsZU5hbWU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHNob3dDbG9zZUJ1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25HZW5lcmF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25DbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgcHJvdGVjdGVkIHNlY3Rpb25zOiBhbnk7XHJcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCd2YWxpZGF0b3InKSB2YWxpZGF0b3IhOiBEeFZhbGlkYXRpb25Hcm91cENvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlcnZpY2U6IFNlY3Rpb25TZXJ2aWNlLCBwcml2YXRlIHdvcmRFZGl0b3JTZXJ2aWNlOiBXb3JkRWRpdG9yU2VydmljZSwgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLm9pZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UudGVuYW50ID0gdGhpcy50ZW5hbnQ7XHJcbiAgICB0aGlzLnNlcnZpY2UudGVtcGxhdGVDbGFzc05hbWUgPSB0aGlzLnRlbXBsYXRlQ2xhc3NOYW1lO1xyXG4gICAgdGhpcy5zZXJ2aWNlLmluc3RhbmNlQ2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7XHJcbiAgICB0aGlzLnNlcnZpY2UuaW5zdGFuY2VPaWQgPSB0aGlzLm9pZDtcclxuICAgIHRoaXMuc2VydmljZS5wYXJhbXMgPSB0aGlzLnBhcmFtcztcclxuICAgIHRoaXMuc2VydmljZS50YWJWaWV3Q29udGFpbmVyUmVmID0gdGhpcy50YWJWaWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLndvcmRFZGl0b3JTZXJ2aWNlLmxvYWRUZW1wbGF0ZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIHRoaXMub2lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLnNlY3Rpb25zID0gcmVzcG9uc2Uuc2VjdGlvbnMgfHwgW107XHJcbiAgICAgIHRoaXMuc2VydmljZS5tYXJrcyA9IHJlc3BvbnNlLm1hcmtzO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVsbFRlbXBsYXRlKCkge1xyXG4gICAgaWYgKGNvbmZpcm0oJ+ivpeaTjeS9nOS8mua4hemZpOW3suW9leWFpeeahOaVsOaNru+8jOehruWumumHjeaWsOaLieWPluaooeadv+mFjee9ru+8nycpKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMud29yZEVkaXRvclNlcnZpY2UucmVsb2FkVGVtcGxhdGUodGhpcy50ZW5hbnQsIHRoaXMuY2xhc3NOYW1lLCB0aGlzLm9pZCwgdGhpcy50ZW1wbGF0ZUNsYXNzTmFtZSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zID0gcmVzcG9uc2UuZGF0YT8uc2VjdGlvbnMgfHwgW107XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLm1hcmtzID0gcmVzcG9uc2UuZGF0YS5tYXJrcztcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWxsRGF0YSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLndvcmRFZGl0b3JTZXJ2aWNlLnB1bGxEYXRhKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy5vaWQsIHtcclxuICAgICAgbWFya3M6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmljZS5tYXJrcylcclxuICAgIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGZvciAobGV0IG1hcmsgb2YgdGhpcy5zZXJ2aWNlLm1hcmtzKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuaGFzT3duUHJvcGVydHkobWFyay5uYW1lKSkge1xyXG4gICAgICAgICAgbWFyay52YWx1ZSA9IHJlc3BvbnNlLmRhdGFbbWFyay5uYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXJ2aWNlLnZhbHVlVXBkYXRlZC5lbWl0KCk7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBub3RpZnlTdWNjZXNzKCfmi4nlj5blrozmiJAnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FsYygpIHtcclxuXHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSgpIHtcclxuICAgIHZhbGlkYXRlR3JvdXAodGhpcy52YWxpZGF0b3IpLnRoZW4oKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy53b3JkRWRpdG9yU2VydmljZS5zYXZlKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy5vaWQsIHtcclxuICAgICAgdGVtcGxhdGVDb25maWc6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICBzZWN0aW9uczogdGhpcy5zZWN0aW9ucyxcclxuICAgICAgICBtYXJrczogdGhpcy5zZXJ2aWNlLm1hcmtzXHJcbiAgICAgIH0pXHJcbiAgICB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICBub3RpZnlTdWNjZXNzKCfkv53lrZjmiJDlip8nKTtcclxuICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlRmlsZSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLndvcmRFZGl0b3JTZXJ2aWNlLmdlbmVyYXRlRmlsZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIHRoaXMub2lkLCB0aGlzLmdlbmVyYXRlRmlsZUF0dHJpYnV0ZSB8fCAnZmlsZScsIHRoaXMuZ2VuZXJhdGVGaWxlTmFtZSB8fCAnJywge1xyXG4gICAgICB0ZW1wbGF0ZUNvbmZpZzogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLFxyXG4gICAgICAgIG1hcmtzOiB0aGlzLnNlcnZpY2UubWFya3NcclxuICAgICAgfSlcclxuICAgIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIG5vdGlmeVN1Y2Nlc3MoJ+eUn+aIkOmZhOS7tuaIkOWKnycpO1xyXG4gICAgICAgIHRoaXMub25HZW5lcmF0ZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGR4LWxvYWQtcGFuZWwgW2NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudFwiIFtzaG93UGFuZV09XCJmYWxzZVwiIFt2aXNpYmxlXT1cImxvYWRpbmdcIj5cclxuICA8ZHhvLXBvc2l0aW9uIFtvZl09XCJ2aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudFwiPjwvZHhvLXBvc2l0aW9uPlxyXG48L2R4LWxvYWQtcGFuZWw+XHJcbjxkaXYgKm5nSWY9XCIhcmVhZG9ubHlcIiBjbGFzcz1cImJhciBoZWFkZXJcIj5cclxuICA8ZHgtYnV0dG9uICpuZ0lmPVwic2hvd1B1bGxUZW1wbGF0ZUJ1dHRvblwiIHR5cGU9XCJzdWNjZXNzXCIgdGV4dD1cIuabtOaWsOaooeadv1wiIChvbkNsaWNrKT1cInB1bGxUZW1wbGF0ZSgpXCJcclxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9keC1idXR0b24+XHJcbiAgPGR4LWJ1dHRvbiAqbmdJZj1cInNob3dQdWxsRGF0YUJ1dHRvblwiIHR5cGU9XCJzdWNjZXNzXCIgdGV4dD1cIuWhq+WFheaVsOaNrlwiIChvbkNsaWNrKT1cInB1bGxEYXRhKClcIlxyXG4gICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj48L2R4LWJ1dHRvbj5cclxuICA8IS0tICA8ZHgtYnV0dG9uICpuZ0lmPVwic2hvd0NhbGNCdXR0b25cIiB0eXBlPVwiZGVmYXVsdFwiIHRleHQ9XCLmiafooYzorqHnrpdcIiAob25DbGljayk9XCJjYWxjKClcIlxyXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPjwvZHgtYnV0dG9uPi0tPlxyXG4gIDxkeC1idXR0b24gKm5nSWY9XCJzaG93VmFsaWRhdGVCdXR0b25cIiB0eXBlPVwiZGVmYXVsdFwiIHRleHQ9XCLmiafooYzmoKHpqoxcIiAob25DbGljayk9XCJ2YWxpZGF0ZSgpXCJcclxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9keC1idXR0b24+XHJcbjwvZGl2PlxyXG48ZHgtdmFsaWRhdGlvbi1ncm91cCBbY2xhc3MudmFsaWRhdGlvbi1ncm91cF09XCJ0cnVlXCIgI3ZhbGlkYXRvcj5cclxuICA8ZGl2IGNsYXNzPVwidmlld2VyLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInZpZXdlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zXCI+XHJcbiAgICAgICAgPHJzLXNlY3Rpb24gW3NlY3Rpb25dPVwic2VjdGlvblwiPjwvcnMtc2VjdGlvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9keC12YWxpZGF0aW9uLWdyb3VwPlxyXG48ZGl2IGNsYXNzPVwiYmFyIGZvb3RlclwiPlxyXG4gIDxkeC1idXR0b24gKm5nSWY9XCIhcmVhZG9ubHlcIiB0eXBlPVwiZGVmYXVsdFwiIHRleHQ9XCLkv53lrZhcIiAob25DbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPjwvZHgtYnV0dG9uPlxyXG4gIDxkeC1idXR0b24gKm5nSWY9XCIhcmVhZG9ubHkgJiYgc2hvd0dlbmVyYXRlRmlsZUJ1dHRvblwiIHR5cGU9XCJzdWNjZXNzXCIgdGV4dD1cIueUn+aIkOmZhOS7tlwiIChvbkNsaWNrKT1cImdlbmVyYXRlRmlsZSgpXCJcclxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9keC1idXR0b24+XHJcbiAgPGR4LWJ1dHRvbiAqbmdJZj1cInNob3dDbG9zZUJ1dHRvblwiIHR5cGU9XCJub3JtYWxcIiB0ZXh0PVwi5YWz6ZetXCIgKG9uQ2xpY2spPVwib25DbG9zZWQuZW1pdCgpXCI+PC9keC1idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { WordEditorComponent } from './word-editor.component';
4
+ import { DevExtremeModule } from "devextreme-angular";
5
+ import { SectionModule } from "../section/section.module";
6
+ import * as i0 from "@angular/core";
7
+ export class WordEditorModule {
8
+ }
9
+ WordEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ WordEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: WordEditorModule, declarations: [WordEditorComponent], imports: [CommonModule,
11
+ DevExtremeModule,
12
+ SectionModule], exports: [WordEditorComponent] });
13
+ WordEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorModule, imports: [CommonModule,
14
+ DevExtremeModule,
15
+ SectionModule] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ declarations: [
20
+ WordEditorComponent
21
+ ],
22
+ imports: [
23
+ CommonModule,
24
+ DevExtremeModule,
25
+ SectionModule
26
+ ],
27
+ exports: [
28
+ WordEditorComponent
29
+ ]
30
+ }]
31
+ }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvd29yZC93b3JkLWVkaXRvci93b3JkLWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDOztBQWV4RCxNQUFNLE9BQU8sZ0JBQWdCOzs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBWHpCLG1CQUFtQixhQUduQixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGFBQWEsYUFHYixtQkFBbUI7K0dBR1YsZ0JBQWdCLFlBUnpCLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsYUFBYTs0RkFNSixnQkFBZ0I7a0JBYjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG1CQUFtQjtxQkFDcEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixhQUFhO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7cUJBQ3BCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7V29yZEVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi93b3JkLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtEZXZFeHRyZW1lTW9kdWxlfSBmcm9tIFwiZGV2ZXh0cmVtZS1hbmd1bGFyXCI7XG5pbXBvcnQge1NlY3Rpb25Nb2R1bGV9IGZyb20gXCIuLi9zZWN0aW9uL3NlY3Rpb24ubW9kdWxlXCI7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFdvcmRFZGl0b3JDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEZXZFeHRyZW1lTW9kdWxlLFxuICAgIFNlY3Rpb25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFdvcmRFZGl0b3JDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBXb3JkRWRpdG9yTW9kdWxlIHtcbn1cbiJdfQ==
@@ -0,0 +1,67 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { map } from "rxjs";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ export class WordEditorService {
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ loadTemplate(tenant, className, oid) {
10
+ return this.http.get('api/data/' + className + '/' + oid, {
11
+ params: {
12
+ tenant
13
+ }
14
+ }).pipe(map(response => {
15
+ if (response.data?.templateConfig) {
16
+ return JSON.parse(response.data.templateConfig);
17
+ }
18
+ return {};
19
+ }));
20
+ }
21
+ save(tenant, className, oid, model) {
22
+ return this.http.post('api/data/' + className + '/' + oid, model, {
23
+ params: {
24
+ tenant
25
+ }
26
+ });
27
+ }
28
+ reloadTemplate(tenant, className, oid, templateClassName) {
29
+ return this.http.get('api/data/custom', {
30
+ params: {
31
+ executor: 'com.cs.system.word.editor.ReloadTemplate',
32
+ tenant,
33
+ className,
34
+ oid,
35
+ templateClassName
36
+ }
37
+ });
38
+ }
39
+ pullData(tenant, className, oid, marks) {
40
+ return this.http.post('api/data/custom', marks, {
41
+ params: {
42
+ executor: 'com.cs.system.word.editor.PullData',
43
+ tenant,
44
+ className,
45
+ oid
46
+ }
47
+ });
48
+ }
49
+ generateFile(tenant, className, oid, generateFileAttribute, generateFileName, model) {
50
+ return this.http.post('api/data/custom', model, {
51
+ params: {
52
+ executor: 'com.cs.system.word.editor.GenerateFile',
53
+ tenant,
54
+ className,
55
+ oid,
56
+ generateFileAttribute,
57
+ generateFileName
58
+ }
59
+ });
60
+ }
61
+ }
62
+ WordEditorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
63
+ WordEditorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorService });
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordEditorService, decorators: [{
65
+ type: Injectable
66
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL3dvcmQvd29yZC1lZGl0b3Ivd29yZC1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxHQUFHLEVBQWEsTUFBTSxNQUFNLENBQUM7OztBQUdyQyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXLEVBQUUsU0FBYyxFQUFFLEdBQVE7UUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUU7WUFDN0QsTUFBTSxFQUFFO2dCQUNOLE1BQU07YUFDUDtTQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtnQkFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDakQ7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQVcsRUFBRSxTQUFjLEVBQUUsR0FBUSxFQUFFLEtBQVU7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3JFLE1BQU0sRUFBRTtnQkFDTixNQUFNO2FBQ1A7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQVcsRUFBRSxTQUFjLEVBQUUsR0FBUSxFQUFFLGlCQUFzQjtRQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLGlCQUFpQixFQUFFO1lBQzNDLE1BQU0sRUFBRTtnQkFDTixRQUFRLEVBQUUsMENBQTBDO2dCQUNwRCxNQUFNO2dCQUNOLFNBQVM7Z0JBQ1QsR0FBRztnQkFDSCxpQkFBaUI7YUFDbEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQVcsRUFBRSxTQUFjLEVBQUUsR0FBUSxFQUFFLEtBQVU7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxpQkFBaUIsRUFBRSxLQUFLLEVBQUU7WUFDbkQsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxvQ0FBb0M7Z0JBQzlDLE1BQU07Z0JBQ04sU0FBUztnQkFDVCxHQUFHO2FBQ0o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVcsRUFBRSxTQUFjLEVBQUUsR0FBUSxFQUFFLHFCQUEwQixFQUFFLGdCQUFxQixFQUFFLEtBQVU7UUFDL0csT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxpQkFBaUIsRUFBRSxLQUFLLEVBQUU7WUFDbkQsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSx3Q0FBd0M7Z0JBQ2xELE1BQU07Z0JBQ04sU0FBUztnQkFDVCxHQUFHO2dCQUNILHFCQUFxQjtnQkFDckIsZ0JBQWdCO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0dBN0RVLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7bWFwLCBPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV29yZEVkaXRvclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgfVxuXG4gIGxvYWRUZW1wbGF0ZSh0ZW5hbnQ6IGFueSwgY2xhc3NOYW1lOiBhbnksIG9pZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KCdhcGkvZGF0YS8nICsgY2xhc3NOYW1lICsgJy8nICsgb2lkLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdGVuYW50XG4gICAgICB9XG4gICAgfSkucGlwZShcbiAgICAgIG1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy50ZW1wbGF0ZUNvbmZpZykge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3BvbnNlLmRhdGEudGVtcGxhdGVDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNhdmUodGVuYW50OiBhbnksIGNsYXNzTmFtZTogYW55LCBvaWQ6IGFueSwgbW9kZWw6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KCdhcGkvZGF0YS8nICsgY2xhc3NOYW1lICsgJy8nICsgb2lkLCBtb2RlbCwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIHRlbmFudFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVsb2FkVGVtcGxhdGUodGVuYW50OiBhbnksIGNsYXNzTmFtZTogYW55LCBvaWQ6IGFueSwgdGVtcGxhdGVDbGFzc05hbWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PignYXBpL2RhdGEvY3VzdG9tJywge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGV4ZWN1dG9yOiAnY29tLmNzLnN5c3RlbS53b3JkLmVkaXRvci5SZWxvYWRUZW1wbGF0ZScsXG4gICAgICAgIHRlbmFudCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBvaWQsXG4gICAgICAgIHRlbXBsYXRlQ2xhc3NOYW1lXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWxsRGF0YSh0ZW5hbnQ6IGFueSwgY2xhc3NOYW1lOiBhbnksIG9pZDogYW55LCBtYXJrczogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oJ2FwaS9kYXRhL2N1c3RvbScsIG1hcmtzLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZXhlY3V0b3I6ICdjb20uY3Muc3lzdGVtLndvcmQuZWRpdG9yLlB1bGxEYXRhJyxcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIG9pZFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVGaWxlKHRlbmFudDogYW55LCBjbGFzc05hbWU6IGFueSwgb2lkOiBhbnksIGdlbmVyYXRlRmlsZUF0dHJpYnV0ZTogYW55LCBnZW5lcmF0ZUZpbGVOYW1lOiBhbnksIG1vZGVsOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PignYXBpL2RhdGEvY3VzdG9tJywgbW9kZWwsIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBleGVjdXRvcjogJ2NvbS5jcy5zeXN0ZW0ud29yZC5lZGl0b3IuR2VuZXJhdGVGaWxlJyxcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIG9pZCxcbiAgICAgICAgZ2VuZXJhdGVGaWxlQXR0cmlidXRlLFxuICAgICAgICBnZW5lcmF0ZUZpbGVOYW1lXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==