mmhglobal-dynamicform 2.40.0 → 3.0.0-beta

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 (234) hide show
  1. package/README.md +0 -11
  2. package/fesm2022/mmhglobal-dynamicform.mjs +15336 -0
  3. package/fesm2022/mmhglobal-dynamicform.mjs.map +1 -0
  4. package/{mmhglobal-dynamicform.d.ts → index.d.ts} +5 -5
  5. package/lib/animations/component-animations.d.ts +3 -3
  6. package/lib/components/{buttonfieldbase.component.d.ts → base/buttonfieldbase.component.d.ts} +18 -26
  7. package/lib/components/{containerfieldbase.component.d.ts → base/containerfieldbase.component.d.ts} +20 -25
  8. package/lib/components/{datalistingfieldbase.component.d.ts → base/datalistingfieldbase.component.d.ts} +45 -51
  9. package/lib/components/{fieldbase.component.d.ts → base/fieldbase.component.d.ts} +49 -49
  10. package/lib/components/{inputfieldbase.component.d.ts → base/inputfieldbase.component.d.ts} +23 -27
  11. package/lib/{dropdown_buttons → components/button/dropdown_buttons}/dropdown_buttons.component.d.ts +15 -21
  12. package/lib/components/button/zbuttons/zbuttons.component.d.ts +19 -0
  13. package/lib/{zchip → components/button/zchip}/zchip.component.d.ts +22 -26
  14. package/lib/{zmfb → components/button/zmfb}/zmfb.component.d.ts +38 -43
  15. package/lib/components/button/zworkflowbuttons/zworkflowbuttons.component.d.ts +29 -0
  16. package/lib/{zchart → components/chart/zchart}/zchart.component.d.ts +73 -71
  17. package/lib/{zganttchart → components/chart/zganttchart}/zganttchart.component.d.ts +40 -40
  18. package/lib/{zgauge → components/chart/zgauge}/zgauge.component.d.ts +67 -63
  19. package/lib/{zprogressbar → components/chart/zprogressbar}/zprogressbar.component.d.ts +29 -30
  20. package/lib/{zreport → components/chart/zreport}/zreport.component.d.ts +47 -53
  21. package/lib/{zscheduler → components/chart/zscheduler}/zscheduler.component.d.ts +53 -52
  22. package/lib/{zscheduler → components/chart/zscheduler}/zscheduler.toolbar.component.d.ts +20 -20
  23. package/lib/{ztrendcard → components/chart/ztrendcard}/ztrendcard.component.d.ts +40 -36
  24. package/lib/components/container/kcard/kcard.component.d.ts +21 -0
  25. package/lib/{kscrollview → components/container/kscrollview}/kscrollview.component.d.ts +19 -20
  26. package/lib/{ksplitter → components/container/ksplitter}/ksplitter.component.d.ts +18 -19
  27. package/lib/{zcard → components/container/zcard}/zcard.component.d.ts +12 -17
  28. package/lib/components/container/zdiv/zdiv.component.d.ts +12 -0
  29. package/lib/{zdiv → components/container/zdiv}/zdiv.pipe.d.ts +7 -7
  30. package/lib/{zloop → components/container/zloop}/zloop.component.d.ts +21 -24
  31. package/lib/{ztab → components/container/ztab}/ztab.component.d.ts +34 -38
  32. package/lib/{ztab → components/container/ztab}/ztab.pipe.d.ts +7 -7
  33. package/lib/{zudf → components/container/zudf}/zudf.component.d.ts +208 -212
  34. package/lib/{virtual-scroll → components/data-listing/virtual-scroll}/virtual-scroll.component.d.ts +40 -45
  35. package/lib/{zgrid → components/data-listing/zgrid}/container/zgrid-container.component.d.ts +27 -31
  36. package/lib/{zgrid → components/data-listing/zgrid}/date-range-cell-filter.component.d.ts +20 -19
  37. package/lib/{zgrid → components/data-listing/zgrid}/zgrid.binding.directive.d.ts +174 -168
  38. package/lib/{zgrid → components/data-listing/zgrid}/zgrid.component.d.ts +187 -186
  39. package/lib/{zgrid → components/data-listing/zgrid}/zgrid.popup.anchor-target.directive.d.ts +8 -8
  40. package/lib/{zgrid → components/data-listing/zgrid}/zgrid.service.d.ts +27 -27
  41. package/lib/{ztree → components/data-listing/ztree}/ztree.component.d.ts +77 -78
  42. package/lib/{ztreelist → components/data-listing/ztreelist}/ztreelist.component.d.ts +100 -107
  43. package/lib/{sfdatetimepicker → components/input/sfdatetimepicker}/sfdatetimepicker.component.d.ts +26 -31
  44. package/lib/{sfquerybuilder → components/input/sfquerybuilder}/sfquerybuilder.component.d.ts +71 -73
  45. package/lib/{zcheckbox → components/input/zcheckbox}/zcheckbox.component.d.ts +18 -20
  46. package/lib/components/input/zcodeeditor/zcodeeditor.component.d.ts +43 -0
  47. package/lib/components/input/zcodeeditor/zcodeeditor.service.d.ts +32 -0
  48. package/lib/{zcolorpicker → components/input/zcolorpicker}/zcolorpicker.component.d.ts +19 -25
  49. package/lib/{zdatetime → components/input/zdatetime}/dateIonicFormatParser.pipe.d.ts +10 -10
  50. package/lib/{zdatetime → components/input/zdatetime}/dateIonicMinMaxDate.pipe.d.ts +7 -7
  51. package/lib/{zdatetime → components/input/zdatetime}/dateKendoFormatParser.pipe.d.ts +10 -10
  52. package/lib/{zdatetime → components/input/zdatetime}/dateParser.pipe.d.ts +11 -11
  53. package/lib/{zdatetime → components/input/zdatetime}/zdatetime.component.d.ts +32 -32
  54. package/lib/{zimg → components/input/zimg}/zimg.component.d.ts +16 -20
  55. package/lib/{zinput-container → components/input/zinput-container}/zinput-container.component.d.ts +31 -38
  56. package/lib/{zinput-container → components/input/zinput-container}/zinput-container.pipe.d.ts +25 -25
  57. package/lib/{zlabel → components/input/zlabel}/zlabel.component.d.ts +20 -26
  58. package/lib/{znumeric → components/input/znumeric}/znumeric.component.d.ts +29 -31
  59. package/lib/{znumeric → components/input/znumeric}/znumeric.component.pipe.d.ts +10 -10
  60. package/lib/{zpostselectinput → components/input/zpostselectinput}/zpostselectinput.component.d.ts +48 -65
  61. package/lib/{zselectmultiple → components/input/zselectmultiple}/zselectmultiple.component.d.ts +105 -123
  62. package/lib/{zselectmultiple → components/input/zselectmultiple}/zselectmultiple.directive.d.ts +12 -12
  63. package/lib/{zselectmultiple → components/input/zselectmultiple}/zselectmultiple.pipe.d.ts +11 -11
  64. package/lib/{ztext → components/input/ztext}/ztext.component.d.ts +33 -33
  65. package/lib/{ztextarea → components/input/ztextarea}/ztextarea.component.d.ts +21 -25
  66. package/lib/{ztexteditor → components/input/ztexteditor}/ztexteditor.component.d.ts +44 -42
  67. package/lib/{zupload → components/input/zupload}/zupload.component.d.ts +45 -50
  68. package/lib/{embed-components → components/menu}/context-menu/context-menu.component.d.ts +24 -28
  69. package/lib/{kmenu → components/menu/kmenu}/kmenu.component.d.ts +13 -14
  70. package/lib/components/others/zform/zform.component.d.ts +30 -0
  71. package/lib/components/others/zformcontrol/zformcontrol.component.d.ts +21 -0
  72. package/lib/components/others/zformcontrol/zformcontrol.service.d.ts +12 -0
  73. package/lib/components/others/zmodal/zmodal-component-helper.service.d.ts +15 -0
  74. package/lib/components/others/zmodal/zmodal.component.d.ts +24 -0
  75. package/lib/components/others/zmodal/zmodal.service.d.ts +25 -0
  76. package/lib/components/others/zunknown/zunknown.component.d.ts +10 -0
  77. package/lib/components/utility/e1-root/e1-root.component.d.ts +20 -0
  78. package/lib/components/utility/input-error-message/input-error-message.component.d.ts +14 -0
  79. package/lib/{embed-components → components/utility}/input-field-addons/input-field-addons.component.d.ts +18 -23
  80. package/lib/{embed-components → components/utility}/page-loader/page-loader.component.d.ts +8 -8
  81. package/lib/{embed-components → components/utility}/processing-record-loader/processing-record-loader.component.d.ts +8 -8
  82. package/lib/{embed-components → components/utility}/spinner/spinner.component.d.ts +12 -14
  83. package/lib/components/utility/uiappmenucontent/uiappmenucontent.component.d.ts +17 -0
  84. package/lib/{uibulletin → components/utility/uibulletin}/uibulletin.component.d.ts +31 -36
  85. package/lib/{uicontainer → components/utility/uicontainer}/uicontainer.component.d.ts +16 -19
  86. package/lib/components/utility/uicontent/uicontent.component.d.ts +21 -0
  87. package/lib/components/utility/uiheader/uiheader.component.d.ts +40 -0
  88. package/lib/{uipage → components/utility/uipage}/uipage.component.d.ts +18 -23
  89. package/lib/constants/constant.d.ts +3 -3
  90. package/lib/directives/elementcontainer.directive.d.ts +8 -8
  91. package/lib/interfaces/modal.interface.d.ts +4 -0
  92. package/lib/pipe/htmlSanitize.pipe.d.ts +10 -10
  93. package/lib/pipe/panel-area.pipe.d.ts +7 -7
  94. package/lib/services/main.service.d.ts +136 -142
  95. package/lib/services/zcomponent.debug.service.d.ts +289 -68
  96. package/lib/services/zcomponent.service.d.ts +31 -44
  97. package/package.json +6 -13
  98. package/public-api.d.ts +93 -100
  99. package/styles/all.scss +643 -0
  100. package/styles/component.scss +0 -0
  101. package/styles/notificationkit.scss +53 -0
  102. package/esm2020/lib/animations/component-animations.mjs +0 -39
  103. package/esm2020/lib/components/buttonfieldbase.component.mjs +0 -80
  104. package/esm2020/lib/components/containerfieldbase.component.mjs +0 -50
  105. package/esm2020/lib/components/datalistingfieldbase.component.mjs +0 -277
  106. package/esm2020/lib/components/fieldbase.component.mjs +0 -178
  107. package/esm2020/lib/components/inputfieldbase.component.mjs +0 -202
  108. package/esm2020/lib/constants/constant.mjs +0 -4
  109. package/esm2020/lib/directives/elementcontainer.directive.mjs +0 -16
  110. package/esm2020/lib/directives/fieldelement.directive.mjs +0 -16
  111. package/esm2020/lib/directives/scrollbar.theme.directive.mjs +0 -45
  112. package/esm2020/lib/dropdown_buttons/dropdown_buttons.component.mjs +0 -109
  113. package/esm2020/lib/embed-components/context-menu/context-menu.component.mjs +0 -113
  114. package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +0 -93
  115. package/esm2020/lib/embed-components/page-loader/page-loader.component.mjs +0 -14
  116. package/esm2020/lib/embed-components/processing-record-loader/processing-record-loader.component.mjs +0 -14
  117. package/esm2020/lib/embed-components/spinner/spinner.component.mjs +0 -27
  118. package/esm2020/lib/ficon/ficon.component.mjs +0 -53
  119. package/esm2020/lib/input-error-message/input-error-message.component.mjs +0 -53
  120. package/esm2020/lib/kcard/kcard.component.mjs +0 -90
  121. package/esm2020/lib/kmenu/kmenu.component.mjs +0 -46
  122. package/esm2020/lib/kscrollview/kscrollview.component.mjs +0 -77
  123. package/esm2020/lib/ksplitter/ksplitter.component.mjs +0 -67
  124. package/esm2020/lib/mmhglobal-dynamicform.module.mjs +0 -657
  125. package/esm2020/lib/pipe/htmlSanitize.pipe.mjs +0 -18
  126. package/esm2020/lib/pipe/panel-area.pipe.mjs +0 -28
  127. package/esm2020/lib/services/main.service.mjs +0 -1307
  128. package/esm2020/lib/services/zcomponent.debug.service.mjs +0 -742
  129. package/esm2020/lib/services/zcomponent.service.mjs +0 -300
  130. package/esm2020/lib/sfdatetimepicker/sfdatetimepicker.component.mjs +0 -108
  131. package/esm2020/lib/sfquerybuilder/sfquerybuilder.component.mjs +0 -501
  132. package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +0 -229
  133. package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +0 -55
  134. package/esm2020/lib/uibulletin/uibulletin.component.mjs +0 -96
  135. package/esm2020/lib/uicontainer/uicontainer.component.mjs +0 -41
  136. package/esm2020/lib/uicontent/uicontent.component.mjs +0 -63
  137. package/esm2020/lib/uiheader/uiheader.component.mjs +0 -116
  138. package/esm2020/lib/uiheader/uiheader.service.mjs +0 -27
  139. package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +0 -36
  140. package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +0 -38
  141. package/esm2020/lib/uipage/uipage.component.mjs +0 -160
  142. package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +0 -40
  143. package/esm2020/lib/virtual-scroll/virtual-scroll.component.mjs +0 -249
  144. package/esm2020/lib/zbullet/zbullet.component.mjs +0 -77
  145. package/esm2020/lib/zbuttons/zbuttons.component.mjs +0 -151
  146. package/esm2020/lib/zcard/zcard.component.mjs +0 -36
  147. package/esm2020/lib/zchart/zchart.component.mjs +0 -222
  148. package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +0 -42
  149. package/esm2020/lib/zchip/zchip.component.mjs +0 -119
  150. package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +0 -169
  151. package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +0 -60
  152. package/esm2020/lib/zcolorpicker/zcolorpicker.component.mjs +0 -47
  153. package/esm2020/lib/zdaterange/zdaterange.component.mjs +0 -72
  154. package/esm2020/lib/zdatetime/dateIonicFormatParser.pipe.mjs +0 -40
  155. package/esm2020/lib/zdatetime/dateIonicMinMaxDate.pipe.mjs +0 -22
  156. package/esm2020/lib/zdatetime/dateKendoFormatParser.pipe.mjs +0 -41
  157. package/esm2020/lib/zdatetime/dateParser.pipe.mjs +0 -36
  158. package/esm2020/lib/zdatetime/zdatetime.component.mjs +0 -134
  159. package/esm2020/lib/zdiv/zdiv.component.mjs +0 -79
  160. package/esm2020/lib/zdiv/zdiv.pipe.mjs +0 -31
  161. package/esm2020/lib/zform/zform.component.mjs +0 -188
  162. package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +0 -51
  163. package/esm2020/lib/zganttchart/zganttchart.component.mjs +0 -160
  164. package/esm2020/lib/zgauge/zgauge.component.mjs +0 -122
  165. package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +0 -107
  166. package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +0 -146
  167. package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +0 -881
  168. package/esm2020/lib/zgrid/zgrid.component.mjs +0 -1131
  169. package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +0 -17
  170. package/esm2020/lib/zgrid/zgrid.service.mjs +0 -113
  171. package/esm2020/lib/zimg/zimg.component.mjs +0 -61
  172. package/esm2020/lib/zinput-container/zinput-container.component.mjs +0 -91
  173. package/esm2020/lib/zinput-container/zinput-container.pipe.mjs +0 -132
  174. package/esm2020/lib/zlabel/zlabel.component.mjs +0 -52
  175. package/esm2020/lib/zloop/zloop.component.mjs +0 -123
  176. package/esm2020/lib/zmfb/zmfb.component.mjs +0 -217
  177. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +0 -124
  178. package/esm2020/lib/zmodal/zmodal.component.mjs +0 -129
  179. package/esm2020/lib/znumeric/znumeric.component.mjs +0 -110
  180. package/esm2020/lib/znumeric/znumeric.component.pipe.mjs +0 -19
  181. package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +0 -315
  182. package/esm2020/lib/zprogressbar/zprogressbar.component.mjs +0 -61
  183. package/esm2020/lib/zradiobutton/zradiobutton.component.mjs +0 -106
  184. package/esm2020/lib/zreport/zreport.component.mjs +0 -184
  185. package/esm2020/lib/zscheduler/zscheduler.component.mjs +0 -271
  186. package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +0 -150
  187. package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +0 -689
  188. package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +0 -35
  189. package/esm2020/lib/zselectmultiple/zselectmultiple.pipe.mjs +0 -29
  190. package/esm2020/lib/ztab/ztab.component.mjs +0 -211
  191. package/esm2020/lib/ztab/ztab.pipe.mjs +0 -28
  192. package/esm2020/lib/ztext/ztext.component.mjs +0 -167
  193. package/esm2020/lib/ztextarea/ztextarea.component.mjs +0 -66
  194. package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +0 -135
  195. package/esm2020/lib/ztree/ztree.component.mjs +0 -539
  196. package/esm2020/lib/ztreelist/ztreelist.component.mjs +0 -546
  197. package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +0 -106
  198. package/esm2020/lib/zudf/zudf.component.mjs +0 -1016
  199. package/esm2020/lib/zunknown/zunknown.component.mjs +0 -20
  200. package/esm2020/lib/zupload/zupload.component.mjs +0 -403
  201. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +0 -244
  202. package/esm2020/mmhglobal-dynamicform.mjs +0 -5
  203. package/esm2020/public-api.mjs +0 -107
  204. package/fesm2015/mmhglobal-dynamicform.mjs +0 -16119
  205. package/fesm2015/mmhglobal-dynamicform.mjs.map +0 -1
  206. package/fesm2020/mmhglobal-dynamicform.mjs +0 -16079
  207. package/fesm2020/mmhglobal-dynamicform.mjs.map +0 -1
  208. package/lib/directives/fieldelement.directive.d.ts +0 -8
  209. package/lib/directives/scrollbar.theme.directive.d.ts +0 -10
  210. package/lib/ficon/ficon.component.d.ts +0 -34
  211. package/lib/input-error-message/input-error-message.component.d.ts +0 -19
  212. package/lib/kcard/kcard.component.d.ts +0 -25
  213. package/lib/mmhglobal-dynamicform.module.d.ts +0 -133
  214. package/lib/uiactionbutton/uiactionbutton.component.d.ts +0 -39
  215. package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +0 -27
  216. package/lib/uicontent/uicontent.component.d.ts +0 -29
  217. package/lib/uiheader/uiheader.component.d.ts +0 -39
  218. package/lib/uiheader/uiheader.service.d.ts +0 -11
  219. package/lib/uimenubutton/uimenubutton.component.d.ts +0 -20
  220. package/lib/uimenucontent/uimenucontent.component.d.ts +0 -24
  221. package/lib/uivalidationmessage/uivalidationmessage.component.d.ts +0 -21
  222. package/lib/zbullet/zbullet.component.d.ts +0 -27
  223. package/lib/zbuttons/zbuttons.component.d.ts +0 -25
  224. package/lib/zcodeeditor/zcodeeditor.component.d.ts +0 -43
  225. package/lib/zcodeeditor/zcodeeditor.pipe.d.ts +0 -12
  226. package/lib/zdaterange/zdaterange.component.d.ts +0 -29
  227. package/lib/zdiv/zdiv.component.d.ts +0 -22
  228. package/lib/zform/zform.component.d.ts +0 -38
  229. package/lib/zformcontrol/zformcontrol.component.d.ts +0 -25
  230. package/lib/zmodal/zmodal-mobile.component.d.ts +0 -38
  231. package/lib/zmodal/zmodal.component.d.ts +0 -44
  232. package/lib/zradiobutton/zradiobutton.component.d.ts +0 -34
  233. package/lib/zunknown/zunknown.component.d.ts +0 -17
  234. package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +0 -32
@@ -1,20 +0,0 @@
1
- /********** Angular **********/
2
- import { Component, Input } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class ZunknownComponent {
5
- constructor() { }
6
- ngOnInit() { }
7
- }
8
- ZunknownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZunknownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
- ZunknownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZunknownComponent, selector: "app-zunknown", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<p>\r\n Unknown field Type => {{ data.Type}} >> {{data.Name}}\r\n</p>\r\n", styles: [""] });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZunknownComponent, decorators: [{
11
- type: Component,
12
- args: [{ selector: 'app-zunknown', template: "<p>\r\n Unknown field Type => {{ data.Type}} >> {{data.Name}}\r\n</p>\r\n", styles: [""] }]
13
- }], ctorParameters: function () { return []; }, propDecorators: { data: [{
14
- type: Input
15
- }], group: [{
16
- type: Input
17
- }], form: [{
18
- type: Input
19
- }] } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVua25vd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVua25vd24venVua25vd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVua25vd24venVua25vd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWdCekQsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRLEtBQUksQ0FBQzs7OEdBUEYsaUJBQWlCO2tHQUFqQixpQkFBaUIsNEdDakI5Qiw0RUFHQTsyRkRjYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYzswRUFLZixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkdyb3VwLCBaRmllbGQgfSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp1bmtub3duJyxcclxuICB0ZW1wbGF0ZVVybDogJy4venVua25vd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3p1bmtub3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadW5rbm93bkNvbXBvbmVudCBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG59XHJcbiIsIjxwPlxyXG4gIFVua25vd24gZmllbGQgVHlwZSA9PiB7eyBkYXRhLlR5cGV9fSA+PiB7e2RhdGEuTmFtZX19XHJcbjwvcD5cclxuIl19
@@ -1,403 +0,0 @@
1
- /********** Angular **********/
2
- import { Component, ViewChild } from "@angular/core";
3
- /********** Ionic **********/
4
- /********** Plugin **********/
5
- // import { environment } from "src/environments/environment";
6
- import { take } from 'rxjs/operators';
7
- import { HttpEventType } from '@angular/common/http';
8
- /********** Component & Service **********/
9
- import { InputFieldBase } from "../components/inputfieldbase.component";
10
- import { ZComponentHelper, UploadMetaData, AttachmentConfig } from "mmhglobal-zcore";
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../services/zcomponent.service";
13
- import * as i2 from "mmhglobal-zcore";
14
- import * as i3 from "@progress/kendo-angular-upload";
15
- import * as i4 from "@angular/forms";
16
- import * as i5 from "@angular/common";
17
- export class MyFileInfo {
18
- }
19
- export class ZuploadComponent extends InputFieldBase {
20
- // zModelValue = [{
21
- // name: "RXJS 01.png",
22
- // size: 128753,
23
- // uid: "c96e234d-af61-4587-adcc-3b400ddef884"
24
- // }];
25
- // fieldElement = [{
26
- // Name: 'FileUploadList',
27
- // Type: 'zupload',
28
- // Value: 'FileUploadList',
29
- // SelectionOptions: ['jpg', 'jpeg', 'png', 'bmp', 'pdf'],
30
- // UploadMetaData: 'group.UploadMetaData',
31
- // AutoUpload: false,
32
- // AllowRemove: true,
33
- // Multiple: false,
34
- // OnSuccess: 'group.onSuccess()',
35
- // DivClass: "col-md-12 col-md-6",
36
- // Visible: true
37
- // }];
38
- constructor(componentService, authService, compressImage, zcoreService, ngZone, sharePointService, alertService) {
39
- super(componentService);
40
- this.componentService = componentService;
41
- this.authService = authService;
42
- this.compressImage = compressImage;
43
- this.zcoreService = zcoreService;
44
- this.ngZone = ngZone;
45
- this.sharePointService = sharePointService;
46
- this.alertService = alertService;
47
- this.uploadAttachmentUrl = null;
48
- this.uploadSaveUrl = "/Attachment/Chunk_Upload_Save"; // should represent an actual API endpoint
49
- this.uploadRemoveUrl = "/Attachment/Chunk_Upload_Remove"; // should represent an actual API endpoint
50
- this.downloadFileUrl = "/Attachment/downloadFile";
51
- this.getImageUrl = "/Attachment/getImage"; // GET method
52
- this.isAutoUpload = false;
53
- this.isMultiple = false;
54
- this.imagePreviews = [];
55
- this.uid = [];
56
- this.showFileList = true;
57
- this.fileList = [];
58
- this.restrictions = {
59
- minFileSize: 1,
60
- maxFileSize: 4194304,
61
- allowedExtensions: [
62
- "jpg",
63
- "jpeg",
64
- "png",
65
- "bmp",
66
- "pdf",
67
- "txt",
68
- "docx",
69
- "doc",
70
- "xlsx",
71
- "xls",
72
- "ppt",
73
- "pptx",
74
- "csv",
75
- ],
76
- };
77
- this.chunkSettings = {
78
- size: 102400,
79
- maxAutoRetries: 3,
80
- };
81
- this.uploadAttachmentUrl = this.zcoreService.getEnvironment().uploadAttachmentUrl;
82
- this.uploadSaveUrl = this.uploadAttachmentUrl + this.uploadSaveUrl;
83
- this.uploadRemoveUrl = this.uploadAttachmentUrl + this.uploadRemoveUrl;
84
- }
85
- ngOnInit() {
86
- super.setupInnerField();
87
- // this.group['UploadMetaData'] = new UploadMetaData(null, '15', 'SO-No-1234', 'SaleOrder');
88
- // this.uploadSaveUrl = uploadAttachmentUrl + this.uploadSaveUrl;
89
- // this.uploadRemoveUrl = uploadAttachmentUrl + this.uploadRemoveUrl;
90
- if (this.data.SelectOptions && !this.data.AllowedFileExtension) {
91
- this.restrictions.allowedExtensions = this.data.SelectOptions;
92
- }
93
- else if (!this.data.SelectOptions && this.data.AllowedFileExtension) {
94
- this.restrictions.allowedExtensions = this.restrictions.allowedExtensions.concat(this.data.AllowedFileExtension);
95
- }
96
- if (this.data.MinFileSize) {
97
- this.restrictions.minFileSize = this.data.MinFileSize;
98
- }
99
- if (this.data.MaxFileSize) {
100
- this.restrictions.maxFileSize = this.data.MaxFileSize;
101
- }
102
- this.isAutoUpload = this.data.AutoUpload || false;
103
- if (!this.data.AllowRemove) {
104
- this.uploadRemoveUrl = "";
105
- }
106
- if (this.data.Multiple) {
107
- this.isMultiple = this.data.Multiple;
108
- }
109
- this.componentProperties.style.style6 = this.componentProperties.style.style6 || "margin: 5px; border: 1px solid gray;";
110
- }
111
- onSuccess(e) {
112
- // angular kendo upload didn't filter away Sent event for remove, so we have to handle it here
113
- // upload progress not required for removal, thus it's also removed
114
- // @ts-ignore
115
- if (e.operation === "remove" && (e.response.type === HttpEventType.Sent || e.response.type === HttpEventType.UploadProgress)) {
116
- return;
117
- }
118
- if (!Array.isArray(this.group.zModel[this.data.Value])) {
119
- this.group.zModel[this.data.Value] = [];
120
- }
121
- const file = e.files[0];
122
- const existingFileIndex = this.group.zModel[this.data.Value].findIndex(f => f.name === file.name && f.uid === file.uid);
123
- if (e.operation === "upload") {
124
- // console.log('upload Success: ', e);
125
- //sharepoint required to read data from fileUid and attachment able to get data from fileUid too.
126
- file.myUid = e.response?.body?.fileUid ?? file.uid;
127
- delete file['httpSubscription'];
128
- if (existingFileIndex !== -1) {
129
- this.group.zModel[this.data.Value][existingFileIndex] = file;
130
- }
131
- else {
132
- this.group.zModel[this.data.Value].push(file);
133
- }
134
- }
135
- else if (e.operation === "remove") {
136
- if (existingFileIndex !== -1) {
137
- this.group.zModel[this.data.Value].splice(existingFileIndex, 1);
138
- }
139
- }
140
- ZComponentHelper.setComponentModelValue(this.data, this.group.zModel[this.data.Value], this.group);
141
- this.group.subject.next({
142
- type: "zupload-onSuccess",
143
- target: this.data.OnSuccess,
144
- event: e,
145
- data: { value: e.files[0], field: this.data },
146
- });
147
- }
148
- compressionConfigHandler(imgConfig) {
149
- if (imgConfig.FileSizeMaxSize) {
150
- imgConfig.FileSizeMaxSizeByte = this.convertSizeToByte(imgConfig.FileSizeMaxSize);
151
- }
152
- if (imgConfig.FileSizeMinSize) {
153
- imgConfig.FileSizeMinSizeByte = this.convertSizeToByte(imgConfig.FileSizeMinSize);
154
- }
155
- else {
156
- imgConfig.FileSizeMinSizeByte = 0;
157
- }
158
- return imgConfig;
159
- }
160
- convertSizeToByte(sizeString) {
161
- let _tempFileSizeMaxSize = 0;
162
- let sizeByByte = 0;
163
- let sizeType = 'b';
164
- // remove all space
165
- const _tempFileSize = sizeString.replace(/ /g, '');
166
- // check last char is alphabetic
167
- const lastChar = _tempFileSize.substr(_tempFileSize.length - 1);
168
- if (isNaN(parseFloat(lastChar))) {
169
- const secLastChar = _tempFileSize.substr(_tempFileSize.length - 2).slice(0, -1);
170
- if (isNaN(parseFloat(secLastChar))) {
171
- // check last 2nd char is alphabetic
172
- sizeType = secLastChar + sizeType;
173
- _tempFileSizeMaxSize = parseFloat(_tempFileSize.slice(0, -2));
174
- }
175
- else {
176
- _tempFileSizeMaxSize = parseFloat(_tempFileSize.slice(0, -1));
177
- }
178
- switch (sizeType.toLowerCase()) {
179
- case "b":
180
- sizeByByte = _tempFileSizeMaxSize;
181
- break;
182
- case "kb":
183
- sizeByByte = _tempFileSizeMaxSize * 1024;
184
- break;
185
- case "mb":
186
- sizeByByte = _tempFileSizeMaxSize * 1048576;
187
- break;
188
- case "gb":
189
- sizeByByte = _tempFileSizeMaxSize * 1073741824;
190
- break;
191
- }
192
- }
193
- else {
194
- // default using bytes if no size type
195
- sizeByByte = parseFloat(_tempFileSize);
196
- }
197
- return sizeByByte;
198
- }
199
- uploadEventHandler(e) {
200
- // Image Preview
201
- const me = this;
202
- e.files.forEach((file) => {
203
- if (!me.isValidUploadedFile(me, file)) {
204
- e.preventDefault();
205
- return;
206
- }
207
- else {
208
- if (file.rawFile && file.rawFile.type.includes("image")) {
209
- if (!file.validationErrors) {
210
- const reader = new FileReader();
211
- reader.onload = function (ev) {
212
- if (me.data.EnableImagePreview) {
213
- if (!me.uid.includes(file.uid)) {
214
- me.uid.push(file.uid);
215
- me.imagePreviews.push({ ...file, src: reader.result });
216
- }
217
- }
218
- };
219
- reader.readAsDataURL(file.rawFile);
220
- }
221
- }
222
- }
223
- });
224
- // Add metadata to the upload event
225
- let additional = ZComponentHelper.getGroupEvalValue.call(this, this.data.UploadMetaData);
226
- if (!(additional instanceof UploadMetaData)) {
227
- console.error("UploadMetaData defined at " + this.data.UploadMetaData + " is invalid: ", additional);
228
- additional = new UploadMetaData(null, "0");
229
- }
230
- //#region sharepoint
231
- let attachmentInfo = this.sharePointService.getAttachmentInfo(this.data["DownloadFileConfig"]);
232
- //add tagging into metadata
233
- if (attachmentInfo) {
234
- if (attachmentInfo.tag) {
235
- const tag = this.sharePointService.generateTagging(this.group, attachmentInfo.tag);
236
- additional[AttachmentConfig.tag] = tag;
237
- }
238
- additional[AttachmentConfig.siteName] = attachmentInfo.siteName;
239
- additional[AttachmentConfig.documentLibraryName] = attachmentInfo.documentLibraryName;
240
- additional[AttachmentConfig.isSaveToSharePoint] = attachmentInfo.isSaveToSharePoint;
241
- }
242
- //#endregion
243
- const str = JSON.stringify(additional);
244
- e.data = { additional: str, };
245
- e.headers = e.headers.append("Authorization", "Bearer " + this.authService.e1AccessToken);
246
- }
247
- onRemove(e) {
248
- // remove file from component memory
249
- const index = this.fileList.findIndex((item) => item.uid === e.files[0].uid);
250
- if (index >= 0) {
251
- this.fileList.splice(index, 1);
252
- this.group['zupload_' + this.data.Value] = this.fileList;
253
- }
254
- if (this.data['FileRemovedEvent']) {
255
- this.group.subject.next({
256
- type: "zupload-fileRemovedEvent",
257
- target: this.data['FileRemovedEvent'],
258
- data: e
259
- });
260
- }
261
- else {
262
- const myFile = e.files[0];
263
- // console.log('remove done: ', e);
264
- e.data = {
265
- id: myFile.myUid,
266
- };
267
- e.headers = e.headers.append("Authorization", "Bearer " + this.authService.e1AccessToken);
268
- if (this.data.EnableImagePreview) {
269
- e.files.forEach((file) => {
270
- this.imagePreviews = this.imagePreviews.filter(f => f.uid !== file.uid);
271
- });
272
- }
273
- }
274
- }
275
- onChange(file) {
276
- if (this.data['FileChangedEvent']) {
277
- this.group.subject.next({
278
- type: "zupload-fileChangedEvent",
279
- target: this.data['FileChangedEvent'],
280
- data: file
281
- });
282
- }
283
- }
284
- isValidUploadedFile(me, file) {
285
- const fileSize = file.rawFile.size;
286
- const fileExtension = file.rawFile.name.split('.').pop().toLowerCase();
287
- // Check if file size and extension are valid
288
- if (fileSize > me.restrictions.maxFileSize || !me.restrictions.allowedExtensions.includes(fileExtension)) {
289
- let errorMessage = 'Error: ';
290
- if (!me.restrictions.allowedExtensions.includes(fileExtension)) {
291
- errorMessage = `Invalid file type. Allowed types are: ${me.restrictions.allowedExtensions.join(', ')}.`;
292
- }
293
- else if (fileSize > me.restrictions.maxFileSize) {
294
- errorMessage = `File size cannot exceeds ${me.formatFileSize(me.restrictions.maxFileSize)}.`;
295
- }
296
- me.alertService.showOkay('Failed to upload', errorMessage, ['col-4']);
297
- return false;
298
- }
299
- return true;
300
- }
301
- selectEventHandler(e) {
302
- const me = this;
303
- //#region sharepoint
304
- const attachmentInfo = this.sharePointService.getAttachmentInfo(this.data["DownloadFileConfig"]);
305
- // Change uploadSaveUrl if saving to SharePoint
306
- if (attachmentInfo && attachmentInfo.isSaveToSharePoint && attachmentInfo.siteName) {
307
- const attachmentSourceUrl = this.zcoreService.getEnvironment().attachmentSourceUrl;
308
- this.uploadSaveUrl = attachmentSourceUrl + '/Chunk_Upload_Save';
309
- }
310
- //#endregion
311
- if (this.data['SelectFileOnly']) {
312
- // Append all files to component memory
313
- e.files.forEach(async (file) => {
314
- if (me.isValidUploadedFile(me, file)) {
315
- if (file.rawFile) {
316
- const reader = new FileReader();
317
- reader.onload = function (ev) {
318
- // Clone the data and also add the read file to the object
319
- const fileData = Object.assign({}, file);
320
- fileData['file'] = ev.target["result"];
321
- // Push to component fileList
322
- me.fileList.push(fileData);
323
- me.group['zupload_' + me.data.Value] = me.fileList;
324
- if (me.data['FileSelectedEvent']) {
325
- // Call the project event
326
- me.group.subject.next({
327
- type: "zupload-fileSelectedEvent",
328
- target: me.data['FileSelectedEvent'],
329
- data: me.fileList
330
- });
331
- }
332
- };
333
- await reader.readAsDataURL(file.rawFile);
334
- }
335
- }
336
- else {
337
- e.preventDefault();
338
- }
339
- });
340
- }
341
- else {
342
- // Only workable for Auto Upload = false
343
- if (!this.data.AutoUpload) {
344
- // Compression for image file
345
- const imageCompressionEnabled = this.data.Compression ? true : false;
346
- //Check if Image Compression is enabled.
347
- if (imageCompressionEnabled === true) {
348
- e.files.forEach((file) => {
349
- if (me.isValidUploadedFile(me, file)) {
350
- // Compress only if it is an image file
351
- if (file.rawFile && file.rawFile.type.includes("image")) {
352
- if (!file.validationErrors) {
353
- const imgConfig = this.compressionConfigHandler(this.data.Compression);
354
- if (file.size > imgConfig.FileSizeMinSizeByte) {
355
- me.compressImage.compress(file.rawFile, imgConfig) //Pass in parameter to set the Compression Options
356
- .pipe(take(1))
357
- .subscribe(compressFile => {
358
- this.ngZone.run(() => {
359
- file.rawFile = compressFile;
360
- file.size = compressFile.size;
361
- // Push to component fileList
362
- me.fileList.push(Object.assign({}, file));
363
- const reader = new FileReader();
364
- reader.readAsDataURL(file.rawFile);
365
- });
366
- console.log(`Compressed file size: ${(file.rawFile.size / 1024).toFixed(2)}KB`);
367
- });
368
- } // file size check
369
- } // validationErrors check
370
- } // file type check
371
- }
372
- else {
373
- e.preventDefault();
374
- }
375
- }); // loop each file
376
- } // imagecompression check
377
- // add to group scope
378
- me.group['zupload_' + me.data.Value] = e.files;
379
- }
380
- }
381
- }
382
- clearFiles() {
383
- this.uploadComponent.clearFiles();
384
- this.group['zupload_' + this.data.Value] = this.fileList;
385
- }
386
- formatFileSize(bytes) {
387
- const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
388
- if (bytes === 0)
389
- return '0 Byte';
390
- const i = Math.floor(Math.log(bytes) / Math.log(1024));
391
- return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + sizes[i];
392
- }
393
- }
394
- ZuploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZuploadComponent, deps: [{ token: i1.ZComponentService }, { token: i2.AuthService }, { token: i2.CompressImageService }, { token: i2.ZCoreService }, { token: i0.NgZone }, { token: i2.SharePointService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
395
- ZuploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZuploadComponent, selector: "app-zupload", viewQueries: [{ propertyName: "uploadComponent", first: true, predicate: ["uploadComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"zupload-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <kendo-upload\r\n *ngIf=\"!data.SelectFileOnly\"\r\n #uploadComponent\r\n [id]=\"data.Value\"\r\n [autoUpload]=\"isAutoUpload\"\r\n [saveUrl]=\"uploadSaveUrl\"\r\n [removeUrl]=\"uploadRemoveUrl\"\r\n [restrictions]=\"restrictions\"\r\n [multiple]=\"isMultiple\"\r\n [chunkable]=\"chunkSettings\"\r\n [showFileList]=\"showFileList\"\r\n (select)=\"selectEventHandler($event)\"\r\n (remove)=\"onRemove($event)\"\r\n (success)=\"onSuccess($event)\"\r\n (upload)=\"uploadEventHandler($event)\"\r\n [style]=\"componentProperties.style.style1\"\r\n class=\"e1tag-style1\">\r\n </kendo-upload>\r\n\r\n <kendo-fileselect\r\n *ngIf=\"data.SelectFileOnly\"\r\n #uploadComponent\r\n [id]=\"data.Value\"\r\n (select)=\"selectEventHandler($event)\"\r\n (remove)=\"onRemove($event)\"\r\n [formControlName]=\"data.Value\"\r\n (valueChange)=\"onChange($event)\" \r\n [restrictions]=\"restrictions\"\r\n [style]=\"componentProperties.style.style1\"\r\n class=\"e1tag-style1\">\r\n </kendo-fileselect>\r\n\r\n <div\r\n *ngIf=\"imagePreviews.length\"\r\n class=\"image-preview-container e1tag-style2\"\r\n [style]=\"componentProperties.style.style2\">\r\n <div\r\n class=\"label-container e1tag-style3\"\r\n [style]=\"componentProperties.style.style3\">\r\n Image Preview:\r\n </div>\r\n <div\r\n class=\"image-container e1tag-style4\"\r\n [style]=\"componentProperties.style.style4\">\r\n <img\r\n *ngFor=\"let image of imagePreviews\"\r\n [src]=\"image.src\"\r\n alt=\"image preview\"\r\n height=\"100\"\r\n class=\"e1tag-style5\"\r\n [style]=\"componentProperties.style.style5\" />\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".image-preview-container{border:1px solid rgba(0,0,0,.08)}.image-preview-container>.label-container{margin:5px}\n"], components: [{ type: i3.UploadComponent, selector: "kendo-upload", inputs: ["autoUpload", "batch", "withCredentials", "saveField", "saveHeaders", "saveMethod", "saveUrl", "responseType", "removeField", "removeHeaders", "removeMethod", "removeUrl", "chunkable", "concurrent", "multiple", "disabled", "showFileList", "tabindex", "zoneId", "tabIndex", "accept", "restrictions", "focusableId", "actionsLayout"], outputs: ["blur", "cancel", "clear", "complete", "error", "focus", "pause", "remove", "resume", "select", "success", "upload", "uploadProgress", "valueChange"], exportAs: ["kendoUpload"] }, { type: i3.FileSelectComponent, selector: "kendo-fileselect", inputs: ["accept", "disabled", "multiple", "name", "showFileList", "tabindex", "restrictions", "zoneId", "focusableId"], outputs: ["blur", "focus", "select", "remove", "valueChange"], exportAs: ["kendoFileSelect"] }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZuploadComponent, decorators: [{
397
- type: Component,
398
- args: [{ selector: "app-zupload", template: "<div [formGroup]=\"form\" class=\"zupload-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <kendo-upload\r\n *ngIf=\"!data.SelectFileOnly\"\r\n #uploadComponent\r\n [id]=\"data.Value\"\r\n [autoUpload]=\"isAutoUpload\"\r\n [saveUrl]=\"uploadSaveUrl\"\r\n [removeUrl]=\"uploadRemoveUrl\"\r\n [restrictions]=\"restrictions\"\r\n [multiple]=\"isMultiple\"\r\n [chunkable]=\"chunkSettings\"\r\n [showFileList]=\"showFileList\"\r\n (select)=\"selectEventHandler($event)\"\r\n (remove)=\"onRemove($event)\"\r\n (success)=\"onSuccess($event)\"\r\n (upload)=\"uploadEventHandler($event)\"\r\n [style]=\"componentProperties.style.style1\"\r\n class=\"e1tag-style1\">\r\n </kendo-upload>\r\n\r\n <kendo-fileselect\r\n *ngIf=\"data.SelectFileOnly\"\r\n #uploadComponent\r\n [id]=\"data.Value\"\r\n (select)=\"selectEventHandler($event)\"\r\n (remove)=\"onRemove($event)\"\r\n [formControlName]=\"data.Value\"\r\n (valueChange)=\"onChange($event)\" \r\n [restrictions]=\"restrictions\"\r\n [style]=\"componentProperties.style.style1\"\r\n class=\"e1tag-style1\">\r\n </kendo-fileselect>\r\n\r\n <div\r\n *ngIf=\"imagePreviews.length\"\r\n class=\"image-preview-container e1tag-style2\"\r\n [style]=\"componentProperties.style.style2\">\r\n <div\r\n class=\"label-container e1tag-style3\"\r\n [style]=\"componentProperties.style.style3\">\r\n Image Preview:\r\n </div>\r\n <div\r\n class=\"image-container e1tag-style4\"\r\n [style]=\"componentProperties.style.style4\">\r\n <img\r\n *ngFor=\"let image of imagePreviews\"\r\n [src]=\"image.src\"\r\n alt=\"image preview\"\r\n height=\"100\"\r\n class=\"e1tag-style5\"\r\n [style]=\"componentProperties.style.style5\" />\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".image-preview-container{border:1px solid rgba(0,0,0,.08)}.image-preview-container>.label-container{margin:5px}\n"] }]
399
- }], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.AuthService }, { type: i2.CompressImageService }, { type: i2.ZCoreService }, { type: i0.NgZone }, { type: i2.SharePointService }, { type: i2.AlertService }]; }, propDecorators: { uploadComponent: [{
400
- type: ViewChild,
401
- args: ["uploadComponent"]
402
- }] } });
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dXBsb2FkL3p1cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVwbG9hZC96dXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFrQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5Qiw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhFLE9BQU8sRUFFTyxnQkFBZ0IsRUFBeUIsY0FBYyxFQUE2QyxnQkFBZ0IsRUFDakksTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7OztBQUV6QixNQUFNLE9BQU8sVUFBVTtDQUl0QjtBQVNELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxjQUFjO0lBd0NsRCxtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLGtCQUFrQjtJQUNsQixnREFBZ0Q7SUFDaEQsTUFBTTtJQUVOLG9CQUFvQjtJQUNwQiw0QkFBNEI7SUFDNUIscUJBQXFCO0lBQ3JCLDZCQUE2QjtJQUM3Qiw0REFBNEQ7SUFDNUQsNENBQTRDO0lBQzVDLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIscUJBQXFCO0lBQ3JCLG9DQUFvQztJQUNwQyxvQ0FBb0M7SUFDcEMsa0JBQWtCO0lBQ2xCLE1BQU07SUFFTixZQUNTLGdCQUFtQyxFQUNsQyxX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QUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RCxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDOzs2R0F2YlUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsOExDaEM3Qix1MkRBdURBOzJGRHZCYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsYUFBYTtnUkFNTyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE5nWm9uZSwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuLy8gaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tIFwic3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBGaWxlSW5mbywgU3VjY2Vzc0V2ZW50LCBSZW1vdmVFdmVudCwgVXBsb2FkRXZlbnQsIEZpbGVSZXN0cmljdGlvbnMsIENodW5rU2V0dGluZ3MsIFNlbGVjdEV2ZW50LCBVcGxvYWRDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdXBsb2FkXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gIEF1dGhTZXJ2aWNlLCBaQ29yZVNlcnZpY2UsIENvbXByZXNzSW1hZ2VTZXJ2aWNlLCBBbGVydFNlcnZpY2UsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBVcGxvYWRNZXRhRGF0YSwgSW1hZ2VDb21wcmVzc2lvbkNvbmZpZywgU2hhcmVQb2ludFNlcnZpY2UsIEF0dGFjaG1lbnRDb25maWcsIEF0dGFjaG1lbnRcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTXlGaWxlSW5mbyBpbXBsZW1lbnRzIEZpbGVJbmZvIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdWlkPzogc3RyaW5nO1xyXG4gIG15VWlkPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp1cGxvYWRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3p1cGxvYWQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venVwbG9hZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBadXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJ1cGxvYWRDb21wb25lbnRcIikgdXBsb2FkQ29tcG9uZW50OiBVcGxvYWRDb21wb25lbnQ7XHJcblxyXG4gIHVwbG9hZEF0dGFjaG1lbnRVcmw6IHN0cmluZyA9IG51bGw7XHJcbiAgdXBsb2FkU2F2ZVVybCA9IFwiL0F0dGFjaG1lbnQvQ2h1bmtfVXBsb2FkX1NhdmVcIjsgLy8gc2hvdWxkIHJlcHJlc2VudCBhbiBhY3R1YWwgQVBJIGVuZHBvaW50XHJcbiAgdXBsb2FkUmVtb3ZlVXJsID0gXCIvQXR0YWNobWVudC9DaHVua19VcGxvYWRfUmVtb3ZlXCI7IC8vIHNob3VsZCByZXByZXNlbnQgYW4gYWN0dWFsIEFQSSBlbmRwb2ludFxyXG4gIGRvd25sb2FkRmlsZVVybCA9IFwiL0F0dGFjaG1lbnQvZG93bmxvYWRGaWxlXCI7XHJcbiAgZ2V0SW1hZ2VVcmwgPSBcIi9BdHRhY2htZW50L2dldEltYWdlXCI7IC8vIEdFVCBtZXRob2RcclxuICBpc0F1dG9VcGxvYWQgPSBmYWxzZTtcclxuICBpc011bHRpcGxlID0gZmFsc2U7XHJcbiAgaW1hZ2VQcmV2aWV3czogYW55W10gPSBbXTtcclxuICB1aWQ6IHN0cmluZ1tdID0gW107XHJcbiAgc2hvd0ZpbGVMaXN0ID0gdHJ1ZTtcclxuICBmaWxlTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgcHVibGljIHJlc3RyaWN0aW9uczogRmlsZVJlc3RyaWN0aW9ucyA9IHtcclxuICAgIG1pbkZpbGVTaXplOiAxLFxyXG4gICAgbWF4RmlsZVNpemU6IDQxOTQzMDQsXHJcbiAgICBhbGxvd2VkRXh0ZW5zaW9uczogW1xyXG4gICAgICBcImpwZ1wiLFxyXG4gICAgICBcImpwZWdcIixcclxuICAgICAgXCJwbmdcIixcclxuICAgICAgXCJibXBcIixcclxuICAgICAgXCJwZGZcIixcclxuICAgICAgXCJ0eHRcIixcclxuICAgICAgXCJkb2N4XCIsXHJcbiAgICAgIFwiZG9jXCIsXHJcbiAgICAgIFwieGxzeFwiLFxyXG4gICAgICBcInhsc1wiLFxyXG4gICAgICBcInBwdFwiLFxyXG4gICAgICBcInBwdHhcIixcclxuICAgICAgXCJjc3ZcIixcclxuICAgIF0sXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGNodW5rU2V0dGluZ3M6IENodW5rU2V0dGluZ3MgPSB7XHJcbiAgICBzaXplOiAxMDI0MDAsXHJcbiAgICBtYXhBdXRvUmV0cmllczogMyxcclxuICB9O1xyXG5cclxuICAvLyB6TW9kZWxWYWx1ZSA9IFt7XHJcbiAgLy8gICBuYW1lOiBcIlJYSlMgMDEucG5nXCIsXHJcbiAgLy8gICBzaXplOiAxMjg3NTMsXHJcbiAgLy8gICB1aWQ6IFwiYzk2ZTIzNGQtYWY2MS00NTg3LWFkY2MtM2I0MDBkZGVmODg0XCJcclxuICAvLyB9XTtcclxuXHJcbiAgLy8gZmllbGRFbGVtZW50ID0gW3tcclxuICAvLyAgIE5hbWU6ICdGaWxlVXBsb2FkTGlzdCcsXHJcbiAgLy8gICBUeXBlOiAnenVwbG9hZCcsXHJcbiAgLy8gICBWYWx1ZTogJ0ZpbGVVcGxvYWRMaXN0JyxcclxuICAvLyAgIFNlbGVjdGlvbk9wdGlvbnM6IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ2JtcCcsICdwZGYnXSxcclxuICAvLyAgIFVwbG9hZE1ldGFEYXRhOiAnZ3JvdXAuVXBsb2FkTWV0YURhdGEnLFxyXG4gIC8vICAgQXV0b1VwbG9hZDogZmFsc2UsXHJcbiAgLy8gICBBbGxvd1JlbW92ZTogdHJ1ZSxcclxuICAvLyAgIE11bHRpcGxlOiBmYWxzZSxcclxuICAvLyAgIE9uU3VjY2VzczogJ2dyb3VwLm9uU3VjY2VzcygpJyxcclxuICAvLyAgIERpdkNsYXNzOiBcImNvbC1tZC0xMiBjb2wtbWQtNlwiLFxyXG4gIC8vICAgVmlzaWJsZTogdHJ1ZVxyXG4gIC8vIH1dO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wcmVzc0ltYWdlOiBDb21wcmVzc0ltYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBzaGFyZVBvaW50U2VydmljZTogU2hhcmVQb2ludFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMudXBsb2FkQXR0YWNobWVudFVybCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCkudXBsb2FkQXR0YWNobWVudFVybDtcclxuICAgIHRoaXMudXBsb2FkU2F2ZVVybCA9IHRoaXMudXBsb2FkQXR0YWNobWVudFVybCArIHRoaXMudXBsb2FkU2F2ZVVybDtcclxuICAgIHRoaXMudXBsb2FkUmVtb3ZlVXJsID0gdGhpcy51cGxvYWRBdHRhY2htZW50VXJsICsgdGhpcy51cGxvYWRSZW1vdmVVcmw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgLy8gdGhpcy5ncm91cFsnVXBsb2FkTWV0YURhdGEnXSA9IG5ldyBVcGxvYWRNZXRhRGF0YShudWxsLCAnMTUnLCAnU08tTm8tMTIzNCcsICdTYWxlT3JkZXInKTtcclxuXHJcblxyXG4gICAgLy8gdGhpcy51cGxvYWRTYXZlVXJsID0gdXBsb2FkQXR0YWNobWVudFVybCArIHRoaXMudXBsb2FkU2F2ZVVybDtcclxuICAgIC8vIHRoaXMudXBsb2FkUmVtb3ZlVXJsID0gdXBsb2FkQXR0YWNobWVudFVybCArIHRoaXMudXBsb2FkUmVtb3ZlVXJsO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyAmJiAhdGhpcy5kYXRhLkFsbG93ZWRGaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgIHRoaXMucmVzdHJpY3Rpb25zLmFsbG93ZWRFeHRlbnNpb25zID0gKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIGFzIHVua25vd24pIGFzIHN0cmluZ1tdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoIXRoaXMuZGF0YS5TZWxlY3RPcHRpb25zICYmIHRoaXMuZGF0YS5BbGxvd2VkRmlsZUV4dGVuc2lvbikge1xyXG4gICAgICB0aGlzLnJlc3RyaWN0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucyA9IHRoaXMucmVzdHJpY3Rpb25zLmFsbG93ZWRFeHRlbnNpb25zLmNvbmNhdCh0aGlzLmRhdGEuQWxsb3dlZEZpbGVFeHRlbnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuTWluRmlsZVNpemUpIHtcclxuICAgICAgdGhpcy5yZXN0cmljdGlvbnMubWluRmlsZVNpemUgPSB0aGlzLmRhdGEuTWluRmlsZVNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5NYXhGaWxlU2l6ZSkge1xyXG4gICAgICB0aGlzLnJlc3RyaWN0aW9ucy5tYXhGaWxlU2l6ZSA9IHRoaXMuZGF0YS5NYXhGaWxlU2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzQXV0b1VwbG9hZCA9IHRoaXMuZGF0YS5BdXRvVXBsb2FkIHx8IGZhbHNlO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhLkFsbG93UmVtb3ZlKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkUmVtb3ZlVXJsID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLk11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaXNNdWx0aXBsZSA9IHRoaXMuZGF0YS5NdWx0aXBsZTtcclxuICAgIH1cclxuICAgICBcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTYgPSB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2IHx8IFwibWFyZ2luOiA1cHg7IGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7XCI7XHJcbiAgfVxyXG5cclxuICBvblN1Y2Nlc3MoZTogU3VjY2Vzc0V2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBhbmd1bGFyIGtlbmRvIHVwbG9hZCBkaWRuJ3QgZmlsdGVyIGF3YXkgU2VudCBldmVudCBmb3IgcmVtb3ZlLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZSBpdCBoZXJlXHJcbiAgICAvLyB1cGxvYWQgcHJvZ3Jlc3Mgbm90IHJlcXVpcmVkIGZvciByZW1vdmFsLCB0aHVzIGl0J3MgYWxzbyByZW1vdmVkXHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBpZiAoZS5vcGVyYXRpb24gPT09IFwicmVtb3ZlXCIgJiYgKGUucmVzcG9uc2UudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5TZW50IHx8IGUucmVzcG9uc2UudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdKSkge1xyXG4gICAgICB0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsZSA9IGUuZmlsZXNbMF0gYXMgTXlGaWxlSW5mbztcclxuICAgIGNvbnN0IGV4aXN0aW5nRmlsZUluZGV4ID0gdGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXS5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGZpbGUubmFtZSAmJiBmLnVpZCA9PT0gZmlsZS51aWQpO1xyXG4gICAgaWYgKGUub3BlcmF0aW9uID09PSBcInVwbG9hZFwiKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1cGxvYWQgU3VjY2VzczogJywgZSk7XHJcbiAgICAgIC8vc2hhcmVwb2ludCByZXF1aXJlZCB0byByZWFkIGRhdGEgZnJvbSBmaWxlVWlkIGFuZCBhdHRhY2htZW50IGFibGUgdG8gZ2V0IGRhdGEgZnJvbSBmaWxlVWlkIHRvby5cclxuICAgICAgZmlsZS5teVVpZCA9IGUucmVzcG9uc2U/LmJvZHk/LmZpbGVVaWQgPz8gZmlsZS51aWQ7XHJcbiAgICAgIGRlbGV0ZSBmaWxlWydodHRwU3Vic2NyaXB0aW9uJ107XHJcblxyXG4gICAgICBpZiAoZXhpc3RpbmdGaWxlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXVtleGlzdGluZ0ZpbGVJbmRleF0gPSBmaWxlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0ucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSBpZiAoZS5vcGVyYXRpb24gPT09IFwicmVtb3ZlXCIpIHtcclxuICAgICAgaWYgKGV4aXN0aW5nRmlsZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0uc3BsaWNlKGV4aXN0aW5nRmlsZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50TW9kZWxWYWx1ZSh0aGlzLmRhdGEsIHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0sIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcInp1cGxvYWQtb25TdWNjZXNzXCIsXHJcbiAgICAgIHRhcmdldDogdGhpcy5kYXRhLk9uU3VjY2VzcyxcclxuICAgICAgZXZlbnQ6IGUsXHJcbiAgICAgIGRhdGE6IHsgdmFsdWU6IGUuZmlsZXNbMF0sIGZpZWxkOiB0aGlzLmRhdGEgfSxcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHJlc3Npb25Db25maWdIYW5kbGVyKGltZ0NvbmZpZzogSW1hZ2VDb21wcmVzc2lvbkNvbmZpZyk6IEltYWdlQ29tcHJlc3Npb25Db25maWcge1xyXG4gICAgaWYgKGltZ0NvbmZpZy5GaWxlU2l6ZU1heFNpemUpIHtcclxuICAgICAgaW1nQ29uZmlnLkZpbGVTaXplTWF4U2l6ZUJ5dGUgPSB0aGlzLmNvbnZlcnRTaXplVG9CeXRlKGltZ0NvbmZpZy5GaWxlU2l6ZU1heFNpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbWdDb25maWcuRmlsZVNpemVNaW5TaXplKSB7XHJcbiAgICAgIGltZ0NvbmZpZy5GaWxlU2l6ZU1pblNpemVCeXRlID0gdGhpcy5jb252ZXJ0U2l6ZVRvQnl0ZShpbWdDb25maWcuRmlsZVNpemVNaW5TaXplKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpbWdDb25maWcuRmlsZVNpemVNaW5TaXplQnl0ZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGltZ0NvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udmVydFNpemVUb0J5dGUoc2l6ZVN0cmluZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBfdGVtcEZpbGVTaXplTWF4U2l6ZTogbnVtYmVyID0gMDtcclxuICAgIGxldCBzaXplQnlCeXRlOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNpemVUeXBlID0gJ2InO1xyXG5cclxuICAgIC8vIHJlbW92ZSBhbGwgc3BhY2VcclxuICAgIGNvbnN0IF90ZW1wRmlsZVNpemUgPSBzaXplU3RyaW5nLnJlcGxhY2UoLyAvZywgJycpO1xyXG5cclxuICAgIC8vIGNoZWNrIGxhc3QgY2hhciBpcyBhbHBoYWJldGljXHJcbiAgICBjb25zdCBsYXN0Q2hhciA9IF90ZW1wRmlsZVNpemUuc3Vic3RyKF90ZW1wRmlsZVNpemUubGVuZ3RoIC0gMSk7XHJcbiAgICBpZiAoaXNOYU4ocGFyc2VGbG9hdChsYXN0Q2hhcikpKSB7XHJcbiAgICAgIGNvbnN0IHNlY0xhc3RDaGFyID0gX3RlbXBGaWxlU2l6ZS5zdWJzdHIoX3RlbXBGaWxlU2l6ZS5sZW5ndGggLSAyKS5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICBpZiAoaXNOYU4ocGFyc2VGbG9hdChzZWNMYXN0Q2hhcikpKSB7XHJcbiAgICAgICAgLy8gY2hlY2sgbGFzdCAybmQgY2hhciBpcyBhbHBoYWJldGljXHJcbiAgICAgICAgc2l6ZVR5cGUgPSBzZWNMYXN0Q2hhciArIHNpemVUeXBlO1xyXG4gICAgICAgIF90ZW1wRmlsZVNpemVNYXhTaXplID0gcGFyc2VGbG9hdChfdGVtcEZpbGVTaXplLnNsaWNlKDAsIC0yKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgX3RlbXBGaWxlU2l6ZU1heFNpemUgPSBwYXJzZUZsb2F0KF90ZW1wRmlsZVNpemUuc2xpY2UoMCwgLTEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChzaXplVHlwZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgY2FzZSBcImJcIjpcclxuICAgICAgICAgIHNpemVCeUJ5dGUgPSBfdGVtcEZpbGVTaXplTWF4U2l6ZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImtiXCI6XHJcbiAgICAgICAgICBzaXplQnlCeXRlID0gX3RlbXBGaWxlU2l6ZU1heFNpemUgKiAxMDI0XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWJcIjpcclxuICAgICAgICAgIHNpemVCeUJ5dGUgPSBfdGVtcEZpbGVTaXplTWF4U2l6ZSAqIDEwNDg1NzZcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJnYlwiOlxyXG4gICAgICAgICAgc2l6ZUJ5Qnl0ZSA9IF90ZW1wRmlsZVNpemVNYXhTaXplICogMTA3Mzc0MTgyNFxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBkZWZhdWx0IHVzaW5nIGJ5dGVzIGlmIG5vIHNpemUgdHlwZVxyXG4gICAgICBzaXplQnlCeXRlID0gcGFyc2VGbG9hdChfdGVtcEZpbGVTaXplKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2l6ZUJ5Qnl0ZTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEV2ZW50SGFuZGxlcihlOiBVcGxvYWRFdmVudCkge1xyXG4gICAgLy8gSW1hZ2UgUHJldmlld1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG5cclxuICAgIGUuZmlsZXMuZm9yRWFjaCgoZmlsZTogRmlsZUluZm8pID0+IHtcclxuICAgICAgaWYgKCFtZS5pc1ZhbGlkVXBsb2FkZWRGaWxlKG1lLCBmaWxlKSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGZpbGUucmF3RmlsZSAmJiBmaWxlLnJhd0ZpbGUudHlwZS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XHJcbiAgICAgICAgICBpZiAoIWZpbGUudmFsaWRhdGlvbkVycm9ycykge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGV2KSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1lLmRhdGEuRW5hYmxlSW1hZ2VQcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1lLnVpZC5pbmNsdWRlcyhmaWxlLnVpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgbWUudWlkLnB1c2goZmlsZS51aWQpO1xyXG4gICAgICAgICAgICAgICAgICBtZS5pbWFnZVByZXZpZXdzLnB1c2goeyAuLi5maWxlLCBzcmM6IDxzdHJpbmc+cmVhZGVyLnJlc3VsdCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZS5yYXdGaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFkZCBtZXRhZGF0YSB0byB0aGUgdXBsb2FkIGV2ZW50XHJcbiAgICBsZXQgYWRkaXRpb25hbDogVXBsb2FkTWV0YURhdGEgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlVwbG9hZE1ldGFEYXRhKTtcclxuXHJcbiAgICBpZiAoIShhZGRpdGlvbmFsIGluc3RhbmNlb2YgVXBsb2FkTWV0YURhdGEpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVcGxvYWRNZXRhRGF0YSBkZWZpbmVkIGF0IFwiICsgdGhpcy5kYXRhLlVwbG9hZE1ldGFEYXRhICsgXCIgaXMgaW52YWxpZDogXCIsIGFkZGl0aW9uYWwpO1xyXG4gICAgICBhZGRpdGlvbmFsID0gbmV3IFVwbG9hZE1ldGFEYXRhKG51bGwsIFwiMFwiKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8jcmVnaW9uIHNoYXJlcG9pbnRcclxuICAgIGxldCBhdHRhY2htZW50SW5mbzogQXR0YWNobWVudCA9IHRoaXMuc2hhcmVQb2ludFNlcnZpY2UuZ2V0QXR0YWNobWVudEluZm8odGhpcy5kYXRhW1wiRG93bmxvYWRGaWxlQ29uZmlnXCJdKTtcclxuXHJcbiAgICAvL2FkZCB0YWdnaW5nIGludG8gbWV0YWRhdGFcclxuICAgIGlmIChhdHRhY2htZW50SW5mbykge1xyXG4gICAgICBpZiAoYXR0YWNobWVudEluZm8udGFnKSB7XHJcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5zaGFyZVBvaW50U2VydmljZS5nZW5lcmF0ZVRhZ2dpbmcodGhpcy5ncm91cCwgYXR0YWNobWVudEluZm8udGFnKTtcclxuICAgICAgICBhZGRpdGlvbmFsW0F0dGFjaG1lbnRDb25maWcudGFnXSA9IHRhZztcclxuICAgICAgfVxyXG4gICAgICBhZGRpdGlvbmFsW0F0dGFjaG1lbnRDb25maWcuc2l0ZU5hbWVdID0gYXR0YWNobWVudEluZm8uc2l0ZU5hbWU7XHJcbiAgICAgIGFkZGl0aW9uYWxbQXR0YWNobWVudENvbmZpZy5kb2N1bWVudExpYnJhcnlOYW1lXSA9IGF0dGFjaG1lbnRJbmZvLmRvY3VtZW50TGlicmFyeU5hbWU7XHJcbiAgICAgIGFkZGl0aW9uYWxbQXR0YWNobWVudENvbmZpZy5pc1NhdmVUb1NoYXJlUG9pbnRdID0gYXR0YWNobWVudEluZm8uaXNTYXZlVG9TaGFyZVBvaW50O1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgY29uc3Qgc3RyID0gSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbCk7XHJcblxyXG4gICAgZS5kYXRhID0geyBhZGRpdGlvbmFsOiBzdHIsIH07XHJcbiAgICBlLmhlYWRlcnMgPSBlLmhlYWRlcnMuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRoaXMuYXV0aFNlcnZpY2UuZTFBY2Nlc3NUb2tlbik7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZShlOiBSZW1vdmVFdmVudCk6IHZvaWQge1xyXG4gICAgLy8gcmVtb3ZlIGZpbGUgZnJvbSBjb21wb25lbnQgbWVtb3J5XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsZUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAoaXRlbSkgPT4gaXRlbS51aWQgPT09IGUuZmlsZXNbMF0udWlkXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZmlsZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5ncm91cFsnenVwbG9hZF8nICsgdGhpcy5kYXRhLlZhbHVlXSA9IHRoaXMuZmlsZUxpc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnRmlsZVJlbW92ZWRFdmVudCddKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInp1cGxvYWQtZmlsZVJlbW92ZWRFdmVudFwiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhWydGaWxlUmVtb3ZlZEV2ZW50J10sXHJcbiAgICAgICAgZGF0YTogZVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgbXlGaWxlOiBNeUZpbGVJbmZvID0gZS5maWxlc1swXSBhcyBNeUZpbGVJbmZvO1xyXG5cclxuICAgICAgLy8gY29uc29sZS5sb2coJ3JlbW92ZSBkb25lOiAnLCBlKTtcclxuICAgICAgZS5kYXRhID0ge1xyXG4gICAgICAgIGlkOiBteUZpbGUubXlVaWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGUuaGVhZGVycyA9IGUuaGVhZGVycy5hcHBlbmQoXHJcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXHJcbiAgICAgICAgXCJCZWFyZXIgXCIgKyB0aGlzLmF1dGhTZXJ2aWNlLmUxQWNjZXNzVG9rZW5cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGEuRW5hYmxlSW1hZ2VQcmV2aWV3KSB7XHJcbiAgICAgICAgZS5maWxlcy5mb3JFYWNoKChmaWxlOiBGaWxlSW5mbykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVByZXZpZXdzID0gdGhpcy5pbWFnZVByZXZpZXdzLmZpbHRlcihmID0+IGYudWlkICE9PSBmaWxlLnVpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGZpbGU6IEZpbGVJbmZvW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0ZpbGVDaGFuZ2VkRXZlbnQnXSkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6dXBsb2FkLWZpbGVDaGFuZ2VkRXZlbnRcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YVsnRmlsZUNoYW5nZWRFdmVudCddLFxyXG4gICAgICAgIGRhdGE6IGZpbGVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1ZhbGlkVXBsb2FkZWRGaWxlKG1lOiBhbnksIGZpbGU6IEZpbGVJbmZvKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmaWxlU2l6ZSA9IGZpbGUucmF3RmlsZS5zaXplO1xyXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGUucmF3RmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBmaWxlIHNpemUgYW5kIGV4dGVuc2lvbiBhcmUgdmFsaWRcclxuICAgIGlmIChmaWxlU2l6ZSA+IG1lLnJlc3RyaWN0aW9ucy5tYXhGaWxlU2l6ZSB8fCAhbWUucmVzdHJpY3Rpb25zLmFsbG93ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnRXJyb3I6ICc7XHJcbiAgICAgIGlmICghbWUucmVzdHJpY3Rpb25zLmFsbG93ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgZmlsZSB0eXBlLiBBbGxvd2VkIHR5cGVzIGFyZTogJHttZS5yZXN0cmljdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCAnKX0uYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChmaWxlU2l6ZSA+IG1lLnJlc3RyaWN0aW9ucy5tYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBGaWxlIHNpemUgY2Fubm90IGV4Y2VlZHMgJHttZS5mb3JtYXRGaWxlU2l6ZShtZS5yZXN0cmljdGlvbnMubWF4RmlsZVNpemUpfS5gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtZS5hbGVydFNlcnZpY2Uuc2hvd09rYXkoJ0ZhaWxlZCB0byB1cGxvYWQnLCBlcnJvck1lc3NhZ2UsIFsnY29sLTQnXSk7XHJcblxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RFdmVudEhhbmRsZXIoZTogU2VsZWN0RXZlbnQpIHtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuXHJcbiAgICAvLyNyZWdpb24gc2hhcmVwb2ludFxyXG4gICAgY29uc3QgYXR0YWNobWVudEluZm86IEF0dGFjaG1lbnQgPSB0aGlzLnNoYXJlUG9pbnRTZXJ2aWNlLmdldEF0dGFjaG1lbnRJbmZvKHRoaXMuZGF0YVtcIkRvd25sb2FkRmlsZUNvbmZpZ1wiXSk7XHJcbiAgICAvLyBDaGFuZ2UgdXBsb2FkU2F2ZVVybCBpZiBzYXZpbmcgdG8gU2hhcmVQb2ludFxyXG4gICAgaWYgKGF0dGFjaG1lbnRJbmZvICYmIGF0dGFjaG1lbnRJbmZvLmlzU2F2ZVRvU2hhcmVQb2ludCAmJiBhdHRhY2htZW50SW5mby5zaXRlTmFtZSkge1xyXG4gICAgICBjb25zdCBhdHRhY2htZW50U291cmNlVXJsID0gdGhpcy56Y29yZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKS5hdHRhY2htZW50U291cmNlVXJsO1xyXG4gICAgICB0aGlzLnVwbG9hZFNhdmVVcmwgPSBhdHRhY2htZW50U291cmNlVXJsICsgJy9DaHVua19VcGxvYWRfU2F2ZSc7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydTZWxlY3RGaWxlT25seSddKSB7XHJcbiAgICAgIC8vIEFwcGVuZCBhbGwgZmlsZXMgdG8gY29tcG9uZW50IG1lbW9yeVxyXG4gICAgICBlLmZpbGVzLmZvckVhY2goYXN5bmMgKGZpbGU6IEZpbGVJbmZvKSA9PiB7XHJcbiAgICAgICAgaWYgKG1lLmlzVmFsaWRVcGxvYWRlZEZpbGUobWUsIGZpbGUpKSB7XHJcbiAgICAgICAgICBpZiAoZmlsZS5yYXdGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZXYpIHtcclxuICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgZGF0YSBhbmQgYWxzbyBhZGQgdGhlIHJlYWQgZmlsZSB0byB0aGUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsZURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBmaWxlKTtcclxuICAgICAgICAgICAgICBmaWxlRGF0YVsnZmlsZSddID0gZXYudGFyZ2V0W1wicmVzdWx0XCJdO1xyXG5cclxuICAgICAgICAgICAgICAvLyBQdXNoIHRvIGNvbXBvbmVudCBmaWxlTGlzdFxyXG4gICAgICAgICAgICAgIG1lLmZpbGVMaXN0LnB1c2goZmlsZURhdGEpO1xyXG4gICAgICAgICAgICAgIG1lLmdyb3VwWyd6dXBsb2FkXycgKyBtZS5kYXRhLlZhbHVlXSA9IG1lLmZpbGVMaXN0O1xyXG5cclxuICAgICAgICAgICAgICBpZiAobWUuZGF0YVsnRmlsZVNlbGVjdGVkRXZlbnQnXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2FsbCB0aGUgcHJvamVjdCBldmVudFxyXG4gICAgICAgICAgICAgICAgbWUuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogXCJ6dXBsb2FkLWZpbGVTZWxlY3RlZEV2ZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogbWUuZGF0YVsnRmlsZVNlbGVjdGVkRXZlbnQnXSxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogbWUuZmlsZUxpc3RcclxuICAgICAgICAgICAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGF3YWl0IHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUucmF3RmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gT25seSB3b3JrYWJsZSBmb3IgQXV0byBVcGxvYWQgPSBmYWxzZVxyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5BdXRvVXBsb2FkKSB7XHJcbiAgICAgICAgLy8gQ29tcHJlc3Npb24gZm9yIGltYWdlIGZpbGVcclxuICAgICAgICBjb25zdCBpbWFnZUNvbXByZXNzaW9uRW5hYmxlZCA9IHRoaXMuZGF0YS5Db21wcmVzc2lvbiA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy9DaGVjayBpZiBJbWFnZSBDb21wcmVzc2lvbiBpcyBlbmFibGVkLlxyXG4gICAgICAgIGlmIChpbWFnZUNvbXByZXNzaW9uRW5hYmxlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgZS5maWxlcy5mb3JFYWNoKChmaWxlOiBGaWxlSW5mbykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobWUuaXNWYWxpZFVwbG9hZGVkRmlsZShtZSwgZmlsZSkpIHtcclxuICAgICAgICAgICAgICAvLyBDb21wcmVzcyBvbmx5IGlmIGl0IGlzIGFuIGltYWdlIGZpbGVcclxuICAgICAgICAgICAgICBpZiAoZmlsZS5yYXdGaWxlICYmIGZpbGUucmF3RmlsZS50eXBlLmluY2x1ZGVzKFwiaW1hZ2VcIikpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZmlsZS52YWxpZGF0aW9uRXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ0NvbmZpZyA9IHRoaXMuY29tcHJlc3Npb25Db25maWdIYW5kbGVyKHRoaXMuZGF0YS5Db21wcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnNpemUgPiBpbWdDb25maWcuRmlsZVNpemVNaW5TaXplQnl0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lLmNvbXByZXNzSW1hZ2UuY29tcHJlc3MoZmlsZS5yYXdGaWxlLCBpbWdDb25maWcpICAvL1Bhc3MgaW4gcGFyYW1ldGVyIHRvIHNldCB0aGUgQ29tcHJlc3Npb24gT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoY29tcHJlc3NGaWxlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnJhd0ZpbGUgPSBjb21wcmVzc0ZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5zaXplID0gY29tcHJlc3NGaWxlLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1c2ggdG8gY29tcG9uZW50IGZpbGVMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWUuZmlsZUxpc3QucHVzaChPYmplY3QuYXNzaWduKHt9LCBmaWxlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZS5yYXdGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb21wcmVzc2VkIGZpbGUgc2l6ZTogJHsoZmlsZS5yYXdGaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfUtCYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSAvLyBmaWxlIHNpemUgY2hlY2tcclxuICAgICAgICAgICAgICAgIH0gLy8gdmFsaWRhdGlvbkVycm9ycyBjaGVja1xyXG4gICAgICAgICAgICAgIH0gLy8gZmlsZSB0eXBlIGNoZWNrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSAvLyBsb29wIGVhY2ggZmlsZVxyXG4gICAgICAgIH0gLy8gaW1hZ2Vjb21wcmVzc2lvbiBjaGVja1xyXG5cclxuICAgICAgICAvLyBhZGQgdG8gZ3JvdXAgc2NvcGVcclxuICAgICAgICBtZS5ncm91cFsnenVwbG9hZF8nICsgbWUuZGF0YS5WYWx1ZV0gPSBlLmZpbGVzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbGVzKCkge1xyXG4gICAgdGhpcy51cGxvYWRDb21wb25lbnQuY2xlYXJGaWxlcygpO1xyXG4gICAgdGhpcy5ncm91cFsnenVwbG9hZF8nICsgdGhpcy5kYXRhLlZhbHVlXSA9IHRoaXMuZmlsZUxpc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAnMCBCeXRlJztcclxuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KDEwMjQsIGkpKS50b0ZpeGVkKDIpKSArIHNpemVzW2ldO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwienVwbG9hZC1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxrZW5kby11cGxvYWRcclxuICAgICpuZ0lmPVwiIWRhdGEuU2VsZWN0RmlsZU9ubHlcIlxyXG4gICAgI3VwbG9hZENvbXBvbmVudFxyXG4gICAgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgW2F1dG9VcGxvYWRdPVwiaXNBdXRvVXBsb2FkXCJcclxuICAgIFtzYXZlVXJsXT1cInVwbG9hZFNhdmVVcmxcIlxyXG4gICAgW3JlbW92ZVVybF09XCJ1cGxvYWRSZW1vdmVVcmxcIlxyXG4gICAgW3Jlc3RyaWN0aW9uc109XCJyZXN0cmljdGlvbnNcIlxyXG4gICAgW211bHRpcGxlXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgW2NodW5rYWJsZV09XCJjaHVua1NldHRpbmdzXCJcclxuICAgIFtzaG93RmlsZUxpc3RdPVwic2hvd0ZpbGVMaXN0XCJcclxuICAgIChzZWxlY3QpPVwic2VsZWN0RXZlbnRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgKHJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCJcclxuICAgIChzdWNjZXNzKT1cIm9uU3VjY2VzcygkZXZlbnQpXCJcclxuICAgICh1cGxvYWQpPVwidXBsb2FkRXZlbnRIYW5kbGVyKCRldmVudClcIlxyXG4gICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgIGNsYXNzPVwiZTF0YWctc3R5bGUxXCI+XHJcbiAgPC9rZW5kby11cGxvYWQ+XHJcblxyXG4gIDxrZW5kby1maWxlc2VsZWN0XHJcbiAgICAqbmdJZj1cImRhdGEuU2VsZWN0RmlsZU9ubHlcIlxyXG4gICAgI3VwbG9hZENvbXBvbmVudFxyXG4gICAgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgKHNlbGVjdCk9XCJzZWxlY3RFdmVudEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAocmVtb3ZlKT1cIm9uUmVtb3ZlKCRldmVudClcIlxyXG4gICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgXHJcbiAgICBbcmVzdHJpY3Rpb25zXT1cInJlc3RyaWN0aW9uc1wiXHJcbiAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuICA8L2tlbmRvLWZpbGVzZWxlY3Q+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiaW1hZ2VQcmV2aWV3cy5sZW5ndGhcIlxyXG4gICAgY2xhc3M9XCJpbWFnZS1wcmV2aWV3LWNvbnRhaW5lciBlMXRhZy1zdHlsZTJcIlxyXG4gICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwibGFiZWwtY29udGFpbmVyIGUxdGFnLXN0eWxlM1wiXHJcbiAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiPlxyXG4gICAgICBJbWFnZSBQcmV2aWV3OlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyIGUxdGFnLXN0eWxlNFwiXHJcbiAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNFwiPlxyXG4gICAgICA8aW1nXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGltYWdlIG9mIGltYWdlUHJldmlld3NcIlxyXG4gICAgICAgIFtzcmNdPVwiaW1hZ2Uuc3JjXCJcclxuICAgICAgICBhbHQ9XCJpbWFnZSBwcmV2aWV3XCJcclxuICAgICAgICBoZWlnaHQ9XCIxMDBcIlxyXG4gICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU1XCJcclxuICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=