@flogeez/angular-tiptap-editor 2.4.0 → 2.4.1
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/CHANGELOG.md +9 -0
- package/esm2022/flogeez-angular-tiptap-editor.mjs +5 -0
- package/esm2022/lib/ate-editor.provider.mjs +38 -0
- package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +207 -0
- package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +133 -0
- package/esm2022/lib/components/bubble-menus/color/ate-color-bubble-menu.component.mjs +365 -0
- package/esm2022/lib/components/bubble-menus/image/ate-image-bubble-menu.component.mjs +226 -0
- package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +247 -0
- package/esm2022/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.mjs +121 -0
- package/esm2022/lib/components/bubble-menus/table/ate-table-bubble-menu.component.mjs +266 -0
- package/esm2022/lib/components/bubble-menus/text/ate-bubble-menu.component.mjs +294 -0
- package/esm2022/lib/components/color-picker/ate-color-picker.component.mjs +122 -0
- package/esm2022/lib/components/edit-toggle/ate-edit-toggle.component.mjs +42 -0
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +953 -0
- package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +329 -0
- package/esm2022/lib/components/toolbar/ate-toolbar.component.mjs +531 -0
- package/esm2022/lib/components/ui/ate-button.component.mjs +90 -0
- package/esm2022/lib/components/ui/ate-separator.component.mjs +31 -0
- package/esm2022/lib/config/ate-editor.config.mjs +76 -0
- package/esm2022/lib/config/ate-global-config.token.mjs +6 -0
- package/esm2022/lib/config/ate-slash-commands.config.mjs +130 -0
- package/esm2022/lib/directives/ate-noop-value-accessor.directive.mjs +40 -0
- package/esm2022/lib/extensions/ate-link-click-behavior.extension.mjs +32 -0
- package/esm2022/lib/extensions/ate-resizable-image.extension.mjs +270 -0
- package/esm2022/lib/extensions/ate-table.extension.mjs +29 -0
- package/esm2022/lib/extensions/ate-tiptap-state.extension.mjs +85 -0
- package/esm2022/lib/extensions/ate-upload-progress.extension.mjs +195 -0
- package/esm2022/lib/extensions/calculators/ate-discovery.calculator.mjs +62 -0
- package/esm2022/lib/extensions/calculators/ate-image.calculator.mjs +8 -0
- package/esm2022/lib/extensions/calculators/ate-marks.calculator.mjs +75 -0
- package/esm2022/lib/extensions/calculators/ate-selection.calculator.mjs +35 -0
- package/esm2022/lib/extensions/calculators/ate-structure.calculator.mjs +34 -0
- package/esm2022/lib/extensions/calculators/ate-table.calculator.mjs +38 -0
- package/esm2022/lib/models/ate-bubble-menu.model.mjs +49 -0
- package/esm2022/lib/models/ate-editor-config.model.mjs +2 -0
- package/esm2022/lib/models/ate-editor-state.model.mjs +90 -0
- package/esm2022/lib/models/ate-image.model.mjs +2 -0
- package/esm2022/lib/models/ate-toolbar.model.mjs +35 -0
- package/esm2022/lib/node-view/ate-angular-node-view.mjs +97 -0
- package/esm2022/lib/node-view/ate-injector.registry.mjs +16 -0
- package/esm2022/lib/node-view/ate-node-view.factory.mjs +125 -0
- package/esm2022/lib/node-view/ate-node-view.models.mjs +2 -0
- package/esm2022/lib/node-view/ate-node-view.renderer.mjs +154 -0
- package/esm2022/lib/node-view/ate-register-angular-component.mjs +49 -0
- package/esm2022/lib/services/ate-color-picker.service.mjs +193 -0
- package/esm2022/lib/services/ate-editor-commands.service.mjs +465 -0
- package/esm2022/lib/services/ate-i18n.service.mjs +410 -0
- package/esm2022/lib/services/ate-image.service.mjs +368 -0
- package/esm2022/lib/services/ate-link.service.mjs +97 -0
- package/esm2022/lib/utils/ate-color.utils.mjs +60 -0
- package/esm2022/public-api.mjs +93 -0
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +313 -346
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/index.d.ts +3 -1673
- package/lib/ate-editor.provider.d.ts +21 -0
- package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +71 -0
- package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +60 -0
- package/lib/components/bubble-menus/color/ate-color-bubble-menu.component.d.ts +77 -0
- package/lib/components/bubble-menus/image/ate-image-bubble-menu.component.d.ts +52 -0
- package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +55 -0
- package/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.d.ts +12 -0
- package/lib/components/bubble-menus/table/ate-table-bubble-menu.component.d.ts +24 -0
- package/lib/components/bubble-menus/text/ate-bubble-menu.component.d.ts +53 -0
- package/lib/components/color-picker/ate-color-picker.component.d.ts +54 -0
- package/lib/components/edit-toggle/ate-edit-toggle.component.d.ts +13 -0
- package/lib/components/editor/angular-tiptap-editor.component.d.ts +235 -0
- package/lib/components/slash-commands/ate-slash-commands.component.d.ts +43 -0
- package/lib/components/toolbar/ate-toolbar.component.d.ts +47 -0
- package/lib/components/ui/ate-button.component.d.ts +25 -0
- package/lib/components/ui/ate-separator.component.d.ts +7 -0
- package/lib/config/ate-editor.config.d.ts +7 -0
- package/lib/config/ate-global-config.token.d.ts +6 -0
- package/lib/config/ate-slash-commands.config.d.ts +41 -0
- package/lib/directives/ate-noop-value-accessor.directive.d.ts +13 -0
- package/lib/extensions/ate-link-click-behavior.extension.d.ts +2 -0
- package/lib/extensions/ate-resizable-image.extension.d.ts +27 -0
- package/lib/extensions/ate-table.extension.d.ts +2 -0
- package/lib/extensions/ate-tiptap-state.extension.d.ts +7 -0
- package/lib/extensions/ate-upload-progress.extension.d.ts +7 -0
- package/lib/extensions/calculators/ate-discovery.calculator.d.ts +7 -0
- package/lib/extensions/calculators/ate-image.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-marks.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-selection.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-structure.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-table.calculator.d.ts +2 -0
- package/lib/models/ate-bubble-menu.model.d.ts +33 -0
- package/lib/models/ate-editor-config.model.d.ts +100 -0
- package/lib/models/ate-editor-state.model.d.ts +109 -0
- package/lib/models/ate-image.model.d.ts +104 -0
- package/lib/models/ate-toolbar.model.d.ts +18 -0
- package/lib/node-view/ate-angular-node-view.d.ts +115 -0
- package/lib/node-view/ate-injector.registry.d.ts +3 -0
- package/lib/node-view/ate-node-view.factory.d.ts +10 -0
- package/lib/node-view/ate-node-view.models.d.ts +138 -0
- package/lib/node-view/ate-node-view.renderer.d.ts +23 -0
- package/lib/node-view/ate-register-angular-component.d.ts +35 -0
- package/lib/services/ate-color-picker.service.d.ts +65 -0
- package/lib/services/ate-editor-commands.service.d.ts +72 -0
- package/lib/services/ate-i18n.service.d.ts +394 -0
- package/lib/services/ate-image.service.d.ts +71 -0
- package/lib/services/ate-link.service.d.ts +42 -0
- package/lib/utils/ate-color.utils.d.ts +12 -0
- package/package.json +3 -1
- package/public-api.d.ts +112 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { Injectable, inject, signal } from "@angular/core";
|
|
2
|
+
import { AteImageService } from "./ate-image.service";
|
|
3
|
+
import { AteColorPickerService } from "./ate-color-picker.service";
|
|
4
|
+
import { AteLinkService } from "./ate-link.service";
|
|
5
|
+
import { ATE_INITIAL_EDITOR_STATE } from "../models/ate-editor-state.model";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class AteEditorCommandsService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.imageService = inject(AteImageService);
|
|
10
|
+
this.colorPickerSvc = inject(AteColorPickerService);
|
|
11
|
+
this.linkSvc = inject(AteLinkService);
|
|
12
|
+
this._editorState = signal(ATE_INITIAL_EDITOR_STATE, {
|
|
13
|
+
equal: (a, b) => {
|
|
14
|
+
// 1. Primitive global states
|
|
15
|
+
if (a.isFocused !== b.isFocused || a.isEditable !== b.isEditable) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
// 2. Detailed selection comparison
|
|
19
|
+
if (a.selection.from !== b.selection.from ||
|
|
20
|
+
a.selection.to !== b.selection.to ||
|
|
21
|
+
a.selection.type !== b.selection.type ||
|
|
22
|
+
a.selection.empty !== b.selection.empty ||
|
|
23
|
+
a.selection.isSingleCell !== b.selection.isSingleCell) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
// Helper for object comparison
|
|
27
|
+
const isRecordEqual = (objA, objB) => {
|
|
28
|
+
const keysA = Object.keys(objA);
|
|
29
|
+
const keysB = Object.keys(objB);
|
|
30
|
+
if (keysA.length !== keysB.length) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return keysA.every(key => objA[key] === objB[key]);
|
|
34
|
+
};
|
|
35
|
+
// 3. Compare sub-states (marks, can, nodes)
|
|
36
|
+
if (!isRecordEqual(a.marks, b.marks)) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (!isRecordEqual(a.can, b.can)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (!isRecordEqual(a.nodes, b.nodes)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
// 4. Compare custom extension states
|
|
46
|
+
if (!isRecordEqual(a.custom, b.custom)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
/** Exposed editor state as a readonly signal */
|
|
53
|
+
this.editorState = this._editorState.asReadonly();
|
|
54
|
+
// ============================================
|
|
55
|
+
// Toolbar Interaction State
|
|
56
|
+
// ============================================
|
|
57
|
+
/** Signal to track when the toolbar is being hovered/interacted with */
|
|
58
|
+
this._isToolbarInteracting = signal(false);
|
|
59
|
+
this.isToolbarInteracting = this._isToolbarInteracting.asReadonly();
|
|
60
|
+
// Access to ImageService states as readonly signals for UI binding
|
|
61
|
+
this.isUploading = this.imageService.isUploading.asReadonly();
|
|
62
|
+
this.uploadProgress = this.imageService.uploadProgress.asReadonly();
|
|
63
|
+
this.uploadMessage = this.imageService.uploadMessage.asReadonly();
|
|
64
|
+
// ============================================
|
|
65
|
+
// Link State (proxied from LinkService)
|
|
66
|
+
// ============================================
|
|
67
|
+
/** Signal to toggle link edit mode from UI (Toolbar) - Immediate response */
|
|
68
|
+
this.linkEditMode = this.linkSvc.editMode.asReadonly();
|
|
69
|
+
/** Reference to the element that triggered the link menu (for anchoring) */
|
|
70
|
+
this.linkMenuTrigger = this.linkSvc.menuTrigger.asReadonly();
|
|
71
|
+
// ============================================
|
|
72
|
+
// Color Picker State (proxied from ColorPickerService)
|
|
73
|
+
// ============================================
|
|
74
|
+
/** Signal to toggle color picker mode from UI (text or highlight) */
|
|
75
|
+
this.colorEditMode = this.colorPickerSvc.editMode.asReadonly();
|
|
76
|
+
/** Reference to the element that triggered the color menu (for anchoring) */
|
|
77
|
+
this.colorMenuTrigger = this.colorPickerSvc.menuTrigger.asReadonly();
|
|
78
|
+
}
|
|
79
|
+
/** Set toolbar interaction state (called by editor component) */
|
|
80
|
+
setToolbarInteracting(value) {
|
|
81
|
+
this._isToolbarInteracting.set(value);
|
|
82
|
+
}
|
|
83
|
+
set uploadHandler(handler) {
|
|
84
|
+
this.imageService.uploadHandler = handler;
|
|
85
|
+
}
|
|
86
|
+
/** Update state (called by TiptapStateExtension) */
|
|
87
|
+
updateState(state) {
|
|
88
|
+
this._editorState.set(state);
|
|
89
|
+
}
|
|
90
|
+
// ============================================
|
|
91
|
+
// Link Edit Methods (delegated to LinkService)
|
|
92
|
+
// ============================================
|
|
93
|
+
// ============================================
|
|
94
|
+
// Command Execution
|
|
95
|
+
// ============================================
|
|
96
|
+
/** Generic method to execute any command by name */
|
|
97
|
+
execute(editor, command, ...args) {
|
|
98
|
+
if (!editor) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
switch (command) {
|
|
102
|
+
case "toggleBold":
|
|
103
|
+
this.toggleBold(editor);
|
|
104
|
+
break;
|
|
105
|
+
case "toggleItalic":
|
|
106
|
+
this.toggleItalic(editor);
|
|
107
|
+
break;
|
|
108
|
+
case "toggleStrike":
|
|
109
|
+
this.toggleStrike(editor);
|
|
110
|
+
break;
|
|
111
|
+
case "toggleCode":
|
|
112
|
+
this.toggleCode(editor);
|
|
113
|
+
break;
|
|
114
|
+
case "toggleCodeBlock":
|
|
115
|
+
this.toggleCodeBlock(editor);
|
|
116
|
+
break;
|
|
117
|
+
case "toggleUnderline":
|
|
118
|
+
this.toggleUnderline(editor);
|
|
119
|
+
break;
|
|
120
|
+
case "toggleSuperscript":
|
|
121
|
+
this.toggleSuperscript(editor);
|
|
122
|
+
break;
|
|
123
|
+
case "toggleSubscript":
|
|
124
|
+
this.toggleSubscript(editor);
|
|
125
|
+
break;
|
|
126
|
+
case "toggleHeading":
|
|
127
|
+
this.toggleHeading(editor, args[0]);
|
|
128
|
+
break;
|
|
129
|
+
case "toggleBulletList":
|
|
130
|
+
this.toggleBulletList(editor);
|
|
131
|
+
break;
|
|
132
|
+
case "toggleOrderedList":
|
|
133
|
+
this.toggleOrderedList(editor);
|
|
134
|
+
break;
|
|
135
|
+
case "toggleBlockquote":
|
|
136
|
+
this.toggleBlockquote(editor);
|
|
137
|
+
break;
|
|
138
|
+
case "setTextAlign":
|
|
139
|
+
this.setTextAlign(editor, args[0]);
|
|
140
|
+
break;
|
|
141
|
+
case "toggleLink":
|
|
142
|
+
this.linkSvc.toggle(editor, args[0]);
|
|
143
|
+
break;
|
|
144
|
+
case "unsetLink":
|
|
145
|
+
this.linkSvc.unsetLink(editor);
|
|
146
|
+
break;
|
|
147
|
+
case "toggleColorPicker":
|
|
148
|
+
this.colorPickerSvc.toggle(editor, args[0], args[1]);
|
|
149
|
+
break;
|
|
150
|
+
case "insertHorizontalRule":
|
|
151
|
+
this.insertHorizontalRule(editor);
|
|
152
|
+
break;
|
|
153
|
+
case "insertImage":
|
|
154
|
+
this.insertImage(editor, args[0]);
|
|
155
|
+
break;
|
|
156
|
+
case "uploadImage":
|
|
157
|
+
this.uploadImage(editor, args[0], args[1]);
|
|
158
|
+
break;
|
|
159
|
+
case "toggleHighlight":
|
|
160
|
+
this.toggleHighlight(editor, args[0]);
|
|
161
|
+
break;
|
|
162
|
+
case "undo":
|
|
163
|
+
this.undo(editor);
|
|
164
|
+
break;
|
|
165
|
+
case "redo":
|
|
166
|
+
this.redo(editor);
|
|
167
|
+
break;
|
|
168
|
+
case "insertTable":
|
|
169
|
+
this.insertTable(editor, args[0], args[1]);
|
|
170
|
+
break;
|
|
171
|
+
case "addColumnBefore":
|
|
172
|
+
this.addColumnBefore(editor);
|
|
173
|
+
break;
|
|
174
|
+
case "addColumnAfter":
|
|
175
|
+
this.addColumnAfter(editor);
|
|
176
|
+
break;
|
|
177
|
+
case "deleteColumn":
|
|
178
|
+
this.deleteColumn(editor);
|
|
179
|
+
break;
|
|
180
|
+
case "addRowBefore":
|
|
181
|
+
this.addRowBefore(editor);
|
|
182
|
+
break;
|
|
183
|
+
case "addRowAfter":
|
|
184
|
+
this.addRowAfter(editor);
|
|
185
|
+
break;
|
|
186
|
+
case "deleteRow":
|
|
187
|
+
this.deleteRow(editor);
|
|
188
|
+
break;
|
|
189
|
+
case "deleteTable":
|
|
190
|
+
this.deleteTable(editor);
|
|
191
|
+
break;
|
|
192
|
+
case "mergeCells":
|
|
193
|
+
this.mergeCells(editor);
|
|
194
|
+
break;
|
|
195
|
+
case "splitCell":
|
|
196
|
+
this.splitCell(editor);
|
|
197
|
+
break;
|
|
198
|
+
case "toggleHeaderColumn":
|
|
199
|
+
this.toggleHeaderColumn(editor);
|
|
200
|
+
break;
|
|
201
|
+
case "toggleHeaderRow":
|
|
202
|
+
this.toggleHeaderRow(editor);
|
|
203
|
+
break;
|
|
204
|
+
case "applyColor":
|
|
205
|
+
this.colorPickerSvc.applyColor(editor, args[0], args[1], args[2]);
|
|
206
|
+
break;
|
|
207
|
+
case "applyHighlight":
|
|
208
|
+
this.colorPickerSvc.applyHighlight(editor, args[0], args[1], args[2]);
|
|
209
|
+
break;
|
|
210
|
+
case "unsetColor":
|
|
211
|
+
this.colorPickerSvc.unsetColor(editor, args[0]);
|
|
212
|
+
break;
|
|
213
|
+
case "unsetHighlight":
|
|
214
|
+
this.colorPickerSvc.unsetHighlight(editor, args[0]);
|
|
215
|
+
break;
|
|
216
|
+
case "clearContent":
|
|
217
|
+
this.clearContent(editor);
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// --- Formatting Commands ---
|
|
222
|
+
toggleBold(editor) {
|
|
223
|
+
if (!editor) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
editor.chain().focus().toggleBold().run();
|
|
227
|
+
}
|
|
228
|
+
toggleItalic(editor) {
|
|
229
|
+
if (!editor) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
editor.chain().focus().toggleItalic().run();
|
|
233
|
+
}
|
|
234
|
+
toggleStrike(editor) {
|
|
235
|
+
if (!editor) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
editor.chain().focus().toggleStrike().run();
|
|
239
|
+
}
|
|
240
|
+
toggleCode(editor) {
|
|
241
|
+
if (!editor) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
editor.chain().focus().toggleCode().run();
|
|
245
|
+
}
|
|
246
|
+
toggleCodeBlock(editor) {
|
|
247
|
+
if (!editor) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
editor.chain().focus().toggleCodeBlock().run();
|
|
251
|
+
}
|
|
252
|
+
toggleUnderline(editor) {
|
|
253
|
+
if (!editor) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
editor.chain().focus().toggleUnderline().run();
|
|
257
|
+
}
|
|
258
|
+
toggleSuperscript(editor) {
|
|
259
|
+
if (!editor) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
editor.chain().focus().toggleSuperscript().run();
|
|
263
|
+
}
|
|
264
|
+
toggleSubscript(editor) {
|
|
265
|
+
if (!editor) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
editor.chain().focus().toggleSubscript().run();
|
|
269
|
+
}
|
|
270
|
+
toggleHeading(editor, level) {
|
|
271
|
+
if (!editor) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
editor.chain().focus().toggleHeading({ level }).run();
|
|
275
|
+
}
|
|
276
|
+
toggleHighlight(editor, color) {
|
|
277
|
+
if (!editor) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (color) {
|
|
281
|
+
editor.chain().focus().setHighlight({ color }).run();
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
editor.chain().focus().toggleHighlight().run();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// --- Structure Commands ---
|
|
288
|
+
toggleBulletList(editor) {
|
|
289
|
+
if (!editor) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
editor.chain().focus().toggleBulletList().run();
|
|
293
|
+
}
|
|
294
|
+
toggleOrderedList(editor) {
|
|
295
|
+
if (!editor) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
editor.chain().focus().toggleOrderedList().run();
|
|
299
|
+
}
|
|
300
|
+
toggleBlockquote(editor) {
|
|
301
|
+
if (!editor) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
editor.chain().focus().toggleBlockquote().run();
|
|
305
|
+
}
|
|
306
|
+
setTextAlign(editor, alignment) {
|
|
307
|
+
if (!editor) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
editor.chain().focus().setTextAlign(alignment).run();
|
|
311
|
+
}
|
|
312
|
+
insertHorizontalRule(editor) {
|
|
313
|
+
if (!editor) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
editor.chain().focus().setHorizontalRule().run();
|
|
317
|
+
}
|
|
318
|
+
// --- History Commands ---
|
|
319
|
+
undo(editor) {
|
|
320
|
+
if (!editor) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
editor.chain().focus().undo().run();
|
|
324
|
+
}
|
|
325
|
+
redo(editor) {
|
|
326
|
+
if (!editor) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
editor.chain().focus().redo().run();
|
|
330
|
+
}
|
|
331
|
+
// --- Table Commands ---
|
|
332
|
+
insertTable(editor, rows = 3, cols = 3) {
|
|
333
|
+
if (!editor) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
editor.chain().focus().insertTable({ rows, cols }).run();
|
|
337
|
+
}
|
|
338
|
+
addColumnBefore(editor) {
|
|
339
|
+
if (!editor) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
editor.chain().focus().addColumnBefore().run();
|
|
343
|
+
}
|
|
344
|
+
addColumnAfter(editor) {
|
|
345
|
+
if (!editor) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
editor.chain().focus().addColumnAfter().run();
|
|
349
|
+
}
|
|
350
|
+
deleteColumn(editor) {
|
|
351
|
+
if (!editor) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
editor.chain().focus().deleteColumn().run();
|
|
355
|
+
}
|
|
356
|
+
addRowBefore(editor) {
|
|
357
|
+
if (!editor) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
editor.chain().focus().addRowBefore().run();
|
|
361
|
+
}
|
|
362
|
+
addRowAfter(editor) {
|
|
363
|
+
if (!editor) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
editor.chain().focus().addRowAfter().run();
|
|
367
|
+
}
|
|
368
|
+
deleteRow(editor) {
|
|
369
|
+
if (!editor) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
editor.chain().focus().deleteRow().run();
|
|
373
|
+
}
|
|
374
|
+
deleteTable(editor) {
|
|
375
|
+
if (!editor) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
editor.chain().focus().deleteTable().run();
|
|
379
|
+
}
|
|
380
|
+
mergeCells(editor) {
|
|
381
|
+
if (!editor) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
editor.chain().focus().mergeCells().run();
|
|
385
|
+
}
|
|
386
|
+
splitCell(editor) {
|
|
387
|
+
if (!editor) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
editor.chain().focus().splitCell().run();
|
|
391
|
+
}
|
|
392
|
+
toggleHeaderColumn(editor) {
|
|
393
|
+
if (!editor) {
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
editor.chain().focus().toggleHeaderColumn().run();
|
|
397
|
+
}
|
|
398
|
+
toggleHeaderRow(editor) {
|
|
399
|
+
if (!editor) {
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
editor.chain().focus().toggleHeaderRow().run();
|
|
403
|
+
}
|
|
404
|
+
// --- Utility Commands ---
|
|
405
|
+
clearContent(editor) {
|
|
406
|
+
if (!editor) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
editor.commands.clearContent(true);
|
|
410
|
+
}
|
|
411
|
+
focus(editor) {
|
|
412
|
+
if (!editor) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
editor.chain().focus().run();
|
|
416
|
+
}
|
|
417
|
+
blur(editor) {
|
|
418
|
+
if (!editor) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
editor.chain().blur().run();
|
|
422
|
+
}
|
|
423
|
+
setContent(editor, content, emitUpdate = true) {
|
|
424
|
+
if (!editor) {
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
editor.commands.setContent(content, emitUpdate);
|
|
428
|
+
}
|
|
429
|
+
setEditable(editor, editable) {
|
|
430
|
+
if (!editor) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
editor.setEditable(editable);
|
|
434
|
+
}
|
|
435
|
+
insertContent(editor, content) {
|
|
436
|
+
if (!editor) {
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
editor.chain().focus().insertContent(content).run();
|
|
440
|
+
}
|
|
441
|
+
async insertImage(editor, options) {
|
|
442
|
+
try {
|
|
443
|
+
await this.imageService.selectAndUploadImage(editor, options);
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
console.error("Error inserting image:", error);
|
|
447
|
+
throw error;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
async uploadImage(editor, file, options) {
|
|
451
|
+
try {
|
|
452
|
+
await this.imageService.uploadAndInsertImage(editor, file, options);
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
console.error("Error uploading image:", error);
|
|
456
|
+
throw error;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteEditorCommandsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
460
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteEditorCommandsService }); }
|
|
461
|
+
}
|
|
462
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteEditorCommandsService, decorators: [{
|
|
463
|
+
type: Injectable
|
|
464
|
+
}] });
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvc2VydmljZXMvYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBMEIsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFJcEcsTUFBTSxPQUFPLHdCQUF3QjtJQURyQztRQUVVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0MsWUFBTyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QixpQkFBWSxHQUFHLE1BQU0sQ0FBeUIsd0JBQXdCLEVBQUU7WUFDdkYsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNkLDZCQUE2QjtnQkFDN0IsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2pFLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsbUNBQW1DO2dCQUNuQyxJQUNFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFB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Q0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWMsRUFBRSxJQUFVLEVBQUUsT0FBK0I7UUFDM0UsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7K0dBMWdCVSx3QkFBd0I7bUhBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IEF0ZUltYWdlU2VydmljZSB9IGZyb20gXCIuL2F0ZS1pbWFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVDb2xvclBpY2tlclNlcnZpY2UgfSBmcm9tIFwiLi9hdGUtY29sb3ItcGlja2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUxpbmtTZXJ2aWNlIH0gZnJvbSBcIi4vYXRlLWxpbmsuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yU3RhdGVTbmFwc2hvdCwgQVRFX0lOSVRJQUxfRURJVE9SX1NUQVRFIH0gZnJvbSBcIi4uL21vZGVscy9hdGUtZWRpdG9yLXN0YXRlLm1vZGVsXCI7XG5pbXBvcnQgeyBBdGVJbWFnZVVwbG9hZEhhbmRsZXIsIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB9IGZyb20gXCIuLi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2Uge1xuICBwcml2YXRlIGltYWdlU2VydmljZSA9IGluamVjdChBdGVJbWFnZVNlcnZpY2UpO1xuICBwcml2YXRlIGNvbG9yUGlja2VyU3ZjID0gaW5qZWN0KEF0ZUNvbG9yUGlja2VyU2VydmljZSk7XG4gIHByaXZhdGUgbGlua1N2YyA9IGluamVjdChBdGVMaW5rU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvclN0YXRlID0gc2lnbmFsPEF0ZUVkaXRvclN0YXRlU25hcHNob3Q+KEFURV9JTklUSUFMX0VESVRPUl9TVEFURSwge1xuICAgIGVxdWFsOiAoYSwgYikgPT4ge1xuICAgICAgLy8gMS4gUHJpbWl0aXZlIGdsb2JhbCBzdGF0ZXNcbiAgICAgIGlmIChhLmlzRm9jdXNlZCAhPT0gYi5pc0ZvY3VzZWQgfHwgYS5pc0VkaXRhYmxlICE9PSBiLmlzRWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBEZXRhaWxlZCBzZWxlY3Rpb24gY29tcGFyaXNvblxuICAgICAgaWYgKFxuICAgICAgICBhLnNlbGVjdGlvbi5mcm9tICE9PSBiLnNlbGVjdGlvbi5mcm9tIHx8XG4gICAgICAgIGEuc2VsZWN0aW9uLnRvICE9PSBiLnNlbGVjdGlvbi50byB8fFxuICAgICAgICBhLnNlbGVjdGlvbi50eXBlICE9PSBiLnNlbGVjdGlvbi50eXBlIHx8XG4gICAgICAgIGEuc2VsZWN0aW9uLmVtcHR5ICE9PSBiLnNlbGVjdGlvbi5lbXB0eSB8fFxuICAgICAgICBhLnNlbGVjdGlvbi5pc1NpbmdsZUNlbGwgIT09IGIuc2VsZWN0aW9uLmlzU2luZ2xlQ2VsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGVscGVyIGZvciBvYmplY3QgY29tcGFyaXNvblxuICAgICAgY29uc3QgaXNSZWNvcmRFcXVhbCA9IChvYmpBOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb2JqQjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgICAgICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgICAgICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzQS5ldmVyeShrZXkgPT4gb2JqQVtrZXldID09PSBvYmpCW2tleV0pO1xuICAgICAgfTtcblxuICAgICAgLy8gMy4gQ29tcGFyZSBzdWItc3RhdGVzIChtYXJrcywgY2FuLCBub2RlcylcbiAgICAgIGlmICghaXNSZWNvcmRFcXVhbChhLm1hcmtzLCBiLm1hcmtzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5jYW4sIGIuY2FuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5ub2RlcywgYi5ub2RlcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBDb21wYXJlIGN1c3RvbSBleHRlbnNpb24gc3RhdGVzXG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5jdXN0b20sIGIuY3VzdG9tKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qKiBFeHBvc2VkIGVkaXRvciBzdGF0ZSBhcyBhIHJlYWRvbmx5IHNpZ25hbCAqL1xuICByZWFkb25seSBlZGl0b3JTdGF0ZSA9IHRoaXMuX2VkaXRvclN0YXRlLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUb29sYmFyIEludGVyYWN0aW9uIFN0YXRlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIFNpZ25hbCB0byB0cmFjayB3aGVuIHRoZSB0b29sYmFyIGlzIGJlaW5nIGhvdmVyZWQvaW50ZXJhY3RlZCB3aXRoICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVG9vbGJhckludGVyYWN0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNUb29sYmFySW50ZXJhY3RpbmcgPSB0aGlzLl9pc1Rvb2xiYXJJbnRlcmFjdGluZy5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIFNldCB0b29sYmFyIGludGVyYWN0aW9uIHN0YXRlIChjYWxsZWQgYnkgZWRpdG9yIGNvbXBvbmVudCkgKi9cbiAgc2V0VG9vbGJhckludGVyYWN0aW5nKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNUb29sYmFySW50ZXJhY3Rpbmcuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIEFjY2VzcyB0byBJbWFnZVNlcnZpY2Ugc3RhdGVzIGFzIHJlYWRvbmx5IHNpZ25hbHMgZm9yIFVJIGJpbmRpbmdcbiAgcmVhZG9ubHkgaXNVcGxvYWRpbmcgPSB0aGlzLmltYWdlU2VydmljZS5pc1VwbG9hZGluZy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IHVwbG9hZFByb2dyZXNzID0gdGhpcy5pbWFnZVNlcnZpY2UudXBsb2FkUHJvZ3Jlc3MuYXNSZWFkb25seSgpO1xuICByZWFkb25seSB1cGxvYWRNZXNzYWdlID0gdGhpcy5pbWFnZVNlcnZpY2UudXBsb2FkTWVzc2FnZS5hc1JlYWRvbmx5KCk7XG4gIHNldCB1cGxvYWRIYW5kbGVyKGhhbmRsZXI6IEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IG51bGwpIHtcbiAgICB0aGlzLmltYWdlU2VydmljZS51cGxvYWRIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKiBVcGRhdGUgc3RhdGUgKGNhbGxlZCBieSBUaXB0YXBTdGF0ZUV4dGVuc2lvbikgKi9cbiAgdXBkYXRlU3RhdGUoc3RhdGU6IEF0ZUVkaXRvclN0YXRlU25hcHNob3QpIHtcbiAgICB0aGlzLl9lZGl0b3JTdGF0ZS5zZXQoc3RhdGUpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTGluayBTdGF0ZSAocHJveGllZCBmcm9tIExpbmtTZXJ2aWNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBTaWduYWwgdG8gdG9nZ2xlIGxpbmsgZWRpdCBtb2RlIGZyb20gVUkgKFRvb2xiYXIpIC0gSW1tZWRpYXRlIHJlc3BvbnNlICovXG4gIHJlYWRvbmx5IGxpbmtFZGl0TW9kZSA9IHRoaXMubGlua1N2Yy5lZGl0TW9kZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgbGluayBtZW51IChmb3IgYW5jaG9yaW5nKSAqL1xuICByZWFkb25seSBsaW5rTWVudVRyaWdnZXIgPSB0aGlzLmxpbmtTdmMubWVudVRyaWdnZXIuYXNSZWFkb25seSgpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvbG9yIFBpY2tlciBTdGF0ZSAocHJveGllZCBmcm9tIENvbG9yUGlja2VyU2VydmljZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogU2lnbmFsIHRvIHRvZ2dsZSBjb2xvciBwaWNrZXIgbW9kZSBmcm9tIFVJICh0ZXh0IG9yIGhpZ2hsaWdodCkgKi9cbiAgcmVhZG9ubHkgY29sb3JFZGl0TW9kZSA9IHRoaXMuY29sb3JQaWNrZXJTdmMuZWRpdE1vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbG9yIG1lbnUgKGZvciBhbmNob3JpbmcpICovXG4gIHJlYWRvbmx5IGNvbG9yTWVudVRyaWdnZXIgPSB0aGlzLmNvbG9yUGlja2VyU3ZjLm1lbnVUcmlnZ2VyLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMaW5rIEVkaXQgTWV0aG9kcyAoZGVsZWdhdGVkIHRvIExpbmtTZXJ2aWNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvbW1hbmQgRXhlY3V0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIEdlbmVyaWMgbWV0aG9kIHRvIGV4ZWN1dGUgYW55IGNvbW1hbmQgYnkgbmFtZSAqL1xuICBleGVjdXRlKGVkaXRvcjogRWRpdG9yLCBjb21tYW5kOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlIFwidG9nZ2xlQm9sZFwiOlxuICAgICAgICB0aGlzLnRvZ2dsZUJvbGQoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlSXRhbGljXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlSXRhbGljKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZVN0cmlrZVwiOlxuICAgICAgICB0aGlzLnRvZ2dsZVN0cmlrZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVDb2RlXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlQ29kZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVDb2RlQmxvY2tcIjpcbiAgICAgICAgdGhpcy50b2dnbGVDb2RlQmxvY2soZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlVW5kZXJsaW5lXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlVW5kZXJsaW5lKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZVN1cGVyc2NyaXB0XCI6XG4gICAgICAgIHRoaXMudG9nZ2xlU3VwZXJzY3JpcHQoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlU3Vic2NyaXB0XCI6XG4gICAgICAgIHRoaXMudG9nZ2xlU3Vic2NyaXB0KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUhlYWRpbmdcIjpcbiAgICAgICAgdGhpcy50b2dnbGVIZWFkaW5nKGVkaXRvciwgYXJnc1swXSBhcyAxIHwgMiB8IDMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVCdWxsZXRMaXN0XCI6XG4gICAgICAgIHRoaXMudG9nZ2xlQnVsbGV0TGlzdChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVPcmRlcmVkTGlzdFwiOlxuICAgICAgICB0aGlzLnRvZ2dsZU9yZGVyZWRMaXN0KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUJsb2NrcXVvdGVcIjpcbiAgICAgICAgdGhpcy50b2dnbGVCbG9ja3F1b3RlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNldFRleHRBbGlnblwiOlxuICAgICAgICB0aGlzLnNldFRleHRBbGlnbihlZGl0b3IsIGFyZ3NbMF0gYXMgXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiIHwgXCJqdXN0aWZ5XCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVMaW5rXCI6XG4gICAgICAgIHRoaXMubGlua1N2Yy50b2dnbGUoZWRpdG9yLCBhcmdzWzBdIGFzIEV2ZW50IHwgdW5kZWZpbmVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidW5zZXRMaW5rXCI6XG4gICAgICAgIHRoaXMubGlua1N2Yy51bnNldExpbmsoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlQ29sb3JQaWNrZXJcIjpcbiAgICAgICAgdGhpcy5jb2xvclBpY2tlclN2Yy50b2dnbGUoZWRpdG9yLCBhcmdzWzBdIGFzIFwidGV4dFwiIHwgXCJoaWdobGlnaHRcIiwgYXJnc1sxXSBhcyBFdmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImluc2VydEhvcml6b250YWxSdWxlXCI6XG4gICAgICAgIHRoaXMuaW5zZXJ0SG9yaXpvbnRhbFJ1bGUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5zZXJ0SW1hZ2VcIjpcbiAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShlZGl0b3IsIGFyZ3NbMF0gYXMgQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidXBsb2FkSW1hZ2VcIjpcbiAgICAgICAgdGhpcy51cGxvYWRJbWFnZShlZGl0b3IsIGFyZ3NbMF0gYXMgRmlsZSwgYXJnc1sxXSBhcyBBdGVJbWFnZVVwbG9hZE9wdGlvbnMgfCB1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVIaWdobGlnaHRcIjpcbiAgICAgICAgdGhpcy50b2dnbGVIaWdobGlnaHQoZWRpdG9yLCBhcmdzWzBdIGFzIHN0cmluZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVuZG9cIjpcbiAgICAgICAgdGhpcy51bmRvKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlZG9cIjpcbiAgICAgICAgdGhpcy5yZWRvKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImluc2VydFRhYmxlXCI6XG4gICAgICAgIHRoaXMuaW5zZXJ0VGFibGUoZWRpdG9yLCBhcmdzWzBdIGFzIG51bWJlciB8IHVuZGVmaW5lZCwgYXJnc1sxXSBhcyBudW1iZXIgfCB1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRDb2x1bW5CZWZvcmVcIjpcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5CZWZvcmUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkQ29sdW1uQWZ0ZXJcIjpcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5BZnRlcihlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkZWxldGVDb2x1bW5cIjpcbiAgICAgICAgdGhpcy5kZWxldGVDb2x1bW4oZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkUm93QmVmb3JlXCI6XG4gICAgICAgIHRoaXMuYWRkUm93QmVmb3JlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZFJvd0FmdGVyXCI6XG4gICAgICAgIHRoaXMuYWRkUm93QWZ0ZXIoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGVsZXRlUm93XCI6XG4gICAgICAgIHRoaXMuZGVsZXRlUm93KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRlbGV0ZVRhYmxlXCI6XG4gICAgICAgIHRoaXMuZGVsZXRlVGFibGUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWVyZ2VDZWxsc1wiOlxuICAgICAgICB0aGlzLm1lcmdlQ2VsbHMoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic3BsaXRDZWxsXCI6XG4gICAgICAgIHRoaXMuc3BsaXRDZWxsKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUhlYWRlckNvbHVtblwiOlxuICAgICAgICB0aGlzLnRvZ2dsZUhlYWRlckNvbHVtbihlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVIZWFkZXJSb3dcIjpcbiAgICAgICAgdGhpcy50b2dnbGVIZWFkZXJSb3coZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYXBwbHlDb2xvclwiOlxuICAgICAgICB0aGlzLmNvbG9yUGlja2VyU3ZjLmFwcGx5Q29sb3IoXG4gICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgIGFyZ3NbMF0gYXMgc3RyaW5nLFxuICAgICAgICAgIGFyZ3NbMV0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBhcmdzWzJdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYXBwbHlIaWdobGlnaHRcIjpcbiAgICAgICAgdGhpcy5jb2xvclBpY2tlclN2Yy5hcHBseUhpZ2hsaWdodChcbiAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgYXJnc1swXSBhcyBzdHJpbmcsXG4gICAgICAgICAgYXJnc1sxXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGFyZ3NbMl0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1bnNldENvbG9yXCI6XG4gICAgICAgIHRoaXMuY29sb3JQaWNrZXJTdmMudW5zZXRDb2xvcihlZGl0b3IsIGFyZ3NbMF0gYXMgYm9vbGVhbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVuc2V0SGlnaGxpZ2h0XCI6XG4gICAgICAgIHRoaXMuY29sb3JQaWNrZXJTdmMudW5zZXRIaWdobGlnaHQoZWRpdG9yLCBhcmdzWzBdIGFzIGJvb2xlYW4pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImNsZWFyQ29udGVudFwiOlxuICAgICAgICB0aGlzLmNsZWFyQ29udGVudChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gRm9ybWF0dGluZyBDb21tYW5kcyAtLS1cblxuICB0b2dnbGVCb2xkKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCb2xkKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVJdGFsaWMoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUl0YWxpYygpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlU3RyaWtlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVTdHJpa2UoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUNvZGUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUNvZGUoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUNvZGVCbG9jayhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQ29kZUJsb2NrKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVVbmRlcmxpbmUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVVuZGVybGluZSgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlU3VwZXJzY3JpcHQoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1cGVyc2NyaXB0KCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVTdWJzY3JpcHQoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1YnNjcmlwdCgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlSGVhZGluZyhlZGl0b3I6IEVkaXRvciwgbGV2ZWw6IDEgfCAyIHwgMyk6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGluZyh7IGxldmVsIH0pLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlSGlnaGxpZ2h0KGVkaXRvcjogRWRpdG9yLCBjb2xvcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb2xvcikge1xuICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRIaWdobGlnaHQoeyBjb2xvciB9KS5ydW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIaWdobGlnaHQoKS5ydW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gU3RydWN0dXJlIENvbW1hbmRzIC0tLVxuXG4gIHRvZ2dsZUJ1bGxldExpc3QoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJ1bGxldExpc3QoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZU9yZGVyZWRMaXN0KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVPcmRlcmVkTGlzdCgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlQmxvY2txdW90ZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQmxvY2txdW90ZSgpLnJ1bigpO1xuICB9XG5cbiAgc2V0VGV4dEFsaWduKGVkaXRvcjogRWRpdG9yLCBhbGlnbm1lbnQ6IFwibGVmdFwiIHwgXCJjZW50ZXJcIiB8IFwicmlnaHRcIiB8IFwianVzdGlmeVwiKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oYWxpZ25tZW50KS5ydW4oKTtcbiAgfVxuXG4gIGluc2VydEhvcml6b250YWxSdWxlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRIb3Jpem9udGFsUnVsZSgpLnJ1bigpO1xuICB9XG5cbiAgLy8gLS0tIEhpc3RvcnkgQ29tbWFuZHMgLS0tXG5cbiAgdW5kbyhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5kbygpLnJ1bigpO1xuICB9XG5cbiAgcmVkbyhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkucmVkbygpLnJ1bigpO1xuICB9XG5cbiAgLy8gLS0tIFRhYmxlIENvbW1hbmRzIC0tLVxuXG4gIGluc2VydFRhYmxlKGVkaXRvcjogRWRpdG9yLCByb3dzID0gMywgY29scyA9IDMpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmluc2VydFRhYmxlKHsgcm93cywgY29scyB9KS5ydW4oKTtcbiAgfVxuXG4gIGFkZENvbHVtbkJlZm9yZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuYWRkQ29sdW1uQmVmb3JlKCkucnVuKCk7XG4gIH1cblxuICBhZGRDb2x1bW5BZnRlcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuYWRkQ29sdW1uQWZ0ZXIoKS5ydW4oKTtcbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuZGVsZXRlQ29sdW1uKCkucnVuKCk7XG4gIH1cblxuICBhZGRSb3dCZWZvcmUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmFkZFJvd0JlZm9yZSgpLnJ1bigpO1xuICB9XG5cbiAgYWRkUm93QWZ0ZXIoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmFkZFJvd0FmdGVyKCkucnVuKCk7XG4gIH1cblxuICBkZWxldGVSb3coZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmRlbGV0ZVJvdygpLnJ1bigpO1xuICB9XG5cbiAgZGVsZXRlVGFibGUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmRlbGV0ZVRhYmxlKCkucnVuKCk7XG4gIH1cblxuICBtZXJnZUNlbGxzKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5tZXJnZUNlbGxzKCkucnVuKCk7XG4gIH1cblxuICBzcGxpdENlbGwoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNwbGl0Q2VsbCgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlSGVhZGVyQ29sdW1uKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkZXJDb2x1bW4oKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUhlYWRlclJvdyhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGVyUm93KCkucnVuKCk7XG4gIH1cblxuICAvLyAtLS0gVXRpbGl0eSBDb21tYW5kcyAtLS1cblxuICBjbGVhckNvbnRlbnQoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY29tbWFuZHMuY2xlYXJDb250ZW50KHRydWUpO1xuICB9XG5cbiAgZm9jdXMoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnJ1bigpO1xuICB9XG5cbiAgYmx1cihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmJsdXIoKS5ydW4oKTtcbiAgfVxuXG4gIHNldENvbnRlbnQoZWRpdG9yOiBFZGl0b3IsIGNvbnRlbnQ6IHN0cmluZywgZW1pdFVwZGF0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChjb250ZW50LCBlbWl0VXBkYXRlKTtcbiAgfVxuXG4gIHNldEVkaXRhYmxlKGVkaXRvcjogRWRpdG9yLCBlZGl0YWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5zZXRFZGl0YWJsZShlZGl0YWJsZSk7XG4gIH1cblxuICBpbnNlcnRDb250ZW50KGVkaXRvcjogRWRpdG9yLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmluc2VydENvbnRlbnQoY29udGVudCkucnVuKCk7XG4gIH1cblxuICBhc3luYyBpbnNlcnRJbWFnZShlZGl0b3I6IEVkaXRvciwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmltYWdlU2VydmljZS5zZWxlY3RBbmRVcGxvYWRJbWFnZShlZGl0b3IsIG9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW5zZXJ0aW5nIGltYWdlOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRJbWFnZShlZGl0b3I6IEVkaXRvciwgZmlsZTogRmlsZSwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmltYWdlU2VydmljZS51cGxvYWRBbmRJbnNlcnRJbWFnZShlZGl0b3IsIGZpbGUsIG9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdXBsb2FkaW5nIGltYWdlOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|