@ajf/material 12.1.3 → 12.1.7
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/bundles/material-barcode.umd.js +3 -7
- package/bundles/material-barcode.umd.js.map +1 -1
- package/bundles/material-calendar.umd.js +5 -17
- package/bundles/material-calendar.umd.js.map +1 -1
- package/bundles/material-checkbox-group.umd.js +4 -14
- package/bundles/material-checkbox-group.umd.js.map +1 -1
- package/bundles/material-form-builder.umd.js +497 -483
- package/bundles/material-form-builder.umd.js.map +1 -1
- package/bundles/material-forms.umd.js +96 -64
- package/bundles/material-forms.umd.js.map +1 -1
- package/bundles/material-image.umd.js +3 -10
- package/bundles/material-image.umd.js.map +1 -1
- package/bundles/material-monaco-editor.umd.js +4 -7
- package/bundles/material-monaco-editor.umd.js.map +1 -1
- package/bundles/material-node-icon.umd.js +3 -10
- package/bundles/material-node-icon.umd.js.map +1 -1
- package/bundles/material-page-slider.umd.js +2 -7
- package/bundles/material-page-slider.umd.js.map +1 -1
- package/bundles/material-reports.umd.js +4 -6
- package/bundles/material-reports.umd.js.map +1 -1
- package/bundles/material-time.umd.js +4 -12
- package/bundles/material-time.umd.js.map +1 -1
- package/calendar/index.metadata.json +1 -1
- package/checkbox-group/index.metadata.json +1 -1
- package/esm2015/barcode/barcode-module.js +3 -7
- package/esm2015/barcode/barcode.js +3 -3
- package/esm2015/calendar/calendar-module.js +4 -14
- package/esm2015/calendar/calendar.js +4 -6
- package/esm2015/checkbox-group/checkbox-group-item.js +3 -3
- package/esm2015/checkbox-group/checkbox-group-module.js +4 -14
- package/esm2015/form-builder/branch-line.js +2 -2
- package/esm2015/form-builder/choices-origin-data-source.js +1 -1
- package/esm2015/form-builder/choices-origin-editor-dialog.js +7 -4
- package/esm2015/form-builder/choices-origin-editor.js +1 -1
- package/esm2015/form-builder/condition-editor-dialog.js +1 -1
- package/esm2015/form-builder/condition-editor.js +9 -8
- package/esm2015/form-builder/form-builder-module.js +29 -14
- package/esm2015/form-builder/form-builder-service.js +126 -125
- package/esm2015/form-builder/form-builder-utils.js +4 -3
- package/esm2015/form-builder/form-builder.js +30 -26
- package/esm2015/form-builder/node-entry.js +7 -5
- package/esm2015/form-builder/node-properties.js +297 -311
- package/esm2015/form-builder/node-type-entry.js +2 -2
- package/esm2015/form-builder/string-identifier-dialog.js +5 -7
- package/esm2015/form-builder/validation-condition-editor-dialog.js +1 -1
- package/esm2015/form-builder/warning-condition-editor-dialog.js +1 -1
- package/esm2015/forms/barcode-field.js +3 -3
- package/esm2015/forms/boolean-field.js +3 -3
- package/esm2015/forms/date-field.js +2 -2
- package/esm2015/forms/date-input-field.js +4 -4
- package/esm2015/forms/empty-field.js +3 -3
- package/esm2015/forms/field-service.js +42 -42
- package/esm2015/forms/field-warning-dialog.js +1 -1
- package/esm2015/forms/field.js +2 -2
- package/esm2015/forms/form.js +2 -2
- package/esm2015/forms/forms-module.js +55 -23
- package/esm2015/forms/input-field.js +2 -2
- package/esm2015/forms/multiple-choice-field.js +3 -3
- package/esm2015/forms/range-field.js +3 -3
- package/esm2015/forms/single-choice-field.js +3 -3
- package/esm2015/forms/table-field.js +3 -3
- package/esm2015/forms/text-field.js +2 -2
- package/esm2015/forms/time-field.js +3 -3
- package/esm2015/forms/video-url-field.js +2 -2
- package/esm2015/forms/warning-alert-service.js +1 -1
- package/esm2015/image/image-module.js +4 -11
- package/esm2015/image/image.js +2 -2
- package/esm2015/monaco-editor/autocomplete-singleton-model.js +3 -2
- package/esm2015/monaco-editor/editor-options-model.js +1 -1
- package/esm2015/monaco-editor/monaco-editor-module.js +3 -7
- package/esm2015/monaco-editor/monaco-editor.js +3 -3
- package/esm2015/node-icon/node-icon-module.js +4 -11
- package/esm2015/node-icon/node-icon.js +1 -1
- package/esm2015/page-slider/page-slider-module.js +3 -8
- package/esm2015/page-slider/page-slider.js +2 -2
- package/esm2015/reports/chart-widget.js +2 -2
- package/esm2015/reports/formula-widget.js +2 -2
- package/esm2015/reports/image-container-widget.js +2 -2
- package/esm2015/reports/image-widget.js +2 -2
- package/esm2015/reports/map-widget.js +2 -2
- package/esm2015/reports/page-break-widget.js +2 -2
- package/esm2015/reports/report.js +2 -2
- package/esm2015/reports/reports-module.js +3 -6
- package/esm2015/reports/table-widget.js +3 -3
- package/esm2015/reports/text-widget.js +2 -2
- package/esm2015/reports/widget.js +3 -2
- package/esm2015/time/time-module.js +4 -12
- package/esm2015/time/time.js +3 -3
- package/fesm2015/barcode.js +3 -7
- package/fesm2015/barcode.js.map +1 -1
- package/fesm2015/calendar.js +5 -17
- package/fesm2015/calendar.js.map +1 -1
- package/fesm2015/checkbox-group.js +4 -14
- package/fesm2015/checkbox-group.js.map +1 -1
- package/fesm2015/form-builder.js +494 -483
- package/fesm2015/form-builder.js.map +1 -1
- package/fesm2015/forms.js +96 -64
- package/fesm2015/forms.js.map +1 -1
- package/fesm2015/image.js +3 -10
- package/fesm2015/image.js.map +1 -1
- package/fesm2015/monaco-editor.js +5 -8
- package/fesm2015/monaco-editor.js.map +1 -1
- package/fesm2015/node-icon.js +3 -10
- package/fesm2015/node-icon.js.map +1 -1
- package/fesm2015/page-slider.js +2 -7
- package/fesm2015/page-slider.js.map +1 -1
- package/fesm2015/reports.js +4 -6
- package/fesm2015/reports.js.map +1 -1
- package/fesm2015/time.js +4 -12
- package/fesm2015/time.js.map +1 -1
- package/form-builder/index.metadata.json +1 -1
- package/forms/index.metadata.json +1 -1
- package/image/index.metadata.json +1 -1
- package/monaco-editor/index.metadata.json +1 -1
- package/node-icon/index.metadata.json +1 -1
- package/package.json +2 -4
- package/page-slider/index.metadata.json +1 -1
- package/reports/index.metadata.json +1 -1
- package/time/index.metadata.json +1 -1
- package/bundles/material-report-builder.umd.js +0 -5814
- package/bundles/material-report-builder.umd.js.map +0 -1
- package/esm2015/report-builder/column.js +0 -97
- package/esm2015/report-builder/condition-editor.js +0 -159
- package/esm2015/report-builder/content.js +0 -255
- package/esm2015/report-builder/custom-widget-dialog.js +0 -51
- package/esm2015/report-builder/custom-widget-toolbar-button.js +0 -70
- package/esm2015/report-builder/custom-widgets-toolbar.js +0 -124
- package/esm2015/report-builder/forms-analyzer-dialog.js +0 -315
- package/esm2015/report-builder/forms-analyzer.js +0 -264
- package/esm2015/report-builder/image-filter.js +0 -32
- package/esm2015/report-builder/image-group.js +0 -106
- package/esm2015/report-builder/index.js +0 -25
- package/esm2015/report-builder/models.js +0 -23
- package/esm2015/report-builder/operations.js +0 -23
- package/esm2015/report-builder/properties.js +0 -765
- package/esm2015/report-builder/public-api.js +0 -26
- package/esm2015/report-builder/quill-editor.js +0 -299
- package/esm2015/report-builder/renderer-widget.js +0 -238
- package/esm2015/report-builder/report-builder-drag-data.js +0 -23
- package/esm2015/report-builder/report-builder-module.js +0 -114
- package/esm2015/report-builder/report-builder-service.js +0 -1685
- package/esm2015/report-builder/report-builder.externs.js +0 -6
- package/esm2015/report-builder/report-builder.js +0 -69
- package/esm2015/report-builder/theme-color-dialog.js +0 -90
- package/esm2015/report-builder/theme-color.js +0 -215
- package/esm2015/report-builder/tokens.js +0 -24
- package/esm2015/report-builder/toolbar-dialog.js +0 -56
- package/esm2015/report-builder/toolbar.js +0 -90
- package/esm2015/report-builder/utils.js +0 -48
- package/esm2015/report-builder/widget-toolbar-button.js +0 -47
- package/esm2015/report-builder/widgets-row-buttons.js +0 -133
- package/esm2015/report-builder/widgets-toolbar.js +0 -79
- package/fesm2015/report-builder.js +0 -5332
- package/fesm2015/report-builder.js.map +0 -1
- package/report-builder/_report-builder.scss +0 -0
- package/report-builder/column.d.ts +0 -63
- package/report-builder/condition-editor.d.ts +0 -67
- package/report-builder/content.d.ts +0 -142
- package/report-builder/custom-widget-dialog.d.ts +0 -31
- package/report-builder/custom-widget-toolbar-button.d.ts +0 -45
- package/report-builder/custom-widgets-toolbar.d.ts +0 -71
- package/report-builder/forms-analyzer-dialog.d.ts +0 -91
- package/report-builder/forms-analyzer.d.ts +0 -102
- package/report-builder/image-filter.d.ts +0 -25
- package/report-builder/image-group.d.ts +0 -69
- package/report-builder/index.d.ts +0 -24
- package/report-builder/index.metadata.json +0 -1
- package/report-builder/models.d.ts +0 -43
- package/report-builder/operations.d.ts +0 -45
- package/report-builder/package.json +0 -9
- package/report-builder/properties.d.ts +0 -365
- package/report-builder/public-api.d.ts +0 -26
- package/report-builder/quill-editor.d.ts +0 -113
- package/report-builder/renderer-widget.d.ts +0 -80
- package/report-builder/report-builder-drag-data.d.ts +0 -32
- package/report-builder/report-builder-module.d.ts +0 -23
- package/report-builder/report-builder-service.d.ts +0 -722
- package/report-builder/report-builder.d.ts +0 -36
- package/report-builder/theme-color-dialog.d.ts +0 -42
- package/report-builder/theme-color.d.ts +0 -108
- package/report-builder/tokens.d.ts +0 -24
- package/report-builder/toolbar-dialog.d.ts +0 -30
- package/report-builder/toolbar.d.ts +0 -48
- package/report-builder/utils.d.ts +0 -29
- package/report-builder/widget-toolbar-button.d.ts +0 -28
- package/report-builder/widgets-row-buttons.d.ts +0 -57
- package/report-builder/widgets-toolbar.d.ts +0 -44
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright (C) Gnucoop soc. coop.
|
|
4
|
-
*
|
|
5
|
-
* This file is part of the Advanced JSON forms (ajf).
|
|
6
|
-
*
|
|
7
|
-
* Advanced JSON forms (ajf) is free software: you can redistribute it and/or
|
|
8
|
-
* modify it under the terms of the GNU Affero General Public License as
|
|
9
|
-
* published by the Free Software Foundation, either version 3 of the License,
|
|
10
|
-
* or (at your option) any later version.
|
|
11
|
-
*
|
|
12
|
-
* Advanced JSON forms (ajf) is distributed in the hope that it will be useful,
|
|
13
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
|
|
15
|
-
* General Public License for more details.
|
|
16
|
-
*
|
|
17
|
-
* You should have received a copy of the GNU Affero General Public License
|
|
18
|
-
* along with Advanced JSON forms (ajf).
|
|
19
|
-
* If not, see http://www.gnu.org/licenses/.
|
|
20
|
-
*
|
|
21
|
-
*/
|
|
22
|
-
export * from './report-builder-module';
|
|
23
|
-
export * from './report-builder-service';
|
|
24
|
-
export * from './report-builder';
|
|
25
|
-
export * from './tokens';
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9yZXBvcnQtYnVpbGRlci9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUdILGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChDKSBHbnVjb29wIHNvYy4gY29vcC5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKS5cbiAqXG4gKiBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSxcbiAqIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvXG4gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKiBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLlxuICpcbiAqL1xuXG5leHBvcnQge0FqZlJlcG9ydHNDb25maWd9IGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVwb3J0LWJ1aWxkZXItbW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVwb3J0LWJ1aWxkZXItc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlcG9ydC1idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbiJdfQ==
|
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright (C) Gnucoop soc. coop.
|
|
4
|
-
*
|
|
5
|
-
* This file is part of the Advanced JSON forms (ajf).
|
|
6
|
-
*
|
|
7
|
-
* Advanced JSON forms (ajf) is free software: you can redistribute it and/or
|
|
8
|
-
* modify it under the terms of the GNU Affero General Public License as
|
|
9
|
-
* published by the Free Software Foundation, either version 3 of the License,
|
|
10
|
-
* or (at your option) any later version.
|
|
11
|
-
*
|
|
12
|
-
* Advanced JSON forms (ajf) is distributed in the hope that it will be useful,
|
|
13
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
|
|
15
|
-
* General Public License for more details.
|
|
16
|
-
*
|
|
17
|
-
* You should have received a copy of the GNU Affero General Public License
|
|
18
|
-
* along with Advanced JSON forms (ajf).
|
|
19
|
-
* If not, see http://www.gnu.org/licenses/.
|
|
20
|
-
*
|
|
21
|
-
*/
|
|
22
|
-
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, Output, Renderer2, ViewEncapsulation } from '@angular/core';
|
|
23
|
-
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
24
|
-
import { default as Quill } from 'quill';
|
|
25
|
-
import { Subscription } from 'rxjs';
|
|
26
|
-
import { AjfReportBuilderService } from './report-builder-service';
|
|
27
|
-
export class AjfQuillEditor {
|
|
28
|
-
constructor(_elementRef, _renderer, _service) {
|
|
29
|
-
this._elementRef = _elementRef;
|
|
30
|
-
this._renderer = _renderer;
|
|
31
|
-
this._service = _service;
|
|
32
|
-
this.emptyArray = [];
|
|
33
|
-
this._init = false;
|
|
34
|
-
this.dateFormats = [
|
|
35
|
-
{
|
|
36
|
-
'label': 'June 23rd 2017, 12:39:12 pm',
|
|
37
|
-
'value': 'MMMM Do YYYY, h:mm:ss a',
|
|
38
|
-
'validator': 'MMMMDoYYYYhmmssa'
|
|
39
|
-
},
|
|
40
|
-
{ 'label': 'Friday', 'value': 'dddd', 'validator': 'dddd' },
|
|
41
|
-
{ 'label': 'Jun 23rd 17', 'value': 'MMM Do YY', 'validator': 'MMMDoYY' }
|
|
42
|
-
];
|
|
43
|
-
this.fonts = [
|
|
44
|
-
false, 'blackr', 'black-italic', 'bold', 'bold-condensed', 'bold-condensed-italic',
|
|
45
|
-
'bold-italic', 'condensed', 'condensed-italic', 'italic', 'light', 'light-italic', 'medium',
|
|
46
|
-
'medium-italic', 'thinr', 'thin-italic'
|
|
47
|
-
];
|
|
48
|
-
this.defaultModules = {
|
|
49
|
-
formula: true,
|
|
50
|
-
toolbar: [
|
|
51
|
-
['formula'], ['bold', 'italic', 'underline', 'strike'],
|
|
52
|
-
// ['blockquote', 'code-block'],
|
|
53
|
-
[{ 'header': 1 }, { 'header': 2 }],
|
|
54
|
-
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
|
|
55
|
-
[{ 'script': 'sub' }, { 'script': 'super' }],
|
|
56
|
-
// [{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent
|
|
57
|
-
// [{ 'direction': 'rtl' }], // text direction
|
|
58
|
-
[{ 'size': ['small', false, 'large', 'huge'] }],
|
|
59
|
-
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
|
|
60
|
-
[
|
|
61
|
-
{ 'color': this.emptyArray.slice() }, { 'background': this.emptyArray.slice() }
|
|
62
|
-
],
|
|
63
|
-
[{ 'font': this.fonts }], [{ 'align': this.emptyArray.slice() }],
|
|
64
|
-
['clean'], // remove formatting button
|
|
65
|
-
// ['link', 'image', 'video'] // link and image, video
|
|
66
|
-
]
|
|
67
|
-
};
|
|
68
|
-
this.font = Quill.import('formats/font');
|
|
69
|
-
this.editorCreated = new EventEmitter();
|
|
70
|
-
this.contentChanged = new EventEmitter();
|
|
71
|
-
this.selectionChanged = new EventEmitter();
|
|
72
|
-
/**
|
|
73
|
-
* this event is fired when the user click on formula button on quill editor rool barƒ
|
|
74
|
-
*
|
|
75
|
-
* @memberof QuillEditorComponent
|
|
76
|
-
*/
|
|
77
|
-
this.formulaClick = new EventEmitter();
|
|
78
|
-
this.onModelChange = () => { };
|
|
79
|
-
this.onModelTouched = () => { };
|
|
80
|
-
this._formulas = [];
|
|
81
|
-
this._formulaTextSub = Subscription.EMPTY;
|
|
82
|
-
this.font.whitelist = this.fonts;
|
|
83
|
-
this.font.whitelist.push('regular');
|
|
84
|
-
this._formulaTextSub = this._service.getFormulaToHtmlEvent().subscribe((event) => {
|
|
85
|
-
// reference is defined only when the user want to edit the formula
|
|
86
|
-
if (event.reference !== undefined) {
|
|
87
|
-
event.reference.innerHTML = event.formula;
|
|
88
|
-
this._renderer.setAttribute(event.reference, 'formula', event.formula);
|
|
89
|
-
const efs = this._formulas.filter(f => f.formula === event.reference);
|
|
90
|
-
let formulaEntry;
|
|
91
|
-
let unlisten;
|
|
92
|
-
if (efs.length > 0) {
|
|
93
|
-
formulaEntry = efs[0];
|
|
94
|
-
unlisten = formulaEntry.unlisten;
|
|
95
|
-
if (unlisten != null) {
|
|
96
|
-
unlisten();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
formulaEntry = { formula: event.reference, unlisten: null };
|
|
101
|
-
this._formulas.push(formulaEntry);
|
|
102
|
-
}
|
|
103
|
-
formulaEntry.unlisten = this._renderer.listen(event.reference, 'click', () => {
|
|
104
|
-
let obj = { 'formula': event.formula, 'reference': event.reference };
|
|
105
|
-
this.formulaClick.emit(obj);
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const quillEditor = this._elementRef.nativeElement.querySelector('.ajf-ql-editor');
|
|
110
|
-
const link = this._renderer.createElement('a');
|
|
111
|
-
this._renderer.setAttribute(link, 'href', 'javascript:void(0)');
|
|
112
|
-
this._renderer.setStyle(link, 'cursor', 'pointer');
|
|
113
|
-
this._renderer.setAttribute(link, 'formula', this.check(event.formula));
|
|
114
|
-
const linkLabel = this._renderer.createText(event.formula);
|
|
115
|
-
this._renderer.appendChild(link, linkLabel);
|
|
116
|
-
// add listener related on the click event of the new formula
|
|
117
|
-
const unlisten = this._renderer.listen(link, 'click', (_) => {
|
|
118
|
-
let obj = { 'formula': this.check(event.formula), 'reference': link };
|
|
119
|
-
this.formulaClick.emit(obj);
|
|
120
|
-
});
|
|
121
|
-
this._renderer.appendChild(quillEditor, link);
|
|
122
|
-
this._formulas.push({ unlisten, formula: link });
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
check(value) {
|
|
127
|
-
for (let i = 0; i < this.dateFormats.length; i++) {
|
|
128
|
-
if (this.dateFormats[i].value == value) {
|
|
129
|
-
return this.dateFormats[i].validator;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return value;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* this function search fomulas inside the init text
|
|
136
|
-
* and allocate the related listener on click event
|
|
137
|
-
*
|
|
138
|
-
* @memberof QuillEditorComponent
|
|
139
|
-
*/
|
|
140
|
-
setHTML() {
|
|
141
|
-
this.writeValue(this.initHTML);
|
|
142
|
-
}
|
|
143
|
-
ngAfterViewInit() {
|
|
144
|
-
const toolbarElem = this._elementRef.nativeElement.querySelector('[ajf-quill-editor-toolbar]');
|
|
145
|
-
let modules = this.modules || this.defaultModules;
|
|
146
|
-
Quill.register(this.font, true);
|
|
147
|
-
if (toolbarElem) {
|
|
148
|
-
modules['toolbar'] = toolbarElem;
|
|
149
|
-
modules['formula'] = true;
|
|
150
|
-
}
|
|
151
|
-
this._elementRef.nativeElement.insertAdjacentHTML('beforeend', '<div quill-editor-element></div>');
|
|
152
|
-
this.editorElem = this._elementRef.nativeElement.querySelector('[quill-editor-element]');
|
|
153
|
-
this.quillEditor = new Quill(this.editorElem, {
|
|
154
|
-
modules: modules,
|
|
155
|
-
placeholder: this.placeholder || 'Insert text here ...',
|
|
156
|
-
readOnly: this.readOnly || false,
|
|
157
|
-
theme: this.theme || 'snow',
|
|
158
|
-
formats: this.formats
|
|
159
|
-
});
|
|
160
|
-
this.editorCreated.emit(this.quillEditor);
|
|
161
|
-
this.setHTML();
|
|
162
|
-
// mark model as touched if editor lost focus
|
|
163
|
-
this.quillEditor.on('selection-change', (range, oldRange, source) => {
|
|
164
|
-
this.selectionChanged.emit({ editor: this.quillEditor, range: range, oldRange: oldRange, source: source });
|
|
165
|
-
if (!range) {
|
|
166
|
-
this.onModelTouched();
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
// update model if text changes
|
|
170
|
-
this.quillEditor.on('text-change', (delta, oldDelta, source) => {
|
|
171
|
-
let html = this.editorElem.children[0].innerHTML;
|
|
172
|
-
const text = this.quillEditor.getText();
|
|
173
|
-
if (html === '<p><br></p>') {
|
|
174
|
-
html = null;
|
|
175
|
-
}
|
|
176
|
-
this.onModelChange(html);
|
|
177
|
-
this.contentChanged.emit({
|
|
178
|
-
editor: this.quillEditor,
|
|
179
|
-
html: html,
|
|
180
|
-
text: text,
|
|
181
|
-
delta: delta,
|
|
182
|
-
oldDelta: oldDelta,
|
|
183
|
-
source: source
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
let elem = this._elementRef.nativeElement.querySelector('.ajf-ql-formula');
|
|
187
|
-
this.listenFunc = this._renderer.listen(elem, 'click', (_) => {
|
|
188
|
-
this.formulaClick.emit();
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
writeValue(currentValue) {
|
|
192
|
-
this.content = currentValue;
|
|
193
|
-
if (this.quillEditor) {
|
|
194
|
-
if (currentValue) {
|
|
195
|
-
if (currentValue == this.initHTML && !this._init) {
|
|
196
|
-
let editor = this._elementRef.nativeElement.querySelector('.ajf-ql-editor');
|
|
197
|
-
editor.innerHTML = this.initHTML;
|
|
198
|
-
let allFormulas = this._elementRef.nativeElement.querySelectorAll('[formula]');
|
|
199
|
-
allFormulas.forEach((elem) => {
|
|
200
|
-
const unlisten = this._renderer.listen(elem, 'click', (_) => {
|
|
201
|
-
let obj = { 'formula': this.check(elem.innerText), 'reference': elem };
|
|
202
|
-
this.formulaClick.emit(obj);
|
|
203
|
-
});
|
|
204
|
-
this._renderer.setStyle(elem, 'cursor', 'pointer');
|
|
205
|
-
this._formulas.push({ unlisten, formula: elem });
|
|
206
|
-
this._init = true;
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
else if (currentValue != this.initHTML) {
|
|
210
|
-
this.quillEditor.pasteHTML(currentValue);
|
|
211
|
-
}
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
this.quillEditor.setText('');
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
registerOnChange(fn) {
|
|
218
|
-
this.onModelChange = fn;
|
|
219
|
-
}
|
|
220
|
-
registerOnTouched(fn) {
|
|
221
|
-
this.onModelTouched = fn;
|
|
222
|
-
}
|
|
223
|
-
validate(_c) {
|
|
224
|
-
if (!this.quillEditor) {
|
|
225
|
-
return null;
|
|
226
|
-
}
|
|
227
|
-
let err = {}, valid = true;
|
|
228
|
-
const textLength = this.quillEditor.getText().trim().length;
|
|
229
|
-
if (this.minLength) {
|
|
230
|
-
err.minLengthError = { given: textLength, minLength: this.minLength };
|
|
231
|
-
valid = textLength >= this.minLength || !textLength;
|
|
232
|
-
}
|
|
233
|
-
if (this.maxLength) {
|
|
234
|
-
err.maxLengthError = { given: textLength, maxLength: this.maxLength };
|
|
235
|
-
valid = textLength <= this.maxLength && valid;
|
|
236
|
-
}
|
|
237
|
-
return valid ? null : err;
|
|
238
|
-
}
|
|
239
|
-
ngOnChanges(changes) {
|
|
240
|
-
if (changes['readOnly'] && this.quillEditor) {
|
|
241
|
-
this.quillEditor.enable(!changes['readOnly'].currentValue);
|
|
242
|
-
}
|
|
243
|
-
if (changes['modules'] && this.quillEditor) {
|
|
244
|
-
Quill.register(this.font, true);
|
|
245
|
-
this.quillEditor = new Quill(this.editorElem, {
|
|
246
|
-
modules: changes['modules']['currentValue'],
|
|
247
|
-
placeholder: this.placeholder || 'Insert text here ...',
|
|
248
|
-
readOnly: this.readOnly || false,
|
|
249
|
-
theme: this.theme || 'snow',
|
|
250
|
-
formats: this.formats
|
|
251
|
-
});
|
|
252
|
-
this._elementRef.nativeElement.children[0].remove();
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
ngOnDestroy() {
|
|
256
|
-
for (let i = 0; i < this._formulas.length; i++) {
|
|
257
|
-
let unlisten = this._formulas[i].unlisten;
|
|
258
|
-
if (unlisten != null) {
|
|
259
|
-
unlisten();
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
this._formulaTextSub.unsubscribe();
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
AjfQuillEditor.decorators = [
|
|
266
|
-
{ type: Component, args: [{
|
|
267
|
-
selector: 'ajf-quill-editor',
|
|
268
|
-
template: `
|
|
269
|
-
<ng-content select="[ajf-quill-editor-toolbar]"></ng-content>
|
|
270
|
-
`,
|
|
271
|
-
providers: [
|
|
272
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AjfQuillEditor), multi: true },
|
|
273
|
-
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => AjfQuillEditor), multi: true }
|
|
274
|
-
],
|
|
275
|
-
encapsulation: ViewEncapsulation.None,
|
|
276
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
277
|
-
styles: ["ajf-quill-editor .ajf-ql-container .ajf-ql-editor{min-height:200px;width:500px !important;padding-bottom:50px}\n"]
|
|
278
|
-
},] }
|
|
279
|
-
];
|
|
280
|
-
AjfQuillEditor.ctorParameters = () => [
|
|
281
|
-
{ type: ElementRef },
|
|
282
|
-
{ type: Renderer2 },
|
|
283
|
-
{ type: AjfReportBuilderService }
|
|
284
|
-
];
|
|
285
|
-
AjfQuillEditor.propDecorators = {
|
|
286
|
-
theme: [{ type: Input }],
|
|
287
|
-
modules: [{ type: Input }],
|
|
288
|
-
readOnly: [{ type: Input }],
|
|
289
|
-
placeholder: [{ type: Input }],
|
|
290
|
-
maxLength: [{ type: Input }],
|
|
291
|
-
minLength: [{ type: Input }],
|
|
292
|
-
formats: [{ type: Input }],
|
|
293
|
-
initHTML: [{ type: Input }],
|
|
294
|
-
editorCreated: [{ type: Output }],
|
|
295
|
-
contentChanged: [{ type: Output }],
|
|
296
|
-
selectionChanged: [{ type: Output }],
|
|
297
|
-
formulaClick: [{ type: Output }]
|
|
298
|
-
};
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3JlcG9ydC1idWlsZGVyL3F1aWxsLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsRUFFbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsT0FBTyxJQUFJLEtBQUssRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBZ0JqRSxNQUFNLE9BQU8sY0FBYztJQXVGekIsWUFDWSxXQUF1QixFQUFVLFNBQW9CLEVBQ3JELFFBQWlDO1FBRGpDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNyRCxhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQXJGN0MsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQU1mLFVBQUssR0FBWSxLQUFLLENBQUM7UUFFL0IsZ0JBQVcsR0FBRztZQUNaO2dCQUNFLE9BQU8sRUFBRSw2QkFBNkI7Z0JBQ3RDLE9BQU8sRUFBRSx5QkFBeUI7Z0JBQ2xDLFdBQVcsRUFBRSxrQkFBa0I7YUFDaEM7WUFDRCxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFDO1lBQ3pELEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFP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QVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztpQkFDckY7Z0JBRUQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7O1lBcENDLFVBQVU7WUFPVixTQUFTO1lBY0gsdUJBQXVCOzs7b0JBMkU1QixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzswQkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7NEJBRUwsTUFBTTs2QkFDTixNQUFNOytCQUNOLE1BQU07MkJBUU4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoQykgR251Y29vcCBzb2MuIGNvb3AuXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsXG4gKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICogSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy5cbiAqXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2RlZmF1bHQgYXMgUXVpbGx9IGZyb20gJ3F1aWxsJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBamZSZXBvcnRCdWlsZGVyU2VydmljZX0gZnJvbSAnLi9yZXBvcnQtYnVpbGRlci1zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhamYtcXVpbGwtZWRpdG9yJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYWpmLXF1aWxsLWVkaXRvci10b29sYmFyXVwiPjwvbmctY29udGVudD5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBamZRdWlsbEVkaXRvciksIG11bHRpOiB0cnVlfSxcbiAgICB7cHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWpmUXVpbGxFZGl0b3IpLCBtdWx0aTogdHJ1ZX1cbiAgXSxcbiAgc3R5bGVVcmxzOiBbJ3F1aWxsLWVkaXRvci5jc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQWpmUXVpbGxFZGl0b3IgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3Ige1xuICBxdWlsbEVkaXRvcjogYW55O1xuICBlZGl0b3JFbGVtOiBIVE1MRWxlbWVudDtcbiAgZW1wdHlBcnJheTogYW55W10gPSBbXTtcbiAgY29udGVudDogYW55O1xuXG4gIGxpc3RlbkZ1bmM6IEZ1bmN0aW9uO1xuXG4gIHByZXZpZXdFbGVtRm9ybXVsYTogYW55O1xuICBwcml2YXRlIF9pbml0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgZGF0ZUZvcm1hdHMgPSBbXG4gICAge1xuICAgICAgJ2xhYmVsJzogJ0p1bmUgMjNyZCAyMDE3LCAxMjozOToxMiBwbScsXG4gICAgICAndmFsdWUnOiAnTU1NTSBEbyBZWVlZLCBoOm1tOnNzIGEnLFxuICAgICAgJ3ZhbGlkYXRvcic6ICdNTU1NRG9ZWVlZaG1tc3NhJ1xuICAgIH0sXG4gICAgeydsYWJlbCc6ICdGcmlkYXknLCAndmFsdWUnOiAnZGRkZCcsICd2YWxpZGF0b3InOiAnZGRkZCd9LFxuICAgIHsnbGFiZWwnOiAnSnVuIDIzcmQgMTcnLCAndmFsdWUnOiAnTU1NIERvIFlZJywgJ3ZhbGlkYXRvcic6ICdNTU1Eb1lZJ31cbiAgXTtcblxuXG4gIGZvbnRzID0gW1xuICAgIGZhbHNlLCAnYmxhY2tyJywgJ2JsYWNrLWl0YWxpYycsICdib2xkJywgJ2JvbGQtY29uZGVuc2VkJywgJ2JvbGQtY29uZGVuc2VkLWl0YWxpYycsXG4gICAgJ2JvbGQtaXRhbGljJywgJ2NvbmRlbnNlZCcsICdjb25kZW5zZWQtaXRhbGljJywgJ2l0YWxpYycsICdsaWdodCcsICdsaWdodC1pdGFsaWMnLCAnbWVkaXVtJyxcbiAgICAnbWVkaXVtLWl0YWxpYycsICd0aGlucicsICd0aGluLWl0YWxpYydcbiAgXTtcblxuICBkZWZhdWx0TW9kdWxlcyA9IHtcbiAgICBmb3JtdWxhOiB0cnVlLFxuICAgIHRvb2xiYXI6XG4gICAgICAgIFtcbiAgICAgICAgICBbJ2Zvcm11bGEnXSwgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnc3RyaWtlJ10sICAvLyB0b2dnbGVkIGJ1dHRvbnNcbiAgICAgICAgICAvLyBbJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jayddLFxuXG4gICAgICAgICAgW3snaGVhZGVyJzogMX0sIHsnaGVhZGVyJzogMn1dLCAgLy8gY3VzdG9tIGJ1dHRvbiB2YWx1ZXNcbiAgICAgICAgICBbeydsaXN0JzogJ29yZGVyZWQnfSwgeydsaXN0JzogJ2J1bGxldCd9XSxcbiAgICAgICAgICBbeydzY3JpcHQnOiAnc3ViJ30sIHsnc2NyaXB0JzogJ3N1cGVyJ31dLCAgLy8gc3VwZXJzY3JpcHQvc3Vic2NyaXB0XG4gICAgICAgICAgLy8gW3sgJ2luZGVudCc6ICctMSd9LCB7ICdpbmRlbnQnOiAnKzEnIH1dLCAgICAgICAgICAvLyBvdXRkZW50L2luZGVudFxuICAgICAgICAgIC8vIFt7ICdkaXJlY3Rpb24nOiAncnRsJyB9XSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCBkaXJlY3Rpb25cblxuICAgICAgICAgIFt7J3NpemUnOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ119XSwgIC8vIGN1c3RvbSBkcm9wZG93blxuICAgICAgICAgIFt7J2hlYWRlcic6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV19XSxcblxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsnY29sb3InOiB0aGlzLmVtcHR5QXJyYXkuc2xpY2UoKX0sIHsnYmFja2dyb3VuZCc6IHRoaXMuZW1wdHlBcnJheS5zbGljZSgpfVxuICAgICAgICAgIF0sICAvLyBkcm9wZG93biB3aXRoIGRlZmF1bHRzIGZyb20gdGhlbWVcbiAgICAgICAgICBbeydmb250JzogdGhpcy5mb250c31dLCBbeydhbGlnbic6IHRoaXMuZW1wdHlBcnJheS5zbGljZSgpfV0sXG5cbiAgICAgICAgICBbJ2NsZWFuJ10sICAvLyByZW1vdmUgZm9ybWF0dGluZyBidXR0b25cblxuICAgICAgICAgIC8vIFsnbGluaycsICdpbWFnZScsICd2aWRlbyddICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgYW5kIGltYWdlLCB2aWRlb1xuICAgICAgICBdXG4gIH07XG5cbiAgZm9udCA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9mb250Jyk7XG5cblxuICBASW5wdXQoKSB0aGVtZTogc3RyaW5nO1xuICBASW5wdXQoKSBtb2R1bGVzOiBPYmplY3Q7XG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlcjtcbiAgQElucHV0KCkgbWluTGVuZ3RoOiBudW1iZXI7XG4gIEBJbnB1dCgpIGZvcm1hdHM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBpbml0SFRNTDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBlZGl0b3JDcmVhdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbnRlbnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgLyoqXG4gICAqIHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjbGljayBvbiBmb3JtdWxhIGJ1dHRvbiBvbiBxdWlsbCBlZGl0b3Igcm9vbCBiYXLGklxuICAgKlxuICAgKiBAbWVtYmVyb2YgUXVpbGxFZGl0b3JDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBmb3JtdWxhQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblxuICBvbk1vZGVsQ2hhbmdlOiBGdW5jdGlvbiA9ICgpID0+IHt9O1xuICBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICBwcml2YXRlIF9mb3JtdWxhczoge2Zvcm11bGE6IGFueSwgdW5saXN0ZW46IEZ1bmN0aW9ufG51bGx9W10gPSBbXTtcbiAgcHJpdmF0ZSBfZm9ybXVsYVRleHRTdWI6IFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICBwcml2YXRlIF9zZXJ2aWNlOiBBamZSZXBvcnRCdWlsZGVyU2VydmljZSkge1xuICAgIHRoaXMuZm9udC53aGl0ZWxpc3QgPSB0aGlzLmZvbnRzO1xuICAgIHRoaXMuZm9udC53aGl0ZWxpc3QucHVzaCgncmVndWxhcicpO1xuXG4gICAgdGhpcy5fZm9ybXVsYVRleHRTdWIgPSB0aGlzLl9zZXJ2aWNlLmdldEZvcm11bGFUb0h0bWxFdmVudCgpLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgLy8gcmVmZXJlbmNlIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSB1c2VyIHdhbnQgdG8gZWRpdCB0aGUgZm9ybXVsYVxuICAgICAgaWYgKGV2ZW50LnJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV2ZW50LnJlZmVyZW5jZS5pbm5lckhUTUwgPSBldmVudC5mb3JtdWxhO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZXZlbnQucmVmZXJlbmNlLCAnZm9ybXVsYScsIGV2ZW50LmZvcm11bGEpO1xuICAgICAgICBjb25zdCBlZnMgPSB0aGlzLl9mb3JtdWxhcy5maWx0ZXIoZiA9PiBmLmZvcm11bGEgPT09IGV2ZW50LnJlZmVyZW5jZSk7XG4gICAgICAgIGxldCBmb3JtdWxhRW50cnk7XG4gICAgICAgIGxldCB1bmxpc3RlbjtcbiAgICAgICAgaWYgKGVmcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9ybXVsYUVudHJ5ID0gZWZzWzBdO1xuICAgICAgICAgIHVubGlzdGVuID0gZm9ybXVsYUVudHJ5LnVubGlzdGVuO1xuICAgICAgICAgIGlmICh1bmxpc3RlbiAhPSBudWxsKSB7XG4gICAgICAgICAgICB1bmxpc3RlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtdWxhRW50cnkgPSB7Zm9ybXVsYTogZXZlbnQucmVmZXJlbmNlLCB1bmxpc3RlbjogbnVsbH07XG4gICAgICAgICAgdGhpcy5fZm9ybXVsYXMucHVzaChmb3JtdWxhRW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm11bGFFbnRyeS51bmxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihldmVudC5yZWZlcmVuY2UsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0geydmb3JtdWxhJzogZXZlbnQuZm9ybXVsYSwgJ3JlZmVyZW5jZSc6IGV2ZW50LnJlZmVyZW5jZX07XG4gICAgICAgICAgdGhpcy5mb3JtdWxhQ2xpY2suZW1pdChvYmopO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHF1aWxsRWRpdG9yID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hamYtcWwtZWRpdG9yJyk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUobGluaywgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAnZm9ybXVsYScsIHRoaXMuY2hlY2soZXZlbnQuZm9ybXVsYSkpO1xuICAgICAgICBjb25zdCBsaW5rTGFiZWwgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVUZXh0KGV2ZW50LmZvcm11bGEpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChsaW5rLCBsaW5rTGFiZWwpO1xuICAgICAgICAvLyBhZGQgbGlzdGVuZXIgcmVsYXRlZCBvbiB0aGUgY2xpY2sgZXZlbnQgb2YgdGhlIG5ldyBmb3JtdWxhXG4gICAgICAgIGNvbnN0IHVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKGxpbmssICdjbGljaycsIChfKSA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IHsnZm9ybXVsYSc6IHRoaXMuY2hlY2soZXZlbnQuZm9ybXVsYSksICdyZWZlcmVuY2UnOiBsaW5rfTtcbiAgICAgICAgICB0aGlzLmZvcm11bGFDbGljay5lbWl0KG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChxdWlsbEVkaXRvciwgbGluayk7XG4gICAgICAgIHRoaXMuX2Zvcm11bGFzLnB1c2goe3VubGlzdGVuLCBmb3JtdWxhOiBsaW5rfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGVjayh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0ZUZvcm1hdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmRhdGVGb3JtYXRzW2ldLnZhbHVlID09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXRzW2ldLnZhbGlkYXRvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDxzdHJpbmc+dmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgZnVuY3Rpb24gc2VhcmNoIGZvbXVsYXMgaW5zaWRlIHRoZSBpbml0IHRleHRcbiAgICogYW5kIGFsbG9jYXRlIHRoZSByZWxhdGVkIGxpc3RlbmVyIG9uIGNsaWNrIGV2ZW50XG4gICAqXG4gICAqIEBtZW1iZXJvZiBRdWlsbEVkaXRvckNvbXBvbmVudFxuICAgKi9cbiAgc2V0SFRNTCgpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5pbml0SFRNTCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgdG9vbGJhckVsZW0gPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2FqZi1xdWlsbC1lZGl0b3ItdG9vbGJhcl0nKTtcbiAgICBsZXQgbW9kdWxlczogYW55ID0gdGhpcy5tb2R1bGVzIHx8IHRoaXMuZGVmYXVsdE1vZHVsZXM7XG5cbiAgICBRdWlsbC5yZWdpc3Rlcih0aGlzLmZvbnQsIHRydWUpO1xuXG4gICAgaWYgKHRvb2xiYXJFbGVtKSB7XG4gICAgICBtb2R1bGVzWyd0b29sYmFyJ10gPSB0b29sYmFyRWxlbTtcbiAgICAgIG1vZHVsZXNbJ2Zvcm11bGEnXSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICAgICdiZWZvcmVlbmQnLCAnPGRpdiBxdWlsbC1lZGl0b3ItZWxlbWVudD48L2Rpdj4nKTtcblxuICAgIHRoaXMuZWRpdG9yRWxlbSA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcXVpbGwtZWRpdG9yLWVsZW1lbnRdJyk7XG5cbiAgICB0aGlzLnF1aWxsRWRpdG9yID0gbmV3IFF1aWxsKHRoaXMuZWRpdG9yRWxlbSwge1xuICAgICAgbW9kdWxlczogbW9kdWxlcyxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnBsYWNlaG9sZGVyIHx8ICdJbnNlcnQgdGV4dCBoZXJlIC4uLicsXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSB8fCBmYWxzZSxcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lIHx8ICdzbm93JyxcbiAgICAgIGZvcm1hdHM6IHRoaXMuZm9ybWF0c1xuICAgIH0pO1xuXG5cbiAgICB0aGlzLmVkaXRvckNyZWF0ZWQuZW1pdCh0aGlzLnF1aWxsRWRpdG9yKTtcbiAgICB0aGlzLnNldEhUTUwoKTtcblxuICAgIC8vIG1hcmsgbW9kZWwgYXMgdG91Y2hlZCBpZiBlZGl0b3IgbG9zdCBmb2N1c1xuICAgIHRoaXMucXVpbGxFZGl0b3Iub24oJ3NlbGVjdGlvbi1jaGFuZ2UnLCAocmFuZ2U6IGFueSwgb2xkUmFuZ2U6IGFueSwgc291cmNlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KFxuICAgICAgICAgIHtlZGl0b3I6IHRoaXMucXVpbGxFZGl0b3IsIHJhbmdlOiByYW5nZSwgb2xkUmFuZ2U6IG9sZFJhbmdlLCBzb3VyY2U6IHNvdXJjZX0pO1xuXG4gICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHVwZGF0ZSBtb2RlbCBpZiB0ZXh0IGNoYW5nZXNcbiAgICB0aGlzLnF1aWxsRWRpdG9yLm9uKCd0ZXh0LWNoYW5nZScsIChkZWx0YTogYW55LCBvbGREZWx0YTogYW55LCBzb3VyY2U6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGh0bWw6IGFueSA9IHRoaXMuZWRpdG9yRWxlbS5jaGlsZHJlblswXS5pbm5lckhUTUw7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5xdWlsbEVkaXRvci5nZXRUZXh0KCk7XG5cbiAgICAgIGlmIChodG1sID09PSAnPHA+PGJyPjwvcD4nKSB7XG4gICAgICAgIGh0bWwgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoaHRtbCk7XG5cbiAgICAgIHRoaXMuY29udGVudENoYW5nZWQuZW1pdCh7XG4gICAgICAgIGVkaXRvcjogdGhpcy5xdWlsbEVkaXRvcixcbiAgICAgICAgaHRtbDogaHRtbCxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgZGVsdGE6IGRlbHRhLFxuICAgICAgICBvbGREZWx0YTogb2xkRGVsdGEsXG4gICAgICAgIHNvdXJjZTogc291cmNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGxldCBlbGVtID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hamYtcWwtZm9ybXVsYScpO1xuICAgIHRoaXMubGlzdGVuRnVuYyA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihlbGVtLCAnY2xpY2snLCAoXykgPT4ge1xuICAgICAgdGhpcy5mb3JtdWxhQ2xpY2suZW1pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShjdXJyZW50VmFsdWU6IGFueSkge1xuICAgIHRoaXMuY29udGVudCA9IGN1cnJlbnRWYWx1ZTtcblxuICAgIGlmICh0aGlzLnF1aWxsRWRpdG9yKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT0gdGhpcy5pbml0SFRNTCAmJiAhdGhpcy5faW5pdCkge1xuICAgICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFqZi1xbC1lZGl0b3InKTtcbiAgICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5pbml0SFRNTDtcbiAgICAgICAgICBsZXQgYWxsRm9ybXVsYXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2Zvcm11bGFdJyk7XG4gICAgICAgICAgYWxsRm9ybXVsYXMuZm9yRWFjaCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bmxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihlbGVtLCAnY2xpY2snLCAoXykgPT4ge1xuICAgICAgICAgICAgICBsZXQgb2JqID0geydmb3JtdWxhJzogdGhpcy5jaGVjayhlbGVtLmlubmVyVGV4dCksICdyZWZlcmVuY2UnOiBlbGVtfTtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtdWxhQ2xpY2suZW1pdChvYmopO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShlbGVtLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm11bGFzLnB1c2goe3VubGlzdGVuLCBmb3JtdWxhOiBlbGVtfSk7XG4gICAgICAgICAgICB0aGlzLl9pbml0ID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUgIT0gdGhpcy5pbml0SFRNTCkge1xuICAgICAgICAgIHRoaXMucXVpbGxFZGl0b3IucGFzdGVIVE1MKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5xdWlsbEVkaXRvci5zZXRUZXh0KCcnKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgdmFsaWRhdGUoX2M6IEZvcm1Db250cm9sKSB7XG4gICAgaWYgKCF0aGlzLnF1aWxsRWRpdG9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgZXJyOiB7XG4gICAgICBtaW5MZW5ndGhFcnJvcj86IHtnaXZlbjogbnVtYmVyLCBtaW5MZW5ndGg6IG51bWJlcn07XG4gICAgICBtYXhMZW5ndGhFcnJvcj86IHtnaXZlbjogbnVtYmVyLCBtYXhMZW5ndGg6IG51bWJlcn07XG4gICAgfSA9IHt9LFxuICB2YWxpZCA9IHRydWU7XG5cbiAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGhpcy5xdWlsbEVkaXRvci5nZXRUZXh0KCkudHJpbSgpLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgZXJyLm1pbkxlbmd0aEVycm9yID0ge2dpdmVuOiB0ZXh0TGVuZ3RoLCBtaW5MZW5ndGg6IHRoaXMubWluTGVuZ3RofTtcblxuICAgICAgdmFsaWQgPSB0ZXh0TGVuZ3RoID49IHRoaXMubWluTGVuZ3RoIHx8ICF0ZXh0TGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heExlbmd0aCkge1xuICAgICAgZXJyLm1heExlbmd0aEVycm9yID0ge2dpdmVuOiB0ZXh0TGVuZ3RoLCBtYXhMZW5ndGg6IHRoaXMubWF4TGVuZ3RofTtcblxuICAgICAgdmFsaWQgPSB0ZXh0TGVuZ3RoIDw9IHRoaXMubWF4TGVuZ3RoICYmIHZhbGlkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZCA/IG51bGwgOiBlcnI7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3JlYWRPbmx5J10gJiYgdGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgdGhpcy5xdWlsbEVkaXRvci5lbmFibGUoIWNoYW5nZXNbJ3JlYWRPbmx5J10uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ21vZHVsZXMnXSAmJiB0aGlzLnF1aWxsRWRpdG9yKSB7XG4gICAgICBRdWlsbC5yZWdpc3Rlcih0aGlzLmZvbnQsIHRydWUpO1xuICAgICAgdGhpcy5xdWlsbEVkaXRvciA9IG5ldyBRdWlsbCh0aGlzLmVkaXRvckVsZW0sIHtcbiAgICAgICAgbW9kdWxlczogY2hhbmdlc1snbW9kdWxlcyddWydjdXJyZW50VmFsdWUnXSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIgfHwgJ0luc2VydCB0ZXh0IGhlcmUgLi4uJyxcbiAgICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHkgfHwgZmFsc2UsXG4gICAgICAgIHRoZW1lOiB0aGlzLnRoZW1lIHx8ICdzbm93JyxcbiAgICAgICAgZm9ybWF0czogdGhpcy5mb3JtYXRzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5yZW1vdmUoKTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9mb3JtdWxhcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHVubGlzdGVuID0gdGhpcy5fZm9ybXVsYXNbaV0udW5saXN0ZW47XG4gICAgICBpZiAodW5saXN0ZW4gIT0gbnVsbCkge1xuICAgICAgICB1bmxpc3RlbigpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9mb3JtdWxhVGV4dFN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|