qms-angular 1.0.86 → 1.0.87

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 (89) hide show
  1. package/bundles/qms-angular.umd.js +6802 -207
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/comment/comment.js +6 -3
  4. package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
  5. package/esm2015/lib/components/related/content/related-content.component.js +2 -2
  6. package/esm2015/lib/components/table/table.module.js +4 -4
  7. package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +3 -1
  8. package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +3 -1
  9. package/esm2015/lib/directives/file-upload/file-upload.directive.js +1 -1
  10. package/esm2015/lib/model/en.js +63 -2
  11. package/esm2015/lib/model/no.js +63 -2
  12. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/halo.function.js +87 -0
  13. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/inspector.function.js +3767 -0
  14. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/selection.function.js +56 -0
  15. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/stencil.function.js +1003 -0
  16. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/toolbar.function.js +302 -0
  17. package/esm2015/lib/qms-ckeditor-components/common/flowchart/models/app-shapes.js +320 -0
  18. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +69 -0
  19. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +412 -0
  20. package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +80 -0
  21. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +1 -1
  22. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +2 -2
  23. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +2 -2
  24. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +2 -2
  25. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +317 -0
  26. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +2 -2
  27. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +2 -2
  28. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +2 -2
  29. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +2 -2
  30. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +2 -2
  31. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +2 -2
  32. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +2 -2
  33. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +31 -1
  34. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +4 -2
  35. package/esm2015/public-api.js +7 -1
  36. package/esm2015/qms-angular.js +2 -1
  37. package/fesm2015/qms-angular.js +6744 -194
  38. package/fesm2015/qms-angular.js.map +1 -1
  39. package/lib/components/comment/comment.d.ts +1 -0
  40. package/lib/model/en.d.ts +61 -0
  41. package/lib/model/no.d.ts +61 -0
  42. package/lib/qms-ckeditor-components/common/flowchart/config/halo.function.d.ts +37 -0
  43. package/lib/qms-ckeditor-components/common/flowchart/config/inspector.function.d.ts +7 -0
  44. package/lib/qms-ckeditor-components/common/flowchart/config/selection.function.d.ts +39 -0
  45. package/lib/qms-ckeditor-components/common/flowchart/config/stencil.function.d.ts +11 -0
  46. package/lib/qms-ckeditor-components/common/flowchart/config/toolbar.function.d.ts +224 -0
  47. package/lib/qms-ckeditor-components/common/flowchart/models/app-shapes.d.ts +58 -0
  48. package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +16 -0
  49. package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +56 -0
  50. package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +35 -0
  51. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +2 -0
  52. package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +41 -0
  53. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +4 -0
  54. package/lib.theme.scss +4 -0
  55. package/package.json +1 -1
  56. package/public-api.d.ts +6 -0
  57. package/qms-angular.d.ts +1 -0
  58. package/qms-angular.metadata.json +1 -1
  59. package/src/assets/fonts/OpenSans/OpenSans.woff2 +0 -0
  60. package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
  61. package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
  62. package/src/assets/jointjs/images/save-icon-modern.png +0 -0
  63. package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
  64. package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
  65. package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
  66. package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
  67. package/src/assets/jointjs/scss/rappid.scss +326 -0
  68. package/src/assets/jointjs/scss/theme-picker.scss +22 -0
  69. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  70. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  71. package/src/assets/qms-ckeditor-plugin/package-lock.json +12634 -345
  72. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +2 -2
  73. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +9 -0
  74. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/flowchartdialogcommand.js +47 -0
  75. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +30 -0
  76. package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +507 -0
  77. package/src/lib/components/comment/comment.scss +1 -0
  78. package/src/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.scss +1 -0
  79. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon1.svg +1 -0
  80. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon2.svg +6 -0
  81. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon3.svg +11 -0
  82. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon4.svg +8 -0
  83. package/src/lib/qms-ckeditor-components/common/flowchart/assets/member-female.png +0 -0
  84. package/src/lib/qms-ckeditor-components/common/flowchart/assets/member-male.png +0 -0
  85. package/src/lib/qms-ckeditor-components/common/flowchart/assets/no-color-icon.svg +72 -0
  86. package/src/lib/qms-ckeditor-components/common/flowchart/assets/toolbar-icons-material.png +0 -0
  87. package/src/lib/qms-ckeditor-components/common/flowchart/assets/toolbar-icons-modern.png +0 -0
  88. package/src/lib/qms-ckeditor-components/common/flowchart/assets/transparent-icon.svg +50 -0
  89. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +68 -0
@@ -0,0 +1,317 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, ElementRef, HostListener, Inject } from "@angular/core";
3
+ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
4
+ import { takeUntil } from "rxjs/operators";
5
+ import { TranslateLibraryService } from "../../../services/translation-registry.service";
6
+ import { CKEditorEventConst } from "../../common/constants/ckeditorEvent.constant";
7
+ import { FlowChartConst } from "../../common/constants/ckeditorFlowchart.const";
8
+ import { KeyboardService } from "../../common/flowchart/service/keyboard-service";
9
+ import RappidService from '../../common/flowchart/service/kitchensink-service';
10
+ import { ThemePicker } from "../../common/flowchart/themes/theme-picker";
11
+ import guidHelper from "../../common/helper/guidHelper";
12
+ import { QMSCKEditorDialogData } from "../../common/models/qms-ckeditor-dialog.model";
13
+ import { QMSCKEditorFlowchart } from "../../common/models/qms-ckeditor-flowchart.model";
14
+ import { QMSCKEditorSaveAsTemplate } from "../../common/models/qms-ckeditor-save-as-template.model";
15
+ import { QMSCKEditorConfirmComponent } from "../../common/module/confirm/qms-ckeditor-confirm.component";
16
+ import { QMSCKEditorToastService } from "../../common/toast/qms-ckeditor-toast.service";
17
+ import { QMSCKEditorBaseComponent } from "../../qms-ckeditor-base.component";
18
+ import { QMSCKEditorFlowchartService } from "../../services/qms-ckeditor-flowchart.service";
19
+ import { SaveTemplateComponent } from "../qms-ckeditor-bpmn/save-template/save-template.component";
20
+ export class QMSCKEditorFlowchartComponent extends QMSCKEditorBaseComponent {
21
+ constructor(dialog, element, translate, flowchartService, dialogRef, data) {
22
+ super();
23
+ this.dialog = dialog;
24
+ this.element = element;
25
+ this.translate = translate;
26
+ this.flowchartService = flowchartService;
27
+ this.dialogRef = dialogRef;
28
+ this.data = data;
29
+ this.jsonContent = '';
30
+ this.id = '';
31
+ this.flowchart = new QMSCKEditorFlowchart();
32
+ this.flowchartTemplates = [];
33
+ this.id = data;
34
+ }
35
+ onMessage(event) {
36
+ if (event.data === FlowChartConst.KS_CHANGE_TEMPLATE) {
37
+ this.onChangeTemplate();
38
+ }
39
+ else if (event.data === FlowChartConst.KS_DELETE_TEMPLATE) {
40
+ this.onDeleteTemplate(this.LANG.BPMN.DELETE_TEMPLATE, this.LANG.QMSCKEDITOR_MESSAGE.CONFIRM_DELETE_TEMPLATE);
41
+ }
42
+ else if (event.data === FlowChartConst.MUST_SELECT_TEMPLATE) {
43
+ this.showInfoMessage(this.LANG.BPMN.SELECT_TEMPLATE, this.LANG.BPMN.SELECT_TEMPLATE_INFORMATION);
44
+ }
45
+ else if (event.data === FlowChartConst.KS_SAVE_AS_TEMPLATE) {
46
+ this.onSaveAsTemplate();
47
+ }
48
+ else if (event.data === FlowChartConst.KS_RESET_TEMPLATE) {
49
+ this.onResetTemplate();
50
+ }
51
+ }
52
+ ngOnInit() {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ this.translate.getLanguageSubject$.pipe(takeUntil(this.ngUnsubcribe)).subscribe((res) => {
55
+ if (res) {
56
+ this.LANG = this.translate.getObjectLang(res);
57
+ }
58
+ });
59
+ if (this.id) {
60
+ this.jsonContent = yield this.getJsonContent(this.id);
61
+ }
62
+ this.rappid = new RappidService(this.element.nativeElement, new KeyboardService(), this.LANG);
63
+ this.rappid.startRappid();
64
+ const themePicker = new ThemePicker({ mainView: this.rappid });
65
+ themePicker.render().$el.appendTo(document.getElementById('themepicker'));
66
+ if (this.jsonContent) {
67
+ this.rappid.graph.fromJSON(JSON.parse(this.jsonContent));
68
+ }
69
+ });
70
+ }
71
+ ngAfterViewInit() {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ this.flowchartTemplates = yield this.getTemplates();
74
+ this.initializeTemplates(this.flowchartTemplates);
75
+ });
76
+ }
77
+ getJsonContent(id) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ return new Promise((resolve) => {
80
+ this.flowchartService
81
+ .getFlowchartById(id)
82
+ .pipe(takeUntil(this.ngUnsubcribe))
83
+ .subscribe((result) => {
84
+ if (result) {
85
+ resolve(result.jsonContent);
86
+ }
87
+ });
88
+ });
89
+ });
90
+ }
91
+ getTemplates() {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ return new Promise((resolve) => {
94
+ this.flowchartService
95
+ .flowchartGetTemplates()
96
+ .pipe(takeUntil(this.ngUnsubcribe))
97
+ .subscribe((result) => {
98
+ resolve(result);
99
+ });
100
+ });
101
+ });
102
+ }
103
+ initializeTemplates(templates) {
104
+ if (templates) {
105
+ this.toolbarConfig = this.rappid.toolbar;
106
+ const arrSelect = this.toolbarConfig.tools.filter((item) => {
107
+ return item.type === 'select-box';
108
+ });
109
+ if (arrSelect && arrSelect[0]) {
110
+ templates.forEach((item) => {
111
+ const option = {
112
+ index: item.index,
113
+ content: item.templateName,
114
+ flowChartId: item.id,
115
+ name: item.templateName,
116
+ jsonContent: item.jsonContent,
117
+ selected: false
118
+ };
119
+ const index = arrSelect[0].options.findIndex((x) => {
120
+ return x.index === option.index;
121
+ });
122
+ if (index < 0) {
123
+ arrSelect[0].options.push(option);
124
+ }
125
+ });
126
+ }
127
+ }
128
+ }
129
+ addItem2Template(template) {
130
+ this.toolbarConfig = this.rappid.toolbar;
131
+ const arrSelect = this.toolbarConfig.tools.filter((item) => {
132
+ return item.type === 'select-box';
133
+ });
134
+ if (arrSelect) {
135
+ const option = {
136
+ index: 1,
137
+ content: template.templateName,
138
+ flowChartId: template.id,
139
+ name: template.templateName,
140
+ jsonContent: template.jsonContent,
141
+ selected: false
142
+ };
143
+ arrSelect[0].options.push(option);
144
+ }
145
+ }
146
+ removeSelectedValue(flowChartId) {
147
+ this.toolbarConfig = this.rappid.toolbar;
148
+ const arrSelect = this.toolbarConfig.tools.filter((item) => {
149
+ return item.type === 'select-box';
150
+ });
151
+ if (arrSelect) {
152
+ arrSelect[0].options.splice(arrSelect[0].options.findIndex((i) => {
153
+ return i.flowChartId === flowChartId;
154
+ }), 1);
155
+ }
156
+ }
157
+ setDefaultSelectedValue() {
158
+ this.toolbarConfig = this.rappid.toolbar;
159
+ const arrSelect = this.toolbarConfig.tools.filter((item) => {
160
+ return item.type === 'select-box';
161
+ });
162
+ if (arrSelect) {
163
+ arrSelect[0].options[0].selected = true;
164
+ const list = document.getElementsByClassName(`select-box-selection`)[0];
165
+ list.getElementsByClassName(`select-box-option-content`)[0].innerHTML = FlowChartConst.SELECT_TEMPLATE;
166
+ }
167
+ }
168
+ saveImageContent() {
169
+ return __awaiter(this, void 0, void 0, function* () {
170
+ return new Promise((resolve) => {
171
+ const jsonContent = this.rappid.getJsonContent();
172
+ this.flowchart = {
173
+ id: this.id ? this.id : guidHelper.empty,
174
+ jsonContent: jsonContent,
175
+ isTemplate: false,
176
+ templateName: ''
177
+ };
178
+ this.flowchartService
179
+ .flowchartModifying(this.flowchart)
180
+ .pipe(takeUntil(this.ngUnsubcribe))
181
+ .subscribe((result) => {
182
+ if (result) {
183
+ resolve(result);
184
+ }
185
+ });
186
+ });
187
+ });
188
+ }
189
+ onInsertImage() {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ const id = yield this.saveImageContent();
192
+ const imageContent = yield this.rappid.getImageContent();
193
+ const result = { key: `${CKEditorEventConst.QMSCK_FLOWCHART}#${id}`, values: imageContent };
194
+ this.dialogRef.close(result);
195
+ });
196
+ }
197
+ onChangeTemplate() {
198
+ const jsonTemplate = window[FlowChartConst.KS_SELECTED_JSONCONTENT] ? window[FlowChartConst.KS_SELECTED_JSONCONTENT] : '';
199
+ if (!window[FlowChartConst.KS_IS_SELECTED_TEMPLATE]) {
200
+ window[FlowChartConst.KS_ORG_JSONCONTENT] = JSON.stringify(this.rappid.graph.toJSON());
201
+ window[FlowChartConst.KS_IS_SELECTED_TEMPLATE] = true;
202
+ }
203
+ if (jsonTemplate) {
204
+ this.rappid.graph.fromJSON(JSON.parse(jsonTemplate));
205
+ }
206
+ }
207
+ onDeleteTemplate(title, content) {
208
+ const data = new QMSCKEditorDialogData();
209
+ data.title = title;
210
+ data.content = content;
211
+ const dialogRef = this.dialog.open(QMSCKEditorConfirmComponent, {
212
+ width: '500px',
213
+ minHeight: '175px',
214
+ data
215
+ });
216
+ dialogRef
217
+ .afterClosed()
218
+ .pipe(takeUntil(this.ngUnsubcribe))
219
+ .subscribe((result) => {
220
+ if (result) {
221
+ const id = window[FlowChartConst.KS_SELECTED_FLOWCHART_ID];
222
+ this.flowchartService
223
+ .flowchartDeleteTemplate(id)
224
+ .pipe(takeUntil(this.ngUnsubcribe))
225
+ .subscribe((result) => {
226
+ if (result) {
227
+ this.removeSelectedValue(id);
228
+ this.setDefaultSelectedValue();
229
+ window[FlowChartConst.KS_IS_SELECTED_TEMPLATE] = false;
230
+ QMSCKEditorToastService.success(this.LANG.QMSCKEDITOR.DELETED);
231
+ }
232
+ else {
233
+ QMSCKEditorToastService.error(this.LANG.QMSCKEDITOR.DELETE_FAILED);
234
+ }
235
+ });
236
+ }
237
+ });
238
+ }
239
+ onSaveAsTemplate() {
240
+ const jsonContent = JSON.stringify(this.rappid.graph.toJSON());
241
+ let template = new QMSCKEditorFlowchart();
242
+ template = {
243
+ id: guidHelper.empty,
244
+ jsonContent: jsonContent,
245
+ isTemplate: true,
246
+ templateName: ''
247
+ };
248
+ let data = new QMSCKEditorSaveAsTemplate();
249
+ data.templateType = CKEditorEventConst.QMSCK_FLOWCHART;
250
+ data.flowchart = template;
251
+ const dialogTemplate = this.dialog.open(SaveTemplateComponent, {
252
+ width: '450px',
253
+ height: '220px',
254
+ data,
255
+ disableClose: true
256
+ });
257
+ dialogTemplate
258
+ .afterClosed()
259
+ .pipe(takeUntil(this.ngUnsubcribe))
260
+ .subscribe((result) => {
261
+ if (result) {
262
+ this.addItem2Template(result);
263
+ }
264
+ });
265
+ }
266
+ onResetTemplate() {
267
+ if (window[FlowChartConst.KS_IS_SELECTED_TEMPLATE]) {
268
+ const orgTemplate = window[FlowChartConst.KS_ORG_JSONCONTENT] ? window[FlowChartConst.KS_ORG_JSONCONTENT] : '';
269
+ if (orgTemplate) {
270
+ this.rappid.graph.fromJSON(JSON.parse(orgTemplate));
271
+ this.setDefaultSelectedValue();
272
+ window[FlowChartConst.KS_IS_SELECTED_TEMPLATE] = false;
273
+ }
274
+ }
275
+ }
276
+ showInfoMessage(title, content) {
277
+ const data = new QMSCKEditorDialogData();
278
+ data.title = title;
279
+ data.content = content;
280
+ data.isMessage = true;
281
+ const dialogRef = this.dialog.open(QMSCKEditorConfirmComponent, {
282
+ width: '500px',
283
+ minHeight: '175px',
284
+ data
285
+ });
286
+ dialogRef
287
+ .afterClosed()
288
+ .pipe(takeUntil(this.ngUnsubcribe))
289
+ .subscribe((result) => {
290
+ if (result) {
291
+ //TODO
292
+ }
293
+ });
294
+ }
295
+ onCloseDialog() {
296
+ this.dialogRef.close();
297
+ }
298
+ }
299
+ QMSCKEditorFlowchartComponent.decorators = [
300
+ { type: Component, args: [{
301
+ selector: 'qms-flowchart',
302
+ template: "<div id=\"qmsckeditor-flowchart\" class=\"qmsckeditor qmsckeditor__flowchart__container\">\r\n <div id=\"qmsckeditor-flowchart-header\">\r\n <span id=\"qmsckeditor-flowchart-header_001\" mat-icon-button class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <span id=\"qmsckeditor-flowchart-header_002\" mat-icon-button class=\"qmsckeditor button__done\"\r\n (click)=\"onInsertImage()\">\r\n <mat-icon>done</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-flowchart-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-flowchart_002_001\">{{ LANG.BPMN.FLOWCHART }}</h2>\r\n </div>\r\n </div>\r\n <div id=\"flowchart\" class=\"flowchart__editor\">\r\n <div class=\"joint-app joint-theme-modern\">\r\n <div class=\"app-header\">\r\n <div class=\"app-title\">\r\n <h1>{{ LANG.BPMN.HANDBOOK }}</h1>\r\n </div>\r\n <div id=\"flowcharttoolbar\" class=\"toolbar-container\"></div>\r\n </div>\r\n <div class=\"app-body\">\r\n <div id=\"contentpanel\">\r\n <div id=\"stencilpanel\">\r\n <div id=\"flowchartstencil\" class=\"stencil-container\"></div>\r\n </div>\r\n <div id=\"paperpanel\">\r\n <div class=\"paper-container\"></div>\r\n <div id=\"themepicker\"></div>\r\n </div>\r\n <div id=\"rightpanel\">\r\n <div id=\"inspectorpanel\">\r\n <div class=\"inspector-container\"></div>\r\n </div>\r\n <div id=\"navigatorpanel\">\r\n <div class=\"navigator-container\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>",
303
+ styles: [".qmsckeditor__flowchart__container ::ng-deep .mat-dialog-content{padding:0}.qmsckeditor__flowchart__container .flowchart__editor{width:100%;height:600px}.qmsckeditor__flowchart__container #contentpanel{display:flex;flex-direction:row;justify-content:center;align-items:center}.qmsckeditor__flowchart__container #paperpanel{position:relative;top:0;bottom:0;left:0;right:0;height:540px;width:60%;overflow-y:auto}.qmsckeditor__flowchart__container #paperpanel .paper-container{overflow-y:auto;width:100%;height:100%}.qmsckeditor__flowchart__container #stencilpanel{position:relative;top:0;bottom:0;left:0;right:0;height:540px;width:20%}.qmsckeditor__flowchart__container #rightpanel{display:flex;flex-direction:column;align-items:center;width:20%;height:540px}.qmsckeditor__flowchart__container #rightpanel #inspectorpanel{overflow-y:auto;width:100%;height:80%}.qmsckeditor__flowchart__container #rightpanel #navigatorpanel{width:100%;height:20%}.qmsckeditor__flowchart__container #themepicker{position:absolute;right:0;bottom:0}"]
304
+ },] }
305
+ ];
306
+ QMSCKEditorFlowchartComponent.ctorParameters = () => [
307
+ { type: MatDialog },
308
+ { type: ElementRef },
309
+ { type: TranslateLibraryService },
310
+ { type: QMSCKEditorFlowchartService },
311
+ { type: MatDialogRef },
312
+ { type: String, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
313
+ ];
314
+ QMSCKEditorFlowchartComponent.propDecorators = {
315
+ onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
316
+ };
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbEYsT0FBTyxhQUFhLE1BQU0sb0RBQW9ELENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pFLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FB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QztRQUNILFNBQVM7YUFDTixXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNO2FBQ1A7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7WUFsVEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QiwyakVBQXNEOzthQUV2RDs7O1lBdkJRLFNBQVM7WUFEaUIsVUFBVTtZQUdwQyx1QkFBdUI7WUFjdkIsMkJBQTJCO1lBaEJoQixZQUFZO3lDQXdDM0IsTUFBTSxTQUFDLGVBQWU7Ozt3QkFLeEIsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudFwiO1xyXG5pbXBvcnQgeyBGbG93Q2hhcnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0XCI7XHJcbmltcG9ydCB7IEtleWJvYXJkU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZmxvd2NoYXJ0L3NlcnZpY2Uva2V5Ym9hcmQtc2VydmljZVwiO1xyXG5pbXBvcnQgUmFwcGlkU2VydmljZSBmcm9tICcuLi8uLi9jb21tb24vZmxvd2NoYXJ0L3NlcnZpY2Uva2l0Y2hlbnNpbmstc2VydmljZSc7XHJcbmltcG9ydCB7IFRoZW1lUGlja2VyIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9mbG93Y2hhcnQvdGhlbWVzL3RoZW1lLXBpY2tlclwiO1xyXG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tIFwiLi4vLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1kaWFsb2cubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRUZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQtdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yU2F2ZUFzVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3Itc2F2ZS1hcy10ZW1wbGF0ZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZHVsZS9jb25maXJtL3Ftcy1ja2VkaXRvci1jb25maXJtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvYXN0U2VydmljZSB9IGZyb20gXCIuLi8uLi9jb21tb24vdG9hc3QvcW1zLWNrZWRpdG9yLXRvYXN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckZsb3djaGFydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNhdmVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItYnBtbi9zYXZlLXRlbXBsYXRlL3NhdmUtdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1mbG93Y2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgTEFORzogYW55O1xyXG4gIGpzb25Db250ZW50OiBzdHJpbmcgPSAnJztcclxuICByYXBwaWQ6IFJhcHBpZFNlcnZpY2U7XHJcbiAgaWQgPSAnJztcclxuICBmbG93Y2hhcnQ6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0ID0gbmV3IFFNU0NLRWRpdG9yRmxvd2NoYXJ0KCk7XHJcbiAgZmxvd2NoYXJ0VGVtcGxhdGVzOiBRTVNDS0VkaXRvckZsb3djaGFydFRlbXBsYXRlW10gPSBbXTtcclxuICB0b29sYmFyQ29uZmlnOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZmxvd2NoYXJ0U2VydmljZTogUU1TQ0tFZGl0b3JGbG93Y2hhcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5pZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuS1NfQ0hBTkdFX1RFTVBMQVRFKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VUZW1wbGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuS1NfREVMRVRFX1RFTVBMQVRFKSB7XHJcbiAgICAgIHRoaXMub25EZWxldGVUZW1wbGF0ZSh0aGlzLkxBTkcuQlBNTi5ERUxFVEVfVEVNUExBVEUsIHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX1RFTVBMQVRFKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5zaG93SW5mb01lc3NhZ2UodGhpcy5MQU5HLkJQTU4uU0VMRUNUX1RFTVBMQVRFLCB0aGlzLkxBTkcuQlBNTi5TRUxFQ1RfVEVNUExBVEVfSU5GT1JNQVRJT04pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuS1NfU0FWRV9BU19URU1QTEFURSkge1xyXG4gICAgICB0aGlzLm9uU2F2ZUFzVGVtcGxhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LktTX1JFU0VUX1RFTVBMQVRFKSB7XHJcbiAgICAgIHRoaXMub25SZXNldFRlbXBsYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5nZXRKc29uQ29udGVudCh0aGlzLmlkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmFwcGlkID0gbmV3IFJhcHBpZFNlcnZpY2UoXHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICBuZXcgS2V5Ym9hcmRTZXJ2aWNlKCksXHJcbiAgICAgIHRoaXMuTEFOR1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJhcHBpZC5zdGFydFJhcHBpZCgpO1xyXG5cclxuICAgIGNvbnN0IHRoZW1lUGlja2VyID0gbmV3IFRoZW1lUGlja2VyKHsgbWFpblZpZXc6IHRoaXMucmFwcGlkIH0pO1xyXG4gICAgdGhlbWVQaWNrZXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGVtZXBpY2tlcicpKTtcclxuXHJcbiAgICBpZiAodGhpcy5qc29uQ29udGVudCkge1xyXG4gICAgICB0aGlzLnJhcHBpZC5ncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKHRoaXMuanNvbkNvbnRlbnQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZmxvd2NoYXJ0VGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRlbXBsYXRlcyh0aGlzLmZsb3djaGFydFRlbXBsYXRlcyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgZ2V0SnNvbkNvbnRlbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5mbG93Y2hhcnRTZXJ2aWNlXHJcbiAgICAgICAgLmdldEZsb3djaGFydEJ5SWQoaWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuanNvbkNvbnRlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGVbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuZmxvd2NoYXJ0U2VydmljZVxyXG4gICAgICAgIC5mbG93Y2hhcnRHZXRUZW1wbGF0ZXMoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplVGVtcGxhdGVzKHRlbXBsYXRlczogUU1TQ0tFZGl0b3JGbG93Y2hhcnRUZW1wbGF0ZVtdKSB7XHJcbiAgICBpZiAodGVtcGxhdGVzKSB7XHJcbiAgICAgIHRoaXMudG9vbGJhckNvbmZpZyA9IHRoaXMucmFwcGlkLnRvb2xiYXI7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRoaXMudG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0ICYmIGFyclNlbGVjdFswXSkge1xyXG4gICAgICAgIHRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxyXG4gICAgICAgICAgICBjb250ZW50OiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICBqc29uQ29udGVudDogaXRlbS5qc29uQ29udGVudCxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEl0ZW0yVGVtcGxhdGUodGVtcGxhdGU/OiBRTVNDS0VkaXRvckZsb3djaGFydFRlbXBsYXRlKSB7XHJcbiAgICB0aGlzLnRvb2xiYXJDb25maWcgPSB0aGlzLnJhcHBpZC50b29sYmFyO1xyXG4gICAgY29uc3QgYXJyU2VsZWN0ID0gdGhpcy50b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICB9KTtcclxuICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICBmbG93Q2hhcnRJZDogdGVtcGxhdGUuaWQsXHJcbiAgICAgICAgbmFtZTogdGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgIGpzb25Db250ZW50OiB0ZW1wbGF0ZS5qc29uQ29udGVudCxcclxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRWYWx1ZShmbG93Q2hhcnRJZD86IHN0cmluZykge1xyXG4gICAgdGhpcy50b29sYmFyQ29uZmlnID0gdGhpcy5yYXBwaWQudG9vbGJhcjtcclxuICAgIGNvbnN0IGFyclNlbGVjdCA9IHRoaXMudG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBpLmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZDtcclxuICAgICAgICB9KSxcclxuICAgICAgICAxXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgIHRoaXMudG9vbGJhckNvbmZpZyA9IHRoaXMucmFwcGlkLnRvb2xiYXI7XHJcbiAgICBjb25zdCBhcnJTZWxlY3QgPSB0aGlzLnRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgIH0pO1xyXG4gICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICBhcnJTZWxlY3RbMF0ub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LXNlbGVjdGlvbmApWzBdO1xyXG4gICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5pbm5lckhUTUwgPSBGbG93Q2hhcnRDb25zdC5TRUxFQ1RfVEVNUExBVEU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzYXZlSW1hZ2VDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gdGhpcy5yYXBwaWQuZ2V0SnNvbkNvbnRlbnQoKTtcclxuICAgICAgdGhpcy5mbG93Y2hhcnQgPSB7XHJcbiAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcclxuICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXHJcbiAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZsb3djaGFydFNlcnZpY2VcclxuICAgICAgICAuZmxvd2NoYXJ0TW9kaWZ5aW5nKHRoaXMuZmxvd2NoYXJ0KVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkluc2VydEltYWdlKCkge1xyXG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoKTtcclxuICAgIGNvbnN0IGltYWdlQ29udGVudCA9IGF3YWl0IHRoaXMucmFwcGlkLmdldEltYWdlQ29udGVudCgpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0geyBrZXk6IGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlR9IyR7aWR9YCwgdmFsdWVzOiBpbWFnZUNvbnRlbnQgfVxyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVGVtcGxhdGUoKSB7XHJcbiAgICBjb25zdCBqc29uVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfU0VMRUNURURfSlNPTkNPTlRFTlRdID8gd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0pTT05DT05URU5UXSA6ICcnO1xyXG4gICAgaWYgKCF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdKSB7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19PUkdfSlNPTkNPTlRFTlRdID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yYXBwaWQuZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChqc29uVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5yYXBwaWQuZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZShqc29uVGVtcGxhdGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRGVsZXRlVGVtcGxhdGUodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XHJcbiAgICBkYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcclxuICAgICAgZGF0YVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWZcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfU0VMRUNURURfRkxPV0NIQVJUX0lEXTtcclxuICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0U2VydmljZVxyXG4gICAgICAgICAgICAuZmxvd2NoYXJ0RGVsZXRlVGVtcGxhdGUoaWQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRWYWx1ZShpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVEKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5lcnJvcih0aGlzLkxBTkcuUU1TQ0tFRElUT1IuREVMRVRFX0ZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNhdmVBc1RlbXBsYXRlKCkge1xyXG4gICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJhcHBpZC5ncmFwaC50b0pTT04oKSk7XHJcbiAgICBsZXQgdGVtcGxhdGUgPSBuZXcgUU1TQ0tFZGl0b3JGbG93Y2hhcnQoKTtcclxuICAgIHRlbXBsYXRlID0ge1xyXG4gICAgICBpZDogZ3VpZEhlbHBlci5lbXB0eSxcclxuICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxyXG4gICAgICBpc1RlbXBsYXRlOiB0cnVlLFxyXG4gICAgICB0ZW1wbGF0ZU5hbWU6ICcnXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclNhdmVBc1RlbXBsYXRlKCk7XHJcbiAgICBkYXRhLnRlbXBsYXRlVHlwZSA9IENLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlQ7XHJcbiAgICBkYXRhLmZsb3djaGFydCA9IHRlbXBsYXRlO1xyXG4gICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnMjIwcHgnLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5hZGRJdGVtMlRlbXBsYXRlKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUmVzZXRUZW1wbGF0ZSgpIHtcclxuICAgIGlmICh3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdKSB7XHJcbiAgICAgIGNvbnN0IG9yZ1RlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LktTX09SR19KU09OQ09OVEVOVF0gPyB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfT1JHX0pTT05DT05URU5UXSA6ICcnO1xyXG4gICAgICBpZiAob3JnVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLnJhcHBpZC5ncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKG9yZ1RlbXBsYXRlKSk7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19JU19TRUxFQ1RFRF9URU1QTEFURV0gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0luZm9NZXNzYWdlKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgZGF0YS50aXRsZSA9IHRpdGxlO1xyXG4gICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgIGRhdGEuaXNNZXNzYWdlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICBtaW5IZWlnaHQ6ICcxNzVweCcsXHJcbiAgICAgIGRhdGFcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIC8vVE9ET1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbn1cclxuIl19