@kolkov/angular-editor 3.0.0-beta.2 → 3.0.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 +69 -1
- package/README.md +15 -10
- package/assets/icons/icons.svg +2 -2
- package/fesm2022/kolkov-angular-editor.mjs +1360 -0
- package/fesm2022/kolkov-angular-editor.mjs.map +1 -0
- package/index.d.ts +412 -0
- package/package.json +10 -16
- package/themes/default.scss +22 -22
- package/esm2020/kolkov-angular-editor.mjs +0 -5
- package/esm2020/lib/ae-button/ae-button.component.mjs +0 -21
- package/esm2020/lib/ae-select/ae-select.component.mjs +0 -185
- package/esm2020/lib/ae-toolbar/ae-toolbar.component.mjs +0 -365
- package/esm2020/lib/ae-toolbar-set/ae-toolbar-set.component.mjs +0 -15
- package/esm2020/lib/angular-editor.module.mjs +0 -27
- package/esm2020/lib/angular-editor.service.mjs +0 -275
- package/esm2020/lib/config.mjs +0 -36
- package/esm2020/lib/editor/angular-editor.component.mjs +0 -415
- package/esm2020/lib/utils.mjs +0 -4
- package/esm2020/public-api.mjs +0 -11
- package/fesm2015/kolkov-angular-editor.mjs +0 -1325
- package/fesm2015/kolkov-angular-editor.mjs.map +0 -1
- package/fesm2020/kolkov-angular-editor.mjs +0 -1319
- package/fesm2020/kolkov-angular-editor.mjs.map +0 -1
- package/kolkov-angular-editor.d.ts +0 -5
- package/lib/ae-button/ae-button.component.d.ts +0 -7
- package/lib/ae-select/ae-select.component.d.ts +0 -46
- package/lib/ae-toolbar/ae-toolbar.component.d.ts +0 -97
- package/lib/ae-toolbar-set/ae-toolbar-set.component.d.ts +0 -6
- package/lib/angular-editor.module.d.ts +0 -13
- package/lib/angular-editor.service.d.ts +0 -87
- package/lib/config.d.ts +0 -39
- package/lib/editor/angular-editor.component.d.ts +0 -133
- package/lib/utils.d.ts +0 -1
- package/public-api.d.ts +0 -8
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { Attribute, Component, ContentChild, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, Output, SecurityContext, ViewChild } from '@angular/core';
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import { AngularEditorService } from '../angular-editor.service';
|
|
5
|
-
import { angularEditorConfig } from '../config';
|
|
6
|
-
import { isDefined } from '../utils';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../angular-editor.service";
|
|
9
|
-
import * as i2 from "@angular/platform-browser";
|
|
10
|
-
import * as i3 from "../ae-toolbar/ae-toolbar.component";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
export class AngularEditorComponent {
|
|
13
|
-
constructor(r, editorService, doc, sanitizer, cdRef, defaultTabIndex, autoFocus) {
|
|
14
|
-
this.r = r;
|
|
15
|
-
this.editorService = editorService;
|
|
16
|
-
this.doc = doc;
|
|
17
|
-
this.sanitizer = sanitizer;
|
|
18
|
-
this.cdRef = cdRef;
|
|
19
|
-
this.autoFocus = autoFocus;
|
|
20
|
-
this.modeVisual = true;
|
|
21
|
-
this.showPlaceholder = false;
|
|
22
|
-
this.disabled = false;
|
|
23
|
-
this.focused = false;
|
|
24
|
-
this.touched = false;
|
|
25
|
-
this.changed = false;
|
|
26
|
-
this.id = '';
|
|
27
|
-
this.config = angularEditorConfig;
|
|
28
|
-
this.placeholder = '';
|
|
29
|
-
this.executeCommandFn = this.executeCommand.bind(this);
|
|
30
|
-
this.viewMode = new EventEmitter();
|
|
31
|
-
/** emits `blur` event when focused out from the textarea */
|
|
32
|
-
// eslint-disable-next-line @angular-eslint/no-output-native, @angular-eslint/no-output-rename
|
|
33
|
-
this.blurEvent = new EventEmitter();
|
|
34
|
-
/** emits `focus` event when focused in to the textarea */
|
|
35
|
-
// eslint-disable-next-line @angular-eslint/no-output-rename, @angular-eslint/no-output-native
|
|
36
|
-
this.focusEvent = new EventEmitter();
|
|
37
|
-
this.tabindex = -1;
|
|
38
|
-
const parsedTabIndex = Number(defaultTabIndex);
|
|
39
|
-
this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;
|
|
40
|
-
}
|
|
41
|
-
onFocus() {
|
|
42
|
-
this.focus();
|
|
43
|
-
}
|
|
44
|
-
ngOnInit() {
|
|
45
|
-
this.config.toolbarPosition = this.config.toolbarPosition ? this.config.toolbarPosition : angularEditorConfig.toolbarPosition;
|
|
46
|
-
}
|
|
47
|
-
ngAfterViewInit() {
|
|
48
|
-
if (isDefined(this.autoFocus)) {
|
|
49
|
-
this.focus();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
onPaste(event) {
|
|
53
|
-
if (this.config.rawPaste) {
|
|
54
|
-
event.preventDefault();
|
|
55
|
-
const text = event.clipboardData.getData('text/plain');
|
|
56
|
-
document.execCommand('insertHTML', false, text);
|
|
57
|
-
return text;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Executed command from editor header buttons
|
|
62
|
-
* @param command string from triggerCommand
|
|
63
|
-
* @param value
|
|
64
|
-
*/
|
|
65
|
-
executeCommand(command, value) {
|
|
66
|
-
this.focus();
|
|
67
|
-
if (command === 'focus') {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (command === 'toggleEditorMode') {
|
|
71
|
-
this.toggleEditorMode(this.modeVisual);
|
|
72
|
-
}
|
|
73
|
-
else if (command !== '') {
|
|
74
|
-
if (command === 'clear') {
|
|
75
|
-
this.editorService.removeSelectedElements(this.getCustomTags());
|
|
76
|
-
this.onContentChange(this.textArea.nativeElement);
|
|
77
|
-
}
|
|
78
|
-
else if (command === 'default') {
|
|
79
|
-
this.editorService.removeSelectedElements('h1,h2,h3,h4,h5,h6,p,pre');
|
|
80
|
-
this.onContentChange(this.textArea.nativeElement);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
this.editorService.executeCommand(command, value);
|
|
84
|
-
}
|
|
85
|
-
this.exec();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* focus event
|
|
90
|
-
*/
|
|
91
|
-
onTextAreaFocus(event) {
|
|
92
|
-
if (this.focused) {
|
|
93
|
-
event.stopPropagation();
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
this.focused = true;
|
|
97
|
-
this.focusEvent.emit(event);
|
|
98
|
-
if (!this.touched || !this.changed) {
|
|
99
|
-
this.editorService.executeInNextQueueIteration(() => {
|
|
100
|
-
this.configure();
|
|
101
|
-
this.touched = true;
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* @description fires when cursor leaves textarea
|
|
107
|
-
*/
|
|
108
|
-
onTextAreaMouseOut(event) {
|
|
109
|
-
this.editorService.saveSelection();
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* blur event
|
|
113
|
-
*/
|
|
114
|
-
onTextAreaBlur(event) {
|
|
115
|
-
/**
|
|
116
|
-
* save selection if focussed out
|
|
117
|
-
*/
|
|
118
|
-
this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);
|
|
119
|
-
if (typeof this.onTouched === 'function') {
|
|
120
|
-
this.onTouched();
|
|
121
|
-
}
|
|
122
|
-
if (event.relatedTarget !== null) {
|
|
123
|
-
const parent = event.relatedTarget.parentElement;
|
|
124
|
-
if (!parent.classList.contains('angular-editor-toolbar-set') && !parent.classList.contains('ae-picker')) {
|
|
125
|
-
this.blurEvent.emit(event);
|
|
126
|
-
this.focused = false;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* focus the text area when the editor is focused
|
|
132
|
-
*/
|
|
133
|
-
focus() {
|
|
134
|
-
if (this.modeVisual) {
|
|
135
|
-
this.textArea.nativeElement.focus();
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
const sourceText = this.doc.getElementById('sourceText' + this.id);
|
|
139
|
-
sourceText.focus();
|
|
140
|
-
this.focused = true;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Executed from the contenteditable section while the input property changes
|
|
145
|
-
* @param element html element from contenteditable
|
|
146
|
-
*/
|
|
147
|
-
onContentChange(element) {
|
|
148
|
-
let html = '';
|
|
149
|
-
if (this.modeVisual) {
|
|
150
|
-
html = element.innerHTML;
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
html = element.innerText;
|
|
154
|
-
}
|
|
155
|
-
if ((!html || html === '<br>')) {
|
|
156
|
-
html = '';
|
|
157
|
-
}
|
|
158
|
-
if (typeof this.onChange === 'function') {
|
|
159
|
-
this.onChange(this.config.sanitize || this.config.sanitize === undefined ?
|
|
160
|
-
this.sanitizer.sanitize(SecurityContext.HTML, html) : html);
|
|
161
|
-
if ((!html) !== this.showPlaceholder) {
|
|
162
|
-
this.togglePlaceholder(this.showPlaceholder);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
this.changed = true;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Set the function to be called
|
|
169
|
-
* when the control receives a change event.
|
|
170
|
-
*
|
|
171
|
-
* @param fn a function
|
|
172
|
-
*/
|
|
173
|
-
registerOnChange(fn) {
|
|
174
|
-
this.onChange = e => (e === '<br>' ? fn('') : fn(e));
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Set the function to be called
|
|
178
|
-
* when the control receives a touch event.
|
|
179
|
-
*
|
|
180
|
-
* @param fn a function
|
|
181
|
-
*/
|
|
182
|
-
registerOnTouched(fn) {
|
|
183
|
-
this.onTouched = fn;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Write a new value to the element.
|
|
187
|
-
*
|
|
188
|
-
* @param value value to be executed when there is a change in contenteditable
|
|
189
|
-
*/
|
|
190
|
-
writeValue(value) {
|
|
191
|
-
if ((!value || value === '<br>' || value === '') !== this.showPlaceholder) {
|
|
192
|
-
this.togglePlaceholder(this.showPlaceholder);
|
|
193
|
-
}
|
|
194
|
-
if (value === undefined || value === '' || value === '<br>') {
|
|
195
|
-
value = null;
|
|
196
|
-
}
|
|
197
|
-
this.refreshView(value);
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* refresh view/HTML of the editor
|
|
201
|
-
*
|
|
202
|
-
* @param value html string from the editor
|
|
203
|
-
*/
|
|
204
|
-
refreshView(value) {
|
|
205
|
-
const normalizedValue = value === null ? '' : value;
|
|
206
|
-
this.r.setProperty(this.textArea.nativeElement, 'innerHTML', normalizedValue);
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* toggles placeholder based on input string
|
|
211
|
-
*
|
|
212
|
-
* @param value A HTML string from the editor
|
|
213
|
-
*/
|
|
214
|
-
togglePlaceholder(value) {
|
|
215
|
-
if (!value) {
|
|
216
|
-
this.r.addClass(this.editorWrapper.nativeElement, 'show-placeholder');
|
|
217
|
-
this.showPlaceholder = true;
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
this.r.removeClass(this.editorWrapper.nativeElement, 'show-placeholder');
|
|
221
|
-
this.showPlaceholder = false;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Implements disabled state for this element
|
|
226
|
-
*
|
|
227
|
-
* @param isDisabled Disabled flag
|
|
228
|
-
*/
|
|
229
|
-
setDisabledState(isDisabled) {
|
|
230
|
-
const div = this.textArea.nativeElement;
|
|
231
|
-
const action = isDisabled ? 'addClass' : 'removeClass';
|
|
232
|
-
this.r[action](div, 'disabled');
|
|
233
|
-
this.disabled = isDisabled;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* toggles editor mode based on bToSource bool
|
|
237
|
-
*
|
|
238
|
-
* @param bToSource A boolean value from the editor
|
|
239
|
-
*/
|
|
240
|
-
toggleEditorMode(bToSource) {
|
|
241
|
-
let oContent;
|
|
242
|
-
const editableElement = this.textArea.nativeElement;
|
|
243
|
-
if (bToSource) {
|
|
244
|
-
oContent = this.r.createText(editableElement.innerHTML);
|
|
245
|
-
this.r.setProperty(editableElement, 'innerHTML', '');
|
|
246
|
-
this.r.setProperty(editableElement, 'contentEditable', false);
|
|
247
|
-
const oPre = this.r.createElement('pre');
|
|
248
|
-
this.r.setStyle(oPre, 'margin', '0');
|
|
249
|
-
this.r.setStyle(oPre, 'outline', 'none');
|
|
250
|
-
const oCode = this.r.createElement('code');
|
|
251
|
-
this.r.setProperty(oCode, 'id', 'sourceText' + this.id);
|
|
252
|
-
this.r.setStyle(oCode, 'display', 'block');
|
|
253
|
-
this.r.setStyle(oCode, 'white-space', 'pre-wrap');
|
|
254
|
-
this.r.setStyle(oCode, 'word-break', 'keep-all');
|
|
255
|
-
this.r.setStyle(oCode, 'outline', 'none');
|
|
256
|
-
this.r.setStyle(oCode, 'margin', '0');
|
|
257
|
-
this.r.setStyle(oCode, 'background-color', '#fff5b9');
|
|
258
|
-
this.r.setProperty(oCode, 'contentEditable', true);
|
|
259
|
-
this.r.appendChild(oCode, oContent);
|
|
260
|
-
this.focusInstance = this.r.listen(oCode, 'focus', (event) => this.onTextAreaFocus(event));
|
|
261
|
-
this.blurInstance = this.r.listen(oCode, 'blur', (event) => this.onTextAreaBlur(event));
|
|
262
|
-
this.r.appendChild(oPre, oCode);
|
|
263
|
-
this.r.appendChild(editableElement, oPre);
|
|
264
|
-
// ToDo move to service
|
|
265
|
-
this.doc.execCommand('defaultParagraphSeparator', false, 'div');
|
|
266
|
-
this.modeVisual = false;
|
|
267
|
-
this.viewMode.emit(false);
|
|
268
|
-
oCode.focus();
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
if (this.doc.querySelectorAll) {
|
|
272
|
-
this.r.setProperty(editableElement, 'innerHTML', editableElement.innerText);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
oContent = this.doc.createRange();
|
|
276
|
-
oContent.selectNodeContents(editableElement.firstChild);
|
|
277
|
-
this.r.setProperty(editableElement, 'innerHTML', oContent.toString());
|
|
278
|
-
}
|
|
279
|
-
this.r.setProperty(editableElement, 'contentEditable', true);
|
|
280
|
-
this.modeVisual = true;
|
|
281
|
-
this.viewMode.emit(true);
|
|
282
|
-
this.onContentChange(editableElement);
|
|
283
|
-
editableElement.focus();
|
|
284
|
-
}
|
|
285
|
-
this.editorToolbar.setEditorMode(!this.modeVisual);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* toggles editor buttons when cursor moved or positioning
|
|
289
|
-
*
|
|
290
|
-
* Send a node array from the contentEditable of the editor
|
|
291
|
-
*/
|
|
292
|
-
exec() {
|
|
293
|
-
this.editorToolbar.triggerButtons();
|
|
294
|
-
let userSelection;
|
|
295
|
-
if (this.doc.getSelection) {
|
|
296
|
-
userSelection = this.doc.getSelection();
|
|
297
|
-
this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);
|
|
298
|
-
}
|
|
299
|
-
let a = userSelection.focusNode;
|
|
300
|
-
const els = [];
|
|
301
|
-
while (a && a.id !== 'editor') {
|
|
302
|
-
els.unshift(a);
|
|
303
|
-
a = a.parentNode;
|
|
304
|
-
}
|
|
305
|
-
this.editorToolbar.triggerBlocks(els);
|
|
306
|
-
}
|
|
307
|
-
configure() {
|
|
308
|
-
this.editorService.uploadUrl = this.config.uploadUrl;
|
|
309
|
-
this.editorService.uploadWithCredentials = this.config.uploadWithCredentials;
|
|
310
|
-
if (this.config.defaultParagraphSeparator) {
|
|
311
|
-
this.editorService.setDefaultParagraphSeparator(this.config.defaultParagraphSeparator);
|
|
312
|
-
}
|
|
313
|
-
if (this.config.defaultFontName) {
|
|
314
|
-
this.editorService.setFontName(this.config.defaultFontName);
|
|
315
|
-
}
|
|
316
|
-
if (this.config.defaultFontSize) {
|
|
317
|
-
this.editorService.setFontSize(this.config.defaultFontSize);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
getFonts() {
|
|
321
|
-
const fonts = this.config.fonts ? this.config.fonts : angularEditorConfig.fonts;
|
|
322
|
-
return fonts.map(x => {
|
|
323
|
-
return { label: x.name, value: x.name };
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
getCustomTags() {
|
|
327
|
-
const tags = ['span'];
|
|
328
|
-
this.config.customClasses.forEach(x => {
|
|
329
|
-
if (x.tag !== undefined) {
|
|
330
|
-
if (!tags.includes(x.tag)) {
|
|
331
|
-
tags.push(x.tag);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
return tags.join(',');
|
|
336
|
-
}
|
|
337
|
-
ngOnDestroy() {
|
|
338
|
-
if (this.blurInstance) {
|
|
339
|
-
this.blurInstance();
|
|
340
|
-
}
|
|
341
|
-
if (this.focusInstance) {
|
|
342
|
-
this.focusInstance();
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
filterStyles(html) {
|
|
346
|
-
html = html.replace('position: fixed;', '');
|
|
347
|
-
return html;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
AngularEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AngularEditorComponent, deps: [{ token: i0.Renderer2 }, { token: i1.AngularEditorService }, { token: DOCUMENT }, { token: i2.DomSanitizer }, { token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }, { token: 'autofocus', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
351
|
-
AngularEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AngularEditorComponent, selector: "angular-editor", inputs: { id: "id", config: "config", placeholder: "placeholder", tabIndex: "tabIndex" }, outputs: { html: "html", viewMode: "viewMode", blurEvent: "blur", focusEvent: "focus" }, host: { listeners: { "focus": "onFocus()" }, properties: { "attr.tabindex": "this.tabindex" } }, providers: [
|
|
352
|
-
{
|
|
353
|
-
provide: NG_VALUE_ACCESSOR,
|
|
354
|
-
useExisting: forwardRef(() => AngularEditorComponent),
|
|
355
|
-
multi: true
|
|
356
|
-
},
|
|
357
|
-
AngularEditorService
|
|
358
|
-
], queries: [{ propertyName: "customButtonsTemplateRef", first: true, predicate: ["customButtons"], descendants: true }], viewQueries: [{ propertyName: "textArea", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "editorWrapper", first: true, predicate: ["editorWrapper"], descendants: true, static: true }, { propertyName: "editorToolbar", first: true, predicate: ["editorToolbar"], descendants: true }], ngImport: i0, template: "<div\n class=\"angular-editor\"\n #angularEditor\n [style.width]=\"config.width\"\n [style.minWidth]=\"config.minWidth\"\n [ngClass]=\"{\n 'bottom': config.toolbarPosition === 'bottom'\n }\"\n>\n <angular-editor-toolbar\n #editorToolbar\n [id]=\"id\"\n [uploadUrl]=\"config.uploadUrl\"\n [upload]=\"config.upload\"\n [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\n [fonts]=\"getFonts()\"\n [customClasses]=\"config.customClasses\"\n [defaultFontName]=\"config.defaultFontName\"\n [defaultFontSize]=\"config.defaultFontSize\"\n [hiddenButtons]=\"config.toolbarHiddenButtons\"\n (execute)=\"executeCommand($event)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"customButtonsTemplateRef\"\n [ngTemplateOutletContext]=\"{ executeCommandFn: this.executeCommandFn}\"\n >\n </ng-container>\n </angular-editor-toolbar>\n\n <div\n class=\"angular-editor-wrapper\"\n #editorWrapper\n >\n <div\n #editor\n class=\"angular-editor-textarea\"\n [attr.contenteditable]=\"config.editable\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [attr.translate]=\"config.translate\"\n [attr.spellcheck]=\"config.spellcheck\"\n [style.height]=\"config.height\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxHeight]=\"config.maxHeight\"\n [style.outline]=\"config.outline === false ? 'none': undefined\"\n (input)=\"onContentChange($event.target)\"\n (focus)=\"onTextAreaFocus($event)\"\n (blur)=\"onTextAreaBlur($event)\"\n (click)=\"exec()\"\n (keyup)=\"exec()\"\n (mouseout)=\"onTextAreaMouseOut($event)\"\n (paste)=\"onPaste($event)\"\n >\n </div>\n <span class=\"angular-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\n </div>\n</div>\n", styles: ["a{cursor:pointer}.angular-editor{display:flex;flex-direction:column;gap:var(--ae-gap, 5px)}.angular-editor.bottom{flex-direction:column-reverse}.angular-editor ::ng-deep [contenteditable=true]:empty:before{content:attr(placeholder);color:#868e96;opacity:1}.angular-editor .angular-editor-wrapper{position:relative}.angular-editor .angular-editor-wrapper .angular-editor-textarea{min-height:150px;overflow:auto;resize:vertical}.angular-editor .angular-editor-wrapper .angular-editor-textarea:after{content:\"\";position:absolute;bottom:0;right:0;display:block;width:8px;height:8px;cursor:nwse-resize;background-color:#ffffff80}.angular-editor .angular-editor-wrapper .angular-editor-textarea{min-height:5rem;padding:.5rem .8rem 1rem;border-radius:var(--ae-text-area-border-radius, .3rem);border:var(--ae-text-area-border, 1px solid #ddd);background-color:transparent;overflow-x:hidden;overflow-y:auto;position:relative}.angular-editor .angular-editor-wrapper .angular-editor-textarea:focus,.angular-editor .angular-editor-wrapper .angular-editor-textarea.focus{outline:var(--ae-focus-outline-color, -webkit-focus-ring-color auto 1px)}.angular-editor .angular-editor-wrapper .angular-editor-textarea ::ng-deep blockquote{margin-left:1rem;border-left:.2em solid #dfe2e5;padding-left:.5rem}.angular-editor .angular-editor-wrapper ::ng-deep p{margin-bottom:0}.angular-editor .angular-editor-wrapper .angular-editor-placeholder{display:none;position:absolute;top:0;padding:.6rem .8rem 1rem .9rem;color:#6c757d;opacity:.75}.angular-editor .angular-editor-wrapper.show-placeholder .angular-editor-placeholder{display:block}.angular-editor .angular-editor-wrapper.disabled{cursor:not-allowed;opacity:.5;pointer-events:none}\n"], components: [{ type: i3.AeToolbarComponent, selector: "angular-editor-toolbar, ae-toolbar, div[aeToolbar]", inputs: ["id", "uploadUrl", "upload", "showToolbar", "fonts", "customClasses", "defaultFontName", "defaultFontSize", "hiddenButtons"], outputs: ["execute"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
359
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AngularEditorComponent, decorators: [{
|
|
360
|
-
type: Component,
|
|
361
|
-
args: [{ selector: 'angular-editor', providers: [
|
|
362
|
-
{
|
|
363
|
-
provide: NG_VALUE_ACCESSOR,
|
|
364
|
-
useExisting: forwardRef(() => AngularEditorComponent),
|
|
365
|
-
multi: true
|
|
366
|
-
},
|
|
367
|
-
AngularEditorService
|
|
368
|
-
], template: "<div\n class=\"angular-editor\"\n #angularEditor\n [style.width]=\"config.width\"\n [style.minWidth]=\"config.minWidth\"\n [ngClass]=\"{\n 'bottom': config.toolbarPosition === 'bottom'\n }\"\n>\n <angular-editor-toolbar\n #editorToolbar\n [id]=\"id\"\n [uploadUrl]=\"config.uploadUrl\"\n [upload]=\"config.upload\"\n [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\n [fonts]=\"getFonts()\"\n [customClasses]=\"config.customClasses\"\n [defaultFontName]=\"config.defaultFontName\"\n [defaultFontSize]=\"config.defaultFontSize\"\n [hiddenButtons]=\"config.toolbarHiddenButtons\"\n (execute)=\"executeCommand($event)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"customButtonsTemplateRef\"\n [ngTemplateOutletContext]=\"{ executeCommandFn: this.executeCommandFn}\"\n >\n </ng-container>\n </angular-editor-toolbar>\n\n <div\n class=\"angular-editor-wrapper\"\n #editorWrapper\n >\n <div\n #editor\n class=\"angular-editor-textarea\"\n [attr.contenteditable]=\"config.editable\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [attr.translate]=\"config.translate\"\n [attr.spellcheck]=\"config.spellcheck\"\n [style.height]=\"config.height\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxHeight]=\"config.maxHeight\"\n [style.outline]=\"config.outline === false ? 'none': undefined\"\n (input)=\"onContentChange($event.target)\"\n (focus)=\"onTextAreaFocus($event)\"\n (blur)=\"onTextAreaBlur($event)\"\n (click)=\"exec()\"\n (keyup)=\"exec()\"\n (mouseout)=\"onTextAreaMouseOut($event)\"\n (paste)=\"onPaste($event)\"\n >\n </div>\n <span class=\"angular-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\n </div>\n</div>\n", styles: ["a{cursor:pointer}.angular-editor{display:flex;flex-direction:column;gap:var(--ae-gap, 5px)}.angular-editor.bottom{flex-direction:column-reverse}.angular-editor ::ng-deep [contenteditable=true]:empty:before{content:attr(placeholder);color:#868e96;opacity:1}.angular-editor .angular-editor-wrapper{position:relative}.angular-editor .angular-editor-wrapper .angular-editor-textarea{min-height:150px;overflow:auto;resize:vertical}.angular-editor .angular-editor-wrapper .angular-editor-textarea:after{content:\"\";position:absolute;bottom:0;right:0;display:block;width:8px;height:8px;cursor:nwse-resize;background-color:#ffffff80}.angular-editor .angular-editor-wrapper .angular-editor-textarea{min-height:5rem;padding:.5rem .8rem 1rem;border-radius:var(--ae-text-area-border-radius, .3rem);border:var(--ae-text-area-border, 1px solid #ddd);background-color:transparent;overflow-x:hidden;overflow-y:auto;position:relative}.angular-editor .angular-editor-wrapper .angular-editor-textarea:focus,.angular-editor .angular-editor-wrapper .angular-editor-textarea.focus{outline:var(--ae-focus-outline-color, -webkit-focus-ring-color auto 1px)}.angular-editor .angular-editor-wrapper .angular-editor-textarea ::ng-deep blockquote{margin-left:1rem;border-left:.2em solid #dfe2e5;padding-left:.5rem}.angular-editor .angular-editor-wrapper ::ng-deep p{margin-bottom:0}.angular-editor .angular-editor-wrapper .angular-editor-placeholder{display:none;position:absolute;top:0;padding:.6rem .8rem 1rem .9rem;color:#6c757d;opacity:.75}.angular-editor .angular-editor-wrapper.show-placeholder .angular-editor-placeholder{display:block}.angular-editor .angular-editor-wrapper.disabled{cursor:not-allowed;opacity:.5;pointer-events:none}\n"] }]
|
|
369
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.AngularEditorService }, { type: undefined, decorators: [{
|
|
370
|
-
type: Inject,
|
|
371
|
-
args: [DOCUMENT]
|
|
372
|
-
}] }, { type: i2.DomSanitizer }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
373
|
-
type: Attribute,
|
|
374
|
-
args: ['tabindex']
|
|
375
|
-
}] }, { type: undefined, decorators: [{
|
|
376
|
-
type: Attribute,
|
|
377
|
-
args: ['autofocus']
|
|
378
|
-
}] }]; }, propDecorators: { id: [{
|
|
379
|
-
type: Input
|
|
380
|
-
}], config: [{
|
|
381
|
-
type: Input
|
|
382
|
-
}], placeholder: [{
|
|
383
|
-
type: Input
|
|
384
|
-
}], tabIndex: [{
|
|
385
|
-
type: Input
|
|
386
|
-
}], html: [{
|
|
387
|
-
type: Output
|
|
388
|
-
}], textArea: [{
|
|
389
|
-
type: ViewChild,
|
|
390
|
-
args: ['editor', { static: true }]
|
|
391
|
-
}], editorWrapper: [{
|
|
392
|
-
type: ViewChild,
|
|
393
|
-
args: ['editorWrapper', { static: true }]
|
|
394
|
-
}], editorToolbar: [{
|
|
395
|
-
type: ViewChild,
|
|
396
|
-
args: ['editorToolbar']
|
|
397
|
-
}], customButtonsTemplateRef: [{
|
|
398
|
-
type: ContentChild,
|
|
399
|
-
args: ["customButtons"]
|
|
400
|
-
}], viewMode: [{
|
|
401
|
-
type: Output
|
|
402
|
-
}], blurEvent: [{
|
|
403
|
-
type: Output,
|
|
404
|
-
args: ['blur']
|
|
405
|
-
}], focusEvent: [{
|
|
406
|
-
type: Output,
|
|
407
|
-
args: ['focus']
|
|
408
|
-
}], tabindex: [{
|
|
409
|
-
type: HostBinding,
|
|
410
|
-
args: ['attr.tabindex']
|
|
411
|
-
}], onFocus: [{
|
|
412
|
-
type: HostListener,
|
|
413
|
-
args: ['focus']
|
|
414
|
-
}] } });
|
|
415
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvYW5ndWxhci1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvYW5ndWxhci1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFFTCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sZUFBZSxFQUVmLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFzQixtQkFBbUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNuRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFnQm5DLE1BQU0sT0FBTyxzQkFBc0I7SUE2Q2pDLFlBQ1UsQ0FBWSxFQUNaLGFBQW1DLEVBQ2pCLEdBQVEsRUFDMUIsU0FBdUIsRUFDdkIsS0FBd0IsRUFDVCxlQUF1QixFQUNkLFNBQWM7UUFOdEMsTUFBQyxHQUFELENBQUMsQ0FBVztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFFQSxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBL0NoRCxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFLUCxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsV0FBTSxHQUF3QixtQkFBbUIsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQVMxQixxQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVqRCw0REFBNEQ7UUFDMUQsOEZBQThGO1FBQ2hGLGNBQVMsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUVyRiwwREFBMEQ7UUFDeEQsOEZBQThGO1FBQy9FLGVBQVUsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUV6RCxhQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFnQjFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsY0FBYyxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkYsQ0FBQztJQWZELE9BQU87UUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBZUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO0lBQ2hJLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxRQUFRLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLE9BQWUsRUFBRSxLQUFjO1FBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLE9BQU8sS0FBSyxrQkFBa0IsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ3pCLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25EO2lCQUFNLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsS0FBaUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLEtBQWlCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWlCO1FBQzlCOztXQUVHO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN4QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7UUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQ2hDLE1BQU0sTUFBTSxHQUFJLEtBQUssQ0FBQyxhQUE2QixDQUFDLGFBQWEsQ0FBQztZQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN2RyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDdEI7U0FDRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckM7YUFBTTtZQUNMLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxPQUFvQjtRQUNsQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRTtZQUM5QixJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUM5QztTQUNGO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsS0FBVTtRQUVuQixJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtZQUMzRCxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEtBQWE7UUFDdkIsTUFBTSxlQUFlLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTlFLE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FFN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxTQUFrQjtRQUNqQyxJQUFJLFFBQWEsQ0FBQztRQUNsQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUVwRCxJQUFJLFNBQVMsRUFBRTtZQUNiLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUxQyx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNmO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdFO2lCQUFNO2dCQUNMLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVwQyxJQUFJLGFBQWEsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO1lBQ3pCLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNsRjtRQUVELElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUU7WUFDN0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUM7UUFDN0UsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFO1lBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQ3hGO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUNoRixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxFQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2xCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7bUhBcllVLHNCQUFzQiwrRUFnRHZCLFFBQVEsMEVBR0wsVUFBVSw4QkFDVixXQUFXO3VHQXBEYixzQkFBc0IsNlRBVHRCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7WUFDckQsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNELG9CQUFvQjtLQUNyQixtZEN6Q0gsK3pEQXdEQTsyRkRiYSxzQkFBc0I7a0JBZGxDLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBSWY7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELG9CQUFvQjtxQkFDckI7OzBCQWtERSxNQUFNOzJCQUFDLFFBQVE7OzBCQUdmLFNBQVM7MkJBQUMsVUFBVTs7MEJBQ3BCLFNBQVM7MkJBQUMsV0FBVzs0Q0FyQ2YsRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksSUFBSTtzQkFBYixNQUFNO2dCQUU4QixRQUFRO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsYUFBYTtzQkFBeEQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNkLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDSyx3QkFBd0I7c0JBQXRELFlBQVk7dUJBQUMsZUFBZTtnQkFHbkIsUUFBUTtzQkFBakIsTUFBTTtnQkFJUyxTQUFTO3NCQUF4QixNQUFNO3VCQUFDLE1BQU07Z0JBSUcsVUFBVTtzQkFBMUIsTUFBTTt1QkFBQyxPQUFPO2dCQUVlLFFBQVE7c0JBQXJDLFdBQVc7dUJBQUMsZUFBZTtnQkFHNUIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTZWN1cml0eUNvbnRleHQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7QWVUb29sYmFyQ29tcG9uZW50fSBmcm9tICcuLi9hZS10b29sYmFyL2FlLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7QW5ndWxhckVkaXRvclNlcnZpY2V9IGZyb20gJy4uL2FuZ3VsYXItZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtBbmd1bGFyRWRpdG9yQ29uZmlnLCBhbmd1bGFyRWRpdG9yQ29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtpc0RlZmluZWR9IGZyb20gJy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5ndWxhci1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYW5ndWxhci1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hbmd1bGFyLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICAvL2VuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhckVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgQW5ndWxhckVkaXRvclNlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgbW9kZVZpc3VhbCA9IHRydWU7XG4gIHNob3dQbGFjZWhvbGRlciA9IGZhbHNlO1xuICBkaXNhYmxlZCA9IGZhbHNlO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIHRvdWNoZWQgPSBmYWxzZTtcbiAgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIGZvY3VzSW5zdGFuY2U6IGFueTtcbiAgYmx1ckluc3RhbmNlOiBhbnk7XG5cbiAgQElucHV0KCkgaWQgPSAnJztcbiAgQElucHV0KCkgY29uZmlnOiBBbmd1bGFyRWRpdG9yQ29uZmlnID0gYW5ndWxhckVkaXRvckNvbmZpZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlciB8IG51bGw7XG5cbiAgQE91dHB1dCgpIGh0bWw7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9yJywge3N0YXRpYzogdHJ1ZX0pIHRleHRBcmVhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlZGl0b3JXcmFwcGVyJywge3N0YXRpYzogdHJ1ZX0pIGVkaXRvcldyYXBwZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvclRvb2xiYXInKSBlZGl0b3JUb29sYmFyOiBBZVRvb2xiYXJDb21wb25lbnQ7XG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21CdXR0b25zXCIpIGN1c3RvbUJ1dHRvbnNUZW1wbGF0ZVJlZj86IFRlbXBsYXRlUmVmPGFueT47XG4gIGV4ZWN1dGVDb21tYW5kRm4gPSB0aGlzLmV4ZWN1dGVDb21tYW5kLmJpbmQodGhpcyk7XG5cbiAgQE91dHB1dCgpIHZpZXdNb2RlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKiBlbWl0cyBgYmx1cmAgZXZlbnQgd2hlbiBmb2N1c2VkIG91dCBmcm9tIHRoZSB0ZXh0YXJlYSAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZSwgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcbiAgQE91dHB1dCgnYmx1cicpIGJsdXJFdmVudDogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIC8qKiBlbWl0cyBgZm9jdXNgIGV2ZW50IHdoZW4gZm9jdXNlZCBpbiB0byB0aGUgdGV4dGFyZWEgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWUsIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpIHRhYmluZGV4ID0gLTE7XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogQW5ndWxhckVkaXRvclNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBBdHRyaWJ1dGUoJ3RhYmluZGV4JykgZGVmYXVsdFRhYkluZGV4OiBzdHJpbmcsXG4gICAgQEF0dHJpYnV0ZSgnYXV0b2ZvY3VzJykgcHJpdmF0ZSBhdXRvRm9jdXM6IGFueVxuICApIHtcbiAgICBjb25zdCBwYXJzZWRUYWJJbmRleCA9IE51bWJlcihkZWZhdWx0VGFiSW5kZXgpO1xuICAgIHRoaXMudGFiSW5kZXggPSAocGFyc2VkVGFiSW5kZXggfHwgcGFyc2VkVGFiSW5kZXggPT09IDApID8gcGFyc2VkVGFiSW5kZXggOiBudWxsO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcudG9vbGJhclBvc2l0aW9uID0gdGhpcy5jb25maWcudG9vbGJhclBvc2l0aW9uID8gdGhpcy5jb25maWcudG9vbGJhclBvc2l0aW9uIDogYW5ndWxhckVkaXRvckNvbmZpZy50b29sYmFyUG9zaXRpb247XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKGlzRGVmaW5lZCh0aGlzLmF1dG9Gb2N1cykpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5yYXdQYXN0ZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHRleHQpO1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIGNvbW1hbmQgZnJvbSBlZGl0b3IgaGVhZGVyIGJ1dHRvbnNcbiAgICogQHBhcmFtIGNvbW1hbmQgc3RyaW5nIGZyb20gdHJpZ2dlckNvbW1hbmRcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIGlmIChjb21tYW5kID09PSAnZm9jdXMnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb21tYW5kID09PSAndG9nZ2xlRWRpdG9yTW9kZScpIHtcbiAgICAgIHRoaXMudG9nZ2xlRWRpdG9yTW9kZSh0aGlzLm1vZGVWaXN1YWwpO1xuICAgIH0gZWxzZSBpZiAoY29tbWFuZCAhPT0gJycpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSAnY2xlYXInKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVTZWxlY3RlZEVsZW1lbnRzKHRoaXMuZ2V0Q3VzdG9tVGFncygpKTtcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRDaGFuZ2UodGhpcy50ZXh0QXJlYS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVTZWxlY3RlZEVsZW1lbnRzKCdoMSxoMixoMyxoNCxoNSxoNixwLHByZScpO1xuICAgICAgICB0aGlzLm9uQ29udGVudENoYW5nZSh0aGlzLnRleHRBcmVhLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBmb2N1cyBldmVudFxuICAgKi9cbiAgb25UZXh0QXJlYUZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgdGhpcy5mb2N1c0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgIGlmICghdGhpcy50b3VjaGVkIHx8ICF0aGlzLmNoYW5nZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leGVjdXRlSW5OZXh0UXVldWVJdGVyYXRpb24oKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBmaXJlcyB3aGVuIGN1cnNvciBsZWF2ZXMgdGV4dGFyZWFcbiAgICovXG4gIHB1YmxpYyBvblRleHRBcmVhTW91c2VPdXQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2F2ZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIGJsdXIgZXZlbnRcbiAgICovXG4gIG9uVGV4dEFyZWFCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgLyoqXG4gICAgICogc2F2ZSBzZWxlY3Rpb24gaWYgZm9jdXNzZWQgb3V0XG4gICAgICovXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmV4ZWN1dGVJbk5leHRRdWV1ZUl0ZXJhdGlvbih0aGlzLmVkaXRvclNlcnZpY2Uuc2F2ZVNlbGVjdGlvbik7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMub25Ub3VjaGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSAoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudDtcbiAgICAgIGlmICghcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnYW5ndWxhci1lZGl0b3ItdG9vbGJhci1zZXQnKSAmJiAhcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnYWUtcGlja2VyJykpIHtcbiAgICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgZm9jdXMgdGhlIHRleHQgYXJlYSB3aGVuIHRoZSBlZGl0b3IgaXMgZm9jdXNlZFxuICAgKi9cbiAgZm9jdXMoKSB7XG4gICAgaWYgKHRoaXMubW9kZVZpc3VhbCkge1xuICAgICAgdGhpcy50ZXh0QXJlYS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvdXJjZVRleHQgPSB0aGlzLmRvYy5nZXRFbGVtZW50QnlJZCgnc291cmNlVGV4dCcgKyB0aGlzLmlkKTtcbiAgICAgIHNvdXJjZVRleHQuZm9jdXMoKTtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIGZyb20gdGhlIGNvbnRlbnRlZGl0YWJsZSBzZWN0aW9uIHdoaWxlIHRoZSBpbnB1dCBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBlbGVtZW50IGh0bWwgZWxlbWVudCBmcm9tIGNvbnRlbnRlZGl0YWJsZVxuICAgKi9cbiAgb25Db250ZW50Q2hhbmdlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgbGV0IGh0bWwgPSAnJztcbiAgICBpZiAodGhpcy5tb2RlVmlzdWFsKSB7XG4gICAgICBodG1sID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWwgPSBlbGVtZW50LmlubmVyVGV4dDtcbiAgICB9XG4gICAgaWYgKCghaHRtbCB8fCBodG1sID09PSAnPGJyPicpKSB7XG4gICAgICBodG1sID0gJyc7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNvbmZpZy5zYW5pdGl6ZSB8fCB0aGlzLmNvbmZpZy5zYW5pdGl6ZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGh0bWwpIDogaHRtbCk7XG4gICAgICBpZiAoKCFodG1sKSAhPT0gdGhpcy5zaG93UGxhY2Vob2xkZXIpIHtcbiAgICAgICAgdGhpcy50b2dnbGVQbGFjZWhvbGRlcih0aGlzLnNob3dQbGFjZWhvbGRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICogd2hlbiB0aGUgY29udHJvbCByZWNlaXZlcyBhIGNoYW5nZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGZuIGEgZnVuY3Rpb25cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBlID0+IChlID09PSAnPGJyPicgPyBmbignJykgOiBmbihlKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICogd2hlbiB0aGUgY29udHJvbCByZWNlaXZlcyBhIHRvdWNoIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZm4gYSBmdW5jdGlvblxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgYSBuZXcgdmFsdWUgdG8gdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBiZSBleGVjdXRlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIGNvbnRlbnRlZGl0YWJsZVxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG5cbiAgICBpZiAoKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJzxicj4nIHx8IHZhbHVlID09PSAnJykgIT09IHRoaXMuc2hvd1BsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnRvZ2dsZVBsYWNlaG9sZGVyKHRoaXMuc2hvd1BsYWNlaG9sZGVyKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICc8YnI+Jykge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFZpZXcodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZnJlc2ggdmlldy9IVE1MIG9mIHRoZSBlZGl0b3JcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIGh0bWwgc3RyaW5nIGZyb20gdGhlIGVkaXRvclxuICAgKi9cbiAgcmVmcmVzaFZpZXcodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHZhbHVlID09PSBudWxsID8gJycgOiB2YWx1ZTtcbiAgICB0aGlzLnIuc2V0UHJvcGVydHkodGhpcy50ZXh0QXJlYS5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgbm9ybWFsaXplZFZhbHVlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiB0b2dnbGVzIHBsYWNlaG9sZGVyIGJhc2VkIG9uIGlucHV0IHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgQSBIVE1MIHN0cmluZyBmcm9tIHRoZSBlZGl0b3JcbiAgICovXG4gIHRvZ2dsZVBsYWNlaG9sZGVyKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5yLmFkZENsYXNzKHRoaXMuZWRpdG9yV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnc2hvdy1wbGFjZWhvbGRlcicpO1xuICAgICAgdGhpcy5zaG93UGxhY2Vob2xkZXIgPSB0cnVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuci5yZW1vdmVDbGFzcyh0aGlzLmVkaXRvcldyYXBwZXIubmF0aXZlRWxlbWVudCwgJ3Nob3ctcGxhY2Vob2xkZXInKTtcbiAgICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgZGlzYWJsZWQgc3RhdGUgZm9yIHRoaXMgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gaXNEaXNhYmxlZCBEaXNhYmxlZCBmbGFnXG4gICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLnRleHRBcmVhLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgYWN0aW9uID0gaXNEaXNhYmxlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnO1xuICAgIHRoaXMuclthY3Rpb25dKGRpdiwgJ2Rpc2FibGVkJyk7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogdG9nZ2xlcyBlZGl0b3IgbW9kZSBiYXNlZCBvbiBiVG9Tb3VyY2UgYm9vbFxuICAgKlxuICAgKiBAcGFyYW0gYlRvU291cmNlIEEgYm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBlZGl0b3JcbiAgICovXG4gIHRvZ2dsZUVkaXRvck1vZGUoYlRvU291cmNlOiBib29sZWFuKSB7XG4gICAgbGV0IG9Db250ZW50OiBhbnk7XG4gICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy50ZXh0QXJlYS5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKGJUb1NvdXJjZSkge1xuICAgICAgb0NvbnRlbnQgPSB0aGlzLnIuY3JlYXRlVGV4dChlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgIHRoaXMuci5zZXRQcm9wZXJ0eShlZGl0YWJsZUVsZW1lbnQsICdpbm5lckhUTUwnLCAnJyk7XG4gICAgICB0aGlzLnIuc2V0UHJvcGVydHkoZWRpdGFibGVFbGVtZW50LCAnY29udGVudEVkaXRhYmxlJywgZmFsc2UpO1xuXG4gICAgICBjb25zdCBvUHJlID0gdGhpcy5yLmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgdGhpcy5yLnNldFN0eWxlKG9QcmUsICdtYXJnaW4nLCAnMCcpO1xuICAgICAgdGhpcy5yLnNldFN0eWxlKG9QcmUsICdvdXRsaW5lJywgJ25vbmUnKTtcblxuICAgICAgY29uc3Qgb0NvZGUgPSB0aGlzLnIuY3JlYXRlRWxlbWVudCgnY29kZScpO1xuICAgICAgdGhpcy5yLnNldFByb3BlcnR5KG9Db2RlLCAnaWQnLCAnc291cmNlVGV4dCcgKyB0aGlzLmlkKTtcbiAgICAgIHRoaXMuci5zZXRTdHlsZShvQ29kZSwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgIHRoaXMuci5zZXRTdHlsZShvQ29kZSwgJ3doaXRlLXNwYWNlJywgJ3ByZS13cmFwJyk7XG4gICAgICB0aGlzLnIuc2V0U3R5bGUob0NvZGUsICd3b3JkLWJyZWFrJywgJ2tlZXAtYWxsJyk7XG4gICAgICB0aGlzLnIuc2V0U3R5bGUob0NvZGUsICdvdXRsaW5lJywgJ25vbmUnKTtcbiAgICAgIHRoaXMuci5zZXRTdHlsZShvQ29kZSwgJ21hcmdpbicsICcwJyk7XG4gICAgICB0aGlzLnIuc2V0U3R5bGUob0NvZGUsICdiYWNrZ3JvdW5kLWNvbG9yJywgJyNmZmY1YjknKTtcbiAgICAgIHRoaXMuci5zZXRQcm9wZXJ0eShvQ29kZSwgJ2NvbnRlbnRFZGl0YWJsZScsIHRydWUpO1xuICAgICAgdGhpcy5yLmFwcGVuZENoaWxkKG9Db2RlLCBvQ29udGVudCk7XG4gICAgICB0aGlzLmZvY3VzSW5zdGFuY2UgPSB0aGlzLnIubGlzdGVuKG9Db2RlLCAnZm9jdXMnLCAoZXZlbnQpID0+IHRoaXMub25UZXh0QXJlYUZvY3VzKGV2ZW50KSk7XG4gICAgICB0aGlzLmJsdXJJbnN0YW5jZSA9IHRoaXMuci5saXN0ZW4ob0NvZGUsICdibHVyJywgKGV2ZW50KSA9PiB0aGlzLm9uVGV4dEFyZWFCbHVyKGV2ZW50KSk7XG4gICAgICB0aGlzLnIuYXBwZW5kQ2hpbGQob1ByZSwgb0NvZGUpO1xuICAgICAgdGhpcy5yLmFwcGVuZENoaWxkKGVkaXRhYmxlRWxlbWVudCwgb1ByZSk7XG5cbiAgICAgIC8vIFRvRG8gbW92ZSB0byBzZXJ2aWNlXG4gICAgICB0aGlzLmRvYy5leGVjQ29tbWFuZCgnZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcicsIGZhbHNlLCAnZGl2Jyk7XG5cbiAgICAgIHRoaXMubW9kZVZpc3VhbCA9IGZhbHNlO1xuICAgICAgdGhpcy52aWV3TW9kZS5lbWl0KGZhbHNlKTtcbiAgICAgIG9Db2RlLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmRvYy5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICAgIHRoaXMuci5zZXRQcm9wZXJ0eShlZGl0YWJsZUVsZW1lbnQsICdpbm5lckhUTUwnLCBlZGl0YWJsZUVsZW1lbnQuaW5uZXJUZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9Db250ZW50ID0gdGhpcy5kb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgb0NvbnRlbnQuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRhYmxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICAgICAgdGhpcy5yLnNldFByb3BlcnR5KGVkaXRhYmxlRWxlbWVudCwgJ2lubmVySFRNTCcsIG9Db250ZW50LnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5yLnNldFByb3BlcnR5KGVkaXRhYmxlRWxlbWVudCwgJ2NvbnRlbnRFZGl0YWJsZScsIHRydWUpO1xuICAgICAgdGhpcy5tb2RlVmlzdWFsID0gdHJ1ZTtcbiAgICAgIHRoaXMudmlld01vZGUuZW1pdCh0cnVlKTtcbiAgICAgIHRoaXMub25Db250ZW50Q2hhbmdlKGVkaXRhYmxlRWxlbWVudCk7XG4gICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0b3JUb29sYmFyLnNldEVkaXRvck1vZGUoIXRoaXMubW9kZVZpc3VhbCk7XG4gIH1cblxuICAvKipcbiAgICogdG9nZ2xlcyBlZGl0b3IgYnV0dG9ucyB3aGVuIGN1cnNvciBtb3ZlZCBvciBwb3NpdGlvbmluZ1xuICAgKlxuICAgKiBTZW5kIGEgbm9kZSBhcnJheSBmcm9tIHRoZSBjb250ZW50RWRpdGFibGUgb2YgdGhlIGVkaXRvclxuICAgKi9cbiAgZXhlYygpIHtcbiAgICB0aGlzLmVkaXRvclRvb2xiYXIudHJpZ2dlckJ1dHRvbnMoKTtcblxuICAgIGxldCB1c2VyU2VsZWN0aW9uO1xuICAgIGlmICh0aGlzLmRvYy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIHVzZXJTZWxlY3Rpb24gPSB0aGlzLmRvYy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5leGVjdXRlSW5OZXh0UXVldWVJdGVyYXRpb24odGhpcy5lZGl0b3JTZXJ2aWNlLnNhdmVTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIGxldCBhID0gdXNlclNlbGVjdGlvbi5mb2N1c05vZGU7XG4gICAgY29uc3QgZWxzID0gW107XG4gICAgd2hpbGUgKGEgJiYgYS5pZCAhPT0gJ2VkaXRvcicpIHtcbiAgICAgIGVscy51bnNoaWZ0KGEpO1xuICAgICAgYSA9IGEucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgdGhpcy5lZGl0b3JUb29sYmFyLnRyaWdnZXJCbG9ja3MoZWxzKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlKCkge1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS51cGxvYWRVcmwgPSB0aGlzLmNvbmZpZy51cGxvYWRVcmw7XG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnVwbG9hZFdpdGhDcmVkZW50aWFscyA9IHRoaXMuY29uZmlnLnVwbG9hZFdpdGhDcmVkZW50aWFscztcbiAgICBpZiAodGhpcy5jb25maWcuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldERlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IodGhpcy5jb25maWcuZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcik7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZy5kZWZhdWx0Rm9udE5hbWUpIHtcbiAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRGb250TmFtZSh0aGlzLmNvbmZpZy5kZWZhdWx0Rm9udE5hbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcuZGVmYXVsdEZvbnRTaXplKSB7XG4gICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0Rm9udFNpemUodGhpcy5jb25maWcuZGVmYXVsdEZvbnRTaXplKTtcbiAgICB9XG4gIH1cblxuICBnZXRGb250cygpIHtcbiAgICBjb25zdCBmb250cyA9IHRoaXMuY29uZmlnLmZvbnRzID8gdGhpcy5jb25maWcuZm9udHMgOiBhbmd1bGFyRWRpdG9yQ29uZmlnLmZvbnRzO1xuICAgIHJldHVybiBmb250cy5tYXAoeCA9PiB7XG4gICAgICByZXR1cm4ge2xhYmVsOiB4Lm5hbWUsIHZhbHVlOiB4Lm5hbWV9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3VzdG9tVGFncygpIHtcbiAgICBjb25zdCB0YWdzID0gWydzcGFuJ107XG4gICAgdGhpcy5jb25maWcuY3VzdG9tQ2xhc3Nlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgaWYgKHgudGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF0YWdzLmluY2x1ZGVzKHgudGFnKSkge1xuICAgICAgICAgIHRhZ3MucHVzaCh4LnRhZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGFncy5qb2luKCcsJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5ibHVySW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuYmx1ckluc3RhbmNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvY3VzSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuZm9jdXNJbnN0YW5jZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlclN0eWxlcyhodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoJ3Bvc2l0aW9uOiBmaXhlZDsnLCAnJyk7XG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJhbmd1bGFyLWVkaXRvclwiXG4gICNhbmd1bGFyRWRpdG9yXG4gIFtzdHlsZS53aWR0aF09XCJjb25maWcud2lkdGhcIlxuICBbc3R5bGUubWluV2lkdGhdPVwiY29uZmlnLm1pbldpZHRoXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICAnYm90dG9tJzogY29uZmlnLnRvb2xiYXJQb3NpdGlvbiA9PT0gJ2JvdHRvbSdcbiAgICAgfVwiXG4+XG4gIDxhbmd1bGFyLWVkaXRvci10b29sYmFyXG4gICAgI2VkaXRvclRvb2xiYXJcbiAgICBbaWRdPVwiaWRcIlxuICAgIFt1cGxvYWRVcmxdPVwiY29uZmlnLnVwbG9hZFVybFwiXG4gICAgW3VwbG9hZF09XCJjb25maWcudXBsb2FkXCJcbiAgICBbc2hvd1Rvb2xiYXJdPVwiY29uZmlnLnNob3dUb29sYmFyICE9PSB1bmRlZmluZWQgPyBjb25maWcuc2hvd1Rvb2xiYXIgOiB0cnVlXCJcbiAgICBbZm9udHNdPVwiZ2V0Rm9udHMoKVwiXG4gICAgW2N1c3RvbUNsYXNzZXNdPVwiY29uZmlnLmN1c3RvbUNsYXNzZXNcIlxuICAgIFtkZWZhdWx0Rm9udE5hbWVdPVwiY29uZmlnLmRlZmF1bHRGb250TmFtZVwiXG4gICAgW2RlZmF1bHRGb250U2l6ZV09XCJjb25maWcuZGVmYXVsdEZvbnRTaXplXCJcbiAgICBbaGlkZGVuQnV0dG9uc109XCJjb25maWcudG9vbGJhckhpZGRlbkJ1dHRvbnNcIlxuICAgIChleGVjdXRlKT1cImV4ZWN1dGVDb21tYW5kKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tQnV0dG9uc1RlbXBsYXRlUmVmXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGV4ZWN1dGVDb21tYW5kRm46IHRoaXMuZXhlY3V0ZUNvbW1hbmRGbn1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9hbmd1bGFyLWVkaXRvci10b29sYmFyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImFuZ3VsYXItZWRpdG9yLXdyYXBwZXJcIlxuICAgICNlZGl0b3JXcmFwcGVyXG4gID5cbiAgICA8ZGl2XG4gICAgICAjZWRpdG9yXG4gICAgICBjbGFzcz1cImFuZ3VsYXItZWRpdG9yLXRleHRhcmVhXCJcbiAgICAgIFthdHRyLmNvbnRlbnRlZGl0YWJsZV09XCJjb25maWcuZWRpdGFibGVcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4XCJcbiAgICAgIFthdHRyLnRyYW5zbGF0ZV09XCJjb25maWcudHJhbnNsYXRlXCJcbiAgICAgIFthdHRyLnNwZWxsY2hlY2tdPVwiY29uZmlnLnNwZWxsY2hlY2tcIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJjb25maWcuaGVpZ2h0XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHRdPVwiY29uZmlnLm1pbkhlaWdodFwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0XT1cImNvbmZpZy5tYXhIZWlnaHRcIlxuICAgICAgW3N0eWxlLm91dGxpbmVdPVwiY29uZmlnLm91dGxpbmUgPT09IGZhbHNlID8gJ25vbmUnOiB1bmRlZmluZWRcIlxuICAgICAgKGlucHV0KT1cIm9uQ29udGVudENoYW5nZSgkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAoZm9jdXMpPVwib25UZXh0QXJlYUZvY3VzKCRldmVudClcIlxuICAgICAgKGJsdXIpPVwib25UZXh0QXJlYUJsdXIoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiZXhlYygpXCJcbiAgICAgIChrZXl1cCk9XCJleGVjKClcIlxuICAgICAgKG1vdXNlb3V0KT1cIm9uVGV4dEFyZWFNb3VzZU91dCgkZXZlbnQpXCJcbiAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgID5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cImFuZ3VsYXItZWRpdG9yLXBsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfHwgY29uZmlnWydwbGFjZWhvbGRlciddIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
package/esm2020/lib/utils.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export function isDefined(value) {
|
|
2
|
-
return value !== undefined && value !== null;
|
|
3
|
-
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWVkaXRvci9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuIl19
|
package/esm2020/public-api.mjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of angular-editor
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/angular-editor.service';
|
|
5
|
-
export * from './lib/editor/angular-editor.component';
|
|
6
|
-
export * from './lib/ae-button/ae-button.component';
|
|
7
|
-
export * from './lib/ae-toolbar-set/ae-toolbar-set.component';
|
|
8
|
-
export * from './lib/ae-select/ae-select.component';
|
|
9
|
-
export * from './lib/ae-toolbar/ae-toolbar.component';
|
|
10
|
-
export * from './lib/angular-editor.module';
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZWRpdG9yL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYW5ndWxhci1lZGl0b3JcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbmd1bGFyLWVkaXRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkaXRvci9hbmd1bGFyLWVkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWUtYnV0dG9uL2FlLWJ1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWUtdG9vbGJhci1zZXQvYWUtdG9vbGJhci1zZXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FlLXNlbGVjdC9hZS1zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FlLXRvb2xiYXIvYWUtdG9vbGJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYW5ndWxhci1lZGl0b3IubW9kdWxlJztcbmV4cG9ydCB7IEFuZ3VsYXJFZGl0b3JDb25maWcsIEN1c3RvbUNsYXNzIH0gZnJvbSAnLi9saWIvY29uZmlnJztcbiJdfQ==
|