@skyux/text-editor 8.7.0 → 9.0.0-alpha.0
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/esm2022/lib/modules/rich-text-display/rich-text-display.component.mjs +42 -0
- package/{esm2020 → esm2022}/lib/modules/rich-text-display/rich-text-display.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/modules/shared/sky-text-editor-resources.module.mjs +11 -11
- package/esm2022/lib/modules/text-editor/menubar/text-editor-menubar.component.mjs +197 -0
- package/esm2022/lib/modules/text-editor/services/text-editor-adapter.service.mjs +431 -0
- package/{esm2020 → esm2022}/lib/modules/text-editor/services/text-editor-selection.service.mjs +4 -4
- package/esm2022/lib/modules/text-editor/services/text-editor.service.mjs +59 -0
- package/esm2022/lib/modules/text-editor/services/text-sanitization.service.mjs +38 -0
- package/esm2022/lib/modules/text-editor/text-editor.component.mjs +410 -0
- package/{esm2020 → esm2022}/lib/modules/text-editor/text-editor.module.mjs +41 -41
- package/esm2022/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +207 -0
- package/esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal.component.mjs +119 -0
- package/fesm2022/skyux-text-editor.mjs +1828 -0
- package/{fesm2020 → fesm2022}/skyux-text-editor.mjs.map +1 -1
- package/lib/modules/rich-text-display/rich-text-display.component.d.ts +1 -1
- package/lib/modules/text-editor/menubar/text-editor-menubar.component.d.ts +1 -1
- package/lib/modules/text-editor/text-editor.component.d.ts +1 -1
- package/lib/modules/text-editor/toolbar/text-editor-toolbar.component.d.ts +1 -1
- package/package.json +20 -26
- package/esm2020/lib/modules/rich-text-display/rich-text-display.component.mjs +0 -44
- package/esm2020/lib/modules/text-editor/menubar/text-editor-menubar.component.mjs +0 -197
- package/esm2020/lib/modules/text-editor/services/text-editor-adapter.service.mjs +0 -421
- package/esm2020/lib/modules/text-editor/services/text-editor.service.mjs +0 -64
- package/esm2020/lib/modules/text-editor/services/text-sanitization.service.mjs +0 -43
- package/esm2020/lib/modules/text-editor/text-editor.component.mjs +0 -395
- package/esm2020/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +0 -204
- package/esm2020/lib/modules/text-editor/url-modal/text-editor-url-modal.component.mjs +0 -118
- package/fesm2015/skyux-text-editor.mjs +0 -1793
- package/fesm2015/skyux-text-editor.mjs.map +0 -1
- package/fesm2020/skyux-text-editor.mjs +0 -1804
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/shared/forms-utility.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/font-list-defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/font-size-list-defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/menu-defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/style-state-defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/toolbar-action-defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/editor-command.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/editor-setting.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/font-state.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/menu-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/style-state.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/text-editor-merge-field.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/types/toolbar-action-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/url-modal/text-editor-url-modal-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/url-modal/text-editor-url-modal-result.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/text-editor/url-modal/text-editor-url-target.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-text-editor.mjs +0 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';
|
|
4
|
+
import { UrlTarget } from '../url-modal/text-editor-url-target';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./text-editor-selection.service";
|
|
7
|
+
import * as i2 from "./text-editor.service";
|
|
8
|
+
import * as i3 from "@skyux/core";
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export class SkyTextEditorAdapterService {
|
|
13
|
+
#selectionService;
|
|
14
|
+
#textEditorService;
|
|
15
|
+
#windowRef;
|
|
16
|
+
constructor(selectionService, textEditorService, windowService) {
|
|
17
|
+
this.#selectionService = selectionService;
|
|
18
|
+
this.#textEditorService = textEditorService;
|
|
19
|
+
this.#windowRef = windowService;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a text editor inside the supplied iframe element.
|
|
23
|
+
*/
|
|
24
|
+
initEditor(id, iframeElement, styleState, placeholder) {
|
|
25
|
+
this.#textEditorService.editor = this.#createObservers(iframeElement);
|
|
26
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
27
|
+
const styleEl = documentEl.createElement('style');
|
|
28
|
+
styleEl.innerHTML = `.editor:empty:before {
|
|
29
|
+
content: attr(data-placeholder);
|
|
30
|
+
font-family: "Blackbaud Sans", Arial, sans-serif;
|
|
31
|
+
color: #686c73;
|
|
32
|
+
font-weight: 400;
|
|
33
|
+
font-size: 15px;
|
|
34
|
+
font-style: italic;
|
|
35
|
+
}`;
|
|
36
|
+
documentEl.head.appendChild(styleEl);
|
|
37
|
+
const style = {
|
|
38
|
+
...STYLE_STATE_DEFAULTS,
|
|
39
|
+
...styleState,
|
|
40
|
+
};
|
|
41
|
+
const bodyStyle = `background-color: ${style.backColor};
|
|
42
|
+
color: ${style.fontColor};
|
|
43
|
+
font-family: ${style.font};
|
|
44
|
+
font-size: ${style.fontSize}px`;
|
|
45
|
+
documentEl.querySelector('html')?.setAttribute('lang', 'en');
|
|
46
|
+
documentEl.body.setAttribute('contenteditable', 'true');
|
|
47
|
+
documentEl.body.setAttribute('id', id);
|
|
48
|
+
documentEl.body.setAttribute('role', 'main');
|
|
49
|
+
documentEl.body.setAttribute('class', 'editor');
|
|
50
|
+
documentEl.body.setAttribute('style', bodyStyle);
|
|
51
|
+
documentEl.body.setAttribute('data-placeholder', placeholder || '');
|
|
52
|
+
}
|
|
53
|
+
disableEditor(focusableChildren, textEditorNativeElement) {
|
|
54
|
+
this.#setEditorDisabled(focusableChildren, textEditorNativeElement, true);
|
|
55
|
+
}
|
|
56
|
+
enableEditor(focusableChildren, textEditorNativeElement) {
|
|
57
|
+
this.#setEditorDisabled(focusableChildren, textEditorNativeElement, false);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Executes a command on the text editor with the corresponding id.
|
|
61
|
+
*/
|
|
62
|
+
execCommand(editorCommand) {
|
|
63
|
+
/* istanbul ignore else */
|
|
64
|
+
if (this.#textEditorService.editor) {
|
|
65
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
66
|
+
/* istanbul ignore else */
|
|
67
|
+
if (this.editorSelected()) {
|
|
68
|
+
documentEl.execCommand(editorCommand.command, false, editorCommand.value);
|
|
69
|
+
this.focusEditor();
|
|
70
|
+
this.#textEditorService.editor.commandChangeObservable.next();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getCurrentSelection() {
|
|
75
|
+
return this.#selectionService.getCurrentSelection(this.#getIframeDocumentEl());
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns a data URI using the provided text string.
|
|
79
|
+
* Used to display a merge field inside a string of text.
|
|
80
|
+
*/
|
|
81
|
+
getMergeFieldDataURI(text) {
|
|
82
|
+
const documentEl = this.#windowRef.nativeWindow.document;
|
|
83
|
+
let textToUse = text;
|
|
84
|
+
if (text.length > 18) {
|
|
85
|
+
textToUse = text.substr(0, 15) + '...';
|
|
86
|
+
}
|
|
87
|
+
const canvasElement = documentEl.createElement('canvas');
|
|
88
|
+
canvasElement.setAttribute('height', '20');
|
|
89
|
+
canvasElement.setAttribute('width', '100');
|
|
90
|
+
canvasElement.style.backgroundColor = 'tan';
|
|
91
|
+
canvasElement.style.border = '1px solid #000000';
|
|
92
|
+
canvasElement.style.borderRadius = '5px';
|
|
93
|
+
const context = canvasElement.getContext('2d');
|
|
94
|
+
context.font = '12px Arial';
|
|
95
|
+
context.textAlign = 'center';
|
|
96
|
+
context.fillText(textToUse, 50, 15);
|
|
97
|
+
context.globalCompositeOperation = 'destination-over';
|
|
98
|
+
context.fillStyle = '#00FFFF';
|
|
99
|
+
context.fillRect(0, 0, 100, 20);
|
|
100
|
+
context.globalCompositeOperation = 'source-over';
|
|
101
|
+
context.lineWidth = 2;
|
|
102
|
+
context.strokeStyle = '#FF0000';
|
|
103
|
+
context.strokeRect(0, 0, 100, 20);
|
|
104
|
+
const result = canvasElement.toDataURL('image/png', 1.0);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
getStyleState() {
|
|
108
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
109
|
+
/* istanbul ignore else */
|
|
110
|
+
if (this.editorSelected()) {
|
|
111
|
+
return {
|
|
112
|
+
backColor: this.#getColor(documentEl, 'BackColor'),
|
|
113
|
+
fontColor: this.#getColor(documentEl, 'ForeColor'),
|
|
114
|
+
fontSize: parseInt(this.#getFontSize(), undefined),
|
|
115
|
+
font: documentEl.queryCommandValue('fontname'),
|
|
116
|
+
boldState: documentEl.queryCommandState('Bold'),
|
|
117
|
+
italicState: documentEl.queryCommandState('Italic'),
|
|
118
|
+
underlineState: documentEl.queryCommandState('Underline'),
|
|
119
|
+
linkState: this.#hasLink(),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/* istanbul ignore next */
|
|
123
|
+
return {};
|
|
124
|
+
}
|
|
125
|
+
getEditorInnerHtml() {
|
|
126
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
127
|
+
if (documentEl) {
|
|
128
|
+
return this.#replaceHtmlCodes(documentEl.body.innerHTML);
|
|
129
|
+
}
|
|
130
|
+
return '';
|
|
131
|
+
}
|
|
132
|
+
setEditorInnerHtml(value) {
|
|
133
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
134
|
+
const editorContent = documentEl.body;
|
|
135
|
+
/* istanbul ignore else */
|
|
136
|
+
if (editorContent.innerHTML !== value) {
|
|
137
|
+
editorContent.innerHTML = value;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
focusEditor() {
|
|
141
|
+
/* istanbul ignore else */
|
|
142
|
+
if (this.#textEditorService.editor) {
|
|
143
|
+
const windowEl = this.#getContentWindowEl();
|
|
144
|
+
const iframeDocumentEl = this.#getIframeDocumentEl();
|
|
145
|
+
const currentSelection = this.#selectionService.getCurrentSelectionRange(iframeDocumentEl, windowEl);
|
|
146
|
+
const cursorIsNotActiveAndHasReset = currentSelection &&
|
|
147
|
+
currentSelection.startOffset === 0 &&
|
|
148
|
+
currentSelection.endOffset === 0;
|
|
149
|
+
if (!this.editorSelected() || cursorIsNotActiveAndHasReset) {
|
|
150
|
+
// focus the end of the editor
|
|
151
|
+
const documentEl = this.#windowRef.nativeWindow.document;
|
|
152
|
+
const editor = iframeDocumentEl.body;
|
|
153
|
+
const range = documentEl.createRange();
|
|
154
|
+
this.#textEditorService.editor.iframeElementRef.focus();
|
|
155
|
+
editor.focus();
|
|
156
|
+
if (windowEl.getSelection && documentEl.createRange) {
|
|
157
|
+
range.selectNodeContents(editor);
|
|
158
|
+
range.collapse(false);
|
|
159
|
+
const sel = windowEl.getSelection();
|
|
160
|
+
sel?.removeAllRanges();
|
|
161
|
+
sel?.addRange(range);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// Cursor may not be active, restore it
|
|
166
|
+
this.#textEditorService.editor.iframeElementRef.focus();
|
|
167
|
+
iframeDocumentEl.body.focus();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
getLink() {
|
|
172
|
+
let link;
|
|
173
|
+
const anchorEl = this.getSelectedAnchorTag();
|
|
174
|
+
if (anchorEl && anchorEl.href) {
|
|
175
|
+
link = {
|
|
176
|
+
target: anchorEl.getAttribute('target') === '_blank'
|
|
177
|
+
? UrlTarget.NewWindow
|
|
178
|
+
: UrlTarget.None,
|
|
179
|
+
url: anchorEl.href,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return link;
|
|
183
|
+
}
|
|
184
|
+
getSelectedAnchorTag() {
|
|
185
|
+
const selectedEl = this.#getCurrentSelectionParentElement();
|
|
186
|
+
if (selectedEl) {
|
|
187
|
+
return this.#getParent(selectedEl, 'a');
|
|
188
|
+
}
|
|
189
|
+
/* istanbul ignore next */
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
saveSelection() {
|
|
193
|
+
return this.#selectionService.getCurrentSelectionRange(this.#getIframeDocumentEl(), this.#getContentWindowEl());
|
|
194
|
+
}
|
|
195
|
+
selectElement(element) {
|
|
196
|
+
this.#selectionService.selectElement(this.#getIframeDocumentEl(), this.#getContentWindowEl(), element);
|
|
197
|
+
}
|
|
198
|
+
setPlaceholder(placeholder) {
|
|
199
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
200
|
+
documentEl.body.setAttribute('data-placeholder', placeholder || '');
|
|
201
|
+
}
|
|
202
|
+
setFontSize(fontSize) {
|
|
203
|
+
const doc = this.#getIframeDocumentEl();
|
|
204
|
+
this.execCommand({ command: 'fontSize', value: '1' });
|
|
205
|
+
const fontElements = Array.from(doc.querySelectorAll('font[size="1"]'));
|
|
206
|
+
for (const element of fontElements) {
|
|
207
|
+
element.removeAttribute('size');
|
|
208
|
+
element.style.fontSize = fontSize + 'px';
|
|
209
|
+
}
|
|
210
|
+
this.#cleanUpBlankStyleTags(doc);
|
|
211
|
+
this.focusEditor();
|
|
212
|
+
this.#textEditorService.editor.commandChangeObservable.next();
|
|
213
|
+
}
|
|
214
|
+
removeObservers(setting) {
|
|
215
|
+
/* istanbul ignore next */
|
|
216
|
+
const documentEl = setting.iframeElementRef.contentWindow
|
|
217
|
+
? setting.iframeElementRef.contentWindow.document
|
|
218
|
+
: setting.iframeElementRef.contentDocument;
|
|
219
|
+
setting.selectionChangeObservable.complete();
|
|
220
|
+
setting.clickObservable.complete();
|
|
221
|
+
setting.commandChangeObservable.complete();
|
|
222
|
+
if (documentEl) {
|
|
223
|
+
documentEl.removeEventListener('selectionchange', setting.selectionListener);
|
|
224
|
+
documentEl.removeEventListener('input', setting.selectionListener);
|
|
225
|
+
documentEl.removeEventListener('mousedown', setting.clickListener);
|
|
226
|
+
documentEl.body.removeEventListener('paste', setting.pasteListener);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
#getContentWindowEl() {
|
|
230
|
+
return this.#textEditorService.editor.iframeElementRef
|
|
231
|
+
.contentWindow;
|
|
232
|
+
}
|
|
233
|
+
#getChildSelectedAnchorTags() {
|
|
234
|
+
const selectedRange = this.getCurrentSelection()?.getRangeAt(0);
|
|
235
|
+
if (selectedRange && selectedRange.toString().length <= 0) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
const parentElement = this.#getCurrentSelectionParentElement();
|
|
239
|
+
let childElements = [];
|
|
240
|
+
/* istanbul ignore else */
|
|
241
|
+
if (parentElement) {
|
|
242
|
+
childElements = Array.from(parentElement.querySelectorAll('a'));
|
|
243
|
+
}
|
|
244
|
+
/* istanbul ignore next */
|
|
245
|
+
return childElements.filter((element) => {
|
|
246
|
+
// IE specific
|
|
247
|
+
if (selectedRange) {
|
|
248
|
+
if (!selectedRange.intersectsNode) {
|
|
249
|
+
if (!element || !element.href) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
const tempRange = document.createRange();
|
|
253
|
+
tempRange.selectNodeContents(element);
|
|
254
|
+
return ((selectedRange.compareBoundaryPoints(Range.START_TO_START, tempRange) !== -1 &&
|
|
255
|
+
selectedRange.compareBoundaryPoints(Range.START_TO_END, tempRange) !== 1) ||
|
|
256
|
+
(selectedRange.compareBoundaryPoints(Range.END_TO_START, tempRange) !== -1 &&
|
|
257
|
+
selectedRange.compareBoundaryPoints(Range.END_TO_END, tempRange) !== 1));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Normal non-IE
|
|
261
|
+
return (!!element && !!element.href && selectedRange?.intersectsNode(element));
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
#getIframeDocumentEl() {
|
|
265
|
+
const contentWindowEl = this.#getContentWindowEl();
|
|
266
|
+
/* istanbul ignore else */
|
|
267
|
+
if (contentWindowEl) {
|
|
268
|
+
return contentWindowEl.document;
|
|
269
|
+
}
|
|
270
|
+
/* istanbul ignore next */
|
|
271
|
+
return this.#textEditorService.editor.iframeElementRef
|
|
272
|
+
.contentDocument;
|
|
273
|
+
}
|
|
274
|
+
#getFontSize() {
|
|
275
|
+
let fontSize = STYLE_STATE_DEFAULTS.fontSize.toString();
|
|
276
|
+
const selection = this.getCurrentSelection();
|
|
277
|
+
/* istanbul ignore else */
|
|
278
|
+
if (selection &&
|
|
279
|
+
selection.anchorNode &&
|
|
280
|
+
selection.anchorNode.parentElement) {
|
|
281
|
+
let element = selection.anchorNode;
|
|
282
|
+
if (element?.nodeType !== 1) {
|
|
283
|
+
element = element?.parentElement;
|
|
284
|
+
}
|
|
285
|
+
const computedStyle = window.getComputedStyle(element);
|
|
286
|
+
/* istanbul ignore else */
|
|
287
|
+
if (computedStyle) {
|
|
288
|
+
fontSize = computedStyle.getPropertyValue('font-size');
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return fontSize;
|
|
292
|
+
}
|
|
293
|
+
#createObservers(element) {
|
|
294
|
+
/* istanbul ignore next */
|
|
295
|
+
const documentEl = element.contentWindow
|
|
296
|
+
? element.contentWindow.document
|
|
297
|
+
: element.contentDocument;
|
|
298
|
+
// Firefox bug where we need to open/close to cancel load so it doesn't overwrite attrs
|
|
299
|
+
documentEl.open();
|
|
300
|
+
documentEl.close();
|
|
301
|
+
const selectionObservable = new Subject();
|
|
302
|
+
const selectionListener = () => selectionObservable.next();
|
|
303
|
+
const clickObservable = new Subject();
|
|
304
|
+
const clickListener = () => clickObservable.next();
|
|
305
|
+
const pasteListener = this.#getPasteOverride();
|
|
306
|
+
const blurObservable = new Subject();
|
|
307
|
+
const blurListener = () => blurObservable.next();
|
|
308
|
+
const inputObservable = new Subject();
|
|
309
|
+
const inputListener = () => inputObservable.next();
|
|
310
|
+
documentEl.addEventListener('selectionchange', selectionListener);
|
|
311
|
+
documentEl.addEventListener('input', inputListener);
|
|
312
|
+
documentEl.addEventListener('mousedown', clickListener);
|
|
313
|
+
documentEl.body.addEventListener('paste', pasteListener);
|
|
314
|
+
documentEl.body.addEventListener('blur', blurListener);
|
|
315
|
+
return {
|
|
316
|
+
blurObservable,
|
|
317
|
+
clickObservable,
|
|
318
|
+
commandChangeObservable: new Subject(),
|
|
319
|
+
iframeElementRef: element,
|
|
320
|
+
inputObservable,
|
|
321
|
+
selectionChangeObservable: selectionObservable,
|
|
322
|
+
blurListener,
|
|
323
|
+
clickListener,
|
|
324
|
+
inputListener,
|
|
325
|
+
pasteListener,
|
|
326
|
+
selectionListener,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
#getPasteOverride() {
|
|
330
|
+
/* istanbul ignore next */
|
|
331
|
+
return (e) => {
|
|
332
|
+
e.preventDefault();
|
|
333
|
+
const text = e.clipboardData?.getData('text/plain');
|
|
334
|
+
if (text !== undefined) {
|
|
335
|
+
this.execCommand({ command: 'insertHTML', value: text.toString() });
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
#getCurrentSelectionParentElement() {
|
|
340
|
+
return this.#selectionService.getCurrentSelectionParentElement(this.#getIframeDocumentEl());
|
|
341
|
+
}
|
|
342
|
+
#getColor(documentEl, selector) {
|
|
343
|
+
const commandValue = documentEl.queryCommandValue(selector);
|
|
344
|
+
// Edge is weird and returns numbers
|
|
345
|
+
/* istanbul ignore if */
|
|
346
|
+
if (typeof commandValue === 'number') {
|
|
347
|
+
/* istanbul ignore next */
|
|
348
|
+
return ('rgb(' +
|
|
349
|
+
(commandValue & 0xff) +
|
|
350
|
+
', ' +
|
|
351
|
+
((commandValue & 0xff00) >> 8) +
|
|
352
|
+
', ' +
|
|
353
|
+
((commandValue & 0xff0000) >> 16) +
|
|
354
|
+
')');
|
|
355
|
+
}
|
|
356
|
+
// Firefox uses 'Transparent' instead of a color value
|
|
357
|
+
/* istanbul ignore next */
|
|
358
|
+
if (commandValue.toString().toLowerCase() === 'transparent') {
|
|
359
|
+
return STYLE_STATE_DEFAULTS.backColor;
|
|
360
|
+
}
|
|
361
|
+
return commandValue;
|
|
362
|
+
}
|
|
363
|
+
#hasLink() {
|
|
364
|
+
const anchorEl = this.getSelectedAnchorTag();
|
|
365
|
+
const childAnchorEls = this.#getChildSelectedAnchorTags();
|
|
366
|
+
/* istanbul ignore next */
|
|
367
|
+
return childAnchorEls.length > 0 || (!!anchorEl && !!anchorEl.href);
|
|
368
|
+
}
|
|
369
|
+
#getParent(element, tag) {
|
|
370
|
+
let currentNode = element;
|
|
371
|
+
while (currentNode && currentNode.tagName.toUpperCase() !== 'BODY') {
|
|
372
|
+
if (currentNode.tagName.toUpperCase() === tag.toUpperCase()) {
|
|
373
|
+
return currentNode;
|
|
374
|
+
}
|
|
375
|
+
currentNode = currentNode.parentElement;
|
|
376
|
+
}
|
|
377
|
+
return undefined;
|
|
378
|
+
}
|
|
379
|
+
editorSelected() {
|
|
380
|
+
const documentEl = this.#getIframeDocumentEl();
|
|
381
|
+
return this.#selectionService.isElementSelected(documentEl, documentEl.body);
|
|
382
|
+
}
|
|
383
|
+
#cleanUpBlankStyleTags(doc) {
|
|
384
|
+
const orphanElements = Array.from(doc.querySelectorAll('font,span,*[style=""]'));
|
|
385
|
+
for (const element of orphanElements) {
|
|
386
|
+
if (!element.getAttribute('style')) {
|
|
387
|
+
element.removeAttribute('style');
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const removableElements = orphanElements.filter((element) => {
|
|
391
|
+
const tagName = element.tagName.toUpperCase();
|
|
392
|
+
return ((tagName === 'FONT' || tagName === 'SPAN') &&
|
|
393
|
+
(element.attributes.length === 0 || !element.hasChildNodes));
|
|
394
|
+
});
|
|
395
|
+
for (const element of removableElements) {
|
|
396
|
+
const parent = element.parentNode;
|
|
397
|
+
/* istanbul ignore else */
|
|
398
|
+
if (parent) {
|
|
399
|
+
while (element.firstChild) {
|
|
400
|
+
parent.insertBefore(element.firstChild, element);
|
|
401
|
+
}
|
|
402
|
+
parent.removeChild(element);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Certain values are encoded in html and need to be decoded
|
|
407
|
+
#replaceHtmlCodes(str) {
|
|
408
|
+
return str
|
|
409
|
+
.replace(/ /, String.fromCharCode(160))
|
|
410
|
+
.replace(/</g, '<')
|
|
411
|
+
.replace(/>/g, '>')
|
|
412
|
+
.replace(/&/g, '&');
|
|
413
|
+
}
|
|
414
|
+
#setEditorDisabled(focusableChildren, textEditorNativeElement, disabled) {
|
|
415
|
+
textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';
|
|
416
|
+
textEditorNativeElement.setAttribute('aria-disabled', disabled ? 'true' : 'false');
|
|
417
|
+
/* istanbul ignore else */
|
|
418
|
+
if (focusableChildren.length > 0) {
|
|
419
|
+
focusableChildren.forEach((aFocusableChild) => {
|
|
420
|
+
aFocusableChild.tabIndex = disabled ? -1 : 0;
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
this.#getIframeDocumentEl().body.setAttribute('contenteditable', disabled ? 'false' : 'true');
|
|
424
|
+
}
|
|
425
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorAdapterService, deps: [{ token: i1.SkyTextEditorSelectionService }, { token: i2.SkyTextEditorService }, { token: i3.SkyAppWindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
426
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorAdapterService }); }
|
|
427
|
+
}
|
|
428
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorAdapterService, decorators: [{
|
|
429
|
+
type: Injectable
|
|
430
|
+
}], ctorParameters: function () { return [{ type: i1.SkyTextEditorSelectionService }, { type: i2.SkyTextEditorService }, { type: i3.SkyAppWindowRef }]; } });
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFLaEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLGlCQUFpQixDQUFnQztJQUNqRCxrQkFBa0IsQ0FBdUI7SUFDekMsVUFBVSxDQUFrQjtJQUU1QixZQUNFLGdCQUErQyxFQUMvQyxpQkFBdUMsRUFDdkMsYUFBOEI7UUFFOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQ2YsRUFBVSxFQUNWLGFBQWdDLEVBQ2hDLFVBQW1DLEVBQ25DLFdBQW9CO1FBRXBCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXRFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFD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QixDQUFDO0lBRUQsa0JBQWtCLENBQ2hCLGlCQUFnQyxFQUNoQyx1QkFBb0MsRUFDcEMsUUFBaUI7UUFFakIsdUJBQXVCLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3pFLHVCQUF1QixDQUFDLFlBQVksQ0FDbEMsZUFBZSxFQUNmLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUM7UUFDRiwwQkFBMEI7UUFDMUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUM1QyxlQUFlLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FDM0MsaUJBQWlCLEVBQ2pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzVCLENBQUM7SUFDSixDQUFDOzhHQXRpQlUsMkJBQTJCO2tIQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lBcHBXaW5kb3dSZWYgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU1RZTEVfU1RBVEVfREVGQVVMVFMgfSBmcm9tICcuLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBFZGl0b3JDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLWNvbW1hbmQnO1xuaW1wb3J0IHsgRWRpdG9yU2V0dGluZyB9IGZyb20gJy4uL3R5cGVzL2VkaXRvci1zZXR0aW5nJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIH0gZnJvbSAnLi4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLW1vZGFsLXJlc3VsdCc7XG5pbXBvcnQgeyBVcmxUYXJnZXQgfSBmcm9tICcuLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLXRhcmdldCc7XG5cbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi90ZXh0LWVkaXRvci1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU2VydmljZSB9IGZyb20gJy4vdGV4dC1lZGl0b3Iuc2VydmljZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2Uge1xuICAjc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2U7XG4gICN0ZXh0RWRpdG9yU2VydmljZTogU2t5VGV4dEVkaXRvclNlcnZpY2U7XG4gICN3aW5kb3dSZWY6IFNreUFwcFdpbmRvd1JlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzZWxlY3Rpb25TZXJ2aWNlOiBTa3lUZXh0RWRpdG9yU2VsZWN0aW9uU2VydmljZSxcbiAgICB0ZXh0RWRpdG9yU2VydmljZTogU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgd2luZG93U2VydmljZTogU2t5QXBwV2luZG93UmVmXG4gICkge1xuICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UgPSBzZWxlY3Rpb25TZXJ2aWNlO1xuICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlID0gdGV4dEVkaXRvclNlcnZpY2U7XG4gICAgdGhpcy4jd2luZG93UmVmID0gd2luZG93U2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBlZGl0b3IgaW5zaWRlIHRoZSBzdXBwbGllZCBpZnJhbWUgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBpbml0RWRpdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaWZyYW1lRWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQsXG4gICAgc3R5bGVTdGF0ZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUsXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yID0gdGhpcy4jY3JlYXRlT2JzZXJ2ZXJzKGlmcmFtZUVsZW1lbnQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbC5pbm5lckhUTUwgPSBgLmVkaXRvcjplbXB0eTpiZWZvcmUge1xuICAgICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgY29sb3I6ICM2ODZjNzM7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1gO1xuICAgIGRvY3VtZW50RWwuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcblxuICAgIGNvbnN0IHN0eWxlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLlNUWUxFX1NUQVRFX0RFRkFVTFRTLFxuICAgICAgLi4uc3R5bGVTdGF0ZSxcbiAgICB9O1xuICAgIGNvbnN0IGJvZHlTdHlsZSA9IGBiYWNrZ3JvdW5kLWNvbG9yOiAke3N0eWxlLmJhY2tDb2xvcn07XG4gICAgICBjb2xvcjogJHtzdHlsZS5mb250Q29sb3J9O1xuICAgICAgZm9udC1mYW1pbHk6ICR7c3R5bGUuZm9udH07XG4gICAgICBmb250LXNpemU6ICR7c3R5bGUuZm9udFNpemV9cHhgO1xuICAgIGRvY3VtZW50RWwucXVlcnlTZWxlY3RvcignaHRtbCcpPy5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCAnZW4nKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWFpbicpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2VkaXRvcicpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYm9keVN0eWxlKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGVFZGl0b3IoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuI3NldEVkaXRvckRpc2FibGVkKGZvY3VzYWJsZUNoaWxkcmVuLCB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlRWRpdG9yKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNzZXRFZGl0b3JEaXNhYmxlZChmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvcikge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgZG9jdW1lbnRFbC5leGVjQ29tbWFuZChcbiAgICAgICAgICBlZGl0b3JDb21tYW5kLmNvbW1hbmQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZWRpdG9yQ29tbWFuZC52YWx1ZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFNlbGVjdGlvbigpOiBTZWxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKFxuICAgICAgdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZGF0YSBVUkkgdXNpbmcgdGhlIHByb3ZpZGVkIHRleHQgc3RyaW5nLlxuICAgKiBVc2VkIHRvIGRpc3BsYXkgYSBtZXJnZSBmaWVsZCBpbnNpZGUgYSBzdHJpbmcgb2YgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXRNZXJnZUZpZWxkRGF0YVVSSSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuICAgIGxldCB0ZXh0VG9Vc2UgPSB0ZXh0O1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDE4KSB7XG4gICAgICB0ZXh0VG9Vc2UgPSB0ZXh0LnN1YnN0cigwLCAxNSkgKyAnLi4uJztcbiAgICB9XG5cbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnRFbC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXNFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzIwJyk7XG4gICAgY2FudmFzRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCcpO1xuICAgIGNhbnZhc0VsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3Rhbic7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICMwMDAwMDAnO1xuICAgIGNhbnZhc0VsZW1lbnQuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzVweCc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnRleHQuZm9udCA9ICcxMnB4IEFyaWFsJztcbiAgICBjb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgIGNvbnRleHQuZmlsbFRleHQodGV4dFRvVXNlLCA1MCwgMTUpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3Zlcic7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwRkZGRic7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCAxMDAsIDIwKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDI7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LnN0cm9rZVJlY3QoMCwgMCwgMTAwLCAyMCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYW52YXNFbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMS4wKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFN0eWxlU3RhdGUoKTogUGFydGlhbDxTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZT4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2tDb2xvcjogdGhpcy4jZ2V0Q29sb3IoZG9jdW1lbnRFbCwgJ0JhY2tDb2xvcicpLFxuICAgICAgICBmb250Q29sb3I6IHRoaXMuI2dldENvbG9yKGRvY3VtZW50RWwsICdGb3JlQ29sb3InKSxcbiAgICAgICAgZm9udFNpemU6IHBhcnNlSW50KHRoaXMuI2dldEZvbnRTaXplKCksIHVuZGVmaW5lZCksXG4gICAgICAgIGZvbnQ6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoJ2ZvbnRuYW1lJyksXG4gICAgICAgIGJvbGRTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnQm9sZCcpLFxuICAgICAgICBpdGFsaWNTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnSXRhbGljJyksXG4gICAgICAgIHVuZGVybGluZVN0YXRlOiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFN0YXRlKCdVbmRlcmxpbmUnKSxcbiAgICAgICAgbGlua1N0YXRlOiB0aGlzLiNoYXNMaW5rKCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldEVkaXRvcklubmVySHRtbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNyZXBsYWNlSHRtbENvZGVzKGRvY3VtZW50RWwuYm9keS5pbm5lckhUTUwpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9ySW5uZXJIdG1sKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGNvbnN0IGVkaXRvckNvbnRlbnQgPSBkb2N1bWVudEVsLmJvZHk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZWRpdG9yQ29udGVudC5pbm5lckhUTUwgIT09IHZhbHVlKSB7XG4gICAgICBlZGl0b3JDb250ZW50LmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0VkaXRvcigpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IpIHtcbiAgICAgIGNvbnN0IHdpbmRvd0VsID0gdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKCk7XG4gICAgICBjb25zdCBpZnJhbWVEb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKFxuICAgICAgICBpZnJhbWVEb2N1bWVudEVsLFxuICAgICAgICB3aW5kb3dFbFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQgPVxuICAgICAgICBjdXJyZW50U2VsZWN0aW9uICYmXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uc3RhcnRPZmZzZXQgPT09IDAgJiZcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbi5lbmRPZmZzZXQgPT09IDA7XG5cbiAgICAgIGlmICghdGhpcy5lZGl0b3JTZWxlY3RlZCgpIHx8IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQpIHtcbiAgICAgICAgLy8gZm9jdXMgdGhlIGVuZCBvZiB0aGUgZWRpdG9yXG4gICAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBpZnJhbWVEb2N1bWVudEVsLmJvZHkgYXMgSFRNTEJvZHlFbGVtZW50O1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcblxuICAgICAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgICAgICAgY29uc3Qgc2VsID0gd2luZG93RWwuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICBzZWw/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ3Vyc29yIG1heSBub3QgYmUgYWN0aXZlLCByZXN0b3JlIGl0XG4gICAgICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5pZnJhbWVFbGVtZW50UmVmLmZvY3VzKCk7XG4gICAgICAgIGlmcmFtZURvY3VtZW50RWwuYm9keS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMaW5rKCk6IFVybE1vZGFsUmVzdWx0IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbGluazogVXJsTW9kYWxSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLmdldFNlbGVjdGVkQW5jaG9yVGFnKCk7XG4gICAgaWYgKGFuY2hvckVsICYmIGFuY2hvckVsLmhyZWYpIHtcbiAgICAgIGxpbmsgPSB7XG4gICAgICAgIHRhcmdldDpcbiAgICAgICAgICBhbmNob3JFbC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJ1xuICAgICAgICAgICAgPyBVcmxUYXJnZXQuTmV3V2luZG93XG4gICAgICAgICAgICA6IFVybFRhcmdldC5Ob25lLFxuICAgICAgICB1cmw6IGFuY2hvckVsLmhyZWYsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQW5jaG9yVGFnKCk6IEhUTUxBbmNob3JFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbCA9IHRoaXMuI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk7XG5cbiAgICBpZiAoc2VsZWN0ZWRFbCkge1xuICAgICAgcmV0dXJuIHRoaXMuI2dldFBhcmVudChzZWxlY3RlZEVsLCAnYScpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2VsZWN0aW9uKCk6IFJhbmdlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uUmFuZ2UoXG4gICAgICB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCksXG4gICAgICB0aGlzLiNnZXRDb250ZW50V2luZG93RWwoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2Uuc2VsZWN0RWxlbWVudChcbiAgICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKSxcbiAgICAgIHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpLFxuICAgICAgZWxlbWVudFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlciB8fCAnJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Rm9udFNpemUoZm9udFNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKHsgY29tbWFuZDogJ2ZvbnRTaXplJywgdmFsdWU6ICcxJyB9KTtcbiAgICBjb25zdCBmb250RWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnRbc2l6ZT1cIjFcIl0nKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGZvbnRFbGVtZW50cykge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZSArICdweCc7XG4gICAgfVxuICAgIHRoaXMuI2NsZWFuVXBCbGFua1N0eWxlVGFncyhkb2MpO1xuXG4gICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlT2JzZXJ2ZXJzKHNldHRpbmc6IEVkaXRvclNldHRpbmcpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvd1xuICAgICAgPyBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvdy5kb2N1bWVudFxuICAgICAgOiBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudERvY3VtZW50O1xuICAgIHNldHRpbmcuc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY2xpY2tPYnNlcnZhYmxlLmNvbXBsZXRlKCk7XG4gICAgc2V0dGluZy5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdzZWxlY3Rpb25jaGFuZ2UnLFxuICAgICAgICBzZXR0aW5nLnNlbGVjdGlvbkxpc3RlbmVyXG4gICAgICApO1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHNldHRpbmcuc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzZXR0aW5nLmNsaWNrTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnRFbC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgc2V0dGluZy5wYXN0ZUxpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICAjZ2V0Q29udGVudFdpbmRvd0VsKCk6IFdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5pZnJhbWVFbGVtZW50UmVmXG4gICAgICAuY29udGVudFdpbmRvdyBhcyBXaW5kb3c7XG4gIH1cblxuICAjZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoKTogRWxlbWVudFtdIHtcbiAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKHNlbGVjdGVkUmFuZ2UgJiYgc2VsZWN0ZWRSYW5nZS50b1N0cmluZygpLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk7XG5cbiAgICBsZXQgY2hpbGRFbGVtZW50czogSFRNTEFuY2hvckVsZW1lbnRbXSA9IFtdO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNoaWxkRWxlbWVudHMgPSBBcnJheS5mcm9tKHBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYScpKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjaGlsZEVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuICAgICAgLy8gSUUgc3BlY2lmaWNcbiAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS5pbnRlcnNlY3RzTm9kZSkge1xuICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5ocmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRlbXBSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgdGVtcFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICBSYW5nZS5TVEFSVF9UT19TVEFSVCxcbiAgICAgICAgICAgICAgdGVtcFJhbmdlXG4gICAgICAgICAgICApICE9PSAtMSAmJlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgICBSYW5nZS5TVEFSVF9UT19FTkQsXG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlXG4gICAgICAgICAgICAgICkgIT09IDEpIHx8XG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoXG4gICAgICAgICAgICAgIFJhbmdlLkVORF9UT19TVEFSVCxcbiAgICAgICAgICAgICAgdGVtcFJhbmdlXG4gICAgICAgICAgICApICE9PSAtMSAmJlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgICBSYW5nZS5FTkRfVE9fRU5ELFxuICAgICAgICAgICAgICAgIHRlbXBSYW5nZVxuICAgICAgICAgICAgICApICE9PSAxKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsIG5vbi1JRVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgISFlbGVtZW50ICYmICEhZWxlbWVudC5ocmVmICYmIHNlbGVjdGVkUmFuZ2U/LmludGVyc2VjdHNOb2RlKGVsZW1lbnQpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgI2dldElmcmFtZURvY3VtZW50RWwoKTogRG9jdW1lbnQge1xuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGNvbnRlbnRXaW5kb3dFbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3dFbC5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZlxuICAgICAgLmNvbnRlbnREb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgfVxuXG4gICNnZXRGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgIGxldCBmb250U2l6ZSA9IFNUWUxFX1NUQVRFX0RFRkFVTFRTLmZvbnRTaXplLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50XG4gICAgKSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbGVtZW50Py5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudD8ucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50IGFzIEVsZW1lbnQpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChjb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIGZvbnRTaXplID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXNpemUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9XG5cbiAgI2NyZWF0ZU9ic2VydmVycyhlbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCk6IEVkaXRvclNldHRpbmcge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IGVsZW1lbnQuY29udGVudFdpbmRvd1xuICAgICAgPyBlbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogKGVsZW1lbnQuY29udGVudERvY3VtZW50IGFzIERvY3VtZW50KTtcblxuICAgIC8vIEZpcmVmb3ggYnVnIHdoZXJlIHdlIG5lZWQgdG8gb3Blbi9jbG9zZSB0byBjYW5jZWwgbG9hZCBzbyBpdCBkb2Vzbid0IG92ZXJ3cml0ZSBhdHRyc1xuICAgIGRvY3VtZW50RWwub3BlbigpO1xuICAgIGRvY3VtZW50RWwuY2xvc2UoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbk9ic2VydmFibGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxpc3RlbmVyID0gKCk6IHZvaWQgPT4gc2VsZWN0aW9uT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgY2xpY2tPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKCk6IHZvaWQgPT4gY2xpY2tPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBwYXN0ZUxpc3RlbmVyID0gdGhpcy4jZ2V0UGFzdGVPdmVycmlkZSgpO1xuICAgIGNvbnN0IGJsdXJPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBibHVyTGlzdGVuZXIgPSAoKTogdm9pZCA9PiBibHVyT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgaW5wdXRPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBpbnB1dExpc3RlbmVyID0gKCk6IHZvaWQgPT4gaW5wdXRPYnNlcnZhYmxlLm5leHQoKTtcblxuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBpbnB1dExpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGNsaWNrTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYm9keS5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHBhc3RlTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYm9keS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgYmx1ckxpc3RlbmVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmx1ck9ic2VydmFibGUsXG4gICAgICBjbGlja09ic2VydmFibGUsXG4gICAgICBjb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZTogbmV3IFN1YmplY3QoKSxcbiAgICAgIGlmcmFtZUVsZW1lbnRSZWY6IGVsZW1lbnQsXG4gICAgICBpbnB1dE9ic2VydmFibGUsXG4gICAgICBzZWxlY3Rpb25DaGFuZ2VPYnNlcnZhYmxlOiBzZWxlY3Rpb25PYnNlcnZhYmxlLFxuICAgICAgYmx1ckxpc3RlbmVyLFxuICAgICAgY2xpY2tMaXN0ZW5lcixcbiAgICAgIGlucHV0TGlzdGVuZXIsXG4gICAgICBwYXN0ZUxpc3RlbmVyLFxuICAgICAgc2VsZWN0aW9uTGlzdGVuZXIsXG4gICAgfTtcbiAgfVxuXG4gICNnZXRQYXN0ZU92ZXJyaWRlKCk6IChlOiBDbGlwYm9hcmRFdmVudCkgPT4gdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gKGU6IENsaXBib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCB0ZXh0ID0gZS5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG5cbiAgICAgIGlmICh0ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5leGVjQ29tbWFuZCh7IGNvbW1hbmQ6ICdpbnNlcnRIVE1MJywgdmFsdWU6IHRleHQudG9TdHJpbmcoKSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk6IEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKVxuICAgICk7XG4gIH1cblxuICAjZ2V0Q29sb3IoZG9jdW1lbnRFbDogRG9jdW1lbnQsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbW1hbmRWYWx1ZSA9IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoc2VsZWN0b3IpO1xuXG4gICAgLy8gRWRnZSBpcyB3ZWlyZCBhbmQgcmV0dXJucyBudW1iZXJzXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHR5cGVvZiBjb21tYW5kVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ3JnYignICtcbiAgICAgICAgKGNvbW1hbmRWYWx1ZSAmIDB4ZmYpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgICgoY29tbWFuZFZhbHVlICYgMHhmZjAwKSA+PiA4KSArXG4gICAgICAgICcsICcgK1xuICAgICAgICAoKGNvbW1hbmRWYWx1ZSAmIDB4ZmYwMDAwKSA+PiAxNikgK1xuICAgICAgICAnKSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmlyZWZveCB1c2VzICdUcmFuc3BhcmVudCcgaW5zdGVhZCBvZiBhIGNvbG9yIHZhbHVlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoY29tbWFuZFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgcmV0dXJuIFNUWUxFX1NUQVRFX0RFRkFVTFRTLmJhY2tDb2xvcjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRWYWx1ZTtcbiAgfVxuXG4gICNoYXNMaW5rKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuICAgIGNvbnN0IGNoaWxkQW5jaG9yRWxzID0gdGhpcy4jZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjaGlsZEFuY2hvckVscy5sZW5ndGggPiAwIHx8ICghIWFuY2hvckVsICYmICEhYW5jaG9yRWwuaHJlZik7XG4gIH1cblxuICAjZ2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHRhZzogc3RyaW5nKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGN1cnJlbnROb2RlOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSB7XG4gICAgICBpZiAoY3VycmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSB0YWcudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgICB9XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZWRpdG9yU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5pc0VsZW1lbnRTZWxlY3RlZChcbiAgICAgIGRvY3VtZW50RWwsXG4gICAgICBkb2N1bWVudEVsLmJvZHlcbiAgICApO1xuICB9XG5cbiAgI2NsZWFuVXBCbGFua1N0eWxlVGFncyhkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3JwaGFuRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnQsc3BhbiwqW3N0eWxlPVwiXCJdJylcbiAgICApO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBvcnBoYW5FbGVtZW50cykge1xuICAgICAgaWYgKCFlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVtb3ZhYmxlRWxlbWVudHMgPSBvcnBoYW5FbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0YWdOYW1lID09PSAnRk9OVCcgfHwgdGFnTmFtZSA9PT0gJ1NQQU4nKSAmJlxuICAgICAgICAoZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCB8fCAhZWxlbWVudC5oYXNDaGlsZE5vZGVzKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcmVtb3ZhYmxlRWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENlcnRhaW4gdmFsdWVzIGFyZSBlbmNvZGVkIGluIGh0bWwgYW5kIG5lZWQgdG8gYmUgZGVjb2RlZFxuICAjcmVwbGFjZUh0bWxDb2RlcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgLnJlcGxhY2UoLyZuYnNwOy8sIFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSlcbiAgICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcbiAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JylcbiAgICAgIC5yZXBsYWNlKC8mYW1wOy9nLCAnJicpO1xuICB9XG5cbiAgI3NldEVkaXRvckRpc2FibGVkKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBkaXNhYmxlZDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gZGlzYWJsZWQgPyAnbm9uZScgOiAnYXV0byc7XG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ2FyaWEtZGlzYWJsZWQnLFxuICAgICAgZGlzYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnXG4gICAgKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb2N1c2FibGVDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBmb2N1c2FibGVDaGlsZHJlbi5mb3JFYWNoKChhRm9jdXNhYmxlQ2hpbGQpID0+IHtcbiAgICAgICAgYUZvY3VzYWJsZUNoaWxkLnRhYkluZGV4ID0gZGlzYWJsZWQgPyAtMSA6IDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpLmJvZHkuc2V0QXR0cmlidXRlKFxuICAgICAgJ2NvbnRlbnRlZGl0YWJsZScsXG4gICAgICBkaXNhYmxlZCA/ICdmYWxzZScgOiAndHJ1ZSdcbiAgICApO1xuICB9XG59XG4iXX0=
|
package/{esm2020 → esm2022}/lib/modules/text-editor/services/text-editor-selection.service.mjs
RENAMED
|
@@ -65,10 +65,10 @@ export class SkyTextEditorSelectionService {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
69
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorSelectionService }); }
|
|
68
70
|
}
|
|
69
|
-
|
|
70
|
-
SkyTextEditorSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextEditorSelectionService });
|
|
71
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextEditorSelectionService, decorators: [{
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorSelectionService, decorators: [{
|
|
72
72
|
type: Injectable
|
|
73
73
|
}] });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Itc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUNqQyxpQkFBaUIsQ0FDdEIsVUFBb0IsRUFDcEIsT0FBb0I7UUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN0RSwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxZQUFZO1lBQ1osQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDN0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUFvQjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sZ0NBQWdDLENBQ3JDLFVBQW9CO1FBRXBCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLFVBQTBCLENBQUM7UUFDL0IsMEJBQTBCO1FBQzFCLElBQ0UsU0FBUztZQUNULFNBQVMsQ0FBQyxVQUFVO1lBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQy9DO1lBQ0EsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQWtDLENBQUM7WUFDeEUsVUFBVTtnQkFDUixVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQ3JFO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTSx3QkFBd0IsQ0FDN0IsVUFBb0IsRUFDcEIsUUFBZ0I7UUFFaEIsMEJBQTBCO1FBQzFCLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtZQUN6QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsMEJBQTBCO1lBQzFCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDM0MsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1NBQ0Y7YUFBTSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUU7WUFDaEQsT0FBTyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsMEJBQTBCO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxhQUFhLENBQ2xCLFVBQW9CLEVBQ3BCLFFBQWdCLEVBQ2hCLE9BQW9CO1FBRXBCLDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sRUFBRTtZQUNYLDBCQUEwQjtZQUMxQixJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3pCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QjtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQzs4R0EvRVUsNkJBQTZCO2tIQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBRHpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yU2VsZWN0aW9uU2VydmljZSB7XG4gIHB1YmxpYyBpc0VsZW1lbnRTZWxlY3RlZChcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudCxcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk/LmFuY2hvck5vZGU7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gISEoXG4gICAgICBzZWxlY3RlZE5vZGUgJiZcbiAgICAgIChlbGVtZW50LmNvbnRhaW5zKHNlbGVjdGVkTm9kZSkgfHxcbiAgICAgICAgKHNlbGVjdGVkTm9kZS5wYXJlbnROb2RlICYmIGVsZW1lbnQuY29udGFpbnMoc2VsZWN0ZWROb2RlLnBhcmVudE5vZGUpKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbDogRG9jdW1lbnQpOiBTZWxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudFxuICApOiBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKGRvY3VtZW50RWwpO1xuICAgIGxldCBzZWxlY3RlZEVsOiBFbGVtZW50IHwgbnVsbDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChcbiAgICAgIHNlbGVjdGlvbiAmJlxuICAgICAgc2VsZWN0aW9uLmdldFJhbmdlQXQgJiZcbiAgICAgIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgKSB7XG4gICAgICBzZWxlY3RlZEVsID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIgYXMgRWxlbWVudDtcbiAgICAgIHNlbGVjdGVkRWwgPVxuICAgICAgICBzZWxlY3RlZEVsLm5vZGVUeXBlICE9PSAxID8gc2VsZWN0ZWRFbC5wYXJlbnRFbGVtZW50IDogc2VsZWN0ZWRFbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkRWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKFxuICAgIGRvY3VtZW50RWw6IERvY3VtZW50LFxuICAgIHdpbmRvd0VsOiBXaW5kb3dcbiAgKTogUmFuZ2UgfCB1bmRlZmluZWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbikge1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93RWwuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHNlbCAmJiBzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xuICAgICAgICByZXR1cm4gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsLmdldFNlbGVjdGlvbigpPy5nZXRSYW5nZUF0KSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RWxlbWVudChcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudCxcbiAgICB3aW5kb3dFbDogV2luZG93LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBzZWw/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICBzZWw/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VsID0gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export class SkyTextEditorService {
|
|
7
|
+
/**
|
|
8
|
+
* A dictionary representing all active text editors and their settings.
|
|
9
|
+
*/
|
|
10
|
+
set editor(value) {
|
|
11
|
+
this.#editor = value;
|
|
12
|
+
}
|
|
13
|
+
get editor() {
|
|
14
|
+
if (!this.#editor) {
|
|
15
|
+
throw new Error('Editor has not been initialized.');
|
|
16
|
+
}
|
|
17
|
+
return this.#editor;
|
|
18
|
+
}
|
|
19
|
+
get isInitialized() {
|
|
20
|
+
return this.#editor !== undefined;
|
|
21
|
+
}
|
|
22
|
+
#editor;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the blur observable from the editor with the corresponding id.
|
|
25
|
+
*/
|
|
26
|
+
blurListener() {
|
|
27
|
+
return this.editor.blurObservable;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns the click observable from the editor with the corresponding id.
|
|
31
|
+
*/
|
|
32
|
+
clickListener() {
|
|
33
|
+
return this.editor.clickObservable;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns the command change observable from the editor with the corresponding id.
|
|
37
|
+
*/
|
|
38
|
+
commandChangeListener() {
|
|
39
|
+
return this.editor.commandChangeObservable;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns the input change observable from the editor with the corresponding id.
|
|
43
|
+
*/
|
|
44
|
+
inputListener() {
|
|
45
|
+
return this.editor.inputObservable;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Returns the selection change observable from the editor with the corresponding id.
|
|
49
|
+
*/
|
|
50
|
+
selectionChangeListener() {
|
|
51
|
+
return this.editor.selectionChangeObservable;
|
|
52
|
+
}
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
54
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorService }); }
|
|
55
|
+
}
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorService, decorators: [{
|
|
57
|
+
type: Injectable
|
|
58
|
+
}] });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQzs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7O09BRUc7SUFDSCxJQUFXLE1BQU0sQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTyxDQUE0QjtJQUVuQzs7T0FFRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztJQUMvQyxDQUFDOzhHQXZEVSxvQkFBb0I7a0hBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFZGl0b3JTZXR0aW5nIH0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5VGV4dEVkaXRvclNlcnZpY2Uge1xuICAvKipcbiAgICogQSBkaWN0aW9uYXJ5IHJlcHJlc2VudGluZyBhbGwgYWN0aXZlIHRleHQgZWRpdG9ycyBhbmQgdGhlaXIgc2V0dGluZ3MuXG4gICAqL1xuICBwdWJsaWMgc2V0IGVkaXRvcih2YWx1ZTogRWRpdG9yU2V0dGluZykge1xuICAgIHRoaXMuI2VkaXRvciA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0b3IoKTogRWRpdG9yU2V0dGluZyB7XG4gICAgaWYgKCF0aGlzLiNlZGl0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWRpdG9yIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZWRpdG9yO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNlZGl0b3IgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gICNlZGl0b3I6IEVkaXRvclNldHRpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJsdXIgb2JzZXJ2YWJsZSBmcm9tIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZC5cbiAgICovXG4gIHB1YmxpYyBibHVyTGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmJsdXJPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNsaWNrIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgY2xpY2tMaXN0ZW5lcigpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuY2xpY2tPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbW1hbmQgY2hhbmdlIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgY29tbWFuZENoYW5nZUxpc3RlbmVyKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpbnB1dCBjaGFuZ2Ugb2JzZXJ2YWJsZSBmcm9tIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZC5cbiAgICovXG4gIHB1YmxpYyBpbnB1dExpc3RlbmVyKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5pbnB1dE9ic2VydmFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0aW9uIGNoYW5nZSBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIHNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5zZWxlY3Rpb25DaGFuZ2VPYnNlcnZhYmxlO1xuICB9XG59XG4iXX0=
|