my-common-zzp 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/common.module.mjs +26 -0
- package/esm2022/lib/uc/index.mjs +2 -1
- package/esm2022/lib/uc/uc-file-list/card-list/component.mjs +150 -0
- package/esm2022/lib/uc/uc-file-list/component.mjs +277 -0
- package/esm2022/lib/uc/uc-file-list/cropImageModal/component.mjs +240 -0
- package/esm2022/lib/uc/uc-file-list/data.mjs +73 -0
- package/esm2022/lib/uc/uc-file-list/method.mjs +103 -0
- package/esm2022/lib/uc/uc-file-list/table-list.mjs +84 -0
- package/esm2022/lib/uc/uc-file-list/toolbar.mjs +79 -0
- package/esm2022/lib/uc/uc-file-list/type.mjs +2 -0
- package/esm2022/lib/uc/uc-file-list/upload.mjs +42 -0
- package/esm2022/lib/ucModel.mjs +23 -3
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/my-common-zzp.mjs +1034 -6
- package/fesm2022/my-common-zzp.mjs.map +1 -1
- package/lib/common.module.d.ts +10 -0
- package/lib/uc/index.d.ts +1 -0
- package/lib/uc/uc-file-list/card-list/component.d.ts +19 -0
- package/lib/uc/uc-file-list/component.d.ts +56 -0
- package/lib/uc/uc-file-list/cropImageModal/component.d.ts +45 -0
- package/lib/uc/uc-file-list/data.d.ts +19 -0
- package/lib/uc/uc-file-list/method.d.ts +23 -0
- package/lib/uc/uc-file-list/table-list.d.ts +15 -0
- package/lib/uc/uc-file-list/toolbar.d.ts +14 -0
- package/lib/uc/uc-file-list/type.d.ts +7 -0
- package/lib/uc/uc-file-list/upload.d.ts +12 -0
- package/lib/ucModel.d.ts +20 -14
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* itec 开发环境基础设施
|
|
3
|
+
* - 基础组件声明
|
|
4
|
+
* - 基础服务声明
|
|
5
|
+
*/
|
|
6
|
+
import { NgModule } from '@angular/core';
|
|
7
|
+
import { CommonModule } from '@angular/common';
|
|
8
|
+
import { NgZorroAntdModule } from './ngZorroAntd.module';
|
|
9
|
+
import { MaterialModule } from './material.module';
|
|
10
|
+
// 核心的组件
|
|
11
|
+
import { UcModule } from './ucModel';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class ItecCoreModule {
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
15
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, imports: [CommonModule, NgZorroAntdModule, MaterialModule], exports: [CommonModule, NgZorroAntdModule, MaterialModule, UcModule] }); }
|
|
16
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, imports: [CommonModule, NgZorroAntdModule, MaterialModule, CommonModule, NgZorroAntdModule, MaterialModule, UcModule] }); }
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ItecCoreModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
imports: [CommonModule, NgZorroAntdModule, MaterialModule],
|
|
22
|
+
exports: [CommonModule, NgZorroAntdModule, MaterialModule, UcModule],
|
|
23
|
+
providers: [],
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL215LWNvbW1vbi9zcmMvbGliL2NvbW1vbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxRQUFRO0FBQ1IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFPckMsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSmhCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLGFBQy9DLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUTsrR0FHdkQsY0FBYyxZQUpoQixZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUMvQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFFBQVE7OzJGQUd2RCxjQUFjO2tCQUwxQixRQUFRO21CQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUM7b0JBQzFELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDO29CQUNwRSxTQUFTLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiAgaXRlYyDlvIDlj5Hnjq/looPln7rnoYDorr7mlr1cclxuICogIC0g5Z+656GA57uE5Lu25aOw5piOXHJcbiAqICAtIOWfuuehgOacjeWKoeWjsOaYjlxyXG4gKi9cclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IE5nWm9ycm9BbnRkTW9kdWxlIH0gZnJvbSAnLi9uZ1pvcnJvQW50ZC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4vbWF0ZXJpYWwubW9kdWxlJztcclxuLy8g5qC45b+D55qE57uE5Lu2XHJcbmltcG9ydCB7IFVjTW9kdWxlIH0gZnJvbSAnLi91Y01vZGVsJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmdab3Jyb0FudGRNb2R1bGUsIE1hdGVyaWFsTW9kdWxlXSxcclxuXHRleHBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ1pvcnJvQW50ZE1vZHVsZSwgTWF0ZXJpYWxNb2R1bGUsIFVjTW9kdWxlXSxcclxuXHRwcm92aWRlcnM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlY0NvcmVNb2R1bGUge31cclxuIl19
|
package/esm2022/lib/uc/index.mjs
CHANGED
|
@@ -19,4 +19,5 @@ export { UcPickupWindowHeaderComponent } from "./uc-pickup-window/header.compone
|
|
|
19
19
|
export { UcFormComponent } from "./uc-fields/uc-form.component";
|
|
20
20
|
export { UcFieldsReadonlyComponent } from "./uc-fields/fieldsReadonly.component";
|
|
21
21
|
export { UcFieldsEditComponent } from "./uc-fields/fieldsEdit.component";
|
|
22
|
-
|
|
22
|
+
export { UcFileListComponent } from "./uc-file-list/component";
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teS1jb21tb24vc3JjL2xpYi91Yy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbW1vblwiO1xyXG5leHBvcnQgeyBVY0RhdGVSYW5nZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWRhdGUtcmFuZ2UvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTnpNb2RhbENvbnRlbnRDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1kaWFsb2cvdWNOek1vZGFsQ29udGVudC5Db21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNGaWVsZHNDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1maWVsZHMvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdEZpbHRlck9wdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtZmlsdGVyL3VjLWxpc3QtZmlsdGVyT3B0aW9uXCI7XHJcbmV4cG9ydCB7IFVjTGlzdE5hdkNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtbmF2L2NvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0xpc3RUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtdGFibGUvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRhYmxlQ29yZUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWxpc3QtdGFibGUvdGFibGUuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRyZWVDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1saXN0LXRyZWUvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjTGlzdFRyZWVDb3JlQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtbGlzdC10cmVlL3RhYmxlLmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY05hdkxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1uYXYtbGlzdC9jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNOYXYxQ29tcG9uZW50LCBkZWZhdWx0TGlzdCB9IGZyb20gXCIuL3VjLW5hdjEvdWMtbmF2MS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNQZXJmZWN0U2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGVyZmVjdC1zY3JvbGxiYXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjUGlja3VwV2luZG93Q29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGlja3VwLXdpbmRvdy9jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNTdWJIZWFkZXJDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1zdWJoZWFkZXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjVGl0bGVOYXZDb21wb25lbnQgfSBmcm9tIFwiLi91Yy10aXRsZS1uYXYvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjVG9vbGJhckNvbXBvbmVudCB9IGZyb20gXCIuL3VjLXRvb2xiYXIvY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjUGlja3VwV2luZG93SGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vdWMtcGlja3VwLXdpbmRvdy9oZWFkZXIuY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IFVjRm9ybUNvbXBvbmVudCB9IGZyb20gXCIuL3VjLWZpZWxkcy91Yy1mb3JtLmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0ZpZWxkc1JlYWRvbmx5Q29tcG9uZW50IH0gZnJvbSBcIi4vdWMtZmllbGRzL2ZpZWxkc1JlYWRvbmx5LmNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBVY0ZpZWxkc0VkaXRDb21wb25lbnQgfSBmcm9tIFwiLi91Yy1maWVsZHMvZmllbGRzRWRpdC5jb21wb25lbnRcIjtcclxuZXhwb3J0IHsgVWNGaWxlTGlzdENvbXBvbmVudCB9IGZyb20gXCIuL3VjLWZpbGUtbGlzdC9jb21wb25lbnRcIjtcclxuIl19
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { moveItemInArray } from "@angular/cdk/drag-drop";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core";
|
|
3
|
+
import { actions } from "../data";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/cdk/drag-drop";
|
|
7
|
+
import * as i3 from "ng-inline-svg-2";
|
|
8
|
+
import * as i4 from "../upload";
|
|
9
|
+
export class UcFileCardListComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.multiple = false; //多选文件
|
|
12
|
+
this.allowUpload = true; //允许上传
|
|
13
|
+
this.onUploadCancelClick = new EventEmitter();
|
|
14
|
+
this.onCradClick = new EventEmitter();
|
|
15
|
+
this.actions = actions;
|
|
16
|
+
}
|
|
17
|
+
ngOnInit() {
|
|
18
|
+
this.cardSize = this.cardSize ? this.cardSize + "px" : "150px";
|
|
19
|
+
}
|
|
20
|
+
drop(event) {
|
|
21
|
+
if (event.previousIndex !== event.currentIndex) {
|
|
22
|
+
moveItemInArray(this.dataList, event.previousIndex, event.currentIndex);
|
|
23
|
+
this.onCradClick.emit({
|
|
24
|
+
code: "DROPPED",
|
|
25
|
+
data: event.currentIndex,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
doSth(event, code, item) {
|
|
30
|
+
event.stopPropagation();
|
|
31
|
+
this.onCradClick.emit({
|
|
32
|
+
code: code,
|
|
33
|
+
data: item,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
onUploadCancelCallback() {
|
|
37
|
+
this.onUploadCancelClick.emit();
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileCardListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: UcFileCardListComponent, selector: "uc-file-card-list", inputs: { cardSize: "cardSize", multiple: "multiple", allowUpload: "allowUpload", beforeUpload: "beforeUpload", dataList: "dataList" }, outputs: { onUploadCancelClick: "onUploadCancelClick", onCradClick: "onCradClick" }, ngImport: i0, template: `<div class="main">
|
|
41
|
+
<div class="dropContent" cdkDropList cdkDropListOrientation="mixed" (cdkDropListDropped)="drop($event)">
|
|
42
|
+
@for (item of dataList ; let idx = $index; track idx) {
|
|
43
|
+
<div
|
|
44
|
+
cdkDrag
|
|
45
|
+
class="fileContent"
|
|
46
|
+
[ngStyle]="{
|
|
47
|
+
width:cardSize,
|
|
48
|
+
height:cardSize,
|
|
49
|
+
}"
|
|
50
|
+
>
|
|
51
|
+
@if(item.type==="image"){
|
|
52
|
+
<span class="image-content vc">
|
|
53
|
+
<img [src]="item.fileSrc" />
|
|
54
|
+
</span>
|
|
55
|
+
}@else {
|
|
56
|
+
<span [inlineSVG]="item.imageSrc" cacheSVG="true" class="svg-icon svg-icon-7x vc"></span>
|
|
57
|
+
}
|
|
58
|
+
<div class="mask">
|
|
59
|
+
<div class="maskContent" (click)="doSth($event, 'DOWNLOAD', item)">
|
|
60
|
+
<span class="operating">
|
|
61
|
+
@for (c of actions ; track c) { @if(c.type===item.type||c.type==='any'){
|
|
62
|
+
<a [class]="c.type === 'image' ? 'mr-5' : ''" (click)="doSth($event, c.code, item)">
|
|
63
|
+
<i class="icon-xl" [ngClass]="c.icon"></i>
|
|
64
|
+
</a>
|
|
65
|
+
} }
|
|
66
|
+
</span>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
} @if(allowUpload){
|
|
71
|
+
|
|
72
|
+
<uc-file-upload [multiple]="multiple" [beforeUpload]="beforeUpload" (onCancel)="onUploadCancelCallback()">
|
|
73
|
+
<div
|
|
74
|
+
class="fileContent text-muted"
|
|
75
|
+
[ngStyle]="{
|
|
76
|
+
width:cardSize,
|
|
77
|
+
height:cardSize,
|
|
78
|
+
}"
|
|
79
|
+
>
|
|
80
|
+
<i class="flaticon2-plus icon-xl icon-plus vc"></i>
|
|
81
|
+
</div>
|
|
82
|
+
</uc-file-upload>
|
|
83
|
+
}
|
|
84
|
+
</div>
|
|
85
|
+
</div> `, isInline: true, styles: ["@charset \"UTF-8\";.main .dropContent{display:flex;flex-wrap:wrap}.main .dropContent .fileContent{margin-right:8px;margin-bottom:5px;padding:6px;border:1px solid #cccccc;position:relative}.main .dropContent .fileContent .image-content{width:100%;height:100%}.main .dropContent .fileContent .image-content img{width:100%;height:100%;object-fit:cover}.main .dropContent .fileContent .icon-plus{color:unset}.main .dropContent .fileContent .icon-plus:hover{cursor:pointer}.main .dropContent .fileContent .mask{position:absolute;top:0;left:0;height:100%;width:100%}.main .dropContent .fileContent .mask .maskContent{opacity:0;transition:opacity .2s ease,visibility .2s ease;background:#65656599;height:100%;width:100%;position:relative}.main .dropContent .fileContent .mask .maskContent .operating{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.main .dropContent .fileContent .mask .maskContent .operating a{color:#fff}.main .dropContent .fileContent .mask .maskContent .operating a i{color:unset}.main .dropContent .fileContent .mask:hover .maskContent{opacity:1;visibility:visible}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-preview .image-content{width:100%;height:100%}.cdk-drag-preview .image-content img{width:100%;height:100%;object-fit:cover}.cdk-drag-preview .maskContent,.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.vc{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i4.UcFileUploadComponent, selector: "uc-file-upload", inputs: ["multiple", "beforeUpload"], outputs: ["onCancel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileCardListComponent, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: "uc-file-card-list", template: `<div class="main">
|
|
90
|
+
<div class="dropContent" cdkDropList cdkDropListOrientation="mixed" (cdkDropListDropped)="drop($event)">
|
|
91
|
+
@for (item of dataList ; let idx = $index; track idx) {
|
|
92
|
+
<div
|
|
93
|
+
cdkDrag
|
|
94
|
+
class="fileContent"
|
|
95
|
+
[ngStyle]="{
|
|
96
|
+
width:cardSize,
|
|
97
|
+
height:cardSize,
|
|
98
|
+
}"
|
|
99
|
+
>
|
|
100
|
+
@if(item.type==="image"){
|
|
101
|
+
<span class="image-content vc">
|
|
102
|
+
<img [src]="item.fileSrc" />
|
|
103
|
+
</span>
|
|
104
|
+
}@else {
|
|
105
|
+
<span [inlineSVG]="item.imageSrc" cacheSVG="true" class="svg-icon svg-icon-7x vc"></span>
|
|
106
|
+
}
|
|
107
|
+
<div class="mask">
|
|
108
|
+
<div class="maskContent" (click)="doSth($event, 'DOWNLOAD', item)">
|
|
109
|
+
<span class="operating">
|
|
110
|
+
@for (c of actions ; track c) { @if(c.type===item.type||c.type==='any'){
|
|
111
|
+
<a [class]="c.type === 'image' ? 'mr-5' : ''" (click)="doSth($event, c.code, item)">
|
|
112
|
+
<i class="icon-xl" [ngClass]="c.icon"></i>
|
|
113
|
+
</a>
|
|
114
|
+
} }
|
|
115
|
+
</span>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
} @if(allowUpload){
|
|
120
|
+
|
|
121
|
+
<uc-file-upload [multiple]="multiple" [beforeUpload]="beforeUpload" (onCancel)="onUploadCancelCallback()">
|
|
122
|
+
<div
|
|
123
|
+
class="fileContent text-muted"
|
|
124
|
+
[ngStyle]="{
|
|
125
|
+
width:cardSize,
|
|
126
|
+
height:cardSize,
|
|
127
|
+
}"
|
|
128
|
+
>
|
|
129
|
+
<i class="flaticon2-plus icon-xl icon-plus vc"></i>
|
|
130
|
+
</div>
|
|
131
|
+
</uc-file-upload>
|
|
132
|
+
}
|
|
133
|
+
</div>
|
|
134
|
+
</div> `, styles: ["@charset \"UTF-8\";.main .dropContent{display:flex;flex-wrap:wrap}.main .dropContent .fileContent{margin-right:8px;margin-bottom:5px;padding:6px;border:1px solid #cccccc;position:relative}.main .dropContent .fileContent .image-content{width:100%;height:100%}.main .dropContent .fileContent .image-content img{width:100%;height:100%;object-fit:cover}.main .dropContent .fileContent .icon-plus{color:unset}.main .dropContent .fileContent .icon-plus:hover{cursor:pointer}.main .dropContent .fileContent .mask{position:absolute;top:0;left:0;height:100%;width:100%}.main .dropContent .fileContent .mask .maskContent{opacity:0;transition:opacity .2s ease,visibility .2s ease;background:#65656599;height:100%;width:100%;position:relative}.main .dropContent .fileContent .mask .maskContent .operating{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.main .dropContent .fileContent .mask .maskContent .operating a{color:#fff}.main .dropContent .fileContent .mask .maskContent .operating a i{color:unset}.main .dropContent .fileContent .mask:hover .maskContent{opacity:1;visibility:visible}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-preview .image-content{width:100%;height:100%}.cdk-drag-preview .image-content img{width:100%;height:100%;object-fit:cover}.cdk-drag-preview .maskContent,.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.vc{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"] }]
|
|
135
|
+
}], propDecorators: { cardSize: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], multiple: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], allowUpload: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}], beforeUpload: [{
|
|
142
|
+
type: Input
|
|
143
|
+
}], dataList: [{
|
|
144
|
+
type: Input
|
|
145
|
+
}], onUploadCancelClick: [{
|
|
146
|
+
type: Output
|
|
147
|
+
}], onCradClick: [{
|
|
148
|
+
type: Output
|
|
149
|
+
}] } });
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXktY29tbW9uL3NyYy9saWIvdWMvdWMtZmlsZS1saXN0L2NhcmQtbGlzdC9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBcURsQyxNQUFNLE9BQU8sdUJBQXVCO0lBbkRwQztRQXFEYSxhQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsTUFBTTtRQUNqQyxnQkFBVyxHQUFZLElBQUksQ0FBQyxDQUFDLE1BQU07UUFHbEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM5QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFaEQsWUFBTyxHQUFlLE9BQU8sQ0FBQztLQTBCakM7SUF4QkcsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQTRCO1FBQzdCLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxLQUFLLENBQUMsWUFBWTthQUMzQixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUk7UUFDbkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2xCLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzhHQWxDUSx1QkFBdUI7a0dBQXZCLHVCQUF1QixzUkFoRHRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUE2Q0Y7OzJGQUdDLHVCQUF1QjtrQkFuRG5DLFNBQVM7c0NBQ1csdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxtQkFBbUIsWUFDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQTZDRjs4QkFJQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IGFjdGlvbnMgfSBmcm9tIFwiLi4vZGF0YVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHNlbGVjdG9yOiBcInVjLWZpbGUtY2FyZC1saXN0XCIsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJtYWluXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BDb250ZW50XCIgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cIm1peGVkXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cclxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhTGlzdCA7IGxldCBpZHggPSAkaW5kZXg7IHRyYWNrIGlkeCkge1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGVDb250ZW50XCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHdpZHRoOmNhcmRTaXplLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OmNhcmRTaXplLFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBAaWYoaXRlbS50eXBlPT09XCJpbWFnZVwiKXtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtY29udGVudCB2Y1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtLmZpbGVTcmNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiaXRlbS5pbWFnZVNyY1wiIGNhY2hlU1ZHPVwidHJ1ZVwiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tN3ggdmNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFza1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXNrQ29udGVudFwiIChjbGljayk9XCJkb1N0aCgkZXZlbnQsICdET1dOTE9BRCcsIGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3BlcmF0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGFjdGlvbnMgOyB0cmFjayBjKSB7IEBpZihjLnR5cGU9PT1pdGVtLnR5cGV8fGMudHlwZT09PSdhbnknKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtjbGFzc109XCJjLnR5cGUgPT09ICdpbWFnZScgPyAnbXItNScgOiAnJ1wiIChjbGljayk9XCJkb1N0aCgkZXZlbnQsIGMuY29kZSwgaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24teGxcIiBbbmdDbGFzc109XCJjLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBpZihhbGxvd1VwbG9hZCl7XHJcblxyXG4gICAgICAgICAgICA8dWMtZmlsZS11cGxvYWQgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2JlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIiAob25DYW5jZWwpPVwib25VcGxvYWRDYW5jZWxDYWxsYmFjaygpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlQ29udGVudCB0ZXh0LW11dGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDpjYXJkU2l6ZSxcclxuICAgICAgICAgICAgICAgIGhlaWdodDpjYXJkU2l6ZSxcclxuICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmbGF0aWNvbjItcGx1cyBpY29uLXhsIGljb24tcGx1cyB2Y1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3VjLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj4gYCxcclxuICAgIHN0eWxlVXJsczogW1wiY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVY0ZpbGVDYXJkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBjYXJkU2l6ZTogc3RyaW5nIHwgbnVtYmVyOyAvL2NhcmTlpKflsI8g6buY6K6kMjAwcHhcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7IC8v5aSa6YCJ5paH5Lu2XHJcbiAgICBASW5wdXQoKSBhbGxvd1VwbG9hZDogYm9vbGVhbiA9IHRydWU7IC8v5YWB6K645LiK5LygXHJcbiAgICBASW5wdXQoKSBiZWZvcmVVcGxvYWQ7XHJcbiAgICBASW5wdXQoKSBkYXRhTGlzdDtcclxuICAgIEBPdXRwdXQoKSBvblVwbG9hZENhbmNlbENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DcmFkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBhY3Rpb25zOiBBcnJheTxhbnk+ID0gYWN0aW9ucztcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhcmRTaXplID0gdGhpcy5jYXJkU2l6ZSA/IHRoaXMuY2FyZFNpemUgKyBcInB4XCIgOiBcIjE1MHB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggIT09IGV2ZW50LmN1cnJlbnRJbmRleCkge1xyXG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5kYXRhTGlzdCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgICAgICAgICAgdGhpcy5vbkNyYWRDbGljay5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IFwiRFJPUFBFRFwiLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZXZlbnQuY3VycmVudEluZGV4LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkb1N0aChldmVudCwgY29kZSwgaXRlbSkge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMub25DcmFkQ2xpY2suZW1pdCh7XHJcbiAgICAgICAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25VcGxvYWRDYW5jZWxDYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLm9uVXBsb2FkQ2FuY2VsQ2xpY2suZW1pdCgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChildren, } from "@angular/core";
|
|
2
|
+
import _ from "lodash";
|
|
3
|
+
import { forkJoin, tap } from "rxjs";
|
|
4
|
+
import { UcFileCardsCropImageModalComponent } from "./cropImageModal/component";
|
|
5
|
+
import { compressImage } from "../../formly-config/types/avatar/cropImageModal/method";
|
|
6
|
+
import { findFileTypeOption } from "./method";
|
|
7
|
+
import { fileSvgSrc, FLIETYPE } from "./data";
|
|
8
|
+
import { calcNewSeqValue } from "./method";
|
|
9
|
+
import { saveAs } from "file-saver";
|
|
10
|
+
import { AppInjector } from "../../service";
|
|
11
|
+
import { FILE_URL } from "../../service/inject.token";
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "../../service";
|
|
14
|
+
import * as i2 from "@angular/common/http";
|
|
15
|
+
import * as i3 from "ng-zorro-antd/image";
|
|
16
|
+
import * as i4 from "./table-list";
|
|
17
|
+
import * as i5 from "./toolbar";
|
|
18
|
+
import * as i6 from "./card-list/component";
|
|
19
|
+
export class UcFileListComponent {
|
|
20
|
+
//传入的数据
|
|
21
|
+
set dataList(list) {
|
|
22
|
+
if (list) {
|
|
23
|
+
this.fileList = list.map(m => {
|
|
24
|
+
return {
|
|
25
|
+
id: m.id,
|
|
26
|
+
fileSrc: this.apiUrl + m.name,
|
|
27
|
+
imageSrc: fileSvgSrc[m.type],
|
|
28
|
+
lineCode: m.lineCode,
|
|
29
|
+
name: m.name,
|
|
30
|
+
type: m.type,
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
this.fileList = _.orderBy(this.fileList, "lineCode");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
constructor(cdr, App, http, modalUtils) {
|
|
37
|
+
this.cdr = cdr;
|
|
38
|
+
this.App = App;
|
|
39
|
+
this.http = http;
|
|
40
|
+
this.modalUtils = modalUtils;
|
|
41
|
+
this.apiUrl = AppInjector.get(FILE_URL, ""); // root FILE_URL 文件上传地址
|
|
42
|
+
this.uploadFileTypes = []; //设定允许上传文件类型
|
|
43
|
+
this.mode = "card";
|
|
44
|
+
this.multiple = false; //多选文件
|
|
45
|
+
this.allowUpload = true; //允许上传
|
|
46
|
+
this.toolbarVisible = true; //表头操作可见
|
|
47
|
+
this.fileList = [];
|
|
48
|
+
this.imageGroups = [];
|
|
49
|
+
this.onOk = new EventEmitter();
|
|
50
|
+
this.beforeUpload = async (file, uploadFileList) => {
|
|
51
|
+
// 两种状态 上传文件数量
|
|
52
|
+
// 一个 判断当前文件类型与允许上传的文件类型是否一致 后单笔上传 图片类型 打开编辑框
|
|
53
|
+
// 多个 过滤掉文件类型与允许上传的文件类型不一致的文件 多笔文件上传
|
|
54
|
+
if (uploadFileList.length > 1) {
|
|
55
|
+
if (file === uploadFileList.at(-1)) {
|
|
56
|
+
//最后一个文件时执行所有的文件上传 图片自动压缩200kb以内
|
|
57
|
+
const observableArayy = [];
|
|
58
|
+
for (let index = 0; index < uploadFileList.length; index++) {
|
|
59
|
+
let e = uploadFileList[index];
|
|
60
|
+
const fileTypeOption = findFileTypeOption(e);
|
|
61
|
+
const valid = this.uploadFileTypes.length
|
|
62
|
+
? this.uploadFileTypes.some(item => item == fileTypeOption.type)
|
|
63
|
+
: true;
|
|
64
|
+
if (valid) {
|
|
65
|
+
if (fileTypeOption.type === "image") {
|
|
66
|
+
e = await compressImage(e);
|
|
67
|
+
}
|
|
68
|
+
const o = this.uploadFiles(e, fileTypeOption);
|
|
69
|
+
observableArayy.push(o);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
forkJoin(observableArayy).subscribe();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// 获取文件对象
|
|
77
|
+
const _file = (file.originFileObj || file);
|
|
78
|
+
// //找到上传文件是哪个类型的
|
|
79
|
+
const fileTypeOption = findFileTypeOption(file);
|
|
80
|
+
const valid = this.uploadFileTypes.length
|
|
81
|
+
? this.uploadFileTypes.some(item => item == fileTypeOption.type)
|
|
82
|
+
: true;
|
|
83
|
+
if (valid) {
|
|
84
|
+
if (fileTypeOption.type === "image") {
|
|
85
|
+
const reader = new FileReader();
|
|
86
|
+
// 定义文件读取完成后的回调函数
|
|
87
|
+
reader.onload = (e) => {
|
|
88
|
+
this.openEditImageModal({ fileSrc: e.target.result }, "DEFAULT");
|
|
89
|
+
this.cdr.markForCheck();
|
|
90
|
+
};
|
|
91
|
+
// 启动文件读取过程
|
|
92
|
+
reader.readAsDataURL(_file);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.uploadFiles(file, fileTypeOption).subscribe();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
onUploadCancelClick() {
|
|
103
|
+
this.openEditImageModal(null, "DEFAULT");
|
|
104
|
+
this.cdr.markForCheck();
|
|
105
|
+
}
|
|
106
|
+
doSth(event) {
|
|
107
|
+
switch (event.code) {
|
|
108
|
+
case "EDIT":
|
|
109
|
+
this.openEditImageModal(event.data);
|
|
110
|
+
break;
|
|
111
|
+
case "DELETE":
|
|
112
|
+
this.deleteFile(event.data);
|
|
113
|
+
break;
|
|
114
|
+
case "DOWNLOAD":
|
|
115
|
+
this.viewFile(event.data);
|
|
116
|
+
break;
|
|
117
|
+
case "DROPPED":
|
|
118
|
+
this.dropFile(event.data);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
deleteFile(item) {
|
|
123
|
+
this.App.httpClient.delete(item.fileSrc).subscribe();
|
|
124
|
+
this.onOk.emit({
|
|
125
|
+
code: "DELETE",
|
|
126
|
+
id: item.id,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
viewFile(item) {
|
|
130
|
+
switch (item.type) {
|
|
131
|
+
case "image":
|
|
132
|
+
this.openImageBoard(item.fileSrc);
|
|
133
|
+
break;
|
|
134
|
+
case "pdf":
|
|
135
|
+
this.http.get(item.fileSrc, { responseType: "blob" }).subscribe(blob => {
|
|
136
|
+
const pdf = new Blob([blob], { type: "application/pdf;chartset=uTF-8" });
|
|
137
|
+
const url = window.URL.createObjectURL(pdf);
|
|
138
|
+
window.open(url, "_blank");
|
|
139
|
+
//释放内存(确保窗口已打开后执行)
|
|
140
|
+
setTimeout(() => window.URL.revokeObjectURL(url), 1000);
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
default:
|
|
144
|
+
this.downloadFile(item.fileSrc, item.name);
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
*
|
|
150
|
+
* @param item
|
|
151
|
+
* @param modalType DEFAULT 普通类型 不带有删除 用于上传文件后 打开编辑模式 , IMAGE 带有删除功能 用于图片编辑
|
|
152
|
+
*/
|
|
153
|
+
openEditImageModal(item, modalType) {
|
|
154
|
+
let flieSrc = item?.fileSrc || null;
|
|
155
|
+
if (flieSrc) {
|
|
156
|
+
if (!modalType)
|
|
157
|
+
flieSrc = `${item.fileSrc}?timestamp=${new Date().getTime()}`;
|
|
158
|
+
}
|
|
159
|
+
this.modalUtils.openModal({
|
|
160
|
+
content: UcFileCardsCropImageModalComponent,
|
|
161
|
+
props: {
|
|
162
|
+
imageSrc: flieSrc,
|
|
163
|
+
modalType: modalType,
|
|
164
|
+
onOk: event => this.cropImageModalOnOk(event, item),
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//打开nzimage看板
|
|
169
|
+
openImageBoard(src) {
|
|
170
|
+
this.imageGroups = this.fileList.filter(f => f.type === "image");
|
|
171
|
+
setTimeout(t => {
|
|
172
|
+
const images = this.nzImages.toArray();
|
|
173
|
+
for (let index = 0; index < images.length; index++) {
|
|
174
|
+
const x = images[index];
|
|
175
|
+
if (x.nativeElement.src == src) {
|
|
176
|
+
x.nativeElement.click();
|
|
177
|
+
this.cdr.markForCheck();
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 裁剪对话框 图片编辑 上传 删除功能
|
|
185
|
+
* @param event 对话框返回参数
|
|
186
|
+
* @param item 当前选项的原型
|
|
187
|
+
*/
|
|
188
|
+
async cropImageModalOnOk(event, item) {
|
|
189
|
+
if (event.code === "DELETE") {
|
|
190
|
+
this.App.httpClient.delete(item.fileSrc).subscribe();
|
|
191
|
+
this.onOk.emit({
|
|
192
|
+
code: "DELETE",
|
|
193
|
+
id: item.id,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
const fileTypeOption = FLIETYPE.find(f => f.type === "image");
|
|
198
|
+
let fileName = item?.name || null;
|
|
199
|
+
this.uploadFiles(event.file, fileTypeOption, fileName).subscribe(r => {
|
|
200
|
+
item.fileSrc = `${item.fileSrc}?timestamp=${new Date().getTime()}`;
|
|
201
|
+
this.cdr.markForCheck();
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
*上传方法
|
|
207
|
+
* @param file 上传所需要的文件
|
|
208
|
+
* @param fileName 文件名
|
|
209
|
+
*/
|
|
210
|
+
uploadFiles(file, fileTypeOption, fileName) {
|
|
211
|
+
let isNew = false;
|
|
212
|
+
if (!fileName) {
|
|
213
|
+
fileName = this.masterId + fileTypeOption.type + Date.now() + fileTypeOption.suffix;
|
|
214
|
+
isNew = true;
|
|
215
|
+
}
|
|
216
|
+
const newFile = file;
|
|
217
|
+
const formData = new FormData();
|
|
218
|
+
formData.append("file", newFile, fileName);
|
|
219
|
+
return this.App.httpClient.post(this.apiUrl, formData).pipe(tap(x => {
|
|
220
|
+
if (isNew) {
|
|
221
|
+
this.onOk.emit({
|
|
222
|
+
code: "UPLOAD",
|
|
223
|
+
fileName: fileName,
|
|
224
|
+
lineCode: this.fileList.length + 1,
|
|
225
|
+
type: fileTypeOption.type,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
downloadFile(url, name) {
|
|
231
|
+
this.http.get(url, { responseType: "blob" }).subscribe(blob => {
|
|
232
|
+
saveAs(blob, name); // 你可以指定任何你想要的文件名
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
dropFile(currentIndex) {
|
|
236
|
+
let lineCode = calcNewSeqValue(currentIndex, this.fileList, "lineCode");
|
|
237
|
+
this.fileList[currentIndex].lineCode = lineCode;
|
|
238
|
+
this.onOk.emit({
|
|
239
|
+
code: "UPDATE",
|
|
240
|
+
id: this.fileList[currentIndex].id,
|
|
241
|
+
updateData: [
|
|
242
|
+
{
|
|
243
|
+
key: "lineCode",
|
|
244
|
+
value: lineCode,
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Application }, { token: i2.HttpClient }, { token: i1.ModalUtils }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
250
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: UcFileListComponent, selector: "uc-file-list", inputs: { uploadFileTypes: "uploadFileTypes", mode: "mode", cardSize: "cardSize", masterId: "masterId", multiple: "multiple", allowUpload: "allowUpload", toolbarVisible: "toolbarVisible", dataList: "dataList" }, outputs: { onOk: "onOk" }, viewQueries: [{ propertyName: "nzImages", predicate: ["nzImage"], descendants: true }], ngImport: i0, template: "@if(toolbarVisible){\r\n<uc-file-toolbar\r\n [(mode)]=\"mode\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(mode === 'card'){\r\n<uc-file-card-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n (onCradClick)=\"doSth($event)\"\r\n/>\r\n}@else{\r\n<uc-file-table-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"toolbarVisible?false: allowUpload \"\r\n [multiple]=\"multiple\"\r\n (onTableRowClick)=\"doSth($event)\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(imageGroups.length){\r\n<nz-image-group style=\"display: none\" class=\"nzImage\">\r\n @for (item of imageGroups; track item) {\r\n <img nz-image #nzImage [nzSrc]=\"item.fileSrc\" (close)=\"imageGroups=[]\" />\r\n }\r\n</nz-image-group>\r\n}\r\n", dependencies: [{ kind: "directive", type: i3.NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder", "nzScaleStep"], exportAs: ["nzImage"] }, { kind: "component", type: i3.NzImageGroupComponent, selector: "nz-image-group", inputs: ["nzScaleStep"], exportAs: ["nzImageGroup"] }, { kind: "component", type: i4.UcFileTableListComponent, selector: "uc-file-table-list", inputs: ["dataList", "multiple", "beforeUpload", "allowUpload"], outputs: ["onTableRowClick", "onUploadCancelClick"] }, { kind: "component", type: i5.UcFileToolbarComponent, selector: "uc-file-toolbar", inputs: ["mode", "beforeUpload", "multiple", "allowUpload"], outputs: ["modeChange", "onUploadCancelClick"] }, { kind: "component", type: i6.UcFileCardListComponent, selector: "uc-file-card-list", inputs: ["cardSize", "multiple", "allowUpload", "beforeUpload", "dataList"], outputs: ["onUploadCancelClick", "onCradClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
251
|
+
}
|
|
252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UcFileListComponent, decorators: [{
|
|
253
|
+
type: Component,
|
|
254
|
+
args: [{ selector: "uc-file-list", changeDetection: ChangeDetectionStrategy.OnPush, template: "@if(toolbarVisible){\r\n<uc-file-toolbar\r\n [(mode)]=\"mode\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(mode === 'card'){\r\n<uc-file-card-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"allowUpload\"\r\n [multiple]=\"multiple\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n (onCradClick)=\"doSth($event)\"\r\n/>\r\n}@else{\r\n<uc-file-table-list\r\n [dataList]=\"fileList\"\r\n [beforeUpload]=\"beforeUpload\"\r\n [allowUpload]=\"toolbarVisible?false: allowUpload \"\r\n [multiple]=\"multiple\"\r\n (onTableRowClick)=\"doSth($event)\"\r\n (onUploadCancelClick)=\"onUploadCancelClick()\"\r\n/>\r\n\r\n} @if(imageGroups.length){\r\n<nz-image-group style=\"display: none\" class=\"nzImage\">\r\n @for (item of imageGroups; track item) {\r\n <img nz-image #nzImage [nzSrc]=\"item.fileSrc\" (close)=\"imageGroups=[]\" />\r\n }\r\n</nz-image-group>\r\n}\r\n" }]
|
|
255
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Application }, { type: i2.HttpClient }, { type: i1.ModalUtils }], propDecorators: { uploadFileTypes: [{
|
|
256
|
+
type: Input
|
|
257
|
+
}], mode: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], cardSize: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}], masterId: [{
|
|
262
|
+
type: Input
|
|
263
|
+
}], multiple: [{
|
|
264
|
+
type: Input
|
|
265
|
+
}], allowUpload: [{
|
|
266
|
+
type: Input
|
|
267
|
+
}], toolbarVisible: [{
|
|
268
|
+
type: Input
|
|
269
|
+
}], dataList: [{
|
|
270
|
+
type: Input
|
|
271
|
+
}], nzImages: [{
|
|
272
|
+
type: ViewChildren,
|
|
273
|
+
args: ["nzImage"]
|
|
274
|
+
}], onOk: [{
|
|
275
|
+
type: Output
|
|
276
|
+
}] } });
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXktY29tbW9uL3NyYy9saWIvdWMvdWMtZmlsZS1saXN0L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215LWNvbW1vbi9zcmMvbGliL3VjL3VjLWZpbGUtbGlzdC9jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLG1CQUFtQjtJQVM1QixPQUFPO0lBQ1AsSUFBYSxRQUFRLENBQUMsSUFBa0I7UUFDcEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FB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Q0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F2UFEsbUJBQW1CO2tHQUFuQixtQkFBbUIsMlhDL0JoQyxxa0NBbUNBOzsyRkRKYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO2tLQUl0QyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRU8sUUFBUTtzQkFBcEIsS0FBSztnQkFvQm1CLFFBQVE7c0JBQWhDLFlBQVk7dUJBQUMsU0FBUztnQkFFYixJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFZpZXdDaGlsZHJlbixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IE56VXBsb2FkRmlsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3VwbG9hZFwiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7IFVjRmlsZUNhcmRzQ3JvcEltYWdlTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9jcm9wSW1hZ2VNb2RhbC9jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgY29tcHJlc3NJbWFnZSB9IGZyb20gXCIuLi8uLi9mb3JtbHktY29uZmlnL3R5cGVzL2F2YXRhci9jcm9wSW1hZ2VNb2RhbC9tZXRob2RcIjtcclxuaW1wb3J0IHsgZmluZEZpbGVUeXBlT3B0aW9uIH0gZnJvbSBcIi4vbWV0aG9kXCI7XHJcbmltcG9ydCB7IGZpbGVTdmdTcmMsIEZMSUVUWVBFIH0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgeyBtb2RlbCwgdXBsb2FkRmlsZVR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XHJcbmltcG9ydCB7IGNhbGNOZXdTZXFWYWx1ZSB9IGZyb20gXCIuL21ldGhvZFwiO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tIFwiZmlsZS1zYXZlclwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEFwcEluamVjdG9yLCBBcHBsaWNhdGlvbiwgTW9kYWxVdGlscyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZJTEVfVVJMIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvaW5qZWN0LnRva2VuXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInVjLWZpbGUtbGlzdFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVY0ZpbGVMaXN0Q29tcG9uZW50IHtcclxuICAgIGFwaVVybDogc3RyaW5nID0gQXBwSW5qZWN0b3IuZ2V0KEZJTEVfVVJMLCBcIlwiKTsgLy8gcm9vdCBGSUxFX1VSTCDmlofku7bkuIrkvKDlnLDlnYBcclxuICAgIEBJbnB1dCgpIHVwbG9hZEZpbGVUeXBlczogQXJyYXk8dXBsb2FkRmlsZVR5cGU+ID0gW107IC8v6K6+5a6a5YWB6K645LiK5Lyg5paH5Lu257G75Z6LXHJcbiAgICBASW5wdXQoKSBtb2RlOiBcImNhcmRcIiB8IFwibGlzdFwiID0gXCJjYXJkXCI7XHJcbiAgICBASW5wdXQoKSBjYXJkU2l6ZTogc3RyaW5nIHwgbnVtYmVyOyAvL2NhcmTlpKflsI8g6buY6K6kMjAwcHhcclxuICAgIEBJbnB1dCgpIG1hc3RlcklkOiBzdHJpbmcgfCBudW1iZXI7IC8v5paH5Lu26K+G5YiraWRcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7IC8v5aSa6YCJ5paH5Lu2XHJcbiAgICBASW5wdXQoKSBhbGxvd1VwbG9hZDogYm9vbGVhbiA9IHRydWU7IC8v5YWB6K645LiK5LygXHJcbiAgICBASW5wdXQoKSB0b29sYmFyVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7IC8v6KGo5aS05pON5L2c5Y+v6KeBXHJcbiAgICAvL+S8oOWFpeeahOaVsOaNrlxyXG4gICAgQElucHV0KCkgc2V0IGRhdGFMaXN0KGxpc3Q6IEFycmF5PG1vZGVsPikge1xyXG4gICAgICAgIGlmIChsaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUxpc3QgPSBsaXN0Lm1hcChtID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVNyYzogdGhpcy5hcGlVcmwgKyBtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VTcmM6IGZpbGVTdmdTcmNbbS50eXBlXSxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lQ29kZTogbS5saW5lQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogbS50eXBlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUxpc3QgPSBfLm9yZGVyQnkodGhpcy5maWxlTGlzdCwgXCJsaW5lQ29kZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlsZVR5cGVPcHRpb247IC8v5paH5Lu257G75Z6LIOmAiemhuSDljIXlkKsg5ZCO57yAIOexu+Wei+etiVxyXG4gICAgZmlsZUxpc3Q6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGltYWdlR3JvdXBzOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbihcIm56SW1hZ2VcIikgbnpJbWFnZXMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gICAgQE91dHB1dCgpIG9uT2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIGJlZm9yZVVwbG9hZCA9IGFzeW5jIChmaWxlOiBOelVwbG9hZEZpbGUsIHVwbG9hZEZpbGVMaXN0OiBOelVwbG9hZEZpbGVbXSkgPT4ge1xyXG4gICAgICAgIC8vIOS4pOenjeeKtuaAgSDkuIrkvKDmlofku7bmlbDph49cclxuICAgICAgICAvLyDkuIDkuKog5Yik5pat5b2T5YmN5paH5Lu257G75Z6L5LiO5YWB6K645LiK5Lyg55qE5paH5Lu257G75Z6L5piv5ZCm5LiA6Ie0IOWQjuWNleeslOS4iuS8oCDlm77niYfnsbvlnosg5omT5byA57yW6L6R5qGGXHJcbiAgICAgICAgLy8g5aSa5LiqIOi/h+a7pOaOieaWh+S7tuexu+Wei+S4juWFgeiuuOS4iuS8oOeahOaWh+S7tuexu+Wei+S4jeS4gOiHtOeahOaWh+S7tiDlpJrnrJTmlofku7bkuIrkvKBcclxuXHJcbiAgICAgICAgaWYgKHVwbG9hZEZpbGVMaXN0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgaWYgKGZpbGUgPT09IHVwbG9hZEZpbGVMaXN0LmF0KC0xKSkge1xyXG4gICAgICAgICAgICAgICAgLy/mnIDlkI7kuIDkuKrmlofku7bml7bmiafooYzmiYDmnInnmoTmlofku7bkuIrkvKAg5Zu+54mH6Ieq5Yqo5Y6L57ypMjAwa2Lku6XlhoVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGVBcmF5eTogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB1cGxvYWRGaWxlTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IHVwbG9hZEZpbGVMaXN0W2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlVHlwZU9wdGlvbiA9IGZpbmRGaWxlVHlwZU9wdGlvbihlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudXBsb2FkRmlsZVR5cGVzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudXBsb2FkRmlsZVR5cGVzLnNvbWUoaXRlbSA9PiBpdGVtID09IGZpbGVUeXBlT3B0aW9uLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVUeXBlT3B0aW9uLnR5cGUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGF3YWl0IGNvbXByZXNzSW1hZ2UoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbyA9IHRoaXMudXBsb2FkRmlsZXMoZSwgZmlsZVR5cGVPcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlQXJheXkucHVzaChvKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3JrSm9pbihvYnNlcnZhYmxlQXJheXkpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8g6I635Y+W5paH5Lu25a+56LGhXHJcbiAgICAgICAgICAgIGNvbnN0IF9maWxlID0gKGZpbGUub3JpZ2luRmlsZU9iaiB8fCBmaWxlKSBhcyBGaWxlO1xyXG4gICAgICAgICAgICAvLyAvL+aJvuWIsOS4iuS8oOaWh+S7tuaYr+WTquS4quexu+Wei+eahFxyXG4gICAgICAgICAgICBjb25zdCBmaWxlVHlwZU9wdGlvbiA9IGZpbmRGaWxlVHlwZU9wdGlvbihmaWxlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy51cGxvYWRGaWxlVHlwZXMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMudXBsb2FkRmlsZVR5cGVzLnNvbWUoaXRlbSA9PiBpdGVtID09IGZpbGVUeXBlT3B0aW9uLnR5cGUpXHJcbiAgICAgICAgICAgICAgICA6IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVUeXBlT3B0aW9uLnR5cGUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5a6a5LmJ5paH5Lu26K+75Y+W5a6M5oiQ5ZCO55qE5Zue6LCD5Ye95pWwXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWRpdEltYWdlTW9kYWwoeyBmaWxlU3JjOiBlLnRhcmdldC5yZXN1bHQgfSwgXCJERUZBVUxUXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWQr+WKqOaWh+S7tuivu+WPlui/h+eoi1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKF9maWxlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlcyhmaWxlLCBmaWxlVHlwZU9wdGlvbikuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBBcHA6IEFwcGxpY2F0aW9uLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIG1vZGFsVXRpbHM6IE1vZGFsVXRpbHNcclxuICAgICkge31cclxuXHJcbiAgICBvblVwbG9hZENhbmNlbENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMub3BlbkVkaXRJbWFnZU1vZGFsKG51bGwsIFwiREVGQVVMVFwiKTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBkb1N0aChldmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiRURJVFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRWRpdEltYWdlTW9kYWwoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIkRFTEVURVwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJET1dOTE9BRFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RmlsZShldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiRFJPUFBFRFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRmlsZShldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVGaWxlKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLkFwcC5odHRwQ2xpZW50LmRlbGV0ZShpdGVtLmZpbGVTcmMpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMub25Pay5lbWl0KHtcclxuICAgICAgICAgICAgY29kZTogXCJERUxFVEVcIixcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0ZpbGUoaXRlbSkge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJpbWFnZVwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW1hZ2VCb2FyZChpdGVtLmZpbGVTcmMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwZGZcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQoaXRlbS5maWxlU3JjLCB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgfSkuc3Vic2NyaWJlKGJsb2IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBkZiA9IG5ldyBCbG9iKFtibG9iXSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3BkZjtjaGFydHNldD11VEYtOFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHBkZik7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAvL+mHiuaUvuWGheWtmO+8iOehruS/neeql+WPo+W3suaJk+W8gOWQjuaJp+ihjO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoaXRlbS5maWxlU3JjLCBpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpdGVtXHJcbiAgICAgKiBAcGFyYW0gbW9kYWxUeXBlICBERUZBVUxUIOaZrumAmuexu+WeiyDkuI3luKbmnInliKDpmaQg55So5LqO5LiK5Lyg5paH5Lu25ZCOIOaJk+W8gOe8lui+keaooeW8jyAsIElNQUdFIOW4puacieWIoOmZpOWKn+iDvSDnlKjkuo7lm77niYfnvJbovpFcclxuICAgICAqL1xyXG4gICAgb3BlbkVkaXRJbWFnZU1vZGFsKGl0ZW0sIG1vZGFsVHlwZT8pIHtcclxuICAgICAgICBsZXQgZmxpZVNyYyA9IGl0ZW0/LmZpbGVTcmMgfHwgbnVsbDtcclxuICAgICAgICBpZiAoZmxpZVNyYykge1xyXG4gICAgICAgICAgICBpZiAoIW1vZGFsVHlwZSkgZmxpZVNyYyA9IGAke2l0ZW0uZmlsZVNyY30/dGltZXN0YW1wPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kYWxVdGlscy5vcGVuTW9kYWwoe1xyXG4gICAgICAgICAgICBjb250ZW50OiBVY0ZpbGVDYXJkc0Nyb3BJbWFnZU1vZGFsQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VTcmM6IGZsaWVTcmMsXHJcbiAgICAgICAgICAgICAgICBtb2RhbFR5cGU6IG1vZGFsVHlwZSxcclxuICAgICAgICAgICAgICAgIG9uT2s6IGV2ZW50ID0+IHRoaXMuY3JvcEltYWdlTW9kYWxPbk9rKGV2ZW50LCBpdGVtKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aJk+W8gG56aW1hZ2XnnIvmnb9cclxuICAgIG9wZW5JbWFnZUJvYXJkKHNyYykge1xyXG4gICAgICAgIHRoaXMuaW1hZ2VHcm91cHMgPSB0aGlzLmZpbGVMaXN0LmZpbHRlcihmID0+IGYudHlwZSA9PT0gXCJpbWFnZVwiKTtcclxuICAgICAgICBzZXRUaW1lb3V0KHQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZXMgPSB0aGlzLm56SW1hZ2VzLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGltYWdlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBpbWFnZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHgubmF0aXZlRWxlbWVudC5zcmMgPT0gc3JjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOijgeWJquWvueivneahhiDlm77niYfnvJbovpEg5LiK5LygIOWIoOmZpOWKn+iDvVxyXG4gICAgICogQHBhcmFtIGV2ZW50IOWvueivneahhui/lOWbnuWPguaVsFxyXG4gICAgICogQHBhcmFtIGl0ZW0g5b2T5YmN6YCJ6aG555qE5Y6f5Z6LXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyb3BJbWFnZU1vZGFsT25PayhldmVudCwgaXRlbT8pIHtcclxuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gXCJERUxFVEVcIikge1xyXG4gICAgICAgICAgICB0aGlzLkFwcC5odHRwQ2xpZW50LmRlbGV0ZShpdGVtLmZpbGVTcmMpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uT2suZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVUeXBlT3B0aW9uID0gRkxJRVRZUEUuZmluZChmID0+IGYudHlwZSA9PT0gXCJpbWFnZVwiKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gaXRlbT8ubmFtZSB8fCBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzKGV2ZW50LmZpbGUsIGZpbGVUeXBlT3B0aW9uLCBmaWxlTmFtZSkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5maWxlU3JjID0gYCR7aXRlbS5maWxlU3JjfT90aW1lc3RhbXA9JHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICrkuIrkvKDmlrnms5VcclxuICAgICAqIEBwYXJhbSBmaWxlIOS4iuS8oOaJgOmcgOimgeeahOaWh+S7tlxyXG4gICAgICogQHBhcmFtIGZpbGVOYW1lIOaWh+S7tuWQjVxyXG4gICAgICovXHJcbiAgICB1cGxvYWRGaWxlcyhmaWxlLCBmaWxlVHlwZU9wdGlvbiwgZmlsZU5hbWU/KSB7XHJcbiAgICAgICAgbGV0IGlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IHRoaXMubWFzdGVySWQgKyBmaWxlVHlwZU9wdGlvbi50eXBlICsgRGF0ZS5ub3coKSArIGZpbGVUeXBlT3B0aW9uLnN1ZmZpeDtcclxuICAgICAgICAgICAgaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdGaWxlID0gZmlsZTtcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgbmV3RmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFwcC5odHRwQ2xpZW50LnBvc3QodGhpcy5hcGlVcmwsIGZvcm1EYXRhKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT2suZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiVVBMT0FEXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUNvZGU6IHRoaXMuZmlsZUxpc3QubGVuZ3RoICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZVR5cGVPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRvd25sb2FkRmlsZSh1cmw6IHN0cmluZywgbmFtZSkge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgfSkuc3Vic2NyaWJlKGJsb2IgPT4ge1xyXG4gICAgICAgICAgICBzYXZlQXMoYmxvYiwgbmFtZSk7IC8vIOS9oOWPr+S7peaMh+WumuS7u+S9leS9oOaDs+imgeeahOaWh+S7tuWQjVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRyb3BGaWxlKGN1cnJlbnRJbmRleCkge1xyXG4gICAgICAgIGxldCBsaW5lQ29kZSA9IGNhbGNOZXdTZXFWYWx1ZShjdXJyZW50SW5kZXgsIHRoaXMuZmlsZUxpc3QsIFwibGluZUNvZGVcIik7XHJcbiAgICAgICAgdGhpcy5maWxlTGlzdFtjdXJyZW50SW5kZXhdLmxpbmVDb2RlID0gbGluZUNvZGU7XHJcbiAgICAgICAgdGhpcy5vbk9rLmVtaXQoe1xyXG4gICAgICAgICAgICBjb2RlOiBcIlVQREFURVwiLFxyXG4gICAgICAgICAgICBpZDogdGhpcy5maWxlTGlzdFtjdXJyZW50SW5kZXhdLmlkLFxyXG4gICAgICAgICAgICB1cGRhdGVEYXRhOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiBcImxpbmVDb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYodG9vbGJhclZpc2libGUpe1xyXG48dWMtZmlsZS10b29sYmFyXHJcbiAgICBbKG1vZGUpXT1cIm1vZGVcIlxyXG4gICAgW2JlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgW2FsbG93VXBsb2FkXT1cImFsbG93VXBsb2FkXCJcclxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAob25VcGxvYWRDYW5jZWxDbGljayk9XCJvblVwbG9hZENhbmNlbENsaWNrKClcIlxyXG4vPlxyXG5cclxufSBAaWYobW9kZSA9PT0gJ2NhcmQnKXtcclxuPHVjLWZpbGUtY2FyZC1saXN0XHJcbiAgICBbZGF0YUxpc3RdPVwiZmlsZUxpc3RcIlxyXG4gICAgW2JlZm9yZVVwbG9hZF09XCJiZWZvcmVVcGxvYWRcIlxyXG4gICAgW2FsbG93VXBsb2FkXT1cImFsbG93VXBsb2FkXCJcclxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAob25VcGxvYWRDYW5jZWxDbGljayk9XCJvblVwbG9hZENhbmNlbENsaWNrKClcIlxyXG4gICAgKG9uQ3JhZENsaWNrKT1cImRvU3RoKCRldmVudClcIlxyXG4vPlxyXG59QGVsc2V7XHJcbjx1Yy1maWxlLXRhYmxlLWxpc3RcclxuICAgIFtkYXRhTGlzdF09XCJmaWxlTGlzdFwiXHJcbiAgICBbYmVmb3JlVXBsb2FkXT1cImJlZm9yZVVwbG9hZFwiXHJcbiAgICBbYWxsb3dVcGxvYWRdPVwidG9vbGJhclZpc2libGU/ZmFsc2U6IGFsbG93VXBsb2FkIFwiXHJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgKG9uVGFibGVSb3dDbGljayk9XCJkb1N0aCgkZXZlbnQpXCJcclxuICAgIChvblVwbG9hZENhbmNlbENsaWNrKT1cIm9uVXBsb2FkQ2FuY2VsQ2xpY2soKVwiXHJcbi8+XHJcblxyXG59IEBpZihpbWFnZUdyb3Vwcy5sZW5ndGgpe1xyXG48bnotaW1hZ2UtZ3JvdXAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgY2xhc3M9XCJuekltYWdlXCI+XHJcbiAgICBAZm9yIChpdGVtIG9mIGltYWdlR3JvdXBzOyB0cmFjayBpdGVtKSB7XHJcbiAgICA8aW1nIG56LWltYWdlICNuekltYWdlIFtuelNyY109XCJpdGVtLmZpbGVTcmNcIiAoY2xvc2UpPVwiaW1hZ2VHcm91cHM9W11cIiAvPlxyXG4gICAgfVxyXG48L256LWltYWdlLWdyb3VwPlxyXG59XHJcbiJdfQ==
|