@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.
Files changed (235) hide show
  1. package/{report-builder/index.d.ts → barcode/barcode_public_index.d.ts} +1 -1
  2. package/barcode/index.d.ts +19 -1
  3. package/barcode/package.json +2 -2
  4. package/calendar/calendar_public_index.d.ts +4 -0
  5. package/calendar/index.d.ts +19 -1
  6. package/calendar/package.json +2 -2
  7. package/checkbox-group/checkbox-group_public_index.d.ts +4 -0
  8. package/checkbox-group/index.d.ts +19 -1
  9. package/checkbox-group/package.json +2 -2
  10. package/esm2020/barcode/barcode-module.mjs +7 -11
  11. package/esm2020/barcode/barcode.mjs +6 -6
  12. package/esm2020/barcode/barcode_public_index.mjs +5 -0
  13. package/esm2020/barcode/index.mjs +20 -2
  14. package/esm2020/calendar/calendar-module.mjs +8 -28
  15. package/esm2020/calendar/calendar.mjs +7 -11
  16. package/esm2020/calendar/calendar_public_index.mjs +5 -0
  17. package/esm2020/calendar/index.mjs +20 -2
  18. package/esm2020/checkbox-group/checkbox-group-item.mjs +6 -6
  19. package/esm2020/checkbox-group/checkbox-group-module.mjs +8 -27
  20. package/esm2020/checkbox-group/checkbox-group_public_index.mjs +5 -0
  21. package/esm2020/checkbox-group/index.mjs +20 -2
  22. package/esm2020/form-builder/branch-line.mjs +5 -5
  23. package/esm2020/form-builder/choices-origin-data-source.mjs +1 -1
  24. package/esm2020/form-builder/choices-origin-editor-dialog.mjs +10 -7
  25. package/esm2020/form-builder/choices-origin-editor.mjs +4 -4
  26. package/esm2020/form-builder/condition-editor-dialog.mjs +4 -4
  27. package/esm2020/form-builder/condition-editor.mjs +12 -11
  28. package/esm2020/form-builder/form-builder-module.mjs +85 -34
  29. package/esm2020/form-builder/form-builder-service.mjs +135 -128
  30. package/esm2020/form-builder/form-builder-utils.mjs +4 -3
  31. package/esm2020/form-builder/form-builder.mjs +33 -29
  32. package/esm2020/form-builder/form-builder_public_index.mjs +5 -0
  33. package/esm2020/form-builder/index.mjs +20 -2
  34. package/esm2020/form-builder/node-entry.mjs +10 -8
  35. package/esm2020/form-builder/node-properties.mjs +320 -315
  36. package/esm2020/form-builder/node-type-entry.mjs +5 -5
  37. package/esm2020/form-builder/string-identifier-dialog.mjs +8 -10
  38. package/esm2020/form-builder/validation-condition-editor-dialog.mjs +4 -4
  39. package/esm2020/form-builder/warning-condition-editor-dialog.mjs +4 -4
  40. package/esm2020/forms/barcode-field.mjs +6 -6
  41. package/esm2020/forms/boolean-field.mjs +6 -6
  42. package/esm2020/forms/date-field.mjs +5 -5
  43. package/esm2020/forms/date-input-field.mjs +6 -6
  44. package/esm2020/forms/empty-field.mjs +6 -6
  45. package/esm2020/forms/field-service.mjs +45 -45
  46. package/esm2020/forms/field-warning-dialog.mjs +4 -4
  47. package/esm2020/forms/field.mjs +5 -5
  48. package/esm2020/forms/form.mjs +5 -5
  49. package/esm2020/forms/forms-module.mjs +119 -43
  50. package/esm2020/forms/forms_public_index.mjs +5 -0
  51. package/esm2020/forms/index.mjs +20 -2
  52. package/esm2020/forms/input-field.mjs +5 -5
  53. package/esm2020/forms/multiple-choice-field.mjs +6 -6
  54. package/esm2020/forms/range-field.mjs +6 -6
  55. package/esm2020/forms/single-choice-field.mjs +6 -6
  56. package/esm2020/forms/table-field.mjs +6 -6
  57. package/esm2020/forms/text-field.mjs +5 -5
  58. package/esm2020/forms/time-field.mjs +6 -6
  59. package/esm2020/forms/video-url-field.mjs +5 -5
  60. package/esm2020/forms/warning-alert-service.mjs +4 -4
  61. package/esm2020/image/image-module.mjs +8 -19
  62. package/esm2020/image/image.mjs +5 -5
  63. package/esm2020/image/image_public_index.mjs +5 -0
  64. package/esm2020/image/index.mjs +20 -2
  65. package/esm2020/monaco-editor/autocomplete-singleton-model.mjs +3 -2
  66. package/esm2020/monaco-editor/editor-options-model.mjs +1 -1
  67. package/esm2020/monaco-editor/index.mjs +20 -2
  68. package/esm2020/monaco-editor/monaco-editor-module.mjs +7 -11
  69. package/esm2020/monaco-editor/monaco-editor.mjs +6 -6
  70. package/esm2020/monaco-editor/monaco-editor_public_index.mjs +5 -0
  71. package/esm2020/node-icon/index.mjs +20 -2
  72. package/esm2020/node-icon/node-icon-module.mjs +8 -19
  73. package/esm2020/node-icon/node-icon.mjs +4 -4
  74. package/esm2020/node-icon/node-icon_public_index.mjs +5 -0
  75. package/esm2020/page-slider/index.mjs +20 -2
  76. package/esm2020/page-slider/page-slider-module.mjs +8 -14
  77. package/esm2020/page-slider/page-slider.mjs +5 -5
  78. package/esm2020/page-slider/page-slider_public_index.mjs +5 -0
  79. package/esm2020/reports/chart-widget.mjs +5 -5
  80. package/esm2020/reports/filter-widget.mjs +71 -0
  81. package/esm2020/reports/formula-widget.mjs +5 -5
  82. package/esm2020/reports/image-container-widget.mjs +5 -5
  83. package/esm2020/reports/image-widget.mjs +5 -5
  84. package/esm2020/reports/index.mjs +20 -2
  85. package/esm2020/reports/map-widget.mjs +5 -5
  86. package/esm2020/reports/page-break-widget.mjs +5 -5
  87. package/esm2020/reports/public-api.mjs +2 -1
  88. package/esm2020/reports/report.mjs +5 -5
  89. package/esm2020/reports/reports-module.mjs +15 -12
  90. package/esm2020/reports/reports_public_index.mjs +5 -0
  91. package/esm2020/reports/table-widget.mjs +6 -6
  92. package/esm2020/reports/text-widget.mjs +5 -5
  93. package/esm2020/reports/widget.mjs +19 -16
  94. package/esm2020/time/index.mjs +20 -2
  95. package/esm2020/time/time-module.mjs +8 -22
  96. package/esm2020/time/time.mjs +6 -6
  97. package/esm2020/time/time_public_index.mjs +5 -0
  98. package/fesm2015/barcode.mjs +32 -14
  99. package/fesm2015/barcode.mjs.map +1 -1
  100. package/fesm2015/calendar.mjs +34 -36
  101. package/fesm2015/calendar.mjs.map +1 -1
  102. package/fesm2015/checkbox-group.mjs +33 -30
  103. package/fesm2015/checkbox-group.mjs.map +1 -1
  104. package/fesm2015/form-builder.mjs +638 -544
  105. package/fesm2015/form-builder.mjs.map +1 -1
  106. package/fesm2015/forms.mjs +235 -137
  107. package/fesm2015/forms.mjs.map +1 -1
  108. package/fesm2015/image.mjs +32 -21
  109. package/fesm2015/image.mjs.map +1 -1
  110. package/fesm2015/monaco-editor.mjs +34 -15
  111. package/fesm2015/monaco-editor.mjs.map +1 -1
  112. package/fesm2015/node-icon.mjs +32 -21
  113. package/fesm2015/node-icon.mjs.map +1 -1
  114. package/fesm2015/page-slider.mjs +32 -16
  115. package/fesm2015/page-slider.mjs.map +1 -1
  116. package/fesm2015/reports.mjs +156 -66
  117. package/fesm2015/reports.mjs.map +1 -1
  118. package/fesm2015/time.mjs +33 -25
  119. package/fesm2015/time.mjs.map +1 -1
  120. package/fesm2020/barcode.mjs +32 -14
  121. package/fesm2020/barcode.mjs.map +1 -1
  122. package/fesm2020/calendar.mjs +34 -36
  123. package/fesm2020/calendar.mjs.map +1 -1
  124. package/fesm2020/checkbox-group.mjs +33 -30
  125. package/fesm2020/checkbox-group.mjs.map +1 -1
  126. package/fesm2020/form-builder.mjs +638 -544
  127. package/fesm2020/form-builder.mjs.map +1 -1
  128. package/fesm2020/forms.mjs +235 -137
  129. package/fesm2020/forms.mjs.map +1 -1
  130. package/fesm2020/image.mjs +32 -21
  131. package/fesm2020/image.mjs.map +1 -1
  132. package/fesm2020/monaco-editor.mjs +34 -15
  133. package/fesm2020/monaco-editor.mjs.map +1 -1
  134. package/fesm2020/node-icon.mjs +32 -21
  135. package/fesm2020/node-icon.mjs.map +1 -1
  136. package/fesm2020/page-slider.mjs +32 -16
  137. package/fesm2020/page-slider.mjs.map +1 -1
  138. package/fesm2020/reports.mjs +156 -66
  139. package/fesm2020/reports.mjs.map +1 -1
  140. package/fesm2020/time.mjs +33 -25
  141. package/fesm2020/time.mjs.map +1 -1
  142. package/form-builder/form-builder_public_index.d.ts +4 -0
  143. package/form-builder/index.d.ts +19 -1
  144. package/form-builder/node-properties.d.ts +1 -0
  145. package/form-builder/package.json +2 -2
  146. package/forms/forms_public_index.d.ts +4 -0
  147. package/forms/index.d.ts +19 -1
  148. package/forms/package.json +2 -2
  149. package/image/image_public_index.d.ts +4 -0
  150. package/image/index.d.ts +19 -1
  151. package/image/package.json +2 -2
  152. package/monaco-editor/index.d.ts +19 -1
  153. package/monaco-editor/monaco-editor_public_index.d.ts +4 -0
  154. package/monaco-editor/package.json +2 -2
  155. package/node-icon/index.d.ts +19 -1
  156. package/node-icon/node-icon_public_index.d.ts +4 -0
  157. package/node-icon/package.json +2 -2
  158. package/package.json +26 -36
  159. package/page-slider/index.d.ts +19 -1
  160. package/page-slider/package.json +2 -2
  161. package/page-slider/page-slider_public_index.d.ts +4 -0
  162. package/reports/filter-widget.d.ts +37 -0
  163. package/reports/index.d.ts +19 -1
  164. package/reports/package.json +2 -2
  165. package/reports/public-api.d.ts +1 -0
  166. package/reports/reports-module.d.ts +21 -19
  167. package/reports/reports_public_index.d.ts +4 -0
  168. package/time/index.d.ts +19 -1
  169. package/time/package.json +2 -2
  170. package/time/time_public_index.d.ts +4 -0
  171. package/esm2020/report-builder/column.mjs +0 -76
  172. package/esm2020/report-builder/condition-editor.mjs +0 -162
  173. package/esm2020/report-builder/content.mjs +0 -256
  174. package/esm2020/report-builder/custom-widget-dialog.mjs +0 -50
  175. package/esm2020/report-builder/custom-widget-toolbar-button.mjs +0 -67
  176. package/esm2020/report-builder/custom-widgets-toolbar.mjs +0 -124
  177. package/esm2020/report-builder/forms-analyzer-dialog.mjs +0 -328
  178. package/esm2020/report-builder/forms-analyzer.mjs +0 -244
  179. package/esm2020/report-builder/image-filter.mjs +0 -38
  180. package/esm2020/report-builder/image-group.mjs +0 -112
  181. package/esm2020/report-builder/index.mjs +0 -5
  182. package/esm2020/report-builder/models.mjs +0 -23
  183. package/esm2020/report-builder/operations.mjs +0 -23
  184. package/esm2020/report-builder/properties.mjs +0 -761
  185. package/esm2020/report-builder/public-api.mjs +0 -26
  186. package/esm2020/report-builder/quill-editor.mjs +0 -307
  187. package/esm2020/report-builder/renderer-widget.mjs +0 -243
  188. package/esm2020/report-builder/report-builder-drag-data.mjs +0 -23
  189. package/esm2020/report-builder/report-builder-module.mjs +0 -155
  190. package/esm2020/report-builder/report-builder-service.mjs +0 -1690
  191. package/esm2020/report-builder/report-builder.mjs +0 -51
  192. package/esm2020/report-builder/theme-color-dialog.mjs +0 -67
  193. package/esm2020/report-builder/theme-color.mjs +0 -196
  194. package/esm2020/report-builder/tokens.mjs +0 -24
  195. package/esm2020/report-builder/toolbar-dialog.mjs +0 -54
  196. package/esm2020/report-builder/toolbar.mjs +0 -91
  197. package/esm2020/report-builder/utils.mjs +0 -48
  198. package/esm2020/report-builder/widget-toolbar-button.mjs +0 -46
  199. package/esm2020/report-builder/widgets-row-buttons.mjs +0 -136
  200. package/esm2020/report-builder/widgets-toolbar.mjs +0 -80
  201. package/fesm2015/report-builder.mjs +0 -5184
  202. package/fesm2015/report-builder.mjs.map +0 -1
  203. package/fesm2020/report-builder.mjs +0 -5182
  204. package/fesm2020/report-builder.mjs.map +0 -1
  205. package/report-builder/_report-builder.scss +0 -0
  206. package/report-builder/column.d.ts +0 -66
  207. package/report-builder/condition-editor.d.ts +0 -70
  208. package/report-builder/content.d.ts +0 -145
  209. package/report-builder/custom-widget-dialog.d.ts +0 -13
  210. package/report-builder/custom-widget-toolbar-button.d.ts +0 -48
  211. package/report-builder/custom-widgets-toolbar.d.ts +0 -74
  212. package/report-builder/forms-analyzer-dialog.d.ts +0 -94
  213. package/report-builder/forms-analyzer.d.ts +0 -105
  214. package/report-builder/image-filter.d.ts +0 -29
  215. package/report-builder/image-group.d.ts +0 -72
  216. package/report-builder/models.d.ts +0 -43
  217. package/report-builder/operations.d.ts +0 -45
  218. package/report-builder/package.json +0 -9
  219. package/report-builder/properties.d.ts +0 -368
  220. package/report-builder/public-api.d.ts +0 -26
  221. package/report-builder/quill-editor.d.ts +0 -116
  222. package/report-builder/renderer-widget.d.ts +0 -83
  223. package/report-builder/report-builder-drag-data.d.ts +0 -32
  224. package/report-builder/report-builder-module.d.ts +0 -52
  225. package/report-builder/report-builder-service.d.ts +0 -725
  226. package/report-builder/report-builder.d.ts +0 -39
  227. package/report-builder/theme-color-dialog.d.ts +0 -45
  228. package/report-builder/theme-color.d.ts +0 -111
  229. package/report-builder/tokens.d.ts +0 -24
  230. package/report-builder/toolbar-dialog.d.ts +0 -12
  231. package/report-builder/toolbar.d.ts +0 -30
  232. package/report-builder/utils.d.ts +0 -29
  233. package/report-builder/widget-toolbar-button.d.ts +0 -31
  234. package/report-builder/widgets-row-buttons.d.ts +0 -60
  235. 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