@ajf/material 13.0.0-next.9 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{report-builder/index.d.ts → barcode/barcode_public_index.d.ts} +1 -1
- package/barcode/index.d.ts +19 -1
- package/barcode/package.json +2 -2
- package/calendar/calendar_public_index.d.ts +4 -0
- package/calendar/index.d.ts +19 -1
- package/calendar/package.json +2 -2
- package/checkbox-group/checkbox-group_public_index.d.ts +4 -0
- package/checkbox-group/index.d.ts +19 -1
- package/checkbox-group/package.json +2 -2
- package/esm2020/barcode/barcode-module.mjs +7 -11
- package/esm2020/barcode/barcode.mjs +6 -6
- package/esm2020/barcode/barcode_public_index.mjs +5 -0
- package/esm2020/barcode/index.mjs +20 -2
- package/esm2020/calendar/calendar-module.mjs +8 -28
- package/esm2020/calendar/calendar.mjs +7 -11
- package/esm2020/calendar/calendar_public_index.mjs +5 -0
- package/esm2020/calendar/index.mjs +20 -2
- package/esm2020/checkbox-group/checkbox-group-item.mjs +6 -6
- package/esm2020/checkbox-group/checkbox-group-module.mjs +8 -27
- package/esm2020/checkbox-group/checkbox-group_public_index.mjs +5 -0
- package/esm2020/checkbox-group/index.mjs +20 -2
- package/esm2020/form-builder/branch-line.mjs +5 -5
- package/esm2020/form-builder/choices-origin-data-source.mjs +1 -1
- package/esm2020/form-builder/choices-origin-editor-dialog.mjs +10 -7
- package/esm2020/form-builder/choices-origin-editor.mjs +4 -4
- package/esm2020/form-builder/condition-editor-dialog.mjs +4 -4
- package/esm2020/form-builder/condition-editor.mjs +12 -11
- package/esm2020/form-builder/form-builder-module.mjs +85 -34
- package/esm2020/form-builder/form-builder-service.mjs +135 -128
- package/esm2020/form-builder/form-builder-utils.mjs +4 -3
- package/esm2020/form-builder/form-builder.mjs +33 -29
- package/esm2020/form-builder/form-builder_public_index.mjs +5 -0
- package/esm2020/form-builder/index.mjs +20 -2
- package/esm2020/form-builder/node-entry.mjs +10 -8
- package/esm2020/form-builder/node-properties.mjs +320 -315
- package/esm2020/form-builder/node-type-entry.mjs +5 -5
- package/esm2020/form-builder/string-identifier-dialog.mjs +8 -10
- package/esm2020/form-builder/validation-condition-editor-dialog.mjs +4 -4
- package/esm2020/form-builder/warning-condition-editor-dialog.mjs +4 -4
- package/esm2020/forms/barcode-field.mjs +6 -6
- package/esm2020/forms/boolean-field.mjs +6 -6
- package/esm2020/forms/date-field.mjs +5 -5
- package/esm2020/forms/date-input-field.mjs +6 -6
- package/esm2020/forms/empty-field.mjs +6 -6
- package/esm2020/forms/field-service.mjs +45 -45
- package/esm2020/forms/field-warning-dialog.mjs +4 -4
- package/esm2020/forms/field.mjs +5 -5
- package/esm2020/forms/form.mjs +5 -5
- package/esm2020/forms/forms-module.mjs +119 -43
- package/esm2020/forms/forms_public_index.mjs +5 -0
- package/esm2020/forms/index.mjs +20 -2
- package/esm2020/forms/input-field.mjs +5 -5
- package/esm2020/forms/multiple-choice-field.mjs +6 -6
- package/esm2020/forms/range-field.mjs +6 -6
- package/esm2020/forms/single-choice-field.mjs +6 -6
- package/esm2020/forms/table-field.mjs +6 -6
- package/esm2020/forms/text-field.mjs +5 -5
- package/esm2020/forms/time-field.mjs +6 -6
- package/esm2020/forms/video-url-field.mjs +5 -5
- package/esm2020/forms/warning-alert-service.mjs +4 -4
- package/esm2020/image/image-module.mjs +8 -19
- package/esm2020/image/image.mjs +5 -5
- package/esm2020/image/image_public_index.mjs +5 -0
- package/esm2020/image/index.mjs +20 -2
- package/esm2020/monaco-editor/autocomplete-singleton-model.mjs +3 -2
- package/esm2020/monaco-editor/editor-options-model.mjs +1 -1
- package/esm2020/monaco-editor/index.mjs +20 -2
- package/esm2020/monaco-editor/monaco-editor-module.mjs +7 -11
- package/esm2020/monaco-editor/monaco-editor.mjs +6 -6
- package/esm2020/monaco-editor/monaco-editor_public_index.mjs +5 -0
- package/esm2020/node-icon/index.mjs +20 -2
- package/esm2020/node-icon/node-icon-module.mjs +8 -19
- package/esm2020/node-icon/node-icon.mjs +4 -4
- package/esm2020/node-icon/node-icon_public_index.mjs +5 -0
- package/esm2020/page-slider/index.mjs +20 -2
- package/esm2020/page-slider/page-slider-module.mjs +8 -14
- package/esm2020/page-slider/page-slider.mjs +5 -5
- package/esm2020/page-slider/page-slider_public_index.mjs +5 -0
- package/esm2020/reports/chart-widget.mjs +5 -5
- package/esm2020/reports/filter-widget.mjs +71 -0
- package/esm2020/reports/formula-widget.mjs +5 -5
- package/esm2020/reports/image-container-widget.mjs +5 -5
- package/esm2020/reports/image-widget.mjs +5 -5
- package/esm2020/reports/index.mjs +20 -2
- package/esm2020/reports/map-widget.mjs +5 -5
- package/esm2020/reports/page-break-widget.mjs +5 -5
- package/esm2020/reports/public-api.mjs +2 -1
- package/esm2020/reports/report.mjs +5 -5
- package/esm2020/reports/reports-module.mjs +15 -12
- package/esm2020/reports/reports_public_index.mjs +5 -0
- package/esm2020/reports/table-widget.mjs +6 -6
- package/esm2020/reports/text-widget.mjs +5 -5
- package/esm2020/reports/widget.mjs +19 -16
- package/esm2020/time/index.mjs +20 -2
- package/esm2020/time/time-module.mjs +8 -22
- package/esm2020/time/time.mjs +6 -6
- package/esm2020/time/time_public_index.mjs +5 -0
- package/fesm2015/barcode.mjs +32 -14
- package/fesm2015/barcode.mjs.map +1 -1
- package/fesm2015/calendar.mjs +34 -36
- package/fesm2015/calendar.mjs.map +1 -1
- package/fesm2015/checkbox-group.mjs +33 -30
- package/fesm2015/checkbox-group.mjs.map +1 -1
- package/fesm2015/form-builder.mjs +638 -544
- package/fesm2015/form-builder.mjs.map +1 -1
- package/fesm2015/forms.mjs +235 -137
- package/fesm2015/forms.mjs.map +1 -1
- package/fesm2015/image.mjs +32 -21
- package/fesm2015/image.mjs.map +1 -1
- package/fesm2015/monaco-editor.mjs +34 -15
- package/fesm2015/monaco-editor.mjs.map +1 -1
- package/fesm2015/node-icon.mjs +32 -21
- package/fesm2015/node-icon.mjs.map +1 -1
- package/fesm2015/page-slider.mjs +32 -16
- package/fesm2015/page-slider.mjs.map +1 -1
- package/fesm2015/reports.mjs +156 -66
- package/fesm2015/reports.mjs.map +1 -1
- package/fesm2015/time.mjs +33 -25
- package/fesm2015/time.mjs.map +1 -1
- package/fesm2020/barcode.mjs +32 -14
- package/fesm2020/barcode.mjs.map +1 -1
- package/fesm2020/calendar.mjs +34 -36
- package/fesm2020/calendar.mjs.map +1 -1
- package/fesm2020/checkbox-group.mjs +33 -30
- package/fesm2020/checkbox-group.mjs.map +1 -1
- package/fesm2020/form-builder.mjs +638 -544
- package/fesm2020/form-builder.mjs.map +1 -1
- package/fesm2020/forms.mjs +235 -137
- package/fesm2020/forms.mjs.map +1 -1
- package/fesm2020/image.mjs +32 -21
- package/fesm2020/image.mjs.map +1 -1
- package/fesm2020/monaco-editor.mjs +34 -15
- package/fesm2020/monaco-editor.mjs.map +1 -1
- package/fesm2020/node-icon.mjs +32 -21
- package/fesm2020/node-icon.mjs.map +1 -1
- package/fesm2020/page-slider.mjs +32 -16
- package/fesm2020/page-slider.mjs.map +1 -1
- package/fesm2020/reports.mjs +156 -66
- package/fesm2020/reports.mjs.map +1 -1
- package/fesm2020/time.mjs +33 -25
- package/fesm2020/time.mjs.map +1 -1
- package/form-builder/form-builder_public_index.d.ts +4 -0
- package/form-builder/index.d.ts +19 -1
- package/form-builder/node-properties.d.ts +1 -0
- package/form-builder/package.json +2 -2
- package/forms/forms_public_index.d.ts +4 -0
- package/forms/index.d.ts +19 -1
- package/forms/package.json +2 -2
- package/image/image_public_index.d.ts +4 -0
- package/image/index.d.ts +19 -1
- package/image/package.json +2 -2
- package/monaco-editor/index.d.ts +19 -1
- package/monaco-editor/monaco-editor_public_index.d.ts +4 -0
- package/monaco-editor/package.json +2 -2
- package/node-icon/index.d.ts +19 -1
- package/node-icon/node-icon_public_index.d.ts +4 -0
- package/node-icon/package.json +2 -2
- package/package.json +26 -36
- package/page-slider/index.d.ts +19 -1
- package/page-slider/package.json +2 -2
- package/page-slider/page-slider_public_index.d.ts +4 -0
- package/reports/filter-widget.d.ts +37 -0
- package/reports/index.d.ts +19 -1
- package/reports/package.json +2 -2
- package/reports/public-api.d.ts +1 -0
- package/reports/reports-module.d.ts +21 -19
- package/reports/reports_public_index.d.ts +4 -0
- package/time/index.d.ts +19 -1
- package/time/package.json +2 -2
- package/time/time_public_index.d.ts +4 -0
- package/esm2020/report-builder/column.mjs +0 -76
- package/esm2020/report-builder/condition-editor.mjs +0 -162
- package/esm2020/report-builder/content.mjs +0 -256
- package/esm2020/report-builder/custom-widget-dialog.mjs +0 -50
- package/esm2020/report-builder/custom-widget-toolbar-button.mjs +0 -67
- package/esm2020/report-builder/custom-widgets-toolbar.mjs +0 -124
- package/esm2020/report-builder/forms-analyzer-dialog.mjs +0 -328
- package/esm2020/report-builder/forms-analyzer.mjs +0 -244
- package/esm2020/report-builder/image-filter.mjs +0 -38
- package/esm2020/report-builder/image-group.mjs +0 -112
- package/esm2020/report-builder/index.mjs +0 -5
- package/esm2020/report-builder/models.mjs +0 -23
- package/esm2020/report-builder/operations.mjs +0 -23
- package/esm2020/report-builder/properties.mjs +0 -761
- package/esm2020/report-builder/public-api.mjs +0 -26
- package/esm2020/report-builder/quill-editor.mjs +0 -307
- package/esm2020/report-builder/renderer-widget.mjs +0 -243
- package/esm2020/report-builder/report-builder-drag-data.mjs +0 -23
- package/esm2020/report-builder/report-builder-module.mjs +0 -155
- package/esm2020/report-builder/report-builder-service.mjs +0 -1690
- package/esm2020/report-builder/report-builder.mjs +0 -51
- package/esm2020/report-builder/theme-color-dialog.mjs +0 -67
- package/esm2020/report-builder/theme-color.mjs +0 -196
- package/esm2020/report-builder/tokens.mjs +0 -24
- package/esm2020/report-builder/toolbar-dialog.mjs +0 -54
- package/esm2020/report-builder/toolbar.mjs +0 -91
- package/esm2020/report-builder/utils.mjs +0 -48
- package/esm2020/report-builder/widget-toolbar-button.mjs +0 -46
- package/esm2020/report-builder/widgets-row-buttons.mjs +0 -136
- package/esm2020/report-builder/widgets-toolbar.mjs +0 -80
- package/fesm2015/report-builder.mjs +0 -5184
- package/fesm2015/report-builder.mjs.map +0 -1
- package/fesm2020/report-builder.mjs +0 -5182
- package/fesm2020/report-builder.mjs.map +0 -1
- package/report-builder/_report-builder.scss +0 -0
- package/report-builder/column.d.ts +0 -66
- package/report-builder/condition-editor.d.ts +0 -70
- package/report-builder/content.d.ts +0 -145
- package/report-builder/custom-widget-dialog.d.ts +0 -13
- package/report-builder/custom-widget-toolbar-button.d.ts +0 -48
- package/report-builder/custom-widgets-toolbar.d.ts +0 -74
- package/report-builder/forms-analyzer-dialog.d.ts +0 -94
- package/report-builder/forms-analyzer.d.ts +0 -105
- package/report-builder/image-filter.d.ts +0 -29
- package/report-builder/image-group.d.ts +0 -72
- 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 -368
- package/report-builder/public-api.d.ts +0 -26
- package/report-builder/quill-editor.d.ts +0 -116
- package/report-builder/renderer-widget.d.ts +0 -83
- package/report-builder/report-builder-drag-data.d.ts +0 -32
- package/report-builder/report-builder-module.d.ts +0 -52
- package/report-builder/report-builder-service.d.ts +0 -725
- package/report-builder/report-builder.d.ts +0 -39
- package/report-builder/theme-color-dialog.d.ts +0 -45
- package/report-builder/theme-color.d.ts +0 -111
- package/report-builder/tokens.d.ts +0 -24
- package/report-builder/toolbar-dialog.d.ts +0 -12
- package/report-builder/toolbar.d.ts +0 -30
- package/report-builder/utils.d.ts +0 -29
- package/report-builder/widget-toolbar-button.d.ts +0 -31
- package/report-builder/widgets-row-buttons.d.ts +0 -60
- package/report-builder/widgets-toolbar.d.ts +0 -26
|
@@ -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,307 +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
|
-
import * as i0 from "@angular/core";
|
|
28
|
-
import * as i1 from "./report-builder-service";
|
|
29
|
-
export class AjfQuillEditor {
|
|
30
|
-
constructor(_elementRef, _renderer, _service) {
|
|
31
|
-
this._elementRef = _elementRef;
|
|
32
|
-
this._renderer = _renderer;
|
|
33
|
-
this._service = _service;
|
|
34
|
-
this.emptyArray = [];
|
|
35
|
-
this._init = false;
|
|
36
|
-
this.dateFormats = [
|
|
37
|
-
{
|
|
38
|
-
'label': 'June 23rd 2017, 12:39:12 pm',
|
|
39
|
-
'value': 'MMMM Do YYYY, h:mm:ss a',
|
|
40
|
-
'validator': 'MMMMDoYYYYhmmssa'
|
|
41
|
-
},
|
|
42
|
-
{ 'label': 'Friday', 'value': 'dddd', 'validator': 'dddd' },
|
|
43
|
-
{ 'label': 'Jun 23rd 17', 'value': 'MMM Do YY', 'validator': 'MMMDoYY' }
|
|
44
|
-
];
|
|
45
|
-
this.fonts = [
|
|
46
|
-
false, 'blackr', 'black-italic', 'bold', 'bold-condensed', 'bold-condensed-italic',
|
|
47
|
-
'bold-italic', 'condensed', 'condensed-italic', 'italic', 'light', 'light-italic', 'medium',
|
|
48
|
-
'medium-italic', 'thinr', 'thin-italic'
|
|
49
|
-
];
|
|
50
|
-
this.defaultModules = {
|
|
51
|
-
formula: true,
|
|
52
|
-
toolbar: [
|
|
53
|
-
['formula'], ['bold', 'italic', 'underline', 'strike'],
|
|
54
|
-
// ['blockquote', 'code-block'],
|
|
55
|
-
[{ 'header': 1 }, { 'header': 2 }],
|
|
56
|
-
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
|
|
57
|
-
[{ 'script': 'sub' }, { 'script': 'super' }],
|
|
58
|
-
// [{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent
|
|
59
|
-
// [{ 'direction': 'rtl' }], // text direction
|
|
60
|
-
[{ 'size': ['small', false, 'large', 'huge'] }],
|
|
61
|
-
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
|
|
62
|
-
[
|
|
63
|
-
{ 'color': this.emptyArray.slice() }, { 'background': this.emptyArray.slice() }
|
|
64
|
-
],
|
|
65
|
-
[{ 'font': this.fonts }], [{ 'align': this.emptyArray.slice() }],
|
|
66
|
-
['clean'], // remove formatting button
|
|
67
|
-
// ['link', 'image', 'video'] // link and image, video
|
|
68
|
-
]
|
|
69
|
-
};
|
|
70
|
-
this.font = Quill.import('formats/font');
|
|
71
|
-
this.editorCreated = new EventEmitter();
|
|
72
|
-
this.contentChanged = new EventEmitter();
|
|
73
|
-
this.selectionChanged = new EventEmitter();
|
|
74
|
-
/**
|
|
75
|
-
* this event is fired when the user click on formula button on quill editor rool barƒ
|
|
76
|
-
*
|
|
77
|
-
* @memberof QuillEditorComponent
|
|
78
|
-
*/
|
|
79
|
-
this.formulaClick = new EventEmitter();
|
|
80
|
-
this.onModelChange = () => { };
|
|
81
|
-
this.onModelTouched = () => { };
|
|
82
|
-
this._formulas = [];
|
|
83
|
-
this._formulaTextSub = Subscription.EMPTY;
|
|
84
|
-
this.font.whitelist = this.fonts;
|
|
85
|
-
this.font.whitelist.push('regular');
|
|
86
|
-
this._formulaTextSub = this._service.getFormulaToHtmlEvent().subscribe((event) => {
|
|
87
|
-
// reference is defined only when the user want to edit the formula
|
|
88
|
-
if (event.reference !== undefined) {
|
|
89
|
-
event.reference.innerHTML = event.formula;
|
|
90
|
-
this._renderer.setAttribute(event.reference, 'formula', event.formula);
|
|
91
|
-
const efs = this._formulas.filter(f => f.formula === event.reference);
|
|
92
|
-
let formulaEntry;
|
|
93
|
-
let unlisten;
|
|
94
|
-
if (efs.length > 0) {
|
|
95
|
-
formulaEntry = efs[0];
|
|
96
|
-
unlisten = formulaEntry.unlisten;
|
|
97
|
-
if (unlisten != null) {
|
|
98
|
-
unlisten();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
formulaEntry = { formula: event.reference, unlisten: null };
|
|
103
|
-
this._formulas.push(formulaEntry);
|
|
104
|
-
}
|
|
105
|
-
formulaEntry.unlisten = this._renderer.listen(event.reference, 'click', () => {
|
|
106
|
-
let obj = { 'formula': event.formula, 'reference': event.reference };
|
|
107
|
-
this.formulaClick.emit(obj);
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
const quillEditor = this._elementRef.nativeElement.querySelector('.ajf-ql-editor');
|
|
112
|
-
const link = this._renderer.createElement('a');
|
|
113
|
-
this._renderer.setAttribute(link, 'href', 'javascript:void(0)');
|
|
114
|
-
this._renderer.setStyle(link, 'cursor', 'pointer');
|
|
115
|
-
this._renderer.setAttribute(link, 'formula', this.check(event.formula));
|
|
116
|
-
const linkLabel = this._renderer.createText(event.formula);
|
|
117
|
-
this._renderer.appendChild(link, linkLabel);
|
|
118
|
-
// add listener related on the click event of the new formula
|
|
119
|
-
const unlisten = this._renderer.listen(link, 'click', (_) => {
|
|
120
|
-
let obj = { 'formula': this.check(event.formula), 'reference': link };
|
|
121
|
-
this.formulaClick.emit(obj);
|
|
122
|
-
});
|
|
123
|
-
this._renderer.appendChild(quillEditor, link);
|
|
124
|
-
this._formulas.push({ unlisten, formula: link });
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
check(value) {
|
|
129
|
-
for (let i = 0; i < this.dateFormats.length; i++) {
|
|
130
|
-
if (this.dateFormats[i].value == value) {
|
|
131
|
-
return this.dateFormats[i].validator;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return value;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* this function search fomulas inside the init text
|
|
138
|
-
* and allocate the related listener on click event
|
|
139
|
-
*
|
|
140
|
-
* @memberof QuillEditorComponent
|
|
141
|
-
*/
|
|
142
|
-
setHTML() {
|
|
143
|
-
this.writeValue(this.initHTML);
|
|
144
|
-
}
|
|
145
|
-
ngAfterViewInit() {
|
|
146
|
-
const toolbarElem = this._elementRef.nativeElement.querySelector('[ajf-quill-editor-toolbar]');
|
|
147
|
-
let modules = this.modules || this.defaultModules;
|
|
148
|
-
Quill.register(this.font, true);
|
|
149
|
-
if (toolbarElem) {
|
|
150
|
-
modules['toolbar'] = toolbarElem;
|
|
151
|
-
modules['formula'] = true;
|
|
152
|
-
}
|
|
153
|
-
this._elementRef.nativeElement.insertAdjacentHTML('beforeend', '<div quill-editor-element></div>');
|
|
154
|
-
this.editorElem = this._elementRef.nativeElement.querySelector('[quill-editor-element]');
|
|
155
|
-
this.quillEditor = new Quill(this.editorElem, {
|
|
156
|
-
modules: modules,
|
|
157
|
-
placeholder: this.placeholder || 'Insert text here ...',
|
|
158
|
-
readOnly: this.readOnly || false,
|
|
159
|
-
theme: this.theme || 'snow',
|
|
160
|
-
formats: this.formats
|
|
161
|
-
});
|
|
162
|
-
this.editorCreated.emit(this.quillEditor);
|
|
163
|
-
this.setHTML();
|
|
164
|
-
// mark model as touched if editor lost focus
|
|
165
|
-
this.quillEditor.on('selection-change', (range, oldRange, source) => {
|
|
166
|
-
this.selectionChanged.emit({ editor: this.quillEditor, range: range, oldRange: oldRange, source: source });
|
|
167
|
-
if (!range) {
|
|
168
|
-
this.onModelTouched();
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
// update model if text changes
|
|
172
|
-
this.quillEditor.on('text-change', (delta, oldDelta, source) => {
|
|
173
|
-
let html = this.editorElem.children[0].innerHTML;
|
|
174
|
-
const text = this.quillEditor.getText();
|
|
175
|
-
if (html === '<p><br></p>') {
|
|
176
|
-
html = null;
|
|
177
|
-
}
|
|
178
|
-
this.onModelChange(html);
|
|
179
|
-
this.contentChanged.emit({
|
|
180
|
-
editor: this.quillEditor,
|
|
181
|
-
html: html,
|
|
182
|
-
text: text,
|
|
183
|
-
delta: delta,
|
|
184
|
-
oldDelta: oldDelta,
|
|
185
|
-
source: source
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
let elem = this._elementRef.nativeElement.querySelector('.ajf-ql-formula');
|
|
189
|
-
this.listenFunc = this._renderer.listen(elem, 'click', (_) => {
|
|
190
|
-
this.formulaClick.emit();
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
writeValue(currentValue) {
|
|
194
|
-
this.content = currentValue;
|
|
195
|
-
if (this.quillEditor) {
|
|
196
|
-
if (currentValue) {
|
|
197
|
-
if (currentValue == this.initHTML && !this._init) {
|
|
198
|
-
let editor = this._elementRef.nativeElement.querySelector('.ajf-ql-editor');
|
|
199
|
-
editor.innerHTML = this.initHTML;
|
|
200
|
-
let allFormulas = this._elementRef.nativeElement.querySelectorAll('[formula]');
|
|
201
|
-
allFormulas.forEach((elem) => {
|
|
202
|
-
const unlisten = this._renderer.listen(elem, 'click', (_) => {
|
|
203
|
-
let obj = { 'formula': this.check(elem.innerText), 'reference': elem };
|
|
204
|
-
this.formulaClick.emit(obj);
|
|
205
|
-
});
|
|
206
|
-
this._renderer.setStyle(elem, 'cursor', 'pointer');
|
|
207
|
-
this._formulas.push({ unlisten, formula: elem });
|
|
208
|
-
this._init = true;
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
else if (currentValue != this.initHTML) {
|
|
212
|
-
this.quillEditor.pasteHTML(currentValue);
|
|
213
|
-
}
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
this.quillEditor.setText('');
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
registerOnChange(fn) {
|
|
220
|
-
this.onModelChange = fn;
|
|
221
|
-
}
|
|
222
|
-
registerOnTouched(fn) {
|
|
223
|
-
this.onModelTouched = fn;
|
|
224
|
-
}
|
|
225
|
-
validate(_c) {
|
|
226
|
-
if (!this.quillEditor) {
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
let err = {}, valid = true;
|
|
230
|
-
const textLength = this.quillEditor.getText().trim().length;
|
|
231
|
-
if (this.minLength) {
|
|
232
|
-
err.minLengthError = { given: textLength, minLength: this.minLength };
|
|
233
|
-
valid = textLength >= this.minLength || !textLength;
|
|
234
|
-
}
|
|
235
|
-
if (this.maxLength) {
|
|
236
|
-
err.maxLengthError = { given: textLength, maxLength: this.maxLength };
|
|
237
|
-
valid = textLength <= this.maxLength && valid;
|
|
238
|
-
}
|
|
239
|
-
return valid ? null : err;
|
|
240
|
-
}
|
|
241
|
-
ngOnChanges(changes) {
|
|
242
|
-
if (changes['readOnly'] && this.quillEditor) {
|
|
243
|
-
this.quillEditor.enable(!changes['readOnly'].currentValue);
|
|
244
|
-
}
|
|
245
|
-
if (changes['modules'] && this.quillEditor) {
|
|
246
|
-
Quill.register(this.font, true);
|
|
247
|
-
this.quillEditor = new Quill(this.editorElem, {
|
|
248
|
-
modules: changes['modules']['currentValue'],
|
|
249
|
-
placeholder: this.placeholder || 'Insert text here ...',
|
|
250
|
-
readOnly: this.readOnly || false,
|
|
251
|
-
theme: this.theme || 'snow',
|
|
252
|
-
formats: this.formats
|
|
253
|
-
});
|
|
254
|
-
this._elementRef.nativeElement.children[0].remove();
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
ngOnDestroy() {
|
|
258
|
-
for (let i = 0; i < this._formulas.length; i++) {
|
|
259
|
-
let unlisten = this._formulas[i].unlisten;
|
|
260
|
-
if (unlisten != null) {
|
|
261
|
-
unlisten();
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
this._formulaTextSub.unsubscribe();
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
AjfQuillEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: AjfQuillEditor, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.AjfReportBuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
268
|
-
AjfQuillEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0-next.15", type: AjfQuillEditor, selector: "ajf-quill-editor", inputs: { theme: "theme", modules: "modules", readOnly: "readOnly", placeholder: "placeholder", maxLength: "maxLength", minLength: "minLength", formats: "formats", initHTML: "initHTML" }, outputs: { editorCreated: "editorCreated", contentChanged: "contentChanged", selectionChanged: "selectionChanged", formulaClick: "formulaClick" }, providers: [
|
|
269
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AjfQuillEditor), multi: true },
|
|
270
|
-
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => AjfQuillEditor), multi: true }
|
|
271
|
-
], usesOnChanges: true, ngImport: i0, template: `
|
|
272
|
-
<ng-content select="[ajf-quill-editor-toolbar]"></ng-content>
|
|
273
|
-
`, isInline: true, styles: ["ajf-quill-editor .ajf-ql-container .ajf-ql-editor{min-height:200px;width:500px !important;padding-bottom:50px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: AjfQuillEditor, decorators: [{
|
|
275
|
-
type: Component,
|
|
276
|
-
args: [{ selector: 'ajf-quill-editor', template: `
|
|
277
|
-
<ng-content select="[ajf-quill-editor-toolbar]"></ng-content>
|
|
278
|
-
`, providers: [
|
|
279
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AjfQuillEditor), multi: true },
|
|
280
|
-
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => AjfQuillEditor), multi: true }
|
|
281
|
-
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["ajf-quill-editor .ajf-ql-container .ajf-ql-editor{min-height:200px;width:500px !important;padding-bottom:50px}\n"] }]
|
|
282
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.AjfReportBuilderService }]; }, propDecorators: { theme: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], modules: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], readOnly: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], placeholder: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], maxLength: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], minLength: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], formats: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], initHTML: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], editorCreated: [{
|
|
299
|
-
type: Output
|
|
300
|
-
}], contentChanged: [{
|
|
301
|
-
type: Output
|
|
302
|
-
}], selectionChanged: [{
|
|
303
|
-
type: Output
|
|
304
|
-
}], formulaClick: [{
|
|
305
|
-
type: Output
|
|
306
|
-
}] } });
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3JlcG9ydC1idWlsZGVyL3F1aWxsLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsRUFFbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsT0FBTyxJQUFJLEtBQUssRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7QUFnQmpFLE1BQU0sT0FBTyxjQUFjO0lBdUZ6QixZQUNZLFdBQXVCLEVBQVUsU0FBb0IsRUFDckQsUUFBaUM7UUFEakMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3JELGFBQVEsR0FBUixRQUFRLENBQXlCO1FBckY3QyxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBTWYsVUFBSyxHQUFZLEtBQUssQ0FBQztRQUUvQixnQkFBVyxHQUFHO1lBQ1o7Z0JBQ0UsT0FBTyxFQUFFLDZCQUE2QjtnQkFDdEMsT0FBTyxFQUFFLHlCQUF5QjtnQkFDbEMsV0FBVyxFQUFFLGtCQUFrQjthQUNoQztZQUNELEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUM7WUFDekQsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9B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QUssRUFBRSxJQUFJLEVBQUM7S0FDckYsK0NBTlM7O0dBRVQ7bUdBU1UsY0FBYztrQkFiMUIsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEI7O0dBRVQsYUFDVTt3QkFDVCxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO3dCQUN4RixFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztxQkFDckYsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTsrSkE2RHRDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFYSxhQUFhO3NCQUEvQixNQUFNO2dCQUNZLGNBQWM7c0JBQWhDLE1BQU07Z0JBQ1ksZ0JBQWdCO3NCQUFsQyxNQUFNO2dCQVFZLFlBQVk7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKEMpIEdudWNvb3Agc29jLiBjb29wLlxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLFxuICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBBZmZlcm9cbiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKS5cbiAqIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uXG4gKlxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIFF1aWxsfSBmcm9tICdxdWlsbCc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWpmUmVwb3J0QnVpbGRlclNlcnZpY2V9IGZyb20gJy4vcmVwb3J0LWJ1aWxkZXItc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWpmLXF1aWxsLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FqZi1xdWlsbC1lZGl0b3ItdG9vbGJhcl1cIj48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWpmUXVpbGxFZGl0b3IpLCBtdWx0aTogdHJ1ZX0sXG4gICAge3Byb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFqZlF1aWxsRWRpdG9yKSwgbXVsdGk6IHRydWV9XG4gIF0sXG4gIHN0eWxlVXJsczogWydxdWlsbC1lZGl0b3IuY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFqZlF1aWxsRWRpdG9yIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcywgT25EZXN0cm95LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9yIHtcbiAgcXVpbGxFZGl0b3I6IGFueTtcbiAgZWRpdG9yRWxlbTogSFRNTEVsZW1lbnQ7XG4gIGVtcHR5QXJyYXk6IGFueVtdID0gW107XG4gIGNvbnRlbnQ6IGFueTtcblxuICBsaXN0ZW5GdW5jOiBGdW5jdGlvbjtcblxuICBwcmV2aWV3RWxlbUZvcm11bGE6IGFueTtcbiAgcHJpdmF0ZSBfaW5pdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGRhdGVGb3JtYXRzID0gW1xuICAgIHtcbiAgICAgICdsYWJlbCc6ICdKdW5lIDIzcmQgMjAxNywgMTI6Mzk6MTIgcG0nLFxuICAgICAgJ3ZhbHVlJzogJ01NTU0gRG8gWVlZWSwgaDptbTpzcyBhJyxcbiAgICAgICd2YWxpZGF0b3InOiAnTU1NTURvWVlZWWhtbXNzYSdcbiAgICB9LFxuICAgIHsnbGFiZWwnOiAnRnJpZGF5JywgJ3ZhbHVlJzogJ2RkZGQnLCAndmFsaWRhdG9yJzogJ2RkZGQnfSxcbiAgICB7J2xhYmVsJzogJ0p1biAyM3JkIDE3JywgJ3ZhbHVlJzogJ01NTSBEbyBZWScsICd2YWxpZGF0b3InOiAnTU1NRG9ZWSd9XG4gIF07XG5cblxuICBmb250cyA9IFtcbiAgICBmYWxzZSwgJ2JsYWNrcicsICdibGFjay1pdGFsaWMnLCAnYm9sZCcsICdib2xkLWNvbmRlbnNlZCcsICdib2xkLWNvbmRlbnNlZC1pdGFsaWMnLFxuICAgICdib2xkLWl0YWxpYycsICdjb25kZW5zZWQnLCAnY29uZGVuc2VkLWl0YWxpYycsICdpdGFsaWMnLCAnbGlnaHQnLCAnbGlnaHQtaXRhbGljJywgJ21lZGl1bScsXG4gICAgJ21lZGl1bS1pdGFsaWMnLCAndGhpbnInLCAndGhpbi1pdGFsaWMnXG4gIF07XG5cbiAgZGVmYXVsdE1vZHVsZXMgPSB7XG4gICAgZm9ybXVsYTogdHJ1ZSxcbiAgICB0b29sYmFyOlxuICAgICAgICBbXG4gICAgICAgICAgWydmb3JtdWxhJ10sIFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZSddLCAgLy8gdG9nZ2xlZCBidXR0b25zXG4gICAgICAgICAgLy8gWydibG9ja3F1b3RlJywgJ2NvZGUtYmxvY2snXSxcblxuICAgICAgICAgIFt7J2hlYWRlcic6IDF9LCB7J2hlYWRlcic6IDJ9XSwgIC8vIGN1c3RvbSBidXR0b24gdmFsdWVzXG4gICAgICAgICAgW3snbGlzdCc6ICdvcmRlcmVkJ30sIHsnbGlzdCc6ICdidWxsZXQnfV0sXG4gICAgICAgICAgW3snc2NyaXB0JzogJ3N1Yid9LCB7J3NjcmlwdCc6ICdzdXBlcid9XSwgIC8vIHN1cGVyc2NyaXB0L3N1YnNjcmlwdFxuICAgICAgICAgIC8vIFt7ICdpbmRlbnQnOiAnLTEnfSwgeyAnaW5kZW50JzogJysxJyB9XSwgICAgICAgICAgLy8gb3V0ZGVudC9pbmRlbnRcbiAgICAgICAgICAvLyBbeyAnZGlyZWN0aW9uJzogJ3J0bCcgfV0sICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgZGlyZWN0aW9uXG5cbiAgICAgICAgICBbeydzaXplJzogWydzbWFsbCcsIGZhbHNlLCAnbGFyZ2UnLCAnaHVnZSddfV0sICAvLyBjdXN0b20gZHJvcGRvd25cbiAgICAgICAgICBbeydoZWFkZXInOiBbMSwgMiwgMywgNCwgNSwgNiwgZmFsc2VdfV0sXG5cbiAgICAgICAgICBbXG4gICAgICAgICAgICB7J2NvbG9yJzogdGhpcy5lbXB0eUFycmF5LnNsaWNlKCl9LCB7J2JhY2tncm91bmQnOiB0aGlzLmVtcHR5QXJyYXkuc2xpY2UoKX1cbiAgICAgICAgICBdLCAgLy8gZHJvcGRvd24gd2l0aCBkZWZhdWx0cyBmcm9tIHRoZW1lXG4gICAgICAgICAgW3snZm9udCc6IHRoaXMuZm9udHN9XSwgW3snYWxpZ24nOiB0aGlzLmVtcHR5QXJyYXkuc2xpY2UoKX1dLFxuXG4gICAgICAgICAgWydjbGVhbiddLCAgLy8gcmVtb3ZlIGZvcm1hdHRpbmcgYnV0dG9uXG5cbiAgICAgICAgICAvLyBbJ2xpbmsnLCAnaW1hZ2UnLCAndmlkZW8nXSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5rIGFuZCBpbWFnZSwgdmlkZW9cbiAgICAgICAgXVxuICB9O1xuXG4gIGZvbnQgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvZm9udCcpO1xuXG5cbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgQElucHV0KCkgbW9kdWxlczogT2JqZWN0O1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1pbkxlbmd0aDogbnVtYmVyO1xuICBASW5wdXQoKSBmb3JtYXRzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgaW5pdEhUTUw6IHN0cmluZztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZWRpdG9yQ3JlYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjb250ZW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIC8qKlxuICAgKiB0aGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2sgb24gZm9ybXVsYSBidXR0b24gb24gcXVpbGwgZWRpdG9yIHJvb2wgYmFyxpJcbiAgICpcbiAgICogQG1lbWJlcm9mIFF1aWxsRWRpdG9yQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9ybXVsYUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cbiAgb25Nb2RlbENoYW5nZTogRnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgb25Nb2RlbFRvdWNoZWQ6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBfZm9ybXVsYXM6IHtmb3JtdWxhOiBhbnksIHVubGlzdGVuOiBGdW5jdGlvbnxudWxsfVtdID0gW107XG4gIHByaXZhdGUgX2Zvcm11bGFUZXh0U3ViOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgcHJpdmF0ZSBfc2VydmljZTogQWpmUmVwb3J0QnVpbGRlclNlcnZpY2UpIHtcbiAgICB0aGlzLmZvbnQud2hpdGVsaXN0ID0gdGhpcy5mb250cztcbiAgICB0aGlzLmZvbnQud2hpdGVsaXN0LnB1c2goJ3JlZ3VsYXInKTtcblxuICAgIHRoaXMuX2Zvcm11bGFUZXh0U3ViID0gdGhpcy5fc2VydmljZS5nZXRGb3JtdWxhVG9IdG1sRXZlbnQoKS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIC8vIHJlZmVyZW5jZSBpcyBkZWZpbmVkIG9ubHkgd2hlbiB0aGUgdXNlciB3YW50IHRvIGVkaXQgdGhlIGZvcm11bGFcbiAgICAgIGlmIChldmVudC5yZWZlcmVuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBldmVudC5yZWZlcmVuY2UuaW5uZXJIVE1MID0gZXZlbnQuZm9ybXVsYTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKGV2ZW50LnJlZmVyZW5jZSwgJ2Zvcm11bGEnLCBldmVudC5mb3JtdWxhKTtcbiAgICAgICAgY29uc3QgZWZzID0gdGhpcy5fZm9ybXVsYXMuZmlsdGVyKGYgPT4gZi5mb3JtdWxhID09PSBldmVudC5yZWZlcmVuY2UpO1xuICAgICAgICBsZXQgZm9ybXVsYUVudHJ5O1xuICAgICAgICBsZXQgdW5saXN0ZW47XG4gICAgICAgIGlmIChlZnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvcm11bGFFbnRyeSA9IGVmc1swXTtcbiAgICAgICAgICB1bmxpc3RlbiA9IGZvcm11bGFFbnRyeS51bmxpc3RlbjtcbiAgICAgICAgICBpZiAodW5saXN0ZW4gIT0gbnVsbCkge1xuICAgICAgICAgICAgdW5saXN0ZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybXVsYUVudHJ5ID0ge2Zvcm11bGE6IGV2ZW50LnJlZmVyZW5jZSwgdW5saXN0ZW46IG51bGx9O1xuICAgICAgICAgIHRoaXMuX2Zvcm11bGFzLnB1c2goZm9ybXVsYUVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtdWxhRW50cnkudW5saXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oZXZlbnQucmVmZXJlbmNlLCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IHsnZm9ybXVsYSc6IGV2ZW50LmZvcm11bGEsICdyZWZlcmVuY2UnOiBldmVudC5yZWZlcmVuY2V9O1xuICAgICAgICAgIHRoaXMuZm9ybXVsYUNsaWNrLmVtaXQob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBxdWlsbEVkaXRvciA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWpmLXFsLWVkaXRvcicpO1xuICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJyk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKGxpbmssICdjdXJzb3InLCAncG9pbnRlcicpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ2Zvcm11bGEnLCB0aGlzLmNoZWNrKGV2ZW50LmZvcm11bGEpKTtcbiAgICAgICAgY29uc3QgbGlua0xhYmVsID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlVGV4dChldmVudC5mb3JtdWxhKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQobGluaywgbGlua0xhYmVsKTtcbiAgICAgICAgLy8gYWRkIGxpc3RlbmVyIHJlbGF0ZWQgb24gdGhlIGNsaWNrIGV2ZW50IG9mIHRoZSBuZXcgZm9ybXVsYVxuICAgICAgICBjb25zdCB1bmxpc3RlbiA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihsaW5rLCAnY2xpY2snLCAoXykgPT4ge1xuICAgICAgICAgIGxldCBvYmogPSB7J2Zvcm11bGEnOiB0aGlzLmNoZWNrKGV2ZW50LmZvcm11bGEpLCAncmVmZXJlbmNlJzogbGlua307XG4gICAgICAgICAgdGhpcy5mb3JtdWxhQ2xpY2suZW1pdChvYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQocXVpbGxFZGl0b3IsIGxpbmspO1xuICAgICAgICB0aGlzLl9mb3JtdWxhcy5wdXNoKHt1bmxpc3RlbiwgZm9ybXVsYTogbGlua30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hlY2sodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGVGb3JtYXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRm9ybWF0c1tpXS52YWx1ZSA9PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlRm9ybWF0c1tpXS52YWxpZGF0b3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiA8c3RyaW5nPnZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIHNlYXJjaCBmb211bGFzIGluc2lkZSB0aGUgaW5pdCB0ZXh0XG4gICAqIGFuZCBhbGxvY2F0ZSB0aGUgcmVsYXRlZCBsaXN0ZW5lciBvbiBjbGljayBldmVudFxuICAgKlxuICAgKiBAbWVtYmVyb2YgUXVpbGxFZGl0b3JDb21wb25lbnRcbiAgICovXG4gIHNldEhUTUwoKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuaW5pdEhUTUwpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHRvb2xiYXJFbGVtID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1thamYtcXVpbGwtZWRpdG9yLXRvb2xiYXJdJyk7XG4gICAgbGV0IG1vZHVsZXM6IGFueSA9IHRoaXMubW9kdWxlcyB8fCB0aGlzLmRlZmF1bHRNb2R1bGVzO1xuXG4gICAgUXVpbGwucmVnaXN0ZXIodGhpcy5mb250LCB0cnVlKTtcblxuICAgIGlmICh0b29sYmFyRWxlbSkge1xuICAgICAgbW9kdWxlc1sndG9vbGJhciddID0gdG9vbGJhckVsZW07XG4gICAgICBtb2R1bGVzWydmb3JtdWxhJ10gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgICAnYmVmb3JlZW5kJywgJzxkaXYgcXVpbGwtZWRpdG9yLWVsZW1lbnQ+PC9kaXY+Jyk7XG5cbiAgICB0aGlzLmVkaXRvckVsZW0gPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3F1aWxsLWVkaXRvci1lbGVtZW50XScpO1xuXG4gICAgdGhpcy5xdWlsbEVkaXRvciA9IG5ldyBRdWlsbCh0aGlzLmVkaXRvckVsZW0sIHtcbiAgICAgIG1vZHVsZXM6IG1vZHVsZXMsXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlciB8fCAnSW5zZXJ0IHRleHQgaGVyZSAuLi4nLFxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHkgfHwgZmFsc2UsXG4gICAgICB0aGVtZTogdGhpcy50aGVtZSB8fCAnc25vdycsXG4gICAgICBmb3JtYXRzOiB0aGlzLmZvcm1hdHNcbiAgICB9KTtcblxuXG4gICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQodGhpcy5xdWlsbEVkaXRvcik7XG4gICAgdGhpcy5zZXRIVE1MKCk7XG5cbiAgICAvLyBtYXJrIG1vZGVsIGFzIHRvdWNoZWQgaWYgZWRpdG9yIGxvc3QgZm9jdXNcbiAgICB0aGlzLnF1aWxsRWRpdG9yLm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKHJhbmdlOiBhbnksIG9sZFJhbmdlOiBhbnksIHNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChcbiAgICAgICAgICB7ZWRpdG9yOiB0aGlzLnF1aWxsRWRpdG9yLCByYW5nZTogcmFuZ2UsIG9sZFJhbmdlOiBvbGRSYW5nZSwgc291cmNlOiBzb3VyY2V9KTtcblxuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgbW9kZWwgaWYgdGV4dCBjaGFuZ2VzXG4gICAgdGhpcy5xdWlsbEVkaXRvci5vbigndGV4dC1jaGFuZ2UnLCAoZGVsdGE6IGFueSwgb2xkRGVsdGE6IGFueSwgc291cmNlOiBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBodG1sOiBhbnkgPSB0aGlzLmVkaXRvckVsZW0uY2hpbGRyZW5bMF0uaW5uZXJIVE1MO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucXVpbGxFZGl0b3IuZ2V0VGV4dCgpO1xuXG4gICAgICBpZiAoaHRtbCA9PT0gJzxwPjxicj48L3A+Jykge1xuICAgICAgICBodG1sID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGh0bWwpO1xuXG4gICAgICB0aGlzLmNvbnRlbnRDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBlZGl0b3I6IHRoaXMucXVpbGxFZGl0b3IsXG4gICAgICAgIGh0bWw6IGh0bWwsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgIGRlbHRhOiBkZWx0YSxcbiAgICAgICAgb2xkRGVsdGE6IG9sZERlbHRhLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgZWxlbSA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWpmLXFsLWZvcm11bGEnKTtcbiAgICB0aGlzLmxpc3RlbkZ1bmMgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oZWxlbSwgJ2NsaWNrJywgKF8pID0+IHtcbiAgICAgIHRoaXMuZm9ybXVsYUNsaWNrLmVtaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoY3VycmVudFZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmNvbnRlbnQgPSBjdXJyZW50VmFsdWU7XG5cbiAgICBpZiAodGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICBpZiAoY3VycmVudFZhbHVlID09IHRoaXMuaW5pdEhUTUwgJiYgIXRoaXMuX2luaXQpIHtcbiAgICAgICAgICBsZXQgZWRpdG9yID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hamYtcWwtZWRpdG9yJyk7XG4gICAgICAgICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuaW5pdEhUTUw7XG4gICAgICAgICAgbGV0IGFsbEZvcm11bGFzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmb3JtdWxhXScpO1xuICAgICAgICAgIGFsbEZvcm11bGFzLmZvckVhY2goKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdW5saXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oZWxlbSwgJ2NsaWNrJywgKF8pID0+IHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHsnZm9ybXVsYSc6IHRoaXMuY2hlY2soZWxlbS5pbm5lclRleHQpLCAncmVmZXJlbmNlJzogZWxlbX07XG4gICAgICAgICAgICAgIHRoaXMuZm9ybXVsYUNsaWNrLmVtaXQob2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWxlbSwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgICAgICAgICB0aGlzLl9mb3JtdWxhcy5wdXNoKHt1bmxpc3RlbiwgZm9ybXVsYTogZWxlbX0pO1xuICAgICAgICAgICAgdGhpcy5faW5pdCA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlICE9IHRoaXMuaW5pdEhUTUwpIHtcbiAgICAgICAgICB0aGlzLnF1aWxsRWRpdG9yLnBhc3RlSFRNTChjdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpbGxFZGl0b3Iuc2V0VGV4dCgnJyk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKF9jOiBGb3JtQ29udHJvbCkge1xuICAgIGlmICghdGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGVycjoge1xuICAgICAgbWluTGVuZ3RoRXJyb3I/OiB7Z2l2ZW46IG51bWJlciwgbWluTGVuZ3RoOiBudW1iZXJ9O1xuICAgICAgbWF4TGVuZ3RoRXJyb3I/OiB7Z2l2ZW46IG51bWJlciwgbWF4TGVuZ3RoOiBudW1iZXJ9O1xuICAgIH0gPSB7fSxcbiAgdmFsaWQgPSB0cnVlO1xuXG4gICAgY29uc3QgdGV4dExlbmd0aCA9IHRoaXMucXVpbGxFZGl0b3IuZ2V0VGV4dCgpLnRyaW0oKS5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgIGVyci5taW5MZW5ndGhFcnJvciA9IHtnaXZlbjogdGV4dExlbmd0aCwgbWluTGVuZ3RoOiB0aGlzLm1pbkxlbmd0aH07XG5cbiAgICAgIHZhbGlkID0gdGV4dExlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aCB8fCAhdGV4dExlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgIGVyci5tYXhMZW5ndGhFcnJvciA9IHtnaXZlbjogdGV4dExlbmd0aCwgbWF4TGVuZ3RoOiB0aGlzLm1heExlbmd0aH07XG5cbiAgICAgIHZhbGlkID0gdGV4dExlbmd0aCA8PSB0aGlzLm1heExlbmd0aCAmJiB2YWxpZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWQgPyBudWxsIDogZXJyO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydyZWFkT25seSddICYmIHRoaXMucXVpbGxFZGl0b3IpIHtcbiAgICAgIHRoaXMucXVpbGxFZGl0b3IuZW5hYmxlKCFjaGFuZ2VzWydyZWFkT25seSddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydtb2R1bGVzJ10gJiYgdGhpcy5xdWlsbEVkaXRvcikge1xuICAgICAgUXVpbGwucmVnaXN0ZXIodGhpcy5mb250LCB0cnVlKTtcbiAgICAgIHRoaXMucXVpbGxFZGl0b3IgPSBuZXcgUXVpbGwodGhpcy5lZGl0b3JFbGVtLCB7XG4gICAgICAgIG1vZHVsZXM6IGNoYW5nZXNbJ21vZHVsZXMnXVsnY3VycmVudFZhbHVlJ10sXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnBsYWNlaG9sZGVyIHx8ICdJbnNlcnQgdGV4dCBoZXJlIC4uLicsXG4gICAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5IHx8IGZhbHNlLFxuICAgICAgICB0aGVtZTogdGhpcy50aGVtZSB8fCAnc25vdycsXG4gICAgICAgIGZvcm1hdHM6IHRoaXMuZm9ybWF0c1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ucmVtb3ZlKCk7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZm9ybXVsYXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCB1bmxpc3RlbiA9IHRoaXMuX2Zvcm11bGFzW2ldLnVubGlzdGVuO1xuICAgICAgaWYgKHVubGlzdGVuICE9IG51bGwpIHtcbiAgICAgICAgdW5saXN0ZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZm9ybXVsYVRleHRTdWIudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
|