ng-zorro-antd-extension 18.1.5 → 19.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/README.md +2 -1
  2. package/acl/nzx-acl.directive.d.ts +1 -1
  3. package/acl/nzx-acl.module.d.ts +1 -2
  4. package/blank-field/blank-field.component.d.ts +1 -1
  5. package/blank-field/blank-field.module.d.ts +1 -2
  6. package/checkbox/checkbox-group.component.d.ts +5 -16
  7. package/checkbox/checkbox.module.d.ts +1 -4
  8. package/configurable-query/configurable-query-item/configurable-query-item.component.d.ts +1 -1
  9. package/configurable-query/configurable-query.component.d.ts +1 -1
  10. package/configurable-query/configurable-query.module.d.ts +3 -21
  11. package/configurable-query/control.directive.d.ts +1 -1
  12. package/configurable-query/controls/abstract.control.d.ts +2 -2
  13. package/configurable-query/controls/date-picker.control.d.ts +1 -1
  14. package/configurable-query/controls/input.control.d.ts +1 -1
  15. package/configurable-query/controls/range-picker.control.d.ts +1 -1
  16. package/configurable-query/controls/select.control.d.ts +1 -1
  17. package/configurable-query/controls/template.control.d.ts +1 -1
  18. package/dynamic-form/controls/abstract.control.d.ts +1 -1
  19. package/dynamic-form/controls/date-picker.control.d.ts +1 -1
  20. package/dynamic-form/controls/input.control.d.ts +1 -1
  21. package/dynamic-form/controls/range-picker.control.d.ts +1 -1
  22. package/dynamic-form/controls/select.control.d.ts +1 -1
  23. package/dynamic-form/controls/template.control.d.ts +1 -1
  24. package/dynamic-form/dynamic-form-item/dynamic-form-item.component.d.ts +1 -1
  25. package/dynamic-form/dynamic-form.component.d.ts +1 -1
  26. package/dynamic-form/dynamic-form.module.d.ts +1 -7
  27. package/dynamic-form/wrapper/control/abstract-control-wrapper.d.ts +1 -1
  28. package/dynamic-form/wrapper/control/built-in-control-wrapper.d.ts +1 -1
  29. package/dynamic-form/wrapper/item/abstract-item-wrapper.d.ts +1 -1
  30. package/dynamic-form/wrapper/item/built-in-item-wrapper.d.ts +1 -1
  31. package/dynamic-form/wrapper/label/abstract-label-wrapper.d.ts +1 -1
  32. package/dynamic-form/wrapper/label/built-in-label-wrapper.d.ts +1 -1
  33. package/editable/editable.component.d.ts +1 -1
  34. package/editable/editable.module.d.ts +1 -6
  35. package/fesm2022/ng-zorro-antd-extension-acl.mjs +11 -13
  36. package/fesm2022/ng-zorro-antd-extension-acl.mjs.map +1 -1
  37. package/fesm2022/ng-zorro-antd-extension-blank-field.mjs +19 -17
  38. package/fesm2022/ng-zorro-antd-extension-blank-field.mjs.map +1 -1
  39. package/fesm2022/ng-zorro-antd-extension-checkbox.mjs +28 -37
  40. package/fesm2022/ng-zorro-antd-extension-checkbox.mjs.map +1 -1
  41. package/fesm2022/ng-zorro-antd-extension-configurable-query.mjs +78 -116
  42. package/fesm2022/ng-zorro-antd-extension-configurable-query.mjs.map +1 -1
  43. package/fesm2022/ng-zorro-antd-extension-core-config.mjs +3 -3
  44. package/fesm2022/ng-zorro-antd-extension-core-config.mjs.map +1 -1
  45. package/fesm2022/ng-zorro-antd-extension-dynamic-form.mjs +86 -82
  46. package/fesm2022/ng-zorro-antd-extension-dynamic-form.mjs.map +1 -1
  47. package/fesm2022/ng-zorro-antd-extension-editable.mjs +23 -33
  48. package/fesm2022/ng-zorro-antd-extension-editable.mjs.map +1 -1
  49. package/fesm2022/ng-zorro-antd-extension-jigsaw.mjs +9 -10
  50. package/fesm2022/ng-zorro-antd-extension-jigsaw.mjs.map +1 -1
  51. package/fesm2022/ng-zorro-antd-extension-pipes.mjs +26 -26
  52. package/fesm2022/ng-zorro-antd-extension-pipes.mjs.map +1 -1
  53. package/fesm2022/ng-zorro-antd-extension-print.mjs +23 -21
  54. package/fesm2022/ng-zorro-antd-extension-print.mjs.map +1 -1
  55. package/fesm2022/ng-zorro-antd-extension-simple-table.mjs +22 -22
  56. package/fesm2022/ng-zorro-antd-extension-simple-table.mjs.map +1 -1
  57. package/fesm2022/ng-zorro-antd-extension-table-adaptor.mjs +11 -12
  58. package/fesm2022/ng-zorro-antd-extension-table-adaptor.mjs.map +1 -1
  59. package/fesm2022/ng-zorro-antd-extension-table-form.mjs +36 -53
  60. package/fesm2022/ng-zorro-antd-extension-table-form.mjs.map +1 -1
  61. package/fesm2022/ng-zorro-antd-extension-table-select.mjs +38 -40
  62. package/fesm2022/ng-zorro-antd-extension-table-select.mjs.map +1 -1
  63. package/fesm2022/ng-zorro-antd-extension-timer-button.mjs +8 -10
  64. package/fesm2022/ng-zorro-antd-extension-timer-button.mjs.map +1 -1
  65. package/fesm2022/ng-zorro-antd-extension-trim.mjs +8 -9
  66. package/fesm2022/ng-zorro-antd-extension-trim.mjs.map +1 -1
  67. package/fesm2022/ng-zorro-antd-extension-util.mjs.map +1 -1
  68. package/fesm2022/ng-zorro-antd-extension-wang-editor.mjs +11 -13
  69. package/fesm2022/ng-zorro-antd-extension-wang-editor.mjs.map +1 -1
  70. package/jigsaw/jigsaw.component.d.ts +1 -1
  71. package/jigsaw/jigsaw.module.d.ts +1 -3
  72. package/package.json +9 -51
  73. package/pipes/map.pipe.d.ts +1 -1
  74. package/pipes/pipes.module.d.ts +1 -1
  75. package/pipes/safe-html.pipe.d.ts +1 -1
  76. package/pipes/safe-null.pipe.d.ts +1 -1
  77. package/pipes/safe-resource-url.pipe.d.ts +1 -1
  78. package/pipes/safe-script.pipe.d.ts +1 -1
  79. package/pipes/safe-style.pipe.d.ts +1 -1
  80. package/pipes/safe-url.pipe.d.ts +1 -1
  81. package/print/nzx-print-content.directive.d.ts +1 -1
  82. package/print/nzx-print-v.component.d.ts +1 -1
  83. package/print/nzx-print.component.d.ts +1 -1
  84. package/print/nzx-print.directive.d.ts +1 -1
  85. package/print/nzx-print.module.d.ts +1 -4
  86. package/schematics/ng-add/index.js +1 -2
  87. package/schematics/ng-add/index.js.map +1 -1
  88. package/simple-table/directive/expand.directive.d.ts +1 -1
  89. package/simple-table/directive/td.directive.d.ts +1 -1
  90. package/simple-table/directive/th.directive.d.ts +1 -1
  91. package/simple-table/simple-table.component.d.ts +1 -1
  92. package/simple-table/simple-table.module.d.ts +1 -3
  93. package/table-adaptor/page-table-basic.d.ts +1 -1
  94. package/table-adaptor/table-adaptor.directive.d.ts +1 -1
  95. package/table-adaptor/table-adaptor.module.d.ts +1 -1
  96. package/table-form/directive/table-expand.directive.d.ts +1 -1
  97. package/table-form/directive/table-td.directive.d.ts +1 -1
  98. package/table-form/directive/table-th.directive.d.ts +1 -1
  99. package/table-form/table-form.component.d.ts +1 -1
  100. package/table-form/table-form.module.d.ts +1 -10
  101. package/table-select/abstract-table-select.d.ts +2 -2
  102. package/table-select/key.directive.d.ts +1 -1
  103. package/table-select/nzx-table-select.module.d.ts +1 -6
  104. package/table-select/page-table-select/page-table-select.component.d.ts +1 -1
  105. package/table-select/table-select/table-select.component.d.ts +1 -1
  106. package/timer-button/timer-button.directive.d.ts +1 -1
  107. package/timer-button/timer-button.module.d.ts +1 -2
  108. package/trim/trim.directive.d.ts +1 -1
  109. package/trim/trim.module.d.ts +1 -1
  110. package/wang-editor/wang-editor.component.d.ts +1 -1
  111. package/wang-editor/wang-editor.module.d.ts +1 -2
  112. package/wang-editor/wang-toolbar.component.d.ts +1 -1
  113. package/esm2022/acl/ng-zorro-antd-extension-acl.mjs +0 -5
  114. package/esm2022/acl/nzx-acl.directive.mjs +0 -80
  115. package/esm2022/acl/nzx-acl.module.mjs +0 -25
  116. package/esm2022/acl/nzx-acl.service.mjs +0 -45
  117. package/esm2022/acl/public-api.mjs +0 -8
  118. package/esm2022/blank-field/blank-field.component.mjs +0 -52
  119. package/esm2022/blank-field/blank-field.module.mjs +0 -18
  120. package/esm2022/blank-field/ng-zorro-antd-extension-blank-field.mjs +0 -5
  121. package/esm2022/blank-field/public-api.mjs +0 -7
  122. package/esm2022/checkbox/checkbox-group.component.mjs +0 -108
  123. package/esm2022/checkbox/checkbox.module.mjs +0 -20
  124. package/esm2022/checkbox/ng-zorro-antd-extension-checkbox.mjs +0 -5
  125. package/esm2022/checkbox/public-api.mjs +0 -7
  126. package/esm2022/configurable-query/configurable-query-item/configurable-query-item.component.mjs +0 -86
  127. package/esm2022/configurable-query/configurable-query.component.mjs +0 -309
  128. package/esm2022/configurable-query/configurable-query.module.mjs +0 -111
  129. package/esm2022/configurable-query/control.directive.mjs +0 -18
  130. package/esm2022/configurable-query/controls/abstract.control.mjs +0 -20
  131. package/esm2022/configurable-query/controls/date-picker.control.mjs +0 -37
  132. package/esm2022/configurable-query/controls/input.control.mjs +0 -36
  133. package/esm2022/configurable-query/controls/range-picker.control.mjs +0 -35
  134. package/esm2022/configurable-query/controls/select.control.mjs +0 -51
  135. package/esm2022/configurable-query/controls/template.control.mjs +0 -33
  136. package/esm2022/configurable-query/ng-zorro-antd-extension-configurable-query.mjs +0 -5
  137. package/esm2022/configurable-query/public-api.mjs +0 -7
  138. package/esm2022/configurable-query/query-config.service.mjs +0 -68
  139. package/esm2022/configurable-query/type.mjs +0 -2
  140. package/esm2022/core/config/config.mjs +0 -6
  141. package/esm2022/core/config/config.service.mjs +0 -84
  142. package/esm2022/core/config/ng-zorro-antd-extension-core-config.mjs +0 -5
  143. package/esm2022/core/config/public-api.mjs +0 -3
  144. package/esm2022/dynamic-form/config/dynamic-form-config.mjs +0 -47
  145. package/esm2022/dynamic-form/controls/abstract.control.mjs +0 -17
  146. package/esm2022/dynamic-form/controls/date-picker.control.mjs +0 -20
  147. package/esm2022/dynamic-form/controls/input.control.mjs +0 -15
  148. package/esm2022/dynamic-form/controls/range-picker.control.mjs +0 -15
  149. package/esm2022/dynamic-form/controls/select.control.mjs +0 -49
  150. package/esm2022/dynamic-form/controls/template.control.mjs +0 -30
  151. package/esm2022/dynamic-form/dynamic-form-item/dynamic-form-item.component.mjs +0 -31
  152. package/esm2022/dynamic-form/dynamic-form.component.mjs +0 -45
  153. package/esm2022/dynamic-form/dynamic-form.module.mjs +0 -72
  154. package/esm2022/dynamic-form/ng-zorro-antd-extension-dynamic-form.mjs +0 -5
  155. package/esm2022/dynamic-form/public-api.mjs +0 -8
  156. package/esm2022/dynamic-form/wrapper/control/abstract-control-wrapper.mjs +0 -30
  157. package/esm2022/dynamic-form/wrapper/control/built-in-control-wrapper.mjs +0 -32
  158. package/esm2022/dynamic-form/wrapper/item/abstract-item-wrapper.mjs +0 -44
  159. package/esm2022/dynamic-form/wrapper/item/built-in-item-wrapper.mjs +0 -27
  160. package/esm2022/dynamic-form/wrapper/label/abstract-label-wrapper.mjs +0 -10
  161. package/esm2022/dynamic-form/wrapper/label/built-in-label-wrapper.mjs +0 -17
  162. package/esm2022/editable/editable.component.mjs +0 -140
  163. package/esm2022/editable/editable.module.mjs +0 -36
  164. package/esm2022/editable/ng-zorro-antd-extension-editable.mjs +0 -5
  165. package/esm2022/editable/public-api.mjs +0 -3
  166. package/esm2022/i18n/languages/en_US.mjs +0 -10
  167. package/esm2022/i18n/languages/zh_CN.mjs +0 -10
  168. package/esm2022/i18n/ng-zorro-antd-extension-i18n.mjs +0 -5
  169. package/esm2022/i18n/nz-i18n.interface.mjs +0 -2
  170. package/esm2022/i18n/public-api.mjs +0 -4
  171. package/esm2022/jigsaw/jigsaw.component.mjs +0 -257
  172. package/esm2022/jigsaw/jigsaw.module.mjs +0 -19
  173. package/esm2022/jigsaw/ng-zorro-antd-extension-jigsaw.mjs +0 -5
  174. package/esm2022/jigsaw/public-api.mjs +0 -7
  175. package/esm2022/ng-zorro-antd-extension.mjs +0 -5
  176. package/esm2022/pipes/map.pipe.mjs +0 -24
  177. package/esm2022/pipes/ng-zorro-antd-extension-pipes.mjs +0 -5
  178. package/esm2022/pipes/pipes.module.mjs +0 -50
  179. package/esm2022/pipes/public-api.mjs +0 -13
  180. package/esm2022/pipes/safe-html.pipe.mjs +0 -20
  181. package/esm2022/pipes/safe-null.pipe.mjs +0 -30
  182. package/esm2022/pipes/safe-resource-url.pipe.mjs +0 -20
  183. package/esm2022/pipes/safe-script.pipe.mjs +0 -20
  184. package/esm2022/pipes/safe-style.pipe.mjs +0 -20
  185. package/esm2022/pipes/safe-url.pipe.mjs +0 -34
  186. package/esm2022/print/ng-zorro-antd-extension-print.mjs +0 -5
  187. package/esm2022/print/nzx-print-content.directive.mjs +0 -22
  188. package/esm2022/print/nzx-print-v.component.mjs +0 -312
  189. package/esm2022/print/nzx-print.component.mjs +0 -190
  190. package/esm2022/print/nzx-print.directive.mjs +0 -92
  191. package/esm2022/print/nzx-print.module.mjs +0 -39
  192. package/esm2022/print/public-api.mjs +0 -10
  193. package/esm2022/public-api.mjs +0 -5
  194. package/esm2022/simple-table/directive/expand.directive.mjs +0 -16
  195. package/esm2022/simple-table/directive/td.directive.mjs +0 -18
  196. package/esm2022/simple-table/directive/th.directive.mjs +0 -19
  197. package/esm2022/simple-table/ng-zorro-antd-extension-simple-table.mjs +0 -5
  198. package/esm2022/simple-table/public-api.mjs +0 -10
  199. package/esm2022/simple-table/simple-table.component.mjs +0 -229
  200. package/esm2022/simple-table/simple-table.module.mjs +0 -38
  201. package/esm2022/table-adaptor/ng-zorro-antd-extension-table-adaptor.mjs +0 -5
  202. package/esm2022/table-adaptor/page-table-basic.mjs +0 -22
  203. package/esm2022/table-adaptor/public-api.mjs +0 -8
  204. package/esm2022/table-adaptor/table-adaptor.directive.mjs +0 -173
  205. package/esm2022/table-adaptor/table-adaptor.module.mjs +0 -17
  206. package/esm2022/table-form/directive/table-expand.directive.mjs +0 -18
  207. package/esm2022/table-form/directive/table-td.directive.mjs +0 -18
  208. package/esm2022/table-form/directive/table-th.directive.mjs +0 -20
  209. package/esm2022/table-form/ng-zorro-antd-extension-table-form.mjs +0 -5
  210. package/esm2022/table-form/public-api.mjs +0 -11
  211. package/esm2022/table-form/table-form.component.mjs +0 -370
  212. package/esm2022/table-form/table-form.module.mjs +0 -71
  213. package/esm2022/table-form/type.mjs +0 -2
  214. package/esm2022/table-select/abstract-table-select.mjs +0 -140
  215. package/esm2022/table-select/key.directive.mjs +0 -21
  216. package/esm2022/table-select/ng-zorro-antd-extension-table-select.mjs +0 -5
  217. package/esm2022/table-select/nzx-table-select.module.mjs +0 -50
  218. package/esm2022/table-select/page-table-select/page-table-select.component.mjs +0 -58
  219. package/esm2022/table-select/public-api.mjs +0 -11
  220. package/esm2022/table-select/table-select/table-select.component.mjs +0 -39
  221. package/esm2022/table-select/type.mjs +0 -2
  222. package/esm2022/timer-button/ng-zorro-antd-extension-timer-button.mjs +0 -5
  223. package/esm2022/timer-button/public-api.mjs +0 -7
  224. package/esm2022/timer-button/timer-button.directive.mjs +0 -69
  225. package/esm2022/timer-button/timer-button.module.mjs +0 -18
  226. package/esm2022/trim/ng-zorro-antd-extension-trim.mjs +0 -5
  227. package/esm2022/trim/public-api.mjs +0 -7
  228. package/esm2022/trim/trim.directive.mjs +0 -123
  229. package/esm2022/trim/trim.module.mjs +0 -17
  230. package/esm2022/types/common.mjs +0 -2
  231. package/esm2022/types/ng-zorro-antd-extension-types.mjs +0 -5
  232. package/esm2022/types/public-api.mjs +0 -6
  233. package/esm2022/util/lib/cloneDeep.mjs +0 -49
  234. package/esm2022/util/lib/fileUtil.mjs +0 -51
  235. package/esm2022/util/lib/getElementByTag.mjs +0 -38
  236. package/esm2022/util/lib/isArray.mjs +0 -17
  237. package/esm2022/util/lib/isDate.mjs +0 -4
  238. package/esm2022/util/lib/isEmpty.mjs +0 -19
  239. package/esm2022/util/lib/isNumber.mjs +0 -12
  240. package/esm2022/util/lib/isObject.mjs +0 -10
  241. package/esm2022/util/lib/isString.mjs +0 -11
  242. package/esm2022/util/lib/toNumber.mjs +0 -18
  243. package/esm2022/util/lib/toString.mjs +0 -16
  244. package/esm2022/util/lib/trimObject.mjs +0 -15
  245. package/esm2022/util/lib/updateControlStatus.mjs +0 -47
  246. package/esm2022/util/ng-zorro-antd-extension-util.mjs +0 -5
  247. package/esm2022/util/public-api.mjs +0 -18
  248. package/esm2022/wang-editor/ng-zorro-antd-extension-wang-editor.mjs +0 -5
  249. package/esm2022/wang-editor/public-api.mjs +0 -9
  250. package/esm2022/wang-editor/type.mjs +0 -2
  251. package/esm2022/wang-editor/wang-editor.component.mjs +0 -235
  252. package/esm2022/wang-editor/wang-editor.module.mjs +0 -19
  253. package/esm2022/wang-editor/wang-toolbar.component.mjs +0 -57
@@ -1,34 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { inject, Pipe } from '@angular/core';
3
- import { DomSanitizer } from '@angular/platform-browser';
4
- import { ExtensionWithConfig, NzxConfigService, } from 'ng-zorro-antd-extension/core/config';
5
- import * as i0 from "@angular/core";
6
- const NZ_CONFIG_MODULE_NAME = 'nzxSafeUrl';
7
- export class NzxSafeUrlPipe {
8
- constructor() {
9
- this._nzModuleName = NZ_CONFIG_MODULE_NAME;
10
- this.nzxConfigService = inject(NzxConfigService);
11
- this.domSanitizer = inject(DomSanitizer);
12
- }
13
- transform(value, protocol = this.protocol) {
14
- if (/^(http|https|ftp):\/\/[^\s/$.?#].[^\s]*$/.test(value)) {
15
- if (protocol) {
16
- value = value.replace(/^(http|https)/, protocol);
17
- }
18
- return this.domSanitizer.bypassSecurityTrustUrl(value);
19
- }
20
- return value;
21
- }
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxSafeUrlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
23
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NzxSafeUrlPipe, name: "nzxSafeUrl" }); }
24
- }
25
- __decorate([
26
- ExtensionWithConfig()
27
- ], NzxSafeUrlPipe.prototype, "protocol", void 0);
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxSafeUrlPipe, decorators: [{
29
- type: Pipe,
30
- args: [{
31
- name: 'nzxSafeUrl',
32
- }]
33
- }], propDecorators: { protocol: [] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS11cmwucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvcGlwZXMvc2FmZS11cmwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQVcsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsbUJBQW1CLEVBRW5CLGdCQUFnQixHQUNqQixNQUFNLHFDQUFxQyxDQUFDOztBQUU3QyxNQUFNLHFCQUFxQixHQUFpQixZQUFZLENBQUM7QUFLekQsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJVyxrQkFBYSxHQUFpQixxQkFBcUIsQ0FBQztRQUdyRCxxQkFBZ0IsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsaUJBQVksR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBWTNEO0lBVkMsU0FBUyxDQUFDLEtBQWEsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7UUFDL0MsSUFBSSwwQ0FBMEMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBaEJVLGNBQWM7NkdBQWQsY0FBYzs7QUFFRjtJQUF0QixtQkFBbUIsRUFBRTtnREFBd0M7NEZBRm5ELGNBQWM7a0JBSDFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFlBQVk7aUJBQ25COzhCQUd3QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIEV4dGVuc2lvbldpdGhDb25maWcsXG4gIE56eENvbmZpZ0tleSxcbiAgTnp4Q29uZmlnU2VydmljZSxcbn0gZnJvbSAnbmctem9ycm8tYW50ZC1leHRlbnNpb24vY29yZS9jb25maWcnO1xuXG5jb25zdCBOWl9DT05GSUdfTU9EVUxFX05BTUU6IE56eENvbmZpZ0tleSA9ICduenhTYWZlVXJsJztcblxuQFBpcGUoe1xuICBuYW1lOiAnbnp4U2FmZVVybCcsXG59KVxuZXhwb3J0IGNsYXNzIE56eFNhZmVVcmxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHJlYWRvbmx5IF9uek1vZHVsZU5hbWU6IE56eENvbmZpZ0tleSA9IE5aX0NPTkZJR19NT0RVTEVfTkFNRTtcbiAgQEV4dGVuc2lvbldpdGhDb25maWcoKSBwcm90b2NvbDogJ2h0dHAnIHwgJ2h0dHBzJyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIG56eENvbmZpZ1NlcnZpY2U6IE56eENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoTnp4Q29uZmlnU2VydmljZSk7XG4gIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sKTogU2FmZVVybCB7XG4gICAgaWYgKC9eKGh0dHB8aHR0cHN8ZnRwKTpcXC9cXC9bXlxccy8kLj8jXS5bXlxcc10qJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIGlmIChwcm90b2NvbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL14oaHR0cHxodHRwcykvLCBwcm90b2NvbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctem9ycm8tYW50ZC1leHRlbnNpb24tcHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL3ByaW50L25nLXpvcnJvLWFudGQtZXh0ZW5zaW9uLXByaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,22 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class NzxPrintContentDirective {
4
- constructor(elementRef) {
5
- this.elementRef = elementRef;
6
- this.identifierStr = '';
7
- this.customStyle = '';
8
- }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxPrintContentDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: NzxPrintContentDirective, selector: "[nzxPrintContent]", inputs: { identifierStr: "identifierStr", customStyle: "customStyle" }, ngImport: i0 }); }
11
- }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxPrintContentDirective, decorators: [{
13
- type: Directive,
14
- args: [{
15
- selector: '[nzxPrintContent]',
16
- }]
17
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { identifierStr: [{
18
- type: Input
19
- }], customStyle: [{
20
- type: Input
21
- }] } });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnp4LXByaW50LWNvbnRlbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9wcmludC9uengtcHJpbnQtY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzdELE1BQU0sT0FBTyx3QkFBd0I7SUFHbkMsWUFBbUIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUZoQyxrQkFBYSxHQUFzQixFQUFFLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7SUFDa0IsQ0FBQzsrR0FIbEMsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7K0VBRVUsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbnp4UHJpbnRDb250ZW50XScsXG59KVxuZXhwb3J0IGNsYXNzIE56eFByaW50Q29udGVudERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIGlkZW50aWZpZXJTdHI6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XG4gIEBJbnB1dCgpIGN1c3RvbVN0eWxlID0gJyc7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuIl19
@@ -1,312 +0,0 @@
1
- import { Component, ContentChildren, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
- import { CoreViewer, Navigation, PageViewMode, } from '@vivliostyle/core';
3
- import { NzxPrintContentDirective } from './nzx-print-content.directive';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/cdk/platform";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "ng-zorro-antd/grid";
8
- import * as i4 from "ng-zorro-antd/pagination";
9
- /**
10
- * Vivliostyle 打印
11
- */
12
- export class NzxPrintVComponent {
13
- constructor(platform, cd) {
14
- this.platform = platform;
15
- this.cd = cd;
16
- this.printTitle = 'pdf';
17
- /**
18
- * a4 794px1123px
19
- */
20
- this.width = 814;
21
- this.height = 1143;
22
- this.enablePreview = true;
23
- this.pixelRatio = 8;
24
- this.pageRenderComplete = new EventEmitter();
25
- this.pageTotal = 0;
26
- this._title = document.title;
27
- this._isRenderComplete = false;
28
- this.handleError = (payload) => {
29
- console.log('error::', payload);
30
- };
31
- this.handleReadyStateChange = (payload) => {
32
- this._isRenderComplete = false;
33
- this.pageRenderComplete.emit(false);
34
- if (this.viewer && this.viewer.readyState === 'complete') {
35
- const intervalTag = setInterval(() => {
36
- if (this.iframeEl &&
37
- this.iframeEl.contentWindow &&
38
- this.iframeEl.contentWindow.document) {
39
- const images = this.iframeEl.contentWindow.document.getElementsByTagName('img');
40
- let allImagesLoaded = true;
41
- for (let i = 0; i < images.length; i++) {
42
- if (!images[i].complete) {
43
- allImagesLoaded = false;
44
- break;
45
- }
46
- }
47
- if (allImagesLoaded) {
48
- console.log('All images in iframe loaded successfully');
49
- this.pageRenderComplete.emit(true);
50
- this._isRenderComplete = true;
51
- clearInterval(intervalTag);
52
- }
53
- }
54
- }, 1000);
55
- }
56
- };
57
- this.handleHyperlink = (payload) => {
58
- console.log('handleHyperlink::', payload);
59
- };
60
- this.handleLoaded = (payload) => {
61
- console.log('handleLoaded::', payload);
62
- };
63
- this.handleNavigation = (payload) => {
64
- this.pageTotal = payload.epageCount;
65
- this.cd.markForCheck();
66
- };
67
- }
68
- ngAfterViewInit() {
69
- setTimeout(() => {
70
- this.createIframeWrapper();
71
- }, 1000);
72
- }
73
- ngOnDestroy() {
74
- if (this.viewer) {
75
- this.clearView();
76
- }
77
- }
78
- onPageIndexChange(num) {
79
- if (this.viewer) {
80
- this.viewer.navigateToPage(Navigation.EPAGE, num - 1);
81
- }
82
- }
83
- print() {
84
- if (this._isRenderComplete) {
85
- this.iframeEl.contentWindow.print();
86
- }
87
- else {
88
- console.warn('rending...');
89
- }
90
- }
91
- refresh() {
92
- setTimeout(() => {
93
- this.createIframeWrapper();
94
- }, 100);
95
- }
96
- createIframeWrapper() {
97
- if (this.vivViewRef) {
98
- this.clearView();
99
- if (!this.enablePreview) {
100
- this.vivViewRef.nativeElement.style.visibility = 'hidden';
101
- if (this.platform.FIREFOX) {
102
- this.vivViewRef.nativeElement.setAttribute('style', 'width: 1px; height: 100px; position: fixed; left: 0; top: 0; opacity: 0; border-width: 0; margin: 0; padding: 0');
103
- }
104
- else {
105
- this.vivViewRef.nativeElement.setAttribute('style', 'visibility: hidden; height: 0; width: 0; position: absolute; border: 0');
106
- }
107
- }
108
- this.iframeEl = document.createElement('iframe');
109
- this.iframeEl.height = this.height + '';
110
- this.iframeEl.width = this.width + '';
111
- this.iframeEl.style.border = '1px solid #ccc';
112
- this.iframeEl.style.background = '#fff';
113
- const template = `
114
- <!DOCTYPE html>
115
- <html data-vivliostyle-paginated="true">
116
- <head>
117
- <meta charset="utf-8" />
118
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
119
- <base href="/" />
120
- <title>${this.printTitle}</title>
121
- <style>
122
- html[data-vivliostyle-paginated] {
123
- width: 100%;
124
- height: 100%;
125
- }
126
- html[data-vivliostyle-paginated] body,
127
- html[data-vivliostyle-paginated] [data-vivliostyle-viewer-viewport] {
128
- width: 100% !important;
129
- height: 100% !important;
130
- background: #fff;
131
- }
132
- html[data-vivliostyle-paginated],
133
- html[data-vivliostyle-paginated] body {
134
- margin: 0;
135
- padding: 0;
136
- }
137
- </style>
138
- <style id="vivliostyle-page-rules"></style>
139
- </head>
140
- <body>
141
- <div id="vivliostyle-viewer-viewport"></div>
142
- </body>
143
- </html>
144
- `;
145
- this.iframeEl.srcdoc = template;
146
- this.vivViewRef.nativeElement.appendChild(this.iframeEl);
147
- this.iframeEl.contentWindow.onbeforeprint = () => {
148
- this.iframeEl.contentWindow.parent.document.title = this.printTitle;
149
- };
150
- this.iframeEl.contentWindow.onafterprint = () => {
151
- this.iframeEl.contentWindow.parent.document.title = this._title;
152
- };
153
- this.createVivViewer();
154
- }
155
- }
156
- createVivViewer() {
157
- this.iframeEl.onload = () => {
158
- const els = this._printElQueryList.toArray();
159
- const templates = this.getVivTemplates(els);
160
- const options = [];
161
- templates.forEach((template) => {
162
- const docBlob = new Blob([template], {
163
- type: 'text/html',
164
- });
165
- const docURL = URL.createObjectURL(docBlob);
166
- options.push({ url: docURL });
167
- });
168
- this.viewer = new CoreViewer({
169
- viewportElement: this.iframeEl.contentWindow?.document.body
170
- .firstElementChild,
171
- }, {
172
- pageViewMode: PageViewMode.SINGLE_PAGE,
173
- pixelRatio: this.pixelRatio,
174
- });
175
- this.viewer.loadDocument(options);
176
- this.createListener(this.viewer);
177
- };
178
- }
179
- createListener(viewer) {
180
- viewer.addListener('error', this.handleError);
181
- viewer.addListener('readystatechange', this.handleReadyStateChange);
182
- viewer.addListener('loaded', this.handleLoaded);
183
- viewer.addListener('hyperlink', this.handleHyperlink);
184
- viewer.addListener('nav', this.handleNavigation);
185
- }
186
- removeListeners(viewer) {
187
- viewer.removeListener('error', this.handleError);
188
- viewer.removeListener('readystatechange', this.handleReadyStateChange);
189
- viewer.removeListener('loaded', this.handleLoaded);
190
- viewer.removeListener('hyperlink', this.handleHyperlink);
191
- viewer.removeListener('nav', this.handleNavigation);
192
- }
193
- getStyles(identifierStr) {
194
- const stylesArray = [];
195
- const styleElements = document.getElementsByTagName('style');
196
- const length = styleElements.length;
197
- let identifiers = [];
198
- if (Array.isArray(identifierStr)) {
199
- identifiers = [...identifierStr];
200
- }
201
- else {
202
- identifiers = [identifierStr];
203
- }
204
- for (let index = 0; index < length; index++) {
205
- identifiers.forEach((s) => {
206
- if (styleElements[index].outerHTML.includes(s)) {
207
- const formateStr = styleElements[index].outerHTML.replace(/\/\*[\s\S]*?\*\//g, '');
208
- stylesArray.push(formateStr);
209
- }
210
- });
211
- }
212
- return stylesArray.join('\r\n');
213
- }
214
- getVivTemplates(directives) {
215
- const templates = [];
216
- directives.forEach((d) => {
217
- let styles = '';
218
- if (d.identifierStr || d.identifierStr.length > 0) {
219
- styles = this.getStyles(d.identifierStr);
220
- }
221
- let html = `
222
- <!DOCTYPE html>
223
- <html>
224
- <head>
225
- <meta charset="utf-8" />
226
- <title>${this.printTitle}</title>
227
- <base href="/" />
228
- <meta name="viewport" content="width=device-width, initial-scale=1" />
229
- ${d.customStyle}
230
- ${styles}
231
- </head>
232
- <body>
233
- ${d.elementRef.nativeElement.outerHTML}
234
- </body>
235
- </html>
236
- `;
237
- html = html.replace(/<!---->/g, ' ');
238
- templates.push(html);
239
- });
240
- return templates;
241
- }
242
- clearView() {
243
- if (this.viewer) {
244
- this.removeListeners(this.viewer);
245
- }
246
- this.vivViewRef.nativeElement.innerHTML = '';
247
- this.viewer = undefined;
248
- this._isRenderComplete = false;
249
- }
250
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxPrintVComponent, deps: [{ token: i1.Platform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
251
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NzxPrintVComponent, selector: "nzx-print-v", inputs: { printTitle: "printTitle", width: "width", height: "height", enablePreview: "enablePreview", pixelRatio: "pixelRatio" }, outputs: { pageRenderComplete: "pageRenderComplete" }, queries: [{ propertyName: "_printElQueryList", predicate: NzxPrintContentDirective }], viewQueries: [{ propertyName: "vivViewRef", first: true, predicate: ["vivView"], descendants: true }], ngImport: i0, template: `
252
- <ng-content select="[nzxPrintHeader]"></ng-content>
253
-
254
- <div #vivView [ngStyle]="{ margin: '10px 0' }"></div>
255
-
256
- <div nz-row nzJustify="end" *ngIf="enablePreview">
257
- <ng-template #totalTemplate let-total>共 {{ total }} 页</ng-template>
258
- <nz-pagination
259
- [nzPageIndex]="1"
260
- [nzTotal]="pageTotal"
261
- [nzPageSize]="1"
262
- [nzSize]="'small'"
263
- [nzShowTotal]="totalTemplate"
264
- nzShowQuickJumper
265
- (nzPageIndexChange)="onPageIndexChange($event)"
266
- ></nz-pagination>
267
- </div>
268
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i4.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }] }); }
269
- }
270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxPrintVComponent, decorators: [{
271
- type: Component,
272
- args: [{
273
- selector: 'nzx-print-v',
274
- template: `
275
- <ng-content select="[nzxPrintHeader]"></ng-content>
276
-
277
- <div #vivView [ngStyle]="{ margin: '10px 0' }"></div>
278
-
279
- <div nz-row nzJustify="end" *ngIf="enablePreview">
280
- <ng-template #totalTemplate let-total>共 {{ total }} 页</ng-template>
281
- <nz-pagination
282
- [nzPageIndex]="1"
283
- [nzTotal]="pageTotal"
284
- [nzPageSize]="1"
285
- [nzSize]="'small'"
286
- [nzShowTotal]="totalTemplate"
287
- nzShowQuickJumper
288
- (nzPageIndexChange)="onPageIndexChange($event)"
289
- ></nz-pagination>
290
- </div>
291
- `,
292
- }]
293
- }], ctorParameters: () => [{ type: i1.Platform }, { type: i0.ChangeDetectorRef }], propDecorators: { printTitle: [{
294
- type: Input
295
- }], width: [{
296
- type: Input
297
- }], height: [{
298
- type: Input
299
- }], enablePreview: [{
300
- type: Input
301
- }], pixelRatio: [{
302
- type: Input
303
- }], pageRenderComplete: [{
304
- type: Output
305
- }], vivViewRef: [{
306
- type: ViewChild,
307
- args: ['vivView']
308
- }], _printElQueryList: [{
309
- type: ContentChildren,
310
- args: [NzxPrintContentDirective]
311
- }] } });
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnp4LXByaW50LXYuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9wcmludC9uengtcHJpbnQtdi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksR0FHYixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7QUFFekU7O0dBRUc7QUFzQkgsTUFBTSxPQUFPLGtCQUFrQjtJQXVCN0IsWUFBb0IsUUFBa0IsRUFBVSxFQUFxQjtRQUFqRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF0QjVELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDNUI7O1dBRUc7UUFDTSxVQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ1osV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRzNELGNBQVMsR0FBRyxDQUFDLENBQUM7UUFPTixXQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUV4QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFvSTFCLGdCQUFXLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRU0sMkJBQXNCLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFD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QUM7SUFDakMsQ0FBQzsrR0F2UlUsa0JBQWtCO21HQUFsQixrQkFBa0IsOFFBaUJaLHdCQUF3QixvSUFwQy9COzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDs7NEZBRVUsa0JBQWtCO2tCQXJCOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDtpQkFDRjs2R0FFVSxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFNQyxVQUFVO3NCQURqQixTQUFTO3VCQUFDLFNBQVM7Z0JBSVosaUJBQWlCO3NCQUR4QixlQUFlO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENvcmVWaWV3ZXIsXG4gIE5hdmlnYXRpb24sXG4gIFBhZ2VWaWV3TW9kZSxcbiAgUGF5bG9hZCxcbiAgU2luZ2xlRG9jdW1lbnRPcHRpb25zLFxufSBmcm9tICdAdml2bGlvc3R5bGUvY29yZSc7XG5pbXBvcnQgeyBOenhQcmludENvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL256eC1wcmludC1jb250ZW50LmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogVml2bGlvc3R5bGUg5omT5Y2wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256eC1wcmludC12JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbnp4UHJpbnRIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiAjdml2VmlldyBbbmdTdHlsZV09XCJ7IG1hcmdpbjogJzEwcHggMCcgfVwiPjwvZGl2PlxuXG4gICAgPGRpdiBuei1yb3cgbnpKdXN0aWZ5PVwiZW5kXCIgKm5nSWY9XCJlbmFibGVQcmV2aWV3XCI+XG4gICAgICA8bmctdGVtcGxhdGUgI3RvdGFsVGVtcGxhdGUgbGV0LXRvdGFsPuWFsSB7eyB0b3RhbCB9fSDpobU8L25nLXRlbXBsYXRlPlxuICAgICAgPG56LXBhZ2luYXRpb25cbiAgICAgICAgW256UGFnZUluZGV4XT1cIjFcIlxuICAgICAgICBbbnpUb3RhbF09XCJwYWdlVG90YWxcIlxuICAgICAgICBbbnpQYWdlU2l6ZV09XCIxXCJcbiAgICAgICAgW256U2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgW256U2hvd1RvdGFsXT1cInRvdGFsVGVtcGxhdGVcIlxuICAgICAgICBuelNob3dRdWlja0p1bXBlclxuICAgICAgICAobnpQYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9uei1wYWdpbmF0aW9uPlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOenhQcmludFZDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBwcmludFRpdGxlID0gJ3BkZic7XG4gIC8qKlxuICAgKiBhNCA3OTRweDExMjNweFxuICAgKi9cbiAgQElucHV0KCkgd2lkdGggPSA4MTQ7XG4gIEBJbnB1dCgpIGhlaWdodCA9IDExNDM7XG4gIEBJbnB1dCgpIGVuYWJsZVByZXZpZXcgPSB0cnVlO1xuICBASW5wdXQoKSBwaXhlbFJhdGlvID0gODtcbiAgQE91dHB1dCgpIHBhZ2VSZW5kZXJDb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICB2aWV3ZXI6IENvcmVWaWV3ZXIgfCB1bmRlZmluZWQ7XG4gIHBhZ2VUb3RhbCA9IDA7XG5cbiAgQFZpZXdDaGlsZCgndml2VmlldycpXG4gIHByaXZhdGUgdml2Vmlld1JlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTnp4UHJpbnRDb250ZW50RGlyZWN0aXZlKVxuICBwcml2YXRlIF9wcmludEVsUXVlcnlMaXN0ITogUXVlcnlMaXN0PE56eFByaW50Q29udGVudERpcmVjdGl2ZT47XG4gIHByaXZhdGUgX3RpdGxlID0gZG9jdW1lbnQudGl0bGU7XG4gIHByaXZhdGUgaWZyYW1lRWwhOiBIVE1MSUZyYW1lRWxlbWVudDtcbiAgcHJpdmF0ZSBfaXNSZW5kZXJDb21wbGV0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNyZWF0ZUlmcmFtZVdyYXBwZXIoKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXdlcikge1xuICAgICAgdGhpcy5jbGVhclZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBvblBhZ2VJbmRleENoYW5nZShudW06IG51bWJlcikge1xuICAgIGlmICh0aGlzLnZpZXdlcikge1xuICAgICAgdGhpcy52aWV3ZXIubmF2aWdhdGVUb1BhZ2UoTmF2aWdhdGlvbi5FUEFHRSwgbnVtIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpbnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVuZGVyQ29tcGxldGUpIHtcbiAgICAgIHRoaXMuaWZyYW1lRWwuY29udGVudFdpbmRvdyEucHJpbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdyZW5kaW5nLi4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlSWZyYW1lV3JhcHBlcigpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUlmcmFtZVdyYXBwZXIoKSB7XG4gICAgaWYgKHRoaXMudml2Vmlld1JlZikge1xuICAgICAgdGhpcy5jbGVhclZpZXcoKTtcbiAgICAgIGlmICghdGhpcy5lbmFibGVQcmV2aWV3KSB7XG4gICAgICAgIHRoaXMudml2Vmlld1JlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uRklSRUZPWCkge1xuICAgICAgICAgIHRoaXMudml2Vmlld1JlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAnd2lkdGg6IDFweDsgaGVpZ2h0OiAxMDBweDsgcG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7IG9wYWNpdHk6IDA7IGJvcmRlci13aWR0aDogMDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aXZWaWV3UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAgICd2aXNpYmlsaXR5OiBoaWRkZW47IGhlaWdodDogMDsgd2lkdGg6IDA7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm9yZGVyOiAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5pZnJhbWVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgdGhpcy5pZnJhbWVFbC5oZWlnaHQgPSB0aGlzLmhlaWdodCArICcnO1xuICAgICAgdGhpcy5pZnJhbWVFbC53aWR0aCA9IHRoaXMud2lkdGggKyAnJztcbiAgICAgIHRoaXMuaWZyYW1lRWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgIHRoaXMuaWZyYW1lRWwuc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmJztcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBgXG4gICAgICAgIDwhRE9DVFlQRSBodG1sPlxuICAgICAgICA8aHRtbCBkYXRhLXZpdmxpb3N0eWxlLXBhZ2luYXRlZD1cInRydWVcIj5cbiAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+XG4gICAgICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiIC8+XG4gICAgICAgICAgICA8YmFzZSBocmVmPVwiL1wiIC8+XG4gICAgICAgICAgICA8dGl0bGU+JHt0aGlzLnByaW50VGl0bGV9PC90aXRsZT5cbiAgICAgICAgICAgIDxzdHlsZT5cbiAgICAgICAgICAgICAgaHRtbFtkYXRhLXZpdmxpb3N0eWxlLXBhZ2luYXRlZF0ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBodG1sW2RhdGEtdml2bGlvc3R5bGUtcGFnaW5hdGVkXSBib2R5LFxuICAgICAgICAgICAgICBodG1sW2RhdGEtdml2bGlvc3R5bGUtcGFnaW5hdGVkXSBbZGF0YS12aXZsaW9zdHlsZS12aWV3ZXItdmlld3BvcnRdIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaHRtbFtkYXRhLXZpdmxpb3N0eWxlLXBhZ2luYXRlZF0sXG4gICAgICAgICAgICAgIGh0bWxbZGF0YS12aXZsaW9zdHlsZS1wYWdpbmF0ZWRdIGJvZHkge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N0eWxlPlxuICAgICAgICAgICAgPHN0eWxlIGlkPVwidml2bGlvc3R5bGUtcGFnZS1ydWxlc1wiPjwvc3R5bGU+XG4gICAgICAgICAgPC9oZWFkPlxuICAgICAgICAgIDxib2R5PlxuICAgICAgICAgICAgPGRpdiBpZD1cInZpdmxpb3N0eWxlLXZpZXdlci12aWV3cG9ydFwiPjwvZGl2PlxuICAgICAgICAgIDwvYm9keT5cbiAgICAgICAgPC9odG1sPlxuICAgICAgYDtcblxuICAgICAgdGhpcy5pZnJhbWVFbC5zcmNkb2MgPSB0ZW1wbGF0ZTtcbiAgICAgIHRoaXMudml2Vmlld1JlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaWZyYW1lRWwpO1xuICAgICAgdGhpcy5pZnJhbWVFbC5jb250ZW50V2luZG93IS5vbmJlZm9yZXByaW50ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3chLnBhcmVudC5kb2N1bWVudC50aXRsZSA9IHRoaXMucHJpbnRUaXRsZTtcbiAgICAgIH07XG4gICAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3chLm9uYWZ0ZXJwcmludCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5pZnJhbWVFbC5jb250ZW50V2luZG93IS5wYXJlbnQuZG9jdW1lbnQudGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVZpdlZpZXdlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVml2Vmlld2VyKCkge1xuICAgIHRoaXMuaWZyYW1lRWwub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWxzOiBOenhQcmludENvbnRlbnREaXJlY3RpdmVbXSA9IHRoaXMuX3ByaW50RWxRdWVyeUxpc3QudG9BcnJheSgpO1xuICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5nZXRWaXZUZW1wbGF0ZXMoZWxzKTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IFNpbmdsZURvY3VtZW50T3B0aW9uc1tdID0gW107XG4gICAgICB0ZW1wbGF0ZXMuZm9yRWFjaCgodGVtcGxhdGUpID0+IHtcbiAgICAgICAgY29uc3QgZG9jQmxvYiA9IG5ldyBCbG9iKFt0ZW1wbGF0ZV0sIHtcbiAgICAgICAgICB0eXBlOiAndGV4dC9odG1sJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRvY1VSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG9jQmxvYik7XG4gICAgICAgIG9wdGlvbnMucHVzaCh7IHVybDogZG9jVVJMIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnZpZXdlciA9IG5ldyBDb3JlVmlld2VyKFxuICAgICAgICB7XG4gICAgICAgICAgdmlld3BvcnRFbGVtZW50OiB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LmJvZHlcbiAgICAgICAgICAgIC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhZ2VWaWV3TW9kZTogUGFnZVZpZXdNb2RlLlNJTkdMRV9QQUdFLFxuICAgICAgICAgIHBpeGVsUmF0aW86IHRoaXMucGl4ZWxSYXRpbyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMudmlld2VyLmxvYWREb2N1bWVudChvcHRpb25zKTtcbiAgICAgIHRoaXMuY3JlYXRlTGlzdGVuZXIodGhpcy52aWV3ZXIpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yID0gKHBheWxvYWQ6IFBheWxvYWQpID0+IHtcbiAgICBjb25zb2xlLmxvZygnZXJyb3I6OicsIHBheWxvYWQpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlUmVhZHlTdGF0ZUNoYW5nZSA9IChwYXlsb2FkOiBQYXlsb2FkKSA9PiB7XG4gICAgdGhpcy5faXNSZW5kZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMucGFnZVJlbmRlckNvbXBsZXRlLmVtaXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLnZpZXdlciAmJiB0aGlzLnZpZXdlci5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBpbnRlcnZhbFRhZyA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuaWZyYW1lRWwgJiZcbiAgICAgICAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3cgJiZcbiAgICAgICAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VzID1cbiAgICAgICAgICAgIHRoaXMuaWZyYW1lRWwuY29udGVudFdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG5cbiAgICAgICAgICBsZXQgYWxsSW1hZ2VzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpbWFnZXNbaV0uY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgYWxsSW1hZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWxsSW1hZ2VzTG9hZGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQWxsIGltYWdlcyBpbiBpZnJhbWUgbG9hZGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgICAgdGhpcy5wYWdlUmVuZGVyQ29tcGxldGUuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2lzUmVuZGVyQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFRhZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVIeXBlcmxpbmsgPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdoYW5kbGVIeXBlcmxpbms6OicsIHBheWxvYWQpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlTG9hZGVkID0gKHBheWxvYWQ6IFBheWxvYWQpID0+IHtcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlTG9hZGVkOjonLCBwYXlsb2FkKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb24gPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xuICAgIHRoaXMucGFnZVRvdGFsID0gcGF5bG9hZC5lcGFnZUNvdW50O1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVMaXN0ZW5lcih2aWV3ZXI6IENvcmVWaWV3ZXIpIHtcbiAgICB2aWV3ZXIuYWRkTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5oYW5kbGVFcnJvcik7XG4gICAgdmlld2VyLmFkZExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgdGhpcy5oYW5kbGVSZWFkeVN0YXRlQ2hhbmdlKTtcbiAgICB2aWV3ZXIuYWRkTGlzdGVuZXIoJ2xvYWRlZCcsIHRoaXMuaGFuZGxlTG9hZGVkKTtcbiAgICB2aWV3ZXIuYWRkTGlzdGVuZXIoJ2h5cGVybGluaycsIHRoaXMuaGFuZGxlSHlwZXJsaW5rKTtcbiAgICB2aWV3ZXIuYWRkTGlzdGVuZXIoJ25hdicsIHRoaXMuaGFuZGxlTmF2aWdhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycyh2aWV3ZXI6IENvcmVWaWV3ZXIpIHtcbiAgICB2aWV3ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5oYW5kbGVFcnJvcik7XG4gICAgdmlld2VyLnJlbW92ZUxpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgdGhpcy5oYW5kbGVSZWFkeVN0YXRlQ2hhbmdlKTtcbiAgICB2aWV3ZXIucmVtb3ZlTGlzdGVuZXIoJ2xvYWRlZCcsIHRoaXMuaGFuZGxlTG9hZGVkKTtcbiAgICB2aWV3ZXIucmVtb3ZlTGlzdGVuZXIoJ2h5cGVybGluaycsIHRoaXMuaGFuZGxlSHlwZXJsaW5rKTtcbiAgICB2aWV3ZXIucmVtb3ZlTGlzdGVuZXIoJ25hdicsIHRoaXMuaGFuZGxlTmF2aWdhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldFN0eWxlcyhpZGVudGlmaWVyU3RyOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3R5bGVzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc3R5bGVFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpO1xuICAgIGNvbnN0IGxlbmd0aCA9IHN0eWxlRWxlbWVudHMubGVuZ3RoO1xuICAgIGxldCBpZGVudGlmaWVyczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpZGVudGlmaWVyU3RyKSkge1xuICAgICAgaWRlbnRpZmllcnMgPSBbLi4uaWRlbnRpZmllclN0cl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkZW50aWZpZXJzID0gW2lkZW50aWZpZXJTdHJdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZGVudGlmaWVycy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgIGlmIChzdHlsZUVsZW1lbnRzW2luZGV4XS5vdXRlckhUTUwuaW5jbHVkZXMocykpIHtcbiAgICAgICAgICBjb25zdCBmb3JtYXRlU3RyID0gc3R5bGVFbGVtZW50c1tpbmRleF0ub3V0ZXJIVE1MLnJlcGxhY2UoXG4gICAgICAgICAgICAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0eWxlc0FycmF5LnB1c2goZm9ybWF0ZVN0cik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVzQXJyYXkuam9pbignXFxyXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZpdlRlbXBsYXRlcyhkaXJlY3RpdmVzOiBOenhQcmludENvbnRlbnREaXJlY3RpdmVbXSkge1xuICAgIGNvbnN0IHRlbXBsYXRlczogc3RyaW5nW10gPSBbXTtcbiAgICBkaXJlY3RpdmVzLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGxldCBzdHlsZXMgPSAnJztcbiAgICAgIGlmIChkLmlkZW50aWZpZXJTdHIgfHwgZC5pZGVudGlmaWVyU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3R5bGVzID0gdGhpcy5nZXRTdHlsZXMoZC5pZGVudGlmaWVyU3RyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGh0bWwgPSBgXG4gICAgICAgICAgPCFET0NUWVBFIGh0bWw+XG4gICAgICAgICAgPGh0bWw+XG4gICAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+XG4gICAgICAgICAgICA8dGl0bGU+JHt0aGlzLnByaW50VGl0bGV9PC90aXRsZT5cbiAgICAgICAgICAgIDxiYXNlIGhyZWY9XCIvXCIgLz5cbiAgICAgICAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICAgICAgICAgJHtkLmN1c3RvbVN0eWxlfVxuICAgICAgICAgICAgICR7c3R5bGVzfVxuICAgICAgICAgICAgPC9oZWFkPlxuICAgICAgICAgICAgPGJvZHk+XG4gICAgICAgICAgICAgICR7ZC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub3V0ZXJIVE1MfVxuICAgICAgICAgICAgPC9ib2R5PlxuICAgICAgICAgIDwvaHRtbD5cbiAgICAgICAgYDtcbiAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzwhLS0tLT4vZywgJyAnKTtcbiAgICAgIHRlbXBsYXRlcy5wdXNoKGh0bWwpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlcztcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJWaWV3KCkge1xuICAgIGlmICh0aGlzLnZpZXdlcikge1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnModGhpcy52aWV3ZXIpO1xuICAgIH1cbiAgICB0aGlzLnZpdlZpZXdSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLnZpZXdlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9pc1JlbmRlckNvbXBsZXRlID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -1,190 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { Component, ContentChild, ElementRef, Inject, Input, ViewChild, } from '@angular/core';
3
- import { getElementByTag } from 'ng-zorro-antd-extension/util';
4
- import { NzxPrintContentDirective } from './nzx-print-content.directive';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/cdk/platform";
7
- /**
8
- * 使用Paged.js打印
9
- */
10
- export class NzxPrintComponent {
11
- constructor(platform, document) {
12
- this.platform = platform;
13
- this.document = document;
14
- this.printTitle = 'pdf';
15
- /**
16
- * a4 794px1123px
17
- */
18
- this.width = 814;
19
- this.height = 1143;
20
- this.enablePreview = true;
21
- this.identifierStr = '';
22
- this.pagedCDN = '';
23
- this._title = this.document.title;
24
- this.afterPrint = () => {
25
- this.iframeEl.contentWindow.parent.document.title = this._title;
26
- };
27
- this.beforePrint = () => {
28
- this.iframeEl.contentWindow.parent.document.title = this.printTitle;
29
- };
30
- }
31
- ngOnInit() {
32
- if (!this.pagedCDN) {
33
- throw new Error('pagedCDN is required');
34
- }
35
- }
36
- ngAfterViewInit() {
37
- this.render();
38
- }
39
- print() {
40
- if (this.iframeEl.contentWindow) {
41
- this.iframeEl.contentWindow.focus();
42
- this.iframeEl.contentWindow.print();
43
- }
44
- }
45
- refresh() {
46
- setTimeout(() => {
47
- this.render();
48
- }, 100);
49
- }
50
- render() {
51
- this.iframeEl = this.document.createElement('iframe');
52
- this.iframeEl.height = this.height + '';
53
- this.iframeEl.width = this.width + '';
54
- this.iframeEl.style.border = '1px solid #ccc';
55
- this.iframeEl.style.background = '#fff';
56
- if (!this.enablePreview) {
57
- this.iframeEl.style.visibility = 'hidden';
58
- if (this.platform.FIREFOX) {
59
- this.iframeEl.setAttribute('style', 'width: 1px; height: 100px; position: fixed; left: 0; top: 0; opacity: 0; border-width: 0; margin: 0; padding: 0');
60
- }
61
- else {
62
- this.iframeEl.setAttribute('style', 'visibility: hidden; height: 0; width: 0; position: absolute; border: 0');
63
- }
64
- }
65
- if (this.containerRef) {
66
- this.containerRef.nativeElement.innerHTML = '';
67
- this.containerRef.nativeElement.appendChild(this.iframeEl);
68
- }
69
- if (this.iframeEl.contentWindow) {
70
- this.iframeEl.contentWindow.document.open();
71
- this.iframeEl.contentWindow.document.write(this.getTemplateStr());
72
- this.iframeEl.contentWindow.document.close();
73
- // chorme bug
74
- this.iframeEl.contentWindow.onbeforeprint = this.beforePrint;
75
- this.iframeEl.contentWindow.onafterprint = this.afterPrint;
76
- }
77
- }
78
- getTemplateStr() {
79
- const styles = getElementByTag('style', this.identifierStr);
80
- const scripts = `
81
- <script src="${this.pagedCDN}"></script>
82
- <script>
83
- class RepeatingTableHeaders extends Paged.Handler {
84
- constructor(chunker, polisher, caller) {
85
- super(chunker, polisher, caller);
86
- }
87
-
88
- afterPageLayout(pageElement, page, breakToken, chunker) {
89
- let tables = pageElement.querySelectorAll('table[data-split-from]');
90
- tables.forEach((table) => {
91
- let ref = table.dataset.ref;
92
- let sourceTable = chunker.source.querySelector(
93
- "[data-ref='" + ref + "']"
94
- );
95
- let header = sourceTable.querySelector('thead');
96
- if (header) {
97
- let clonedHeader = header.cloneNode(true);
98
- table.insertBefore(clonedHeader, table.firstChild);
99
- }
100
- });
101
- }
102
- }
103
- Paged.registerHandlers(RepeatingTableHeaders);
104
- </script>
105
- `;
106
- let html = `
107
- <!DOCTYPE html>
108
- <html>
109
- <head>
110
- <meta charset="utf-8" />
111
- <title>${this.printTitle}</title>
112
- <base href="/" />
113
- <meta name="viewport" content="width=device-width, initial-scale=1" />
114
- <link
115
- rel="preconnect"
116
- href="https://winkong-frontend.oss-cn-qingdao.aliyuncs.com"
117
- />
118
- <style>
119
- ::-webkit-scrollbar {
120
- width: 5px;
121
- height: 5px;
122
- }
123
- ::-webkit-scrollbar-thumb {
124
- background-color: #999;
125
- -webkit-border-radius: 5px;
126
- border-radius: 5px;
127
- }
128
- ::-webkit-scrollbar-thumb:vertical:hover {
129
- background-color: #666;
130
- }
131
- ::-webkit-scrollbar-thumb:vertical:active {
132
- background-color: #666;
133
- }
134
- ::-webkit-scrollbar-button {
135
- display: none;
136
- }
137
- ::-webkit-scrollbar-track {
138
- background-color: #f1f1f1;
139
- }
140
- </style>
141
-
142
- ${styles}
143
- ${scripts}
144
- </head>
145
- <body>
146
- ${this._printEl.nativeElement.outerHTML}
147
- </body>
148
- </html>
149
- `;
150
- html = html.replace(/<!---->/g, ' ');
151
- return html;
152
- }
153
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxPrintComponent, deps: [{ token: i1.Platform }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
154
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NzxPrintComponent, selector: "nzx-print", inputs: { printTitle: "printTitle", width: "width", height: "height", enablePreview: "enablePreview", identifierStr: "identifierStr", pagedCDN: "pagedCDN" }, queries: [{ propertyName: "_printEl", first: true, predicate: NzxPrintContentDirective, descendants: true, read: ElementRef, static: true }], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["iframeContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: `
155
- <ng-content select="[nzxPrintHeader]"></ng-content>
156
- <div #iframeContainer></div>
157
- `, isInline: true }); }
158
- }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NzxPrintComponent, decorators: [{
160
- type: Component,
161
- args: [{
162
- selector: 'nzx-print',
163
- template: `
164
- <ng-content select="[nzxPrintHeader]"></ng-content>
165
- <div #iframeContainer></div>
166
- `,
167
- }]
168
- }], ctorParameters: () => [{ type: i1.Platform }, { type: Document, decorators: [{
169
- type: Inject,
170
- args: [DOCUMENT]
171
- }] }], propDecorators: { printTitle: [{
172
- type: Input
173
- }], width: [{
174
- type: Input
175
- }], height: [{
176
- type: Input
177
- }], enablePreview: [{
178
- type: Input
179
- }], identifierStr: [{
180
- type: Input
181
- }], pagedCDN: [{
182
- type: Input
183
- }], containerRef: [{
184
- type: ViewChild,
185
- args: ['iframeContainer', { read: ElementRef, static: true }]
186
- }], _printEl: [{
187
- type: ContentChild,
188
- args: [NzxPrintContentDirective, { read: ElementRef, static: true }]
189
- }] } });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnp4LXByaW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvcHJpbnQvbnp4LXByaW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBRXpFOztHQUVHO0FBUUgsTUFBTSxPQUFPLGlCQUFpQjtJQTBCNUIsWUFDVSxRQUFrQixFQUNBLFFBQWtCO1FBRHBDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDQSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0JyQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzVCOztXQUVHO1FBQ00sVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixrQkFBYSxHQUFzQixFQUFFLENBQUM7UUFDdEMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQVFmLFdBQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUU3QixlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkUsQ0FBQyxDQUFDO1FBQ00sZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFD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dWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldEVsZW1lbnRCeVRhZyB9IGZyb20gJ25nLXpvcnJvLWFudGQtZXh0ZW5zaW9uL3V0aWwnO1xuaW1wb3J0IHsgTnp4UHJpbnRDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9uengtcHJpbnQtY29udGVudC5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIOS9v+eUqFBhZ2VkLmpz5omT5Y2wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256eC1wcmludCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW256eFByaW50SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2ICNpZnJhbWVDb250YWluZXI+PC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE56eFByaW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgcHJpbnRUaXRsZSA9ICdwZGYnO1xuICAvKipcbiAgICogYTQgNzk0cHgxMTIzcHhcbiAgICovXG4gIEBJbnB1dCgpIHdpZHRoID0gODE0O1xuICBASW5wdXQoKSBoZWlnaHQgPSAxMTQzO1xuICBASW5wdXQoKSBlbmFibGVQcmV2aWV3ID0gdHJ1ZTtcbiAgQElucHV0KCkgaWRlbnRpZmllclN0cjogc3RyaW5nIHwgc3RyaW5nW10gPSAnJztcbiAgQElucHV0KCkgcGFnZWRDRE4gPSAnJztcblxuICBAVmlld0NoaWxkKCdpZnJhbWVDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZChOenhQcmludENvbnRlbnREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX3ByaW50RWwhOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGlmcmFtZUVsITogSFRNTElGcmFtZUVsZW1lbnQ7XG4gIHByaXZhdGUgX3RpdGxlID0gdGhpcy5kb2N1bWVudC50aXRsZTtcblxuICBwcml2YXRlIGFmdGVyUHJpbnQgPSAoKSA9PiB7XG4gICAgdGhpcy5pZnJhbWVFbC5jb250ZW50V2luZG93IS5wYXJlbnQuZG9jdW1lbnQudGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgfTtcbiAgcHJpdmF0ZSBiZWZvcmVQcmludCA9ICgpID0+IHtcbiAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3chLnBhcmVudC5kb2N1bWVudC50aXRsZSA9IHRoaXMucHJpbnRUaXRsZTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2VkQ0ROKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZ2VkQ0ROIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmludCgpIHtcbiAgICBpZiAodGhpcy5pZnJhbWVFbC5jb250ZW50V2luZG93KSB7XG4gICAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICAgIHRoaXMuaWZyYW1lRWwuY29udGVudFdpbmRvdy5wcmludCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpIHtcbiAgICB0aGlzLmlmcmFtZUVsID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICB0aGlzLmlmcmFtZUVsLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgJyc7XG4gICAgdGhpcy5pZnJhbWVFbC53aWR0aCA9IHRoaXMud2lkdGggKyAnJztcbiAgICB0aGlzLmlmcmFtZUVsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2NjYyc7XG4gICAgdGhpcy5pZnJhbWVFbC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmYnO1xuXG4gICAgaWYgKCF0aGlzLmVuYWJsZVByZXZpZXcpIHtcbiAgICAgIHRoaXMuaWZyYW1lRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgaWYgKHRoaXMucGxhdGZvcm0uRklSRUZPWCkge1xuICAgICAgICB0aGlzLmlmcmFtZUVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICd3aWR0aDogMXB4OyBoZWlnaHQ6IDEwMHB4OyBwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsgb3BhY2l0eTogMDsgYm9yZGVyLXdpZHRoOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDAnXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlmcmFtZUVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICd2aXNpYmlsaXR5OiBoaWRkZW47IGhlaWdodDogMDsgd2lkdGg6IDA7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm9yZGVyOiAwJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jb250YWluZXJSZWYpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaWZyYW1lRWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgIHRoaXMuaWZyYW1lRWwuY29udGVudFdpbmRvdy5kb2N1bWVudC5vcGVuKCk7XG4gICAgICB0aGlzLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQud3JpdGUodGhpcy5nZXRUZW1wbGF0ZVN0cigpKTtcbiAgICAgIHRoaXMuaWZyYW1lRWwuY29udGVudFdpbmRvdy5kb2N1bWVudC5jbG9zZSgpO1xuICAgICAgLy8gY2hvcm1lIGJ1Z1xuICAgICAgdGhpcy5pZnJhbWVFbC5jb250ZW50V2luZG93Lm9uYmVmb3JlcHJpbnQgPSB0aGlzLmJlZm9yZVByaW50O1xuICAgICAgdGhpcy5pZnJhbWVFbC5jb250ZW50V2luZG93Lm9uYWZ0ZXJwcmludCA9IHRoaXMuYWZ0ZXJQcmludDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRlbXBsYXRlU3RyKCkge1xuICAgIGNvbnN0IHN0eWxlcyA9IGdldEVsZW1lbnRCeVRhZygnc3R5bGUnLCB0aGlzLmlkZW50aWZpZXJTdHIpO1xuXG4gICAgY29uc3Qgc2NyaXB0cyA9IGBcbiAgICAgICAgPHNjcmlwdCBzcmM9XCIke3RoaXMucGFnZWRDRE59XCI+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgY2xhc3MgUmVwZWF0aW5nVGFibGVIZWFkZXJzIGV4dGVuZHMgUGFnZWQuSGFuZGxlciB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihjaHVua2VyLCBwb2xpc2hlciwgY2FsbGVyKSB7XG4gICAgICAgICAgICAgIHN1cGVyKGNodW5rZXIsIHBvbGlzaGVyLCBjYWxsZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhZnRlclBhZ2VMYXlvdXQocGFnZUVsZW1lbnQsIHBhZ2UsIGJyZWFrVG9rZW4sIGNodW5rZXIpIHtcbiAgICAgICAgICAgICAgbGV0IHRhYmxlcyA9IHBhZ2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlW2RhdGEtc3BsaXQtZnJvbV0nKTtcbiAgICAgICAgICAgICAgdGFibGVzLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZiA9IHRhYmxlLmRhdGFzZXQucmVmO1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VUYWJsZSA9IGNodW5rZXIuc291cmNlLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICBcIltkYXRhLXJlZj0nXCIgKyByZWYgKyBcIiddXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxldCBoZWFkZXIgPSBzb3VyY2VUYWJsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBjbG9uZWRIZWFkZXIgPSBoZWFkZXIuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgdGFibGUuaW5zZXJ0QmVmb3JlKGNsb25lZEhlYWRlciwgdGFibGUuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgUGFnZWQucmVnaXN0ZXJIYW5kbGVycyhSZXBlYXRpbmdUYWJsZUhlYWRlcnMpO1xuICAgICAgICA8L3NjcmlwdD5cbiAgICAgIGA7XG5cbiAgICBsZXQgaHRtbCA9IGBcbiAgICAgICAgPCFET0NUWVBFIGh0bWw+XG4gICAgICAgIDxodG1sPlxuICAgICAgICAgIDxoZWFkPlxuICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+XG4gICAgICAgICAgPHRpdGxlPiR7dGhpcy5wcmludFRpdGxlfTwvdGl0bGU+XG4gICAgICAgICAgPGJhc2UgaHJlZj1cIi9cIiAvPlxuICAgICAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICAgICAgPGxpbmtcbiAgICAgICAgICAgIHJlbD1cInByZWNvbm5lY3RcIlxuICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vd2lua29uZy1mcm9udGVuZC5vc3MtY24tcWluZ2Rhby5hbGl5dW5jcy5jb21cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHN0eWxlPlxuICAgICAgICAgICAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNXB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogNXB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XG4gICAgICAgICAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6dmVydGljYWw6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbDphY3RpdmUge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3R5bGU+XG5cbiAgICAgICAgICAgICR7c3R5bGVzfVxuICAgICAgICAgICAgJHtzY3JpcHRzfVxuICAgICAgICAgIDwvaGVhZD5cbiAgICAgICAgICA8Ym9keT5cbiAgICAgICAgICAgICR7dGhpcy5fcHJpbnRFbC5uYXRpdmVFbGVtZW50Lm91dGVySFRNTH1cbiAgICAgICAgICA8L2JvZHk+XG4gICAgICAgIDwvaHRtbD5cbiAgICAgIGA7XG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPCEtLS0tPi9nLCAnICcpO1xuICAgIHJldHVybiBodG1sO1xuICB9XG59XG4iXX0=