atr-components 0.2.417 → 2.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 (136) hide show
  1. package/atr-components.module.d.ts +9 -9
  2. package/atr-public-api.d.ts +53 -53
  3. package/core/animations/animations.d.ts +1 -1
  4. package/core/animations/fly-in.d.ts +1 -1
  5. package/core/animations/scroll-screen.d.ts +1 -1
  6. package/core/auth/auth.guard.d.ts +11 -11
  7. package/core/base/atr-common.d.ts +347 -347
  8. package/core/directive/error-img.directive.d.ts +10 -10
  9. package/core/directive/hq-spin.directive.d.ts +13 -13
  10. package/core/directive/role.directive.d.ts +16 -16
  11. package/core/interceptor/base.interceptor.d.ts +17 -17
  12. package/core/ngz-module/cus-zorro-antd.module.d.ts +75 -75
  13. package/core/pipe/china-num.pipe.d.ts +7 -7
  14. package/core/pipe/count.pipe.d.ts +7 -7
  15. package/core/pipe/day.pipe.d.ts +8 -8
  16. package/core/pipe/defaultVal.pipe.d.ts +7 -7
  17. package/core/pipe/dicts.pipe.d.ts +10 -10
  18. package/core/pipe/image-pipe.pipe.d.ts +8 -8
  19. package/core/pipe/is-empty.pipe.d.ts +7 -7
  20. package/core/pipe/is-not-empty.pipe.d.ts +7 -7
  21. package/core/pipe/oss.pipe.d.ts +7 -7
  22. package/core/pipe/ossStatic.pipe.d.ts +7 -7
  23. package/core/pipe/pipe-module.module.d.ts +21 -21
  24. package/core/pipe/remove-html.pipe.d.ts +10 -10
  25. package/core/pipe/safe-compute.pipe.d.ts +7 -7
  26. package/core/pipe/safe-html.pipe.d.ts +10 -10
  27. package/core/pipe/safe-url.pipe.d.ts +10 -10
  28. package/core/routereuse/atr-reuse-strategy.d.ts +19 -19
  29. package/core/services/dict/dict.service.d.ts +20 -20
  30. package/core/services/http.service.d.ts +31 -31
  31. package/core/services/menu.service.d.ts +29 -29
  32. package/core/services/upload-oss.service.d.ts +14 -14
  33. package/core/utils/ToolsUtil.d.ts +180 -180
  34. package/core/utils/localstorage.util.d.ts +15 -15
  35. package/core/utils/sessionstorage.util.d.ts +15 -15
  36. package/{esm2020 → esm2022}/atr-components.mjs +4 -4
  37. package/esm2022/atr-components.module.mjs +36 -0
  38. package/{esm2020 → esm2022}/atr-public-api.mjs +54 -54
  39. package/{esm2020 → esm2022}/core/animations/animations.mjs +9 -9
  40. package/{esm2020 → esm2022}/core/animations/fly-in.mjs +18 -18
  41. package/{esm2020 → esm2022}/core/animations/scroll-screen.mjs +22 -22
  42. package/{esm2020 → esm2022}/core/auth/auth.guard.mjs +37 -37
  43. package/esm2022/core/base/atr-common.mjs +47 -0
  44. package/{esm2020 → esm2022}/core/directive/error-img.directive.mjs +31 -31
  45. package/{esm2020 → esm2022}/core/directive/hq-spin.directive.mjs +48 -48
  46. package/esm2022/core/directive/role.directive.mjs +69 -0
  47. package/{esm2020 → esm2022}/core/interceptor/base.interceptor.mjs +165 -165
  48. package/{esm2020 → esm2022}/core/ngz-module/cus-zorro-antd.module.mjs +292 -292
  49. package/{esm2020 → esm2022}/core/pipe/china-num.pipe.mjs +36 -36
  50. package/{esm2020 → esm2022}/core/pipe/count.pipe.mjs +34 -34
  51. package/{esm2020 → esm2022}/core/pipe/day.pipe.mjs +24 -24
  52. package/{esm2020 → esm2022}/core/pipe/defaultVal.pipe.mjs +23 -23
  53. package/{esm2020 → esm2022}/core/pipe/dicts.pipe.mjs +28 -28
  54. package/{esm2020 → esm2022}/core/pipe/image-pipe.pipe.mjs +17 -17
  55. package/{esm2020 → esm2022}/core/pipe/is-empty.pipe.mjs +20 -20
  56. package/{esm2020 → esm2022}/core/pipe/is-not-empty.pipe.mjs +17 -17
  57. package/{esm2020 → esm2022}/core/pipe/oss.pipe.mjs +17 -17
  58. package/{esm2020 → esm2022}/core/pipe/ossStatic.pipe.mjs +17 -17
  59. package/esm2022/core/pipe/pipe-module.module.mjs +38 -0
  60. package/{esm2020 → esm2022}/core/pipe/remove-html.pipe.mjs +21 -21
  61. package/{esm2020 → esm2022}/core/pipe/safe-compute.pipe.mjs +23 -23
  62. package/{esm2020 → esm2022}/core/pipe/safe-html.pipe.mjs +20 -20
  63. package/{esm2020 → esm2022}/core/pipe/safe-url.pipe.mjs +20 -20
  64. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +79 -0
  65. package/esm2022/core/services/dict/dict.service.mjs +152 -0
  66. package/{esm2020 → esm2022}/core/services/http.service.mjs +306 -306
  67. package/{esm2020 → esm2022}/core/services/menu.service.mjs +130 -130
  68. package/{esm2020 → esm2022}/core/services/upload-oss.service.mjs +74 -74
  69. package/esm2022/core/utils/ToolsUtil.mjs +622 -0
  70. package/{esm2020 → esm2022}/core/utils/localstorage.util.mjs +94 -94
  71. package/{esm2020 → esm2022}/core/utils/sessionstorage.util.mjs +72 -72
  72. package/{esm2020 → esm2022}/lib/hello/hello.component.mjs +15 -15
  73. package/esm2022/lib/hello/hello.module.mjs +20 -0
  74. package/esm2022/lib/shared/atr-shared.module.mjs +204 -0
  75. package/esm2022/lib/shared/echarts/echarts.component.mjs +77 -0
  76. package/esm2022/lib/shared/form/form.component.mjs +574 -0
  77. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +132 -0
  78. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +68 -0
  79. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +248 -0
  80. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +90 -0
  81. package/{esm2020 → esm2022}/lib/shared/select-tree/select-tree.component.mjs +55 -55
  82. package/{esm2020 → esm2022}/lib/shared/service/busi.service.mjs +69 -69
  83. package/{esm2020 → esm2022}/lib/shared/share.service.mjs +107 -107
  84. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +96 -0
  85. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +165 -0
  86. package/esm2022/lib/shared/table/table.component.mjs +749 -0
  87. package/{esm2020 → esm2022}/lib/shared/upload/upload.component.mjs +274 -274
  88. package/{esm2020 → esm2022}/lib/shared/validators/atr-validtors.mjs +8 -8
  89. package/esm2022/lib/shared/video/video.component.mjs +16 -0
  90. package/esm2022/lib/shared/view-form/view-form.component.mjs +181 -0
  91. package/{fesm2020 → fesm2022}/atr-components.mjs +5311 -5312
  92. package/fesm2022/atr-components.mjs.map +1 -0
  93. package/{atr-components.d.ts → index.d.ts} +5 -5
  94. package/lib/hello/hello.component.d.ts +8 -8
  95. package/lib/hello/hello.module.d.ts +8 -8
  96. package/lib/shared/atr-shared.module.d.ts +36 -33
  97. package/lib/shared/echarts/echarts.component.d.ts +34 -34
  98. package/lib/shared/form/form.component.d.ts +45 -45
  99. package/lib/shared/img-canvas/img-canvas.component.d.ts +28 -28
  100. package/lib/shared/local-upload/local-upload.component.d.ts +22 -22
  101. package/lib/shared/quill-editor/quill-editor.component.d.ts +45 -45
  102. package/lib/shared/select-icons/select-icons.component.d.ts +24 -24
  103. package/lib/shared/select-tree/select-tree.component.d.ts +23 -23
  104. package/lib/shared/service/busi.service.d.ts +20 -20
  105. package/lib/shared/share.service.d.ts +14 -14
  106. package/lib/shared/table/table-form-item/table-form-item.component.d.ts +25 -25
  107. package/lib/shared/table/table-td/table-td.component.d.ts +26 -26
  108. package/lib/shared/table/table.component.d.ts +94 -94
  109. package/lib/shared/upload/upload.component.d.ts +53 -53
  110. package/lib/shared/validators/atr-validtors.d.ts +2 -2
  111. package/lib/shared/video/video.component.d.ts +7 -7
  112. package/lib/shared/view-form/view-form.component.d.ts +28 -28
  113. package/package.json +14 -22
  114. package/esm2020/atr-components.module.mjs +0 -38
  115. package/esm2020/core/base/atr-common.mjs +0 -47
  116. package/esm2020/core/directive/role.directive.mjs +0 -69
  117. package/esm2020/core/pipe/pipe-module.module.mjs +0 -40
  118. package/esm2020/core/routereuse/atr-reuse-strategy.mjs +0 -79
  119. package/esm2020/core/services/dict/dict.service.mjs +0 -152
  120. package/esm2020/core/utils/ToolsUtil.mjs +0 -622
  121. package/esm2020/lib/hello/hello.module.mjs +0 -22
  122. package/esm2020/lib/shared/atr-shared.module.mjs +0 -199
  123. package/esm2020/lib/shared/echarts/echarts.component.mjs +0 -77
  124. package/esm2020/lib/shared/form/form.component.mjs +0 -574
  125. package/esm2020/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
  126. package/esm2020/lib/shared/local-upload/local-upload.component.mjs +0 -68
  127. package/esm2020/lib/shared/quill-editor/quill-editor.component.mjs +0 -248
  128. package/esm2020/lib/shared/select-icons/select-icons.component.mjs +0 -90
  129. package/esm2020/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
  130. package/esm2020/lib/shared/table/table-td/table-td.component.mjs +0 -165
  131. package/esm2020/lib/shared/table/table.component.mjs +0 -749
  132. package/esm2020/lib/shared/video/video.component.mjs +0 -15
  133. package/esm2020/lib/shared/view-form/view-form.component.mjs +0 -181
  134. package/fesm2015/atr-components.mjs +0 -5522
  135. package/fesm2015/atr-components.mjs.map +0 -1
  136. package/fesm2020/atr-components.mjs.map +0 -1
@@ -1,274 +1,274 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';
4
- import { atr_static_datas } from "../../../core/base/atr-common";
5
- import { HttpService } from "../../../core/services/http.service";
6
- import { ToolsUtil } from "../../../core/utils/ToolsUtil";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "ng-zorro-antd/image";
9
- import * as i2 from "@angular/common/http";
10
- import * as i3 from "ng-zorro-antd/modal";
11
- import * as i4 from "ng-zorro-antd/upload";
12
- import * as i5 from "ng-zorro-antd/button";
13
- import * as i6 from "../video/video.component";
14
- import * as i7 from "@angular/common";
15
- import * as i8 from "ng-zorro-antd/core/transition-patch";
16
- import * as i9 from "ng-zorro-antd/icon";
17
- import * as i10 from "ng-zorro-antd/core/wave";
18
- import * as i11 from "ng2-dragula";
19
- import * as i12 from "../../../core/pipe/image-pipe.pipe";
20
- export class UploadComponent {
21
- constructor(injector, nzImageService, httpClient, modalService) {
22
- this.injector = injector;
23
- this.nzImageService = nzImageService;
24
- this.httpClient = httpClient;
25
- this.modalService = modalService;
26
- this.isEdit = true;
27
- this.allowChangSeq = false;
28
- this.uploadUrl = "";
29
- this.uploadData = {};
30
- this.showUploadList = {
31
- showPreviewIcon: true,
32
- showRemoveIcon: true,
33
- hidePreviewIconInNonImage: true
34
- };
35
- this.afterChange = new EventEmitter();
36
- this.optsChange = new EventEmitter();
37
- this.onBeforeUpload = new EventEmitter();
38
- this.previewImage = '';
39
- this.previewVisible = false;
40
- this.changeVisible = false;
41
- this.handlePreview = (file) => {
42
- this.previewImage = file.url || file.thumbUrl;
43
- this.previewVisible = true;
44
- };
45
- this.remove = (file) => {
46
- if (!this.isEdit) {
47
- return false;
48
- }
49
- console.log(file);
50
- if (this.opts && this.opts.removeAction) {
51
- return false;
52
- }
53
- return true;
54
- };
55
- this.beforeUpload = (file, fileList) => {
56
- debugger;
57
- return new Observable(observe => {
58
- let fileName;
59
- if (this.opts.keepName) {
60
- fileName = file.name;
61
- }
62
- else {
63
- fileName = ToolsUtil.getRandomFileName() + "." + ToolsUtil.getFileExt(file.name);
64
- }
65
- this.onBeforeUpload.emit({ code: 'getFile', data: { file: file, fileList: fileList } });
66
- this.httpService.post(atr_static_datas.OSS_POLICY, {
67
- dir: this.opts.uploadDir,
68
- fileName: fileName,
69
- 'success_action_status': '200'
70
- }, ToolsUtil.getHttpOptions()).subscribe(result => {
71
- if (result.status == 200) {
72
- this.uploadData[file.uid] = result.data;
73
- observe.next(true);
74
- }
75
- else
76
- observe.next(false);
77
- observe.unsubscribe();
78
- }, error => {
79
- observe.next(false);
80
- observe.unsubscribe();
81
- });
82
- });
83
- };
84
- this.customReq = (item) => {
85
- const formData = new FormData();
86
- let uploadData = this.uploadData[item.file.uid];
87
- for (let key in uploadData) {
88
- if (key != 'host')
89
- formData.append(key, uploadData[key]);
90
- }
91
- formData.append('file', item.file);
92
- const req = new HttpRequest('POST', uploadData.host, formData, {
93
- reportProgress: true
94
- });
95
- return this.httpClient.request(req).subscribe((event) => {
96
- if (event.type === HttpEventType.UploadProgress) {
97
- if (event.total > 0) {
98
- event.percent = (event.loaded / event.total) * 100;
99
- }
100
- item.onProgress(event, item.file);
101
- }
102
- else if (event instanceof HttpResponse) {
103
- item.file["key"] = uploadData.key;
104
- item.onSuccess(event.body, item.file, event);
105
- }
106
- }, err => {
107
- item.onError(err, item.file);
108
- });
109
- };
110
- }
111
- ngOnInit() {
112
- }
113
- getFileTyeIcon(fileType, fileName) {
114
- let thumbUrl = this.getFileThumbUrl(fileType);
115
- if (thumbUrl === '') {
116
- thumbUrl = this.getThumbUrl(fileName);
117
- }
118
- return thumbUrl;
119
- }
120
- getThumbUrl(path) {
121
- if (!path) {
122
- return '';
123
- }
124
- // 后缀获取
125
- if (path.endsWith('.mp4')) {
126
- return '../../../assets/video.jpg';
127
- }
128
- else {
129
- return '';
130
- }
131
- }
132
- getFileThumbUrl(type) {
133
- let thumbUrl = '';
134
- if (type === 'video/mp4' || type === 'mp4') {
135
- thumbUrl = '../../../assets/video.jpg';
136
- }
137
- return thumbUrl;
138
- }
139
- onChange(params) {
140
- console.log(params);
141
- if (params.type == "success" || params.type == "removed") {
142
- this.opts.imageList = [];
143
- setTimeout(() => {
144
- this.opts.imageList = params.fileList.map((file) => {
145
- if (file.type == 'video/mp4' && file.uid === params.file.uid) {
146
- let thumbUrl = this.getFileTyeIcon(file.type, file.name);
147
- file.thumbUrl = thumbUrl ? thumbUrl : file.thumbUrl;
148
- file.url = file.originFileObj ? atr_static_datas.OSS_URL + file.originFileObj['key'] : file['path'];
149
- }
150
- return file;
151
- });
152
- }, 50);
153
- let fileUrls = [];
154
- for (let file of params.fileList) {
155
- if (file["key"] != undefined) {
156
- fileUrls.push(file["key"]);
157
- continue;
158
- }
159
- if (file.originFileObj) {
160
- let originFileObj = file.originFileObj;
161
- if (originFileObj["key"] != undefined) {
162
- fileUrls.push(originFileObj["key"]);
163
- }
164
- }
165
- }
166
- this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
167
- this.optsChange.emit(this.opts);
168
- }
169
- }
170
- get httpService() {
171
- return this.injector.get(HttpService);
172
- }
173
- openBannerSeq(tplContent, tplFooter) {
174
- this.tplModal = this.modalService.create({
175
- nzTitle: "修改图片顺序",
176
- nzContent: tplContent,
177
- nzFooter: tplFooter,
178
- nzMaskClosable: false,
179
- nzClosable: false,
180
- nzOnOk: () => console.log('Click ok')
181
- });
182
- console.log(this.opts.imageList);
183
- this.changeVisible = true;
184
- }
185
- destroyTplModal() {
186
- if (this.tplModal)
187
- this.tplModal.destroy();
188
- }
189
- arrowUp(index) {
190
- let img = this.opts.imageList[index];
191
- this.opts.imageList[index] = this.opts.imageList[index - 1];
192
- this.opts.imageList[index - 1] = img;
193
- }
194
- arrowDown(index) {
195
- let img = this.opts.imageList[index];
196
- this.opts.imageList[index] = this.opts.imageList[index + 1];
197
- this.opts.imageList[index + 1] = img;
198
- }
199
- saveSeq() {
200
- this.destroyTplModal();
201
- let imgs = this.opts.imageList;
202
- this.opts.imageList = [];
203
- setTimeout(() => {
204
- this.opts.imageList = imgs;
205
- console.log(this.opts.imageList);
206
- let fileUrls = [];
207
- for (let file of this.opts.imageList) {
208
- if (file["key"] != undefined) {
209
- fileUrls.push(file["key"]);
210
- continue;
211
- }
212
- if (file.originFileObj && file.originFileObj["key"] != undefined)
213
- fileUrls.push(file.originFileObj["key"]);
214
- }
215
- this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
216
- }, 50);
217
- }
218
- dragnumber(numer) {
219
- console.log(numer);
220
- console.log('or', this.opts.imageList);
221
- console.log('new', numer);
222
- this.saveSeq();
223
- // this.opts.imageList = numer
224
- }
225
- delImg(numer) {
226
- console.log(numer);
227
- this.opts.imageList = this.opts.imageList.filter((v, i) => i != numer);
228
- let fileUrls = [];
229
- for (let file of this.opts.imageList) {
230
- if (file["key"] != undefined) {
231
- fileUrls.push(file["key"]);
232
- continue;
233
- }
234
- if (file.originFileObj && file.originFileObj["key"] != undefined)
235
- fileUrls.push(file.originFileObj["key"]);
236
- }
237
- this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
238
- }
239
- priviewImg(img) {
240
- let url = ToolsUtil.getOssUrl(this.getImgUrl(img));
241
- console.log(url);
242
- this.nzImageService.preview([{
243
- src: url,
244
- alt: 'ng-zorro'
245
- }], { nzZoom: 1.5, nzRotate: 0 });
246
- }
247
- getImgUrl(img) {
248
- if (img.originFileObj && img.originFileObj.key) {
249
- return img.originFileObj.key;
250
- }
251
- return (img.url || img.thumbUrl);
252
- }
253
- }
254
- UploadComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UploadComponent, deps: [{ token: i0.Injector }, { token: i1.NzImageService }, { token: i2.HttpClient }, { token: i3.NzModalService }], target: i0.ɵɵFactoryTarget.Component });
255
- UploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: UploadComponent, selector: "atr-img-upload", inputs: { opts: "opts", isEdit: "isEdit", allowChangSeq: "allowChangSeq", showUploadList: "showUploadList" }, outputs: { afterChange: "afterChange", optsChange: "optsChange", onBeforeUpload: "onBeforeUpload" }, ngImport: i0, template: "<div class=\"clearfix\">\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'drag'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <p class=\"ant-upload-drag-icon\">\r\n <i nz-icon nzType=\"inbox\"></i>\r\n </p>\r\n <p class=\"ant-upload-text\">\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20</p>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'button'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\" style=\"font-size: 16px\"></i><span> {{opts.btnName}}</span></button>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && !opts?.uploadType \"\r\n nzAction=\"\"\r\n nzListType=\"picture-card\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [(nzFileList)]=\"opts.imageList\"\r\n [nzShowButton]=\"opts.imageList.length < opts.limit\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzPreview]=\"handlePreview\"\r\n [nzRemove]=\"remove\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzDisabled]=\"!isEdit\"\r\n [nzLimit]=\"'1'\"\r\n [nzFileListRender]=\"opts && isEdit && allowChangSeq && opts.imageList.length > 0 ? fileListTmp : null\"\r\n >\r\n <i nz-icon nzType=\"plus\"></i>\r\n <div class=\"ant-upload-text\">{{opts.btnName?opts.btnName:'\u4E0A\u4F20\u56FE\u7247'}}</div>\r\n </nz-upload>\r\n <!-- <a *ngIf=\"allowChangSeq && isEdit && opts.imageList.length > 1\" (click)=\"openBannerSeq(imgsContent, tplFooter)\"\r\n style=\"margin-left: 10px; \"\r\n ><i nz-icon nzType=\"plus\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\u8C03\u6574\u56FE\u7247\u987A\u5E8F</a>-->\r\n <nz-modal\r\n [nzVisible]=\"previewVisible\"\r\n [nzContent]=\"modalContent\"\r\n [nzFooter]=\"null\"\r\n (nzOnCancel)=\"previewVisible = false\"\r\n >\r\n <ng-template #modalContent>\r\n <img *ngIf=\"!previewImage.endsWith('.mp4')\" [src]=\"previewImage\" [ngStyle]=\"{ width: '100%' }\"/>\r\n <div style=\"width: 100%;margin-top: 15px\">\r\n <app-video *ngIf=\"previewImage.endsWith('.mp4')\" [url]=\"previewImage\"></app-video>\r\n </div>\r\n </ng-template>\r\n </nz-modal>\r\n <ng-template #imgsContent>\r\n <ng-container *ngIf=\"opts && opts.imageList\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgs.url || imgs.thumbUrl\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div style=\"margin-right: 20px\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\"><i nz-icon nzType=\"arrow-up\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < opts.imageList.length - 1\" (click)=\"arrowDown(i)\"><i nz-icon nzType=\"arrow-down\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px\"></i>\r\n \u4E0B\u79FB</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n <!-- </nz-modal>-->\r\n</div>\r\n<ng-template #fileListTmp>\r\n <div dragula=\"dragulaBag\" [(dragulaModel)]=\"opts.imageList\" (dragulaModelChange)=\"dragnumber($event)\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div img-pre\" style=\"\">\r\n <img [src]=\"getImgUrl(imgs) |ossImg\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div>\r\n <span (click)=\"priviewImg(imgs)\" nz-icon nzType=\"eye\" nzTheme=\"outline\"></span>\r\n <span (click)=\"delImg(i)\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</ng-template>\r\n<ng-template #tplFooter>\r\n <button nz-button nzType=\"default\" (click)=\"destroyTplModal()\">\r\n \u53D6\u6D88\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"saveSeq()\">\r\n \u4FDD\u5B58\u987A\u5E8F\r\n </button>\r\n</ng-template>\r\n\r\n\r\n", styles: ["@import\"~dragula/dist/dragula.css\";i[nz-icon]{font-size:32px;color:#999}.ant-upload-text{margin-top:8px;color:#666}.img-div{padding:8px;border:1px solid #d9d9d9;border-radius:4px;margin-top:20px;display:flex;align-items:center;justify-content:space-between}:host .img-pre{display:inline-block;position:relative;margin-left:10px}:host .img-pre div{display:none;position:absolute;width:100%;height:100%;top:0;left:0;background:#0000006b;z-index:200;color:#fff;align-items:center;justify-content:center;font-size:16px}:host .img-pre div span{margin:10px;cursor:pointer}:host .img-pre:hover div{display:flex}\n"], components: [{ type: i4.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { type: i5.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { type: i3.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzContent", "nzComponentParams", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { type: i6.VideoComponent, selector: "app-video", inputs: ["url"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { type: i9.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }], pipes: { "ossImg": i12.OssImgPipe } });
256
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UploadComponent, decorators: [{
257
- type: Component,
258
- args: [{ selector: 'atr-img-upload', template: "<div class=\"clearfix\">\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'drag'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <p class=\"ant-upload-drag-icon\">\r\n <i nz-icon nzType=\"inbox\"></i>\r\n </p>\r\n <p class=\"ant-upload-text\">\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20</p>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'button'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\" style=\"font-size: 16px\"></i><span> {{opts.btnName}}</span></button>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && !opts?.uploadType \"\r\n nzAction=\"\"\r\n nzListType=\"picture-card\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [(nzFileList)]=\"opts.imageList\"\r\n [nzShowButton]=\"opts.imageList.length < opts.limit\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzPreview]=\"handlePreview\"\r\n [nzRemove]=\"remove\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzDisabled]=\"!isEdit\"\r\n [nzLimit]=\"'1'\"\r\n [nzFileListRender]=\"opts && isEdit && allowChangSeq && opts.imageList.length > 0 ? fileListTmp : null\"\r\n >\r\n <i nz-icon nzType=\"plus\"></i>\r\n <div class=\"ant-upload-text\">{{opts.btnName?opts.btnName:'\u4E0A\u4F20\u56FE\u7247'}}</div>\r\n </nz-upload>\r\n <!-- <a *ngIf=\"allowChangSeq && isEdit && opts.imageList.length > 1\" (click)=\"openBannerSeq(imgsContent, tplFooter)\"\r\n style=\"margin-left: 10px; \"\r\n ><i nz-icon nzType=\"plus\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\u8C03\u6574\u56FE\u7247\u987A\u5E8F</a>-->\r\n <nz-modal\r\n [nzVisible]=\"previewVisible\"\r\n [nzContent]=\"modalContent\"\r\n [nzFooter]=\"null\"\r\n (nzOnCancel)=\"previewVisible = false\"\r\n >\r\n <ng-template #modalContent>\r\n <img *ngIf=\"!previewImage.endsWith('.mp4')\" [src]=\"previewImage\" [ngStyle]=\"{ width: '100%' }\"/>\r\n <div style=\"width: 100%;margin-top: 15px\">\r\n <app-video *ngIf=\"previewImage.endsWith('.mp4')\" [url]=\"previewImage\"></app-video>\r\n </div>\r\n </ng-template>\r\n </nz-modal>\r\n <ng-template #imgsContent>\r\n <ng-container *ngIf=\"opts && opts.imageList\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgs.url || imgs.thumbUrl\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div style=\"margin-right: 20px\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\"><i nz-icon nzType=\"arrow-up\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < opts.imageList.length - 1\" (click)=\"arrowDown(i)\"><i nz-icon nzType=\"arrow-down\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px\"></i>\r\n \u4E0B\u79FB</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n <!-- </nz-modal>-->\r\n</div>\r\n<ng-template #fileListTmp>\r\n <div dragula=\"dragulaBag\" [(dragulaModel)]=\"opts.imageList\" (dragulaModelChange)=\"dragnumber($event)\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div img-pre\" style=\"\">\r\n <img [src]=\"getImgUrl(imgs) |ossImg\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div>\r\n <span (click)=\"priviewImg(imgs)\" nz-icon nzType=\"eye\" nzTheme=\"outline\"></span>\r\n <span (click)=\"delImg(i)\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</ng-template>\r\n<ng-template #tplFooter>\r\n <button nz-button nzType=\"default\" (click)=\"destroyTplModal()\">\r\n \u53D6\u6D88\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"saveSeq()\">\r\n \u4FDD\u5B58\u987A\u5E8F\r\n </button>\r\n</ng-template>\r\n\r\n\r\n", styles: ["@import\"~dragula/dist/dragula.css\";i[nz-icon]{font-size:32px;color:#999}.ant-upload-text{margin-top:8px;color:#666}.img-div{padding:8px;border:1px solid #d9d9d9;border-radius:4px;margin-top:20px;display:flex;align-items:center;justify-content:space-between}:host .img-pre{display:inline-block;position:relative;margin-left:10px}:host .img-pre div{display:none;position:absolute;width:100%;height:100%;top:0;left:0;background:#0000006b;z-index:200;color:#fff;align-items:center;justify-content:center;font-size:16px}:host .img-pre div span{margin:10px;cursor:pointer}:host .img-pre:hover div{display:flex}\n"] }]
259
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NzImageService }, { type: i2.HttpClient }, { type: i3.NzModalService }]; }, propDecorators: { opts: [{
260
- type: Input
261
- }], isEdit: [{
262
- type: Input
263
- }], allowChangSeq: [{
264
- type: Input
265
- }], showUploadList: [{
266
- type: Input
267
- }], afterChange: [{
268
- type: Output
269
- }], optsChange: [{
270
- type: Output
271
- }], onBeforeUpload: [{
272
- type: Output
273
- }] } });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdXBsb2FkL3VwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3VwbG9hZC91cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFhLGFBQWEsRUFBRSxZQUFZLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFJbEgsT0FBTyxFQUFDLGdCQUFnQixFQUFZLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLGVBQWU7SUE2QjFCLFlBQW9CLFFBQWtCLEVBQVUsY0FBOEIsRUFDMUQsVUFBc0IsRUFBVSxZQUE0QjtRQUQ1RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzFELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUEzQnZFLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUUvQixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXBCLGVBQVUsR0FBUSxFQUFFLENBQUE7UUFFWCxtQkFBYyxHQUF1STtZQUM1SixlQUFlLEVBQUUsSUFB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T0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7OzZHQS9RVSxlQUFlO2lHQUFmLGVBQWUseVFDaEI1QixtdUtBdUhBOzRGRHZHYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGdCQUFnQjtrTEFNakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT04sV0FBVztzQkFEVixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFHUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0h0dHBSZXF1ZXN0LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXNwb25zZSwgSHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtOek1vZGFsUmVmLCBOek1vZGFsU2VydmljZX0gZnJvbSAnbmctem9ycm8tYW50ZC9tb2RhbCc7XHJcbmltcG9ydCB7TnpVcGxvYWRDaGFuZ2VQYXJhbSwgTnpVcGxvYWRGaWxlLCBOelVwbG9hZFhIUkFyZ3N9IGZyb20gJ25nLXpvcnJvLWFudGQvdXBsb2FkJztcclxuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZS9lbnZpcm9ubWVudHNcIjtcclxuaW1wb3J0IHthdHJfc3RhdGljX2RhdGFzLCBJbWFnZU9wdHN9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Jhc2UvYXRyLWNvbW1vblwiO1xyXG5pbXBvcnQge0h0dHBTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xyXG5pbXBvcnQge056SW1hZ2VTZXJ2aWNlfSBmcm9tICduZy16b3Jyby1hbnRkL2ltYWdlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXRyLWltZy11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBvcHRzOiBJbWFnZU9wdHMgfCBhbnk7XHJcbiAgQElucHV0KCkgaXNFZGl0ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbGxvd0NoYW5nU2VxID0gZmFsc2U7XHJcbiAgdHBsTW9kYWw6IE56TW9kYWxSZWYgfCBhbnk7XHJcbiAgdXBsb2FkVXJsOiBhbnkgPSBcIlwiO1xyXG5cclxuICB1cGxvYWREYXRhOiBhbnkgPSB7fVxyXG5cclxuICBASW5wdXQoKSBzaG93VXBsb2FkTGlzdDogYm9vbGVhbiB8IHsgc2hvd1ByZXZpZXdJY29uPzogYm9vbGVhbiwgc2hvd1JlbW92ZUljb24/OiBib29sZWFuLCBzaG93RG93bmxvYWRJY29uPzogYm9vbGVhbiwgaGlkZVByZXZpZXdJY29uSW5Ob25JbWFnZT86IGJvb2xlYW4gfSA9IHtcclxuICAgIHNob3dQcmV2aWV3SWNvbjogdHJ1ZSxcclxuICAgIHNob3dSZW1vdmVJY29uOiB0cnVlLFxyXG4gICAgaGlkZVByZXZpZXdJY29uSW5Ob25JbWFnZTogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGFmdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb3B0c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25CZWZvcmVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgcHJldmlld0ltYWdlOiBzdHJpbmcgfCBhbnkgPSAnJztcclxuICBwcmV2aWV3VmlzaWJsZSA9IGZhbHNlO1xyXG4gIGNoYW5nZVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgbnpJbWFnZVNlcnZpY2U6IE56SW1hZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE56TW9kYWxTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG4gIGdldEZpbGVUeWVJY29uKGZpbGVUeXBlOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB0aHVtYlVybCA9IHRoaXMuZ2V0RmlsZVRodW1iVXJsKGZpbGVUeXBlKTtcclxuICAgIGlmICh0aHVtYlVybCA9PT0gJycpIHtcclxuICAgICAgdGh1bWJVcmwgPSB0aGlzLmdldFRodW1iVXJsKGZpbGVOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aHVtYlVybDtcclxuICB9XHJcblxyXG4gIGdldFRodW1iVXJsKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIC8vIOWQjue8gOiOt+WPllxyXG4gICAgaWYgKHBhdGguZW5kc1dpdGgoJy5tcDQnKSkge1xyXG4gICAgICByZXR1cm4gJy4uLy4uLy4uL2Fzc2V0cy92aWRlby5qcGcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmlsZVRodW1iVXJsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGh1bWJVcmwgPSAnJztcclxuICAgIGlmICh0eXBlID09PSAndmlkZW8vbXA0JyB8fCB0eXBlID09PSAnbXA0Jykge1xyXG4gICAgICB0aHVtYlVybCA9ICcuLi8uLi8uLi9hc3NldHMvdmlkZW8uanBnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aHVtYlVybDtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhcmFtczogTnpVcGxvYWRDaGFuZ2VQYXJhbSkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMudHlwZSA9PSBcInN1Y2Nlc3NcIiB8fCBwYXJhbXMudHlwZSA9PSBcInJlbW92ZWRcIikge1xyXG5cclxuICAgICAgdGhpcy5vcHRzLmltYWdlTGlzdCA9IFtdO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gcGFyYW1zLmZpbGVMaXN0Lm1hcCgoZmlsZTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKGZpbGUudHlwZSA9PSAndmlkZW8vbXA0JyAmJiBmaWxlLnVpZCA9PT0gcGFyYW1zLmZpbGUudWlkKSB7XHJcbiAgICAgICAgICAgIGxldCB0aHVtYlVybCA9IHRoaXMuZ2V0RmlsZVR5ZUljb24oZmlsZS50eXBlLCBmaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICBmaWxlLnRodW1iVXJsID0gdGh1bWJVcmwgPyB0aHVtYlVybCA6IGZpbGUudGh1bWJVcmw7XHJcbiAgICAgICAgICAgIGZpbGUudXJsID0gZmlsZS5vcmlnaW5GaWxlT2JqID8gYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMICsgZmlsZS5vcmlnaW5GaWxlT2JqWydrZXknXSA6IGZpbGVbJ3BhdGgnXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCA1MCk7XHJcbiAgICAgIGxldCBmaWxlVXJsczogYW55W10gPSBbXTtcclxuICAgICAgZm9yIChsZXQgZmlsZSBvZiBwYXJhbXMuZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZVtcImtleVwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZpbGVVcmxzLnB1c2goZmlsZVtcImtleVwiXSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGUub3JpZ2luRmlsZU9iaikge1xyXG4gICAgICAgICAgbGV0IG9yaWdpbkZpbGVPYmo6IGFueSA9IGZpbGUub3JpZ2luRmlsZU9ialxyXG4gICAgICAgICAgaWYgKG9yaWdpbkZpbGVPYmpbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbGVVcmxzLnB1c2gob3JpZ2luRmlsZU9ialtcImtleVwiXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2UuZW1pdCh7a2V5OiB0aGlzLm9wdHMua2V5LCB2YWx1ZXM6IGZpbGVVcmxzLmpvaW4oXCIsXCIpfSk7XHJcbiAgICAgIHRoaXMub3B0c0NoYW5nZS5lbWl0KHRoaXMub3B0cylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGh0dHBTZXJ2aWNlKCk6IEh0dHBTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChIdHRwU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQcmV2aWV3ID0gKGZpbGU6IE56VXBsb2FkRmlsZSkgPT4ge1xyXG4gICAgdGhpcy5wcmV2aWV3SW1hZ2UgPSBmaWxlLnVybCB8fCBmaWxlLnRodW1iVXJsO1xyXG4gICAgdGhpcy5wcmV2aWV3VmlzaWJsZSA9IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgcmVtb3ZlID0gKGZpbGU6IE56VXBsb2FkRmlsZSkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzRWRpdCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhmaWxlKTtcclxuICAgIGlmICh0aGlzLm9wdHMgJiYgdGhpcy5vcHRzLnJlbW92ZUFjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGJlZm9yZVVwbG9hZCA9IChmaWxlOiBOelVwbG9hZEZpbGUsIGZpbGVMaXN0OiBOelVwbG9hZEZpbGVbXSk6YW55ID0+IHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIGxldCBmaWxlTmFtZTtcclxuICAgICAgaWYgKHRoaXMub3B0cy5rZWVwTmFtZSkge1xyXG4gICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVOYW1lID0gVG9vbHNVdGlsLmdldFJhbmRvbUZpbGVOYW1lKCkgKyBcIi5cIiArIFRvb2xzVXRpbC5nZXRGaWxlRXh0KGZpbGUubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vbkJlZm9yZVVwbG9hZC5lbWl0KHtjb2RlOiAnZ2V0RmlsZScsIGRhdGE6IHtmaWxlOiBmaWxlLCBmaWxlTGlzdDogZmlsZUxpc3R9fSlcclxuICAgICAgdGhpcy5odHRwU2VydmljZS5wb3N0KGF0cl9zdGF0aWNfZGF0YXMuT1NTX1BPTElDWSwge1xyXG4gICAgICAgIGRpcjogdGhpcy5vcHRzLnVwbG9hZERpcixcclxuICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgJ3N1Y2Nlc3NfYWN0aW9uX3N0YXR1cyc6ICcyMDAnXHJcbiAgICAgIH0sIFRvb2xzVXRpbC5nZXRIdHRwT3B0aW9ucygpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWREYXRhW2ZpbGUudWlkXSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICBvYnNlcnZlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgb2JzZXJ2ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG4gIGN1c3RvbVJlcSA9IChpdGVtOiBOelVwbG9hZFhIUkFyZ3MpOmFueSA9PiB7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgbGV0IHVwbG9hZERhdGEgPSB0aGlzLnVwbG9hZERhdGFbaXRlbS5maWxlLnVpZF07XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdXBsb2FkRGF0YSkge1xyXG4gICAgICBpZiAoa2V5ICE9ICdob3N0JylcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB1cGxvYWREYXRhW2tleV0pXHJcbiAgICB9XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBpdGVtLmZpbGUgYXMgYW55KTtcclxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIHVwbG9hZERhdGEuaG9zdCEsIGZvcm1EYXRhLCB7XHJcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QocmVxKS5zdWJzY3JpYmUoXHJcbiAgICAgIChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnRvdGFsISA+IDApIHtcclxuICAgICAgICAgICAgKGV2ZW50IGFzIGFueSkucGVyY2VudCA9IChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCEpICogMTAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5vblByb2dyZXNzIShldmVudCwgaXRlbS5maWxlISk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaXRlbS5maWxlW1wia2V5XCJdID0gdXBsb2FkRGF0YS5rZXk7XHJcbiAgICAgICAgICBpdGVtLm9uU3VjY2VzcyEoZXZlbnQuYm9keSwgaXRlbS5maWxlISwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyID0+IHtcclxuICAgICAgICBpdGVtLm9uRXJyb3IhKGVyciwgaXRlbS5maWxlISk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgb3BlbkJhbm5lclNlcSh0cGxDb250ZW50OiBhbnksIHRwbEZvb3RlcjogYW55KSB7XHJcbiAgICB0aGlzLnRwbE1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2UuY3JlYXRlKHtcclxuICAgICAgbnpUaXRsZTogXCLkv67mlLnlm77niYfpobrluo9cIixcclxuICAgICAgbnpDb250ZW50OiB0cGxDb250ZW50LFxyXG4gICAgICBuekZvb3RlcjogdHBsRm9vdGVyLFxyXG4gICAgICBuek1hc2tDbG9zYWJsZTogZmFsc2UsXHJcbiAgICAgIG56Q2xvc2FibGU6IGZhbHNlLFxyXG4gICAgICBuek9uT2s6ICgpID0+IGNvbnNvbGUubG9nKCdDbGljayBvaycpXHJcbiAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMub3B0cy5pbWFnZUxpc3QpO1xyXG4gICAgdGhpcy5jaGFuZ2VWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3lUcGxNb2RhbCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRwbE1vZGFsKVxyXG4gICAgICB0aGlzLnRwbE1vZGFsLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIGFycm93VXAoaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGltZyA9IHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXhdO1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdFtpbmRleF0gPSB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4IC0gMV07XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4IC0gMV0gPSBpbWc7XHJcbiAgfVxyXG5cclxuICBhcnJvd0Rvd24oaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGltZyA9IHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXhdO1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdFtpbmRleF0gPSB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4ICsgMV07XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4ICsgMV0gPSBpbWc7XHJcbiAgfVxyXG5cclxuICBzYXZlU2VxKCkge1xyXG4gICAgdGhpcy5kZXN0cm95VHBsTW9kYWwoKTtcclxuICAgIGxldCBpbWdzID0gdGhpcy5vcHRzLmltYWdlTGlzdDtcclxuICAgIHRoaXMub3B0cy5pbWFnZUxpc3QgPSBbXTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gaW1ncztcclxuICAgICAgY29uc29sZS5sb2codGhpcy5vcHRzLmltYWdlTGlzdCk7XHJcbiAgICAgIGxldCBmaWxlVXJsczogYW55ID0gW107XHJcbiAgICAgIGZvciAobGV0IGZpbGUgb2YgdGhpcy5vcHRzLmltYWdlTGlzdCkge1xyXG4gICAgICAgIGlmIChmaWxlW1wia2V5XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZmlsZVVybHMucHVzaChmaWxlW1wia2V5XCJdKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsZS5vcmlnaW5GaWxlT2JqICYmIGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hZnRlckNoYW5nZS5lbWl0KHtrZXk6IHRoaXMub3B0cy5rZXksIHZhbHVlczogZmlsZVVybHMuam9pbihcIixcIil9KTtcclxuICAgIH0sIDUwKVxyXG5cclxuICB9XHJcblxyXG4gIGRyYWdudW1iZXIobnVtZXI6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2cobnVtZXIpO1xyXG4gICAgY29uc29sZS5sb2coJ29yJywgdGhpcy5vcHRzLmltYWdlTGlzdClcclxuICAgIGNvbnNvbGUubG9nKCduZXcnLCBudW1lcilcclxuICAgIHRoaXMuc2F2ZVNlcSgpO1xyXG4gICAgLy8gdGhpcy5vcHRzLmltYWdlTGlzdCA9IG51bWVyXHJcbiAgfVxyXG5cclxuICBkZWxJbWcobnVtZXI6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2cobnVtZXIpO1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdCA9IHRoaXMub3B0cy5pbWFnZUxpc3QuZmlsdGVyKCh2OiBhbnksIGk6IGFueSkgPT4gaSAhPSBudW1lcilcclxuICAgIGxldCBmaWxlVXJsczogYW55ID0gW107XHJcbiAgICBmb3IgKGxldCBmaWxlIG9mIHRoaXMub3B0cy5pbWFnZUxpc3QpIHtcclxuICAgICAgaWYgKGZpbGVbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZmlsZVVybHMucHVzaChmaWxlW1wia2V5XCJdKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlsZS5vcmlnaW5GaWxlT2JqICYmIGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgZmlsZVVybHMucHVzaChmaWxlLm9yaWdpbkZpbGVPYmpbXCJrZXlcIl0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQoe2tleTogdGhpcy5vcHRzLmtleSwgdmFsdWVzOiBmaWxlVXJscy5qb2luKFwiLFwiKX0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmlld0ltZyhpbWc6IGFueSkge1xyXG4gICAgbGV0IHVybCA9IFRvb2xzVXRpbC5nZXRPc3NVcmwodGhpcy5nZXRJbWdVcmwoaW1nKSlcclxuICAgIGNvbnNvbGUubG9nKHVybClcclxuICAgIHRoaXMubnpJbWFnZVNlcnZpY2UucHJldmlldyhbe1xyXG4gICAgICBzcmM6IHVybCxcclxuICAgICAgYWx0OiAnbmctem9ycm8nXHJcbiAgICB9XSwge256Wm9vbTogMS41LCBuelJvdGF0ZTogMH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1nVXJsKGltZzogYW55KSB7XHJcbiAgICBpZiAoaW1nLm9yaWdpbkZpbGVPYmogJiYgaW1nLm9yaWdpbkZpbGVPYmoua2V5KSB7XHJcbiAgICAgIHJldHVybiBpbWcub3JpZ2luRmlsZU9iai5rZXlcclxuICAgIH1cclxuICAgIHJldHVybiAoaW1nLnVybCB8fCBpbWcudGh1bWJVcmwpXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPlxyXG4gIDxuei11cGxvYWRcclxuICAgICpuZ0lmPVwib3B0cyAmJiBvcHRzPy51cGxvYWRUeXBlID09ICdkcmFnJ1wiXHJcbiAgICBuelR5cGU9XCJkcmFnXCJcclxuICAgIG56QWN0aW9uPVwiXCJcclxuICAgIFtuekJlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgW256UmVtb3ZlXT1cInJlbW92ZVwiXHJcbiAgICBbbnpTaXplXT1cIm9wdHMubnpTaXplIHx8IDBcIlxyXG4gICAgW256Q3VzdG9tUmVxdWVzdF09XCJjdXN0b21SZXFcIlxyXG4gICAgKG56Q2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW256VHlwZV09XCJvcHRzPy51cGxvYWRUeXBlXCJcclxuICAgIFtuekFjY2VwdF09XCJvcHRzLm56RmlsZVR5cGVcIlxyXG4gICAgW256TGltaXRdPVwiJzEnXCJcclxuICA+XHJcbiAgICA8cCBjbGFzcz1cImFudC11cGxvYWQtZHJhZy1pY29uXCI+XHJcbiAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiaW5ib3hcIj48L2k+XHJcbiAgICA8L3A+XHJcbiAgICA8cCBjbGFzcz1cImFudC11cGxvYWQtdGV4dFwiPuWNleWHu+aIluaLluWKqOaWh+S7tuWIsOatpOWMuuWfn+S4iuS8oDwvcD5cclxuICA8L256LXVwbG9hZD5cclxuICA8bnotdXBsb2FkXHJcbiAgICAqbmdJZj1cIm9wdHMgJiYgb3B0cz8udXBsb2FkVHlwZSA9PSAnYnV0dG9uJ1wiXHJcbiAgICBuelR5cGU9XCJkcmFnXCJcclxuICAgIG56QWN0aW9uPVwiXCJcclxuICAgIFtuelNpemVdPVwib3B0cy5uelNpemUgfHwgMFwiXHJcbiAgICBbbnpTaG93VXBsb2FkTGlzdF09XCJzaG93VXBsb2FkTGlzdFwiXHJcbiAgICBbbnpCZWZvcmVVcGxvYWRdPVwiYmVmb3JlVXBsb2FkXCJcclxuICAgIFtuelJlbW92ZV09XCJyZW1vdmVcIlxyXG4gICAgW256Q3VzdG9tUmVxdWVzdF09XCJjdXN0b21SZXFcIlxyXG4gICAgKG56Q2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW256VHlwZV09XCJvcHRzPy51cGxvYWRUeXBlXCJcclxuICAgIFtuekFjY2VwdF09XCJvcHRzLm56RmlsZVR5cGVcIlxyXG4gICAgW256TGltaXRdPVwiJzEnXCJcclxuICA+XHJcbiAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiPjxpIG56LWljb24gbnpUeXBlPVwidXBsb2FkXCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHhcIj48L2k+PHNwYW4+IHt7b3B0cy5idG5OYW1lfX08L3NwYW4+PC9idXR0b24+XHJcbiAgPC9uei11cGxvYWQ+XHJcbiAgPG56LXVwbG9hZFxyXG4gICAgKm5nSWY9XCJvcHRzICYmICFvcHRzPy51cGxvYWRUeXBlIFwiXHJcbiAgICBuekFjdGlvbj1cIlwiXHJcbiAgICBuekxpc3RUeXBlPVwicGljdHVyZS1jYXJkXCJcclxuICAgIFtuelNpemVdPVwib3B0cy5uelNpemUgfHwgMFwiXHJcbiAgICBbKG56RmlsZUxpc3QpXT1cIm9wdHMuaW1hZ2VMaXN0XCJcclxuICAgIFtuelNob3dCdXR0b25dPVwib3B0cy5pbWFnZUxpc3QubGVuZ3RoIDwgb3B0cy5saW1pdFwiXHJcbiAgICBbbnpTaG93VXBsb2FkTGlzdF09XCJzaG93VXBsb2FkTGlzdFwiXHJcbiAgICBbbnpQcmV2aWV3XT1cImhhbmRsZVByZXZpZXdcIlxyXG4gICAgW256UmVtb3ZlXT1cInJlbW92ZVwiXHJcbiAgICBbbnpCZWZvcmVVcGxvYWRdPVwiYmVmb3JlVXBsb2FkXCJcclxuICAgIFtuekN1c3RvbVJlcXVlc3RdPVwiY3VzdG9tUmVxXCJcclxuICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIFtuelR5cGVdPVwib3B0cz8udXBsb2FkVHlwZVwiXHJcbiAgICBbbnpBY2NlcHRdPVwib3B0cy5uekZpbGVUeXBlXCJcclxuICAgIFtuekRpc2FibGVkXT1cIiFpc0VkaXRcIlxyXG4gICAgW256TGltaXRdPVwiJzEnXCJcclxuICAgIFtuekZpbGVMaXN0UmVuZGVyXT1cIm9wdHMgJiYgaXNFZGl0ICYmIGFsbG93Q2hhbmdTZXEgJiYgb3B0cy5pbWFnZUxpc3QubGVuZ3RoID4gMCA/IGZpbGVMaXN0VG1wIDogbnVsbFwiXHJcbiAgPlxyXG4gICAgPGkgbnotaWNvbiBuelR5cGU9XCJwbHVzXCI+PC9pPlxyXG4gICAgPGRpdiBjbGFzcz1cImFudC11cGxvYWQtdGV4dFwiPnt7b3B0cy5idG5OYW1lP29wdHMuYnRuTmFtZTon5LiK5Lyg5Zu+54mHJ319PC9kaXY+XHJcbiAgPC9uei11cGxvYWQ+XHJcbiAgPCEtLSA8YSAqbmdJZj1cImFsbG93Q2hhbmdTZXEgJiYgaXNFZGl0ICYmIG9wdHMuaW1hZ2VMaXN0Lmxlbmd0aCA+IDFcIiAoY2xpY2spPVwib3BlbkJhbm5lclNlcShpbWdzQ29udGVudCwgdHBsRm9vdGVyKVwiXHJcbiAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7IFwiXHJcbiAgID48aSBuei1pY29uIG56VHlwZT1cInBsdXNcIiBuelRoZW1lPVwib3V0bGluZVwiIHN0eWxlPVwiY29sb3I6ICMxODkwZmY7IGZvbnQtc2l6ZTogMTVweFwiPjwvaT7osIPmlbTlm77niYfpobrluo88L2E+LS0+XHJcbiAgPG56LW1vZGFsXHJcbiAgICBbbnpWaXNpYmxlXT1cInByZXZpZXdWaXNpYmxlXCJcclxuICAgIFtuekNvbnRlbnRdPVwibW9kYWxDb250ZW50XCJcclxuICAgIFtuekZvb3Rlcl09XCJudWxsXCJcclxuICAgIChuek9uQ2FuY2VsKT1cInByZXZpZXdWaXNpYmxlID0gZmFsc2VcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50PlxyXG4gICAgICA8aW1nICpuZ0lmPVwiIXByZXZpZXdJbWFnZS5lbmRzV2l0aCgnLm1wNCcpXCIgW3NyY109XCJwcmV2aWV3SW1hZ2VcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiLz5cclxuICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlO21hcmdpbi10b3A6IDE1cHhcIj5cclxuICAgICAgICA8YXBwLXZpZGVvICpuZ0lmPVwicHJldmlld0ltYWdlLmVuZHNXaXRoKCcubXA0JylcIiBbdXJsXT1cInByZXZpZXdJbWFnZVwiPjwvYXBwLXZpZGVvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uei1tb2RhbD5cclxuICA8bmctdGVtcGxhdGUgI2ltZ3NDb250ZW50PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdHMgJiYgb3B0cy5pbWFnZUxpc3RcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1ncyBvZiBvcHRzLmltYWdlTGlzdDtsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImltZy1kaXZcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJpbWdzLnVybCB8fCBpbWdzLnRodW1iVXJsXCIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMHB4JyxkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywgbWFyZ2luOicxMHB4JyB9XCIvPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweFwiPlxyXG4gICAgICAgICAgICA8YSB0aXRsZT1cIuS4iuenu1wiICpuZ0lmPVwiIGkgPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIiAoY2xpY2spPVwiYXJyb3dVcChpKVwiPjxpIG56LWljb24gbnpUeXBlPVwiYXJyb3ctdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG56VGhlbWU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMTg5MGZmOyBmb250LXNpemU6IDE1cHg7XCI+PC9pPlxyXG4gICAgICAgICAgICAgIOS4iuenuzwvYT5cclxuICAgICAgICAgICAgPGEgdGl0bGU9XCLkuIvnp7tcIiAqbmdJZj1cIiBpIDwgb3B0cy5pbWFnZUxpc3QubGVuZ3RoIC0gMVwiIChjbGljayk9XCJhcnJvd0Rvd24oaSlcIj48aSBuei1pY29uIG56VHlwZT1cImFycm93LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnpUaGVtZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzE4OTBmZjsgZm9udC1zaXplOiAxNXB4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIOS4i+enuzwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDwhLS0gIDwvbnotbW9kYWw+LS0+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2ZpbGVMaXN0VG1wPlxyXG4gIDxkaXYgZHJhZ3VsYT1cImRyYWd1bGFCYWdcIiBbKGRyYWd1bGFNb2RlbCldPVwib3B0cy5pbWFnZUxpc3RcIiAoZHJhZ3VsYU1vZGVsQ2hhbmdlKT1cImRyYWdudW1iZXIoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1ncyBvZiBvcHRzLmltYWdlTGlzdDtsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWctZGl2IGltZy1wcmVcIiBzdHlsZT1cIlwiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJnZXRJbWdVcmwoaW1ncykgfG9zc0ltZ1wiIFtuZ1N0eWxlXT1cInsgd2lkdGg6ICcxMDBweCcsZGlzcGxheTogJ2lubGluZS1ibG9jaycsIG1hcmdpbjonMTBweCcgfVwiLz5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInByaXZpZXdJbWcoaW1ncylcIiBuei1pY29uIG56VHlwZT1cImV5ZVwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImRlbEltZyhpKVwiIG56LWljb24gbnpUeXBlPVwiZGVsZXRlXCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3RwbEZvb3Rlcj5cclxuICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKGNsaWNrKT1cImRlc3Ryb3lUcGxNb2RhbCgpXCI+XHJcbiAgICDlj5bmtohcclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVTZXEoKVwiPlxyXG4gICAg5L+d5a2Y6aG65bqPXHJcbiAgPC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuIl19
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';
4
+ import { atr_static_datas } from "../../../core/base/atr-common";
5
+ import { HttpService } from "../../../core/services/http.service";
6
+ import { ToolsUtil } from "../../../core/utils/ToolsUtil";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "ng-zorro-antd/image";
9
+ import * as i2 from "@angular/common/http";
10
+ import * as i3 from "ng-zorro-antd/modal";
11
+ import * as i4 from "@angular/common";
12
+ import * as i5 from "ng-zorro-antd/button";
13
+ import * as i6 from "ng-zorro-antd/core/transition-patch";
14
+ import * as i7 from "ng-zorro-antd/core/wave";
15
+ import * as i8 from "ng-zorro-antd/icon";
16
+ import * as i9 from "ng-zorro-antd/upload";
17
+ import * as i10 from "ng2-dragula";
18
+ import * as i11 from "../video/video.component";
19
+ import * as i12 from "../../../core/pipe/image-pipe.pipe";
20
+ export class UploadComponent {
21
+ constructor(injector, nzImageService, httpClient, modalService) {
22
+ this.injector = injector;
23
+ this.nzImageService = nzImageService;
24
+ this.httpClient = httpClient;
25
+ this.modalService = modalService;
26
+ this.isEdit = true;
27
+ this.allowChangSeq = false;
28
+ this.uploadUrl = "";
29
+ this.uploadData = {};
30
+ this.showUploadList = {
31
+ showPreviewIcon: true,
32
+ showRemoveIcon: true,
33
+ hidePreviewIconInNonImage: true
34
+ };
35
+ this.afterChange = new EventEmitter();
36
+ this.optsChange = new EventEmitter();
37
+ this.onBeforeUpload = new EventEmitter();
38
+ this.previewImage = '';
39
+ this.previewVisible = false;
40
+ this.changeVisible = false;
41
+ this.handlePreview = (file) => {
42
+ this.previewImage = file.url || file.thumbUrl;
43
+ this.previewVisible = true;
44
+ };
45
+ this.remove = (file) => {
46
+ if (!this.isEdit) {
47
+ return false;
48
+ }
49
+ console.log(file);
50
+ if (this.opts && this.opts.removeAction) {
51
+ return false;
52
+ }
53
+ return true;
54
+ };
55
+ this.beforeUpload = (file, fileList) => {
56
+ debugger;
57
+ return new Observable(observe => {
58
+ let fileName;
59
+ if (this.opts.keepName) {
60
+ fileName = file.name;
61
+ }
62
+ else {
63
+ fileName = ToolsUtil.getRandomFileName() + "." + ToolsUtil.getFileExt(file.name);
64
+ }
65
+ this.onBeforeUpload.emit({ code: 'getFile', data: { file: file, fileList: fileList } });
66
+ this.httpService.post(atr_static_datas.OSS_POLICY, {
67
+ dir: this.opts.uploadDir,
68
+ fileName: fileName,
69
+ 'success_action_status': '200'
70
+ }, ToolsUtil.getHttpOptions()).subscribe(result => {
71
+ if (result.status == 200) {
72
+ this.uploadData[file.uid] = result.data;
73
+ observe.next(true);
74
+ }
75
+ else
76
+ observe.next(false);
77
+ observe.unsubscribe();
78
+ }, error => {
79
+ observe.next(false);
80
+ observe.unsubscribe();
81
+ });
82
+ });
83
+ };
84
+ this.customReq = (item) => {
85
+ const formData = new FormData();
86
+ let uploadData = this.uploadData[item.file.uid];
87
+ for (let key in uploadData) {
88
+ if (key != 'host')
89
+ formData.append(key, uploadData[key]);
90
+ }
91
+ formData.append('file', item.file);
92
+ const req = new HttpRequest('POST', uploadData.host, formData, {
93
+ reportProgress: true
94
+ });
95
+ return this.httpClient.request(req).subscribe((event) => {
96
+ if (event.type === HttpEventType.UploadProgress) {
97
+ if (event.total > 0) {
98
+ event.percent = (event.loaded / event.total) * 100;
99
+ }
100
+ item.onProgress(event, item.file);
101
+ }
102
+ else if (event instanceof HttpResponse) {
103
+ item.file["key"] = uploadData.key;
104
+ item.onSuccess(event.body, item.file, event);
105
+ }
106
+ }, err => {
107
+ item.onError(err, item.file);
108
+ });
109
+ };
110
+ }
111
+ ngOnInit() {
112
+ }
113
+ getFileTyeIcon(fileType, fileName) {
114
+ let thumbUrl = this.getFileThumbUrl(fileType);
115
+ if (thumbUrl === '') {
116
+ thumbUrl = this.getThumbUrl(fileName);
117
+ }
118
+ return thumbUrl;
119
+ }
120
+ getThumbUrl(path) {
121
+ if (!path) {
122
+ return '';
123
+ }
124
+ // 后缀获取
125
+ if (path.endsWith('.mp4')) {
126
+ return '../../../assets/video.jpg';
127
+ }
128
+ else {
129
+ return '';
130
+ }
131
+ }
132
+ getFileThumbUrl(type) {
133
+ let thumbUrl = '';
134
+ if (type === 'video/mp4' || type === 'mp4') {
135
+ thumbUrl = '../../../assets/video.jpg';
136
+ }
137
+ return thumbUrl;
138
+ }
139
+ onChange(params) {
140
+ console.log(params);
141
+ if (params.type == "success" || params.type == "removed") {
142
+ this.opts.imageList = [];
143
+ setTimeout(() => {
144
+ this.opts.imageList = params.fileList.map((file) => {
145
+ if (file.type == 'video/mp4' && file.uid === params.file.uid) {
146
+ let thumbUrl = this.getFileTyeIcon(file.type, file.name);
147
+ file.thumbUrl = thumbUrl ? thumbUrl : file.thumbUrl;
148
+ file.url = file.originFileObj ? atr_static_datas.OSS_URL + file.originFileObj['key'] : file['path'];
149
+ }
150
+ return file;
151
+ });
152
+ }, 50);
153
+ let fileUrls = [];
154
+ for (let file of params.fileList) {
155
+ if (file["key"] != undefined) {
156
+ fileUrls.push(file["key"]);
157
+ continue;
158
+ }
159
+ if (file.originFileObj) {
160
+ let originFileObj = file.originFileObj;
161
+ if (originFileObj["key"] != undefined) {
162
+ fileUrls.push(originFileObj["key"]);
163
+ }
164
+ }
165
+ }
166
+ this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
167
+ this.optsChange.emit(this.opts);
168
+ }
169
+ }
170
+ get httpService() {
171
+ return this.injector.get(HttpService);
172
+ }
173
+ openBannerSeq(tplContent, tplFooter) {
174
+ this.tplModal = this.modalService.create({
175
+ nzTitle: "修改图片顺序",
176
+ nzContent: tplContent,
177
+ nzFooter: tplFooter,
178
+ nzMaskClosable: false,
179
+ nzClosable: false,
180
+ nzOnOk: () => console.log('Click ok')
181
+ });
182
+ console.log(this.opts.imageList);
183
+ this.changeVisible = true;
184
+ }
185
+ destroyTplModal() {
186
+ if (this.tplModal)
187
+ this.tplModal.destroy();
188
+ }
189
+ arrowUp(index) {
190
+ let img = this.opts.imageList[index];
191
+ this.opts.imageList[index] = this.opts.imageList[index - 1];
192
+ this.opts.imageList[index - 1] = img;
193
+ }
194
+ arrowDown(index) {
195
+ let img = this.opts.imageList[index];
196
+ this.opts.imageList[index] = this.opts.imageList[index + 1];
197
+ this.opts.imageList[index + 1] = img;
198
+ }
199
+ saveSeq() {
200
+ this.destroyTplModal();
201
+ let imgs = this.opts.imageList;
202
+ this.opts.imageList = [];
203
+ setTimeout(() => {
204
+ this.opts.imageList = imgs;
205
+ console.log(this.opts.imageList);
206
+ let fileUrls = [];
207
+ for (let file of this.opts.imageList) {
208
+ if (file["key"] != undefined) {
209
+ fileUrls.push(file["key"]);
210
+ continue;
211
+ }
212
+ if (file.originFileObj && file.originFileObj["key"] != undefined)
213
+ fileUrls.push(file.originFileObj["key"]);
214
+ }
215
+ this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
216
+ }, 50);
217
+ }
218
+ dragnumber(numer) {
219
+ console.log(numer);
220
+ console.log('or', this.opts.imageList);
221
+ console.log('new', numer);
222
+ this.saveSeq();
223
+ // this.opts.imageList = numer
224
+ }
225
+ delImg(numer) {
226
+ console.log(numer);
227
+ this.opts.imageList = this.opts.imageList.filter((v, i) => i != numer);
228
+ let fileUrls = [];
229
+ for (let file of this.opts.imageList) {
230
+ if (file["key"] != undefined) {
231
+ fileUrls.push(file["key"]);
232
+ continue;
233
+ }
234
+ if (file.originFileObj && file.originFileObj["key"] != undefined)
235
+ fileUrls.push(file.originFileObj["key"]);
236
+ }
237
+ this.afterChange.emit({ key: this.opts.key, values: fileUrls.join(",") });
238
+ }
239
+ priviewImg(img) {
240
+ let url = ToolsUtil.getOssUrl(this.getImgUrl(img));
241
+ console.log(url);
242
+ this.nzImageService.preview([{
243
+ src: url,
244
+ alt: 'ng-zorro'
245
+ }], { nzZoom: 1.5, nzRotate: 0 });
246
+ }
247
+ getImgUrl(img) {
248
+ if (img.originFileObj && img.originFileObj.key) {
249
+ return img.originFileObj.key;
250
+ }
251
+ return (img.url || img.thumbUrl);
252
+ }
253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UploadComponent, deps: [{ token: i0.Injector }, { token: i1.NzImageService }, { token: i2.HttpClient }, { token: i3.NzModalService }], target: i0.ɵɵFactoryTarget.Component }); }
254
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: UploadComponent, selector: "atr-img-upload", inputs: { opts: "opts", isEdit: "isEdit", allowChangSeq: "allowChangSeq", showUploadList: "showUploadList" }, outputs: { afterChange: "afterChange", optsChange: "optsChange", onBeforeUpload: "onBeforeUpload" }, ngImport: i0, template: "<div class=\"clearfix\">\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'drag'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <p class=\"ant-upload-drag-icon\">\r\n <i nz-icon nzType=\"inbox\"></i>\r\n </p>\r\n <p class=\"ant-upload-text\">\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20</p>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'button'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\" style=\"font-size: 16px\"></i><span> {{opts.btnName}}</span></button>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && !opts?.uploadType \"\r\n nzAction=\"\"\r\n nzListType=\"picture-card\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [(nzFileList)]=\"opts.imageList\"\r\n [nzShowButton]=\"opts.imageList.length < opts.limit\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzPreview]=\"handlePreview\"\r\n [nzRemove]=\"remove\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzDisabled]=\"!isEdit\"\r\n [nzLimit]=\"'1'\"\r\n [nzFileListRender]=\"opts && isEdit && allowChangSeq && opts.imageList.length > 0 ? fileListTmp : null\"\r\n >\r\n <i nz-icon nzType=\"plus\"></i>\r\n <div class=\"ant-upload-text\">{{opts.btnName?opts.btnName:'\u4E0A\u4F20\u56FE\u7247'}}</div>\r\n </nz-upload>\r\n <!-- <a *ngIf=\"allowChangSeq && isEdit && opts.imageList.length > 1\" (click)=\"openBannerSeq(imgsContent, tplFooter)\"\r\n style=\"margin-left: 10px; \"\r\n ><i nz-icon nzType=\"plus\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\u8C03\u6574\u56FE\u7247\u987A\u5E8F</a>-->\r\n <nz-modal\r\n [nzVisible]=\"previewVisible\"\r\n [nzContent]=\"modalContent\"\r\n [nzFooter]=\"null\"\r\n (nzOnCancel)=\"previewVisible = false\"\r\n >\r\n <ng-template #modalContent>\r\n <img *ngIf=\"!previewImage.endsWith('.mp4')\" [src]=\"previewImage\" [ngStyle]=\"{ width: '100%' }\"/>\r\n <div style=\"width: 100%;margin-top: 15px\">\r\n <app-video *ngIf=\"previewImage.endsWith('.mp4')\" [url]=\"previewImage\"></app-video>\r\n </div>\r\n </ng-template>\r\n </nz-modal>\r\n <ng-template #imgsContent>\r\n <ng-container *ngIf=\"opts && opts.imageList\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgs.url || imgs.thumbUrl\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div style=\"margin-right: 20px\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\"><i nz-icon nzType=\"arrow-up\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < opts.imageList.length - 1\" (click)=\"arrowDown(i)\"><i nz-icon nzType=\"arrow-down\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px\"></i>\r\n \u4E0B\u79FB</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n <!-- </nz-modal>-->\r\n</div>\r\n<ng-template #fileListTmp>\r\n <div dragula=\"dragulaBag\" [(dragulaModel)]=\"opts.imageList\" (dragulaModelChange)=\"dragnumber($event)\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div img-pre\" style=\"\">\r\n <img [src]=\"getImgUrl(imgs) |ossImg\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div>\r\n <span (click)=\"priviewImg(imgs)\" nz-icon nzType=\"eye\" nzTheme=\"outline\"></span>\r\n <span (click)=\"delImg(i)\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</ng-template>\r\n<ng-template #tplFooter>\r\n <button nz-button nzType=\"default\" (click)=\"destroyTplModal()\">\r\n \u53D6\u6D88\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"saveSeq()\">\r\n \u4FDD\u5B58\u987A\u5E8F\r\n </button>\r\n</ng-template>\r\n\r\n\r\n", styles: ["@import\"~dragula/dist/dragula.css\";i[nz-icon]{font-size:32px;color:#999}.ant-upload-text{margin-top:8px;color:#666}.img-div{padding:8px;border:1px solid #d9d9d9;border-radius:4px;margin-top:20px;display:flex;align-items:center;justify-content:space-between}:host .img-pre{display:inline-block;position:relative;margin-left:10px}:host .img-pre div{display:none;position:absolute;width:100%;height:100%;top:0;left:0;background:#0000006b;z-index:200;color:#fff;align-items:center;justify-content:center;font-size:16px}:host .img-pre div span{margin:10px;cursor:pointer}:host .img-pre:hover div{display:flex}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i5.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i7.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i8.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i3.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "component", type: i9.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { kind: "directive", type: i10.DragulaDirective, selector: "[dragula]", inputs: ["dragula", "dragulaModel"], outputs: ["dragulaModelChange"] }, { kind: "component", type: i11.VideoComponent, selector: "app-video", inputs: ["url"] }, { kind: "pipe", type: i12.OssImgPipe, name: "ossImg" }] }); }
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UploadComponent, decorators: [{
257
+ type: Component,
258
+ args: [{ selector: 'atr-img-upload', template: "<div class=\"clearfix\">\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'drag'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <p class=\"ant-upload-drag-icon\">\r\n <i nz-icon nzType=\"inbox\"></i>\r\n </p>\r\n <p class=\"ant-upload-text\">\u5355\u51FB\u6216\u62D6\u52A8\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20</p>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && opts?.uploadType == 'button'\"\r\n nzType=\"drag\"\r\n nzAction=\"\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzRemove]=\"remove\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzLimit]=\"'1'\"\r\n >\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\" style=\"font-size: 16px\"></i><span> {{opts.btnName}}</span></button>\r\n </nz-upload>\r\n <nz-upload\r\n *ngIf=\"opts && !opts?.uploadType \"\r\n nzAction=\"\"\r\n nzListType=\"picture-card\"\r\n [nzSize]=\"opts.nzSize || 0\"\r\n [(nzFileList)]=\"opts.imageList\"\r\n [nzShowButton]=\"opts.imageList.length < opts.limit\"\r\n [nzShowUploadList]=\"showUploadList\"\r\n [nzPreview]=\"handlePreview\"\r\n [nzRemove]=\"remove\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n [nzCustomRequest]=\"customReq\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzType]=\"opts?.uploadType\"\r\n [nzAccept]=\"opts.nzFileType\"\r\n [nzDisabled]=\"!isEdit\"\r\n [nzLimit]=\"'1'\"\r\n [nzFileListRender]=\"opts && isEdit && allowChangSeq && opts.imageList.length > 0 ? fileListTmp : null\"\r\n >\r\n <i nz-icon nzType=\"plus\"></i>\r\n <div class=\"ant-upload-text\">{{opts.btnName?opts.btnName:'\u4E0A\u4F20\u56FE\u7247'}}</div>\r\n </nz-upload>\r\n <!-- <a *ngIf=\"allowChangSeq && isEdit && opts.imageList.length > 1\" (click)=\"openBannerSeq(imgsContent, tplFooter)\"\r\n style=\"margin-left: 10px; \"\r\n ><i nz-icon nzType=\"plus\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px\"></i>\u8C03\u6574\u56FE\u7247\u987A\u5E8F</a>-->\r\n <nz-modal\r\n [nzVisible]=\"previewVisible\"\r\n [nzContent]=\"modalContent\"\r\n [nzFooter]=\"null\"\r\n (nzOnCancel)=\"previewVisible = false\"\r\n >\r\n <ng-template #modalContent>\r\n <img *ngIf=\"!previewImage.endsWith('.mp4')\" [src]=\"previewImage\" [ngStyle]=\"{ width: '100%' }\"/>\r\n <div style=\"width: 100%;margin-top: 15px\">\r\n <app-video *ngIf=\"previewImage.endsWith('.mp4')\" [url]=\"previewImage\"></app-video>\r\n </div>\r\n </ng-template>\r\n </nz-modal>\r\n <ng-template #imgsContent>\r\n <ng-container *ngIf=\"opts && opts.imageList\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgs.url || imgs.thumbUrl\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div style=\"margin-right: 20px\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\"><i nz-icon nzType=\"arrow-up\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < opts.imageList.length - 1\" (click)=\"arrowDown(i)\"><i nz-icon nzType=\"arrow-down\"\r\n nzTheme=\"outline\"\r\n style=\"color: #1890ff; font-size: 15px\"></i>\r\n \u4E0B\u79FB</a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-template>\r\n <!-- </nz-modal>-->\r\n</div>\r\n<ng-template #fileListTmp>\r\n <div dragula=\"dragulaBag\" [(dragulaModel)]=\"opts.imageList\" (dragulaModelChange)=\"dragnumber($event)\">\r\n <ng-container *ngFor=\"let imgs of opts.imageList;let i = index\">\r\n <div class=\"img-div img-pre\" style=\"\">\r\n <img [src]=\"getImgUrl(imgs) |ossImg\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'10px' }\"/>\r\n <div>\r\n <span (click)=\"priviewImg(imgs)\" nz-icon nzType=\"eye\" nzTheme=\"outline\"></span>\r\n <span (click)=\"delImg(i)\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n</ng-template>\r\n<ng-template #tplFooter>\r\n <button nz-button nzType=\"default\" (click)=\"destroyTplModal()\">\r\n \u53D6\u6D88\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"saveSeq()\">\r\n \u4FDD\u5B58\u987A\u5E8F\r\n </button>\r\n</ng-template>\r\n\r\n\r\n", styles: ["@import\"~dragula/dist/dragula.css\";i[nz-icon]{font-size:32px;color:#999}.ant-upload-text{margin-top:8px;color:#666}.img-div{padding:8px;border:1px solid #d9d9d9;border-radius:4px;margin-top:20px;display:flex;align-items:center;justify-content:space-between}:host .img-pre{display:inline-block;position:relative;margin-left:10px}:host .img-pre div{display:none;position:absolute;width:100%;height:100%;top:0;left:0;background:#0000006b;z-index:200;color:#fff;align-items:center;justify-content:center;font-size:16px}:host .img-pre div span{margin:10px;cursor:pointer}:host .img-pre:hover div{display:flex}\n"] }]
259
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NzImageService }, { type: i2.HttpClient }, { type: i3.NzModalService }], propDecorators: { opts: [{
260
+ type: Input
261
+ }], isEdit: [{
262
+ type: Input
263
+ }], allowChangSeq: [{
264
+ type: Input
265
+ }], showUploadList: [{
266
+ type: Input
267
+ }], afterChange: [{
268
+ type: Output
269
+ }], optsChange: [{
270
+ type: Output
271
+ }], onBeforeUpload: [{
272
+ type: Output
273
+ }] } });
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdXBsb2FkL3VwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3VwbG9hZC91cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFhLGFBQWEsRUFBRSxZQUFZLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFJbEgsT0FBTyxFQUFDLGdCQUFnQixFQUFZLE1BQU0sK0JBQStCLENBQUM7QUFDMUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLGVBQWU7SUE2QjFCLFlBQW9CLFFBQWtCLEVBQVUsY0FBOEIsRUFDMUQsVUFBc0IsRUFBVSxZQUE0QjtRQUQ1RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzFELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUEzQnZFLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUUvQixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXBCLGVBQVUsR0FBUSxFQUFFLENBQUE7UUFFWCxtQkFBYyxHQUF1STtZQUM1SixlQUFlLEVBQUUsSUFB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T0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7OEdBL1FVLGVBQWU7a0dBQWYsZUFBZSx5UUNoQjVCLG11S0F1SEE7OzJGRHZHYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGdCQUFnQjtnS0FNakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT04sV0FBVztzQkFEVixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFHUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0h0dHBSZXF1ZXN0LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXNwb25zZSwgSHR0cENsaWVudCwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtOek1vZGFsUmVmLCBOek1vZGFsU2VydmljZX0gZnJvbSAnbmctem9ycm8tYW50ZC9tb2RhbCc7XHJcbmltcG9ydCB7TnpVcGxvYWRDaGFuZ2VQYXJhbSwgTnpVcGxvYWRGaWxlLCBOelVwbG9hZFhIUkFyZ3N9IGZyb20gJ25nLXpvcnJvLWFudGQvdXBsb2FkJztcclxuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZS9lbnZpcm9ubWVudHNcIjtcclxuaW1wb3J0IHthdHJfc3RhdGljX2RhdGFzLCBJbWFnZU9wdHN9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Jhc2UvYXRyLWNvbW1vblwiO1xyXG5pbXBvcnQge0h0dHBTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xyXG5pbXBvcnQge056SW1hZ2VTZXJ2aWNlfSBmcm9tICduZy16b3Jyby1hbnRkL2ltYWdlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXRyLWltZy11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBvcHRzOiBJbWFnZU9wdHMgfCBhbnk7XHJcbiAgQElucHV0KCkgaXNFZGl0ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbGxvd0NoYW5nU2VxID0gZmFsc2U7XHJcbiAgdHBsTW9kYWw6IE56TW9kYWxSZWYgfCBhbnk7XHJcbiAgdXBsb2FkVXJsOiBhbnkgPSBcIlwiO1xyXG5cclxuICB1cGxvYWREYXRhOiBhbnkgPSB7fVxyXG5cclxuICBASW5wdXQoKSBzaG93VXBsb2FkTGlzdDogYm9vbGVhbiB8IHsgc2hvd1ByZXZpZXdJY29uPzogYm9vbGVhbiwgc2hvd1JlbW92ZUljb24/OiBib29sZWFuLCBzaG93RG93bmxvYWRJY29uPzogYm9vbGVhbiwgaGlkZVByZXZpZXdJY29uSW5Ob25JbWFnZT86IGJvb2xlYW4gfSA9IHtcclxuICAgIHNob3dQcmV2aWV3SWNvbjogdHJ1ZSxcclxuICAgIHNob3dSZW1vdmVJY29uOiB0cnVlLFxyXG4gICAgaGlkZVByZXZpZXdJY29uSW5Ob25JbWFnZTogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGFmdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb3B0c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgb25CZWZvcmVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgcHJldmlld0ltYWdlOiBzdHJpbmcgfCBhbnkgPSAnJztcclxuICBwcmV2aWV3VmlzaWJsZSA9IGZhbHNlO1xyXG4gIGNoYW5nZVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgbnpJbWFnZVNlcnZpY2U6IE56SW1hZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE56TW9kYWxTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG4gIGdldEZpbGVUeWVJY29uKGZpbGVUeXBlOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB0aHVtYlVybCA9IHRoaXMuZ2V0RmlsZVRodW1iVXJsKGZpbGVUeXBlKTtcclxuICAgIGlmICh0aHVtYlVybCA9PT0gJycpIHtcclxuICAgICAgdGh1bWJVcmwgPSB0aGlzLmdldFRodW1iVXJsKGZpbGVOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aHVtYlVybDtcclxuICB9XHJcblxyXG4gIGdldFRodW1iVXJsKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIC8vIOWQjue8gOiOt+WPllxyXG4gICAgaWYgKHBhdGguZW5kc1dpdGgoJy5tcDQnKSkge1xyXG4gICAgICByZXR1cm4gJy4uLy4uLy4uL2Fzc2V0cy92aWRlby5qcGcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmlsZVRodW1iVXJsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGh1bWJVcmwgPSAnJztcclxuICAgIGlmICh0eXBlID09PSAndmlkZW8vbXA0JyB8fCB0eXBlID09PSAnbXA0Jykge1xyXG4gICAgICB0aHVtYlVybCA9ICcuLi8uLi8uLi9hc3NldHMvdmlkZW8uanBnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aHVtYlVybDtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhcmFtczogTnpVcGxvYWRDaGFuZ2VQYXJhbSkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMudHlwZSA9PSBcInN1Y2Nlc3NcIiB8fCBwYXJhbXMudHlwZSA9PSBcInJlbW92ZWRcIikge1xyXG5cclxuICAgICAgdGhpcy5vcHRzLmltYWdlTGlzdCA9IFtdO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gcGFyYW1zLmZpbGVMaXN0Lm1hcCgoZmlsZTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKGZpbGUudHlwZSA9PSAndmlkZW8vbXA0JyAmJiBmaWxlLnVpZCA9PT0gcGFyYW1zLmZpbGUudWlkKSB7XHJcbiAgICAgICAgICAgIGxldCB0aHVtYlVybCA9IHRoaXMuZ2V0RmlsZVR5ZUljb24oZmlsZS50eXBlLCBmaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICBmaWxlLnRodW1iVXJsID0gdGh1bWJVcmwgPyB0aHVtYlVybCA6IGZpbGUudGh1bWJVcmw7XHJcbiAgICAgICAgICAgIGZpbGUudXJsID0gZmlsZS5vcmlnaW5GaWxlT2JqID8gYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMICsgZmlsZS5vcmlnaW5GaWxlT2JqWydrZXknXSA6IGZpbGVbJ3BhdGgnXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCA1MCk7XHJcbiAgICAgIGxldCBmaWxlVXJsczogYW55W10gPSBbXTtcclxuICAgICAgZm9yIChsZXQgZmlsZSBvZiBwYXJhbXMuZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZVtcImtleVwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZpbGVVcmxzLnB1c2goZmlsZVtcImtleVwiXSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGUub3JpZ2luRmlsZU9iaikge1xyXG4gICAgICAgICAgbGV0IG9yaWdpbkZpbGVPYmo6IGFueSA9IGZpbGUub3JpZ2luRmlsZU9ialxyXG4gICAgICAgICAgaWYgKG9yaWdpbkZpbGVPYmpbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpbGVVcmxzLnB1c2gob3JpZ2luRmlsZU9ialtcImtleVwiXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2UuZW1pdCh7a2V5OiB0aGlzLm9wdHMua2V5LCB2YWx1ZXM6IGZpbGVVcmxzLmpvaW4oXCIsXCIpfSk7XHJcbiAgICAgIHRoaXMub3B0c0NoYW5nZS5lbWl0KHRoaXMub3B0cylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGh0dHBTZXJ2aWNlKCk6IEh0dHBTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChIdHRwU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQcmV2aWV3ID0gKGZpbGU6IE56VXBsb2FkRmlsZSkgPT4ge1xyXG4gICAgdGhpcy5wcmV2aWV3SW1hZ2UgPSBmaWxlLnVybCB8fCBmaWxlLnRodW1iVXJsO1xyXG4gICAgdGhpcy5wcmV2aWV3VmlzaWJsZSA9IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgcmVtb3ZlID0gKGZpbGU6IE56VXBsb2FkRmlsZSkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzRWRpdCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhmaWxlKTtcclxuICAgIGlmICh0aGlzLm9wdHMgJiYgdGhpcy5vcHRzLnJlbW92ZUFjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGJlZm9yZVVwbG9hZCA9IChmaWxlOiBOelVwbG9hZEZpbGUsIGZpbGVMaXN0OiBOelVwbG9hZEZpbGVbXSk6YW55ID0+IHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIGxldCBmaWxlTmFtZTtcclxuICAgICAgaWYgKHRoaXMub3B0cy5rZWVwTmFtZSkge1xyXG4gICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVOYW1lID0gVG9vbHNVdGlsLmdldFJhbmRvbUZpbGVOYW1lKCkgKyBcIi5cIiArIFRvb2xzVXRpbC5nZXRGaWxlRXh0KGZpbGUubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vbkJlZm9yZVVwbG9hZC5lbWl0KHtjb2RlOiAnZ2V0RmlsZScsIGRhdGE6IHtmaWxlOiBmaWxlLCBmaWxlTGlzdDogZmlsZUxpc3R9fSlcclxuICAgICAgdGhpcy5odHRwU2VydmljZS5wb3N0KGF0cl9zdGF0aWNfZGF0YXMuT1NTX1BPTElDWSwge1xyXG4gICAgICAgIGRpcjogdGhpcy5vcHRzLnVwbG9hZERpcixcclxuICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgJ3N1Y2Nlc3NfYWN0aW9uX3N0YXR1cyc6ICcyMDAnXHJcbiAgICAgIH0sIFRvb2xzVXRpbC5nZXRIdHRwT3B0aW9ucygpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWREYXRhW2ZpbGUudWlkXSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICBvYnNlcnZlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgb2JzZXJ2ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG4gIGN1c3RvbVJlcSA9IChpdGVtOiBOelVwbG9hZFhIUkFyZ3MpOmFueSA9PiB7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgbGV0IHVwbG9hZERhdGEgPSB0aGlzLnVwbG9hZERhdGFbaXRlbS5maWxlLnVpZF07XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdXBsb2FkRGF0YSkge1xyXG4gICAgICBpZiAoa2V5ICE9ICdob3N0JylcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB1cGxvYWREYXRhW2tleV0pXHJcbiAgICB9XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBpdGVtLmZpbGUgYXMgYW55KTtcclxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIHVwbG9hZERhdGEuaG9zdCEsIGZvcm1EYXRhLCB7XHJcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QocmVxKS5zdWJzY3JpYmUoXHJcbiAgICAgIChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnRvdGFsISA+IDApIHtcclxuICAgICAgICAgICAgKGV2ZW50IGFzIGFueSkucGVyY2VudCA9IChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCEpICogMTAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5vblByb2dyZXNzIShldmVudCwgaXRlbS5maWxlISk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaXRlbS5maWxlW1wia2V5XCJdID0gdXBsb2FkRGF0YS5rZXk7XHJcbiAgICAgICAgICBpdGVtLm9uU3VjY2VzcyEoZXZlbnQuYm9keSwgaXRlbS5maWxlISwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyID0+IHtcclxuICAgICAgICBpdGVtLm9uRXJyb3IhKGVyciwgaXRlbS5maWxlISk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgb3BlbkJhbm5lclNlcSh0cGxDb250ZW50OiBhbnksIHRwbEZvb3RlcjogYW55KSB7XHJcbiAgICB0aGlzLnRwbE1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2UuY3JlYXRlKHtcclxuICAgICAgbnpUaXRsZTogXCLkv67mlLnlm77niYfpobrluo9cIixcclxuICAgICAgbnpDb250ZW50OiB0cGxDb250ZW50LFxyXG4gICAgICBuekZvb3RlcjogdHBsRm9vdGVyLFxyXG4gICAgICBuek1hc2tDbG9zYWJsZTogZmFsc2UsXHJcbiAgICAgIG56Q2xvc2FibGU6IGZhbHNlLFxyXG4gICAgICBuek9uT2s6ICgpID0+IGNvbnNvbGUubG9nKCdDbGljayBvaycpXHJcbiAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMub3B0cy5pbWFnZUxpc3QpO1xyXG4gICAgdGhpcy5jaGFuZ2VWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3lUcGxNb2RhbCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRwbE1vZGFsKVxyXG4gICAgICB0aGlzLnRwbE1vZGFsLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIGFycm93VXAoaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGltZyA9IHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXhdO1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdFtpbmRleF0gPSB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4IC0gMV07XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4IC0gMV0gPSBpbWc7XHJcbiAgfVxyXG5cclxuICBhcnJvd0Rvd24oaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGltZyA9IHRoaXMub3B0cy5pbWFnZUxpc3RbaW5kZXhdO1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdFtpbmRleF0gPSB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4ICsgMV07XHJcbiAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0W2luZGV4ICsgMV0gPSBpbWc7XHJcbiAgfVxyXG5cclxuICBzYXZlU2VxKCkge1xyXG4gICAgdGhpcy5kZXN0cm95VHBsTW9kYWwoKTtcclxuICAgIGxldCBpbWdzID0gdGhpcy5vcHRzLmltYWdlTGlzdDtcclxuICAgIHRoaXMub3B0cy5pbWFnZUxpc3QgPSBbXTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wdHMuaW1hZ2VMaXN0ID0gaW1ncztcclxuICAgICAgY29uc29sZS5sb2codGhpcy5vcHRzLmltYWdlTGlzdCk7XHJcbiAgICAgIGxldCBmaWxlVXJsczogYW55ID0gW107XHJcbiAgICAgIGZvciAobGV0IGZpbGUgb2YgdGhpcy5vcHRzLmltYWdlTGlzdCkge1xyXG4gICAgICAgIGlmIChmaWxlW1wia2V5XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZmlsZVVybHMucHVzaChmaWxlW1wia2V5XCJdKTtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsZS5vcmlnaW5GaWxlT2JqICYmIGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hZnRlckNoYW5nZS5lbWl0KHtrZXk6IHRoaXMub3B0cy5rZXksIHZhbHVlczogZmlsZVVybHMuam9pbihcIixcIil9KTtcclxuICAgIH0sIDUwKVxyXG5cclxuICB9XHJcblxyXG4gIGRyYWdudW1iZXIobnVtZXI6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2cobnVtZXIpO1xyXG4gICAgY29uc29sZS5sb2coJ29yJywgdGhpcy5vcHRzLmltYWdlTGlzdClcclxuICAgIGNvbnNvbGUubG9nKCduZXcnLCBudW1lcilcclxuICAgIHRoaXMuc2F2ZVNlcSgpO1xyXG4gICAgLy8gdGhpcy5vcHRzLmltYWdlTGlzdCA9IG51bWVyXHJcbiAgfVxyXG5cclxuICBkZWxJbWcobnVtZXI6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2cobnVtZXIpO1xyXG4gICAgdGhpcy5vcHRzLmltYWdlTGlzdCA9IHRoaXMub3B0cy5pbWFnZUxpc3QuZmlsdGVyKCh2OiBhbnksIGk6IGFueSkgPT4gaSAhPSBudW1lcilcclxuICAgIGxldCBmaWxlVXJsczogYW55ID0gW107XHJcbiAgICBmb3IgKGxldCBmaWxlIG9mIHRoaXMub3B0cy5pbWFnZUxpc3QpIHtcclxuICAgICAgaWYgKGZpbGVbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZmlsZVVybHMucHVzaChmaWxlW1wia2V5XCJdKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlsZS5vcmlnaW5GaWxlT2JqICYmIGZpbGUub3JpZ2luRmlsZU9ialtcImtleVwiXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgZmlsZVVybHMucHVzaChmaWxlLm9yaWdpbkZpbGVPYmpbXCJrZXlcIl0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQoe2tleTogdGhpcy5vcHRzLmtleSwgdmFsdWVzOiBmaWxlVXJscy5qb2luKFwiLFwiKX0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmlld0ltZyhpbWc6IGFueSkge1xyXG4gICAgbGV0IHVybCA9IFRvb2xzVXRpbC5nZXRPc3NVcmwodGhpcy5nZXRJbWdVcmwoaW1nKSlcclxuICAgIGNvbnNvbGUubG9nKHVybClcclxuICAgIHRoaXMubnpJbWFnZVNlcnZpY2UucHJldmlldyhbe1xyXG4gICAgICBzcmM6IHVybCxcclxuICAgICAgYWx0OiAnbmctem9ycm8nXHJcbiAgICB9XSwge256Wm9vbTogMS41LCBuelJvdGF0ZTogMH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1nVXJsKGltZzogYW55KSB7XHJcbiAgICBpZiAoaW1nLm9yaWdpbkZpbGVPYmogJiYgaW1nLm9yaWdpbkZpbGVPYmoua2V5KSB7XHJcbiAgICAgIHJldHVybiBpbWcub3JpZ2luRmlsZU9iai5rZXlcclxuICAgIH1cclxuICAgIHJldHVybiAoaW1nLnVybCB8fCBpbWcudGh1bWJVcmwpXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPlxyXG4gIDxuei11cGxvYWRcclxuICAgICpuZ0lmPVwib3B0cyAmJiBvcHRzPy51cGxvYWRUeXBlID09ICdkcmFnJ1wiXHJcbiAgICBuelR5cGU9XCJkcmFnXCJcclxuICAgIG56QWN0aW9uPVwiXCJcclxuICAgIFtuekJlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgW256UmVtb3ZlXT1cInJlbW92ZVwiXHJcbiAgICBbbnpTaXplXT1cIm9wdHMubnpTaXplIHx8IDBcIlxyXG4gICAgW256Q3VzdG9tUmVxdWVzdF09XCJjdXN0b21SZXFcIlxyXG4gICAgKG56Q2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW256VHlwZV09XCJvcHRzPy51cGxvYWRUeXBlXCJcclxuICAgIFtuekFjY2VwdF09XCJvcHRzLm56RmlsZVR5cGVcIlxyXG4gICAgW256TGltaXRdPVwiJzEnXCJcclxuICA+XHJcbiAgICA8cCBjbGFzcz1cImFudC11cGxvYWQtZHJhZy1pY29uXCI+XHJcbiAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiaW5ib3hcIj48L2k+XHJcbiAgICA8L3A+XHJcbiAgICA8cCBjbGFzcz1cImFudC11cGxvYWQtdGV4dFwiPuWNleWHu+aIluaLluWKqOaWh+S7tuWIsOatpOWMuuWfn+S4iuS8oDwvcD5cclxuICA8L256LXVwbG9hZD5cclxuICA8bnotdXBsb2FkXHJcbiAgICAqbmdJZj1cIm9wdHMgJiYgb3B0cz8udXBsb2FkVHlwZSA9PSAnYnV0dG9uJ1wiXHJcbiAgICBuelR5cGU9XCJkcmFnXCJcclxuICAgIG56QWN0aW9uPVwiXCJcclxuICAgIFtuelNpemVdPVwib3B0cy5uelNpemUgfHwgMFwiXHJcbiAgICBbbnpTaG93VXBsb2FkTGlzdF09XCJzaG93VXBsb2FkTGlzdFwiXHJcbiAgICBbbnpCZWZvcmVVcGxvYWRdPVwiYmVmb3JlVXBsb2FkXCJcclxuICAgIFtuelJlbW92ZV09XCJyZW1vdmVcIlxyXG4gICAgW256Q3VzdG9tUmVxdWVzdF09XCJjdXN0b21SZXFcIlxyXG4gICAgKG56Q2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW256VHlwZV09XCJvcHRzPy51cGxvYWRUeXBlXCJcclxuICAgIFtuekFjY2VwdF09XCJvcHRzLm56RmlsZVR5cGVcIlxyXG4gICAgW256TGltaXRdPVwiJzEnXCJcclxuICA+XHJcbiAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiPjxpIG56LWljb24gbnpUeXBlPVwidXBsb2FkXCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHhcIj48L2k+PHNwYW4+IHt7b3B0cy5idG5OYW1lfX08L3NwYW4+PC9idXR0b24+XHJcbiAgPC9uei11cGxvYWQ+XHJcbiAgPG56LXVwbG9hZFxyXG4gICAgKm5nSWY9XCJvcHRzICYmICFvcHRzPy51cGxvYWRUeXBlIFwiXHJcbiAgICBuekFjdGlvbj1cIlwiXHJcbiAgICBuekxpc3RUeXBlPVwicGljdHVyZS1jYXJkXCJcclxuICAgIFtuelNpemVdPVwib3B0cy5uelNpemUgfHwgMFwiXHJcbiAgICBbKG56RmlsZUxpc3QpXT1cIm9wdHMuaW1hZ2VMaXN0XCJcclxuICAgIFtuelNob3dCdXR0b25dPVwib3B0cy5pbWFnZUxpc3QubGVuZ3RoIDwgb3B0cy5saW1pdFwiXHJcbiAgICBbbnpTaG93VXBsb2FkTGlzdF09XCJzaG93VXBsb2FkTGlzdFwiXHJcbiAgICBbbnpQcmV2aWV3XT1cImhhbmRsZVByZXZpZXdcIlxyXG4gICAgW256UmVtb3ZlXT1cInJlbW92ZVwiXHJcbiAgICBbbnpCZWZvcmVVcGxvYWRdPVwiYmVmb3JlVXBsb2FkXCJcclxuICAgIFtuekN1c3RvbVJlcXVlc3RdPVwiY3VzdG9tUmVxXCJcclxuICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgIFtuelR5cGVdPVwib3B0cz8udXBsb2FkVHlwZVwiXHJcbiAgICBbbnpBY2NlcHRdPVwib3B0cy5uekZpbGVUeXBlXCJcclxuICAgIFtuekRpc2FibGVkXT1cIiFpc0VkaXRcIlxyXG4gICAgW256TGltaXRdPVwiJzEnXCJcclxuICAgIFtuekZpbGVMaXN0UmVuZGVyXT1cIm9wdHMgJiYgaXNFZGl0ICYmIGFsbG93Q2hhbmdTZXEgJiYgb3B0cy5pbWFnZUxpc3QubGVuZ3RoID4gMCA/IGZpbGVMaXN0VG1wIDogbnVsbFwiXHJcbiAgPlxyXG4gICAgPGkgbnotaWNvbiBuelR5cGU9XCJwbHVzXCI+PC9pPlxyXG4gICAgPGRpdiBjbGFzcz1cImFudC11cGxvYWQtdGV4dFwiPnt7b3B0cy5idG5OYW1lP29wdHMuYnRuTmFtZTon5LiK5Lyg5Zu+54mHJ319PC9kaXY+XHJcbiAgPC9uei11cGxvYWQ+XHJcbiAgPCEtLSA8YSAqbmdJZj1cImFsbG93Q2hhbmdTZXEgJiYgaXNFZGl0ICYmIG9wdHMuaW1hZ2VMaXN0Lmxlbmd0aCA+IDFcIiAoY2xpY2spPVwib3BlbkJhbm5lclNlcShpbWdzQ29udGVudCwgdHBsRm9vdGVyKVwiXHJcbiAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7IFwiXHJcbiAgID48aSBuei1pY29uIG56VHlwZT1cInBsdXNcIiBuelRoZW1lPVwib3V0bGluZVwiIHN0eWxlPVwiY29sb3I6ICMxODkwZmY7IGZvbnQtc2l6ZTogMTVweFwiPjwvaT7osIPmlbTlm77niYfpobrluo88L2E+LS0+XHJcbiAgPG56LW1vZGFsXHJcbiAgICBbbnpWaXNpYmxlXT1cInByZXZpZXdWaXNpYmxlXCJcclxuICAgIFtuekNvbnRlbnRdPVwibW9kYWxDb250ZW50XCJcclxuICAgIFtuekZvb3Rlcl09XCJudWxsXCJcclxuICAgIChuek9uQ2FuY2VsKT1cInByZXZpZXdWaXNpYmxlID0gZmFsc2VcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50PlxyXG4gICAgICA8aW1nICpuZ0lmPVwiIXByZXZpZXdJbWFnZS5lbmRzV2l0aCgnLm1wNCcpXCIgW3NyY109XCJwcmV2aWV3SW1hZ2VcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiLz5cclxuICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlO21hcmdpbi10b3A6IDE1cHhcIj5cclxuICAgICAgICA8YXBwLXZpZGVvICpuZ0lmPVwicHJldmlld0ltYWdlLmVuZHNXaXRoKCcubXA0JylcIiBbdXJsXT1cInByZXZpZXdJbWFnZVwiPjwvYXBwLXZpZGVvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uei1tb2RhbD5cclxuICA8bmctdGVtcGxhdGUgI2ltZ3NDb250ZW50PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdHMgJiYgb3B0cy5pbWFnZUxpc3RcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1ncyBvZiBvcHRzLmltYWdlTGlzdDtsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImltZy1kaXZcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJpbWdzLnVybCB8fCBpbWdzLnRodW1iVXJsXCIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMHB4JyxkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywgbWFyZ2luOicxMHB4JyB9XCIvPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweFwiPlxyXG4gICAgICAgICAgICA8YSB0aXRsZT1cIuS4iuenu1wiICpuZ0lmPVwiIGkgPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIiAoY2xpY2spPVwiYXJyb3dVcChpKVwiPjxpIG56LWljb24gbnpUeXBlPVwiYXJyb3ctdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG56VGhlbWU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMTg5MGZmOyBmb250LXNpemU6IDE1cHg7XCI+PC9pPlxyXG4gICAgICAgICAgICAgIOS4iuenuzwvYT5cclxuICAgICAgICAgICAgPGEgdGl0bGU9XCLkuIvnp7tcIiAqbmdJZj1cIiBpIDwgb3B0cy5pbWFnZUxpc3QubGVuZ3RoIC0gMVwiIChjbGljayk9XCJhcnJvd0Rvd24oaSlcIj48aSBuei1pY29uIG56VHlwZT1cImFycm93LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnpUaGVtZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzE4OTBmZjsgZm9udC1zaXplOiAxNXB4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIOS4i+enuzwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDwhLS0gIDwvbnotbW9kYWw+LS0+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2ZpbGVMaXN0VG1wPlxyXG4gIDxkaXYgZHJhZ3VsYT1cImRyYWd1bGFCYWdcIiBbKGRyYWd1bGFNb2RlbCldPVwib3B0cy5pbWFnZUxpc3RcIiAoZHJhZ3VsYU1vZGVsQ2hhbmdlKT1cImRyYWdudW1iZXIoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1ncyBvZiBvcHRzLmltYWdlTGlzdDtsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWctZGl2IGltZy1wcmVcIiBzdHlsZT1cIlwiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJnZXRJbWdVcmwoaW1ncykgfG9zc0ltZ1wiIFtuZ1N0eWxlXT1cInsgd2lkdGg6ICcxMDBweCcsZGlzcGxheTogJ2lubGluZS1ibG9jaycsIG1hcmdpbjonMTBweCcgfVwiLz5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInByaXZpZXdJbWcoaW1ncylcIiBuei1pY29uIG56VHlwZT1cImV5ZVwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImRlbEltZyhpKVwiIG56LWljb24gbnpUeXBlPVwiZGVsZXRlXCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3RwbEZvb3Rlcj5cclxuICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJkZWZhdWx0XCIgKGNsaWNrKT1cImRlc3Ryb3lUcGxNb2RhbCgpXCI+XHJcbiAgICDlj5bmtohcclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVTZXEoKVwiPlxyXG4gICAg5L+d5a2Y6aG65bqPXHJcbiAgPC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuIl19