atr-components 2.2.4 → 3.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.
- package/README.md +24 -24
- package/fesm2022/atr-components.mjs +191 -576
- package/fesm2022/atr-components.mjs.map +1 -1
- package/index.d.ts +1371 -5
- package/package.json +2 -4
- package/atr-components.module.d.ts +0 -9
- package/atr-public-api.d.ts +0 -53
- package/core/animations/animations.d.ts +0 -1
- package/core/animations/fly-in.d.ts +0 -1
- package/core/animations/scroll-screen.d.ts +0 -1
- package/core/auth/auth.guard.d.ts +0 -11
- package/core/base/atr-common.d.ts +0 -362
- package/core/directive/Infinite-scroll.directive.d.ts +0 -12
- package/core/directive/debounce-click.directive.d.ts +0 -14
- package/core/directive/error-img.directive.d.ts +0 -10
- package/core/directive/hq-spin.directive.d.ts +0 -13
- package/core/directive/role.directive.d.ts +0 -16
- package/core/interceptor/base.interceptor.d.ts +0 -17
- package/core/ngz-module/cus-zorro-antd.module.d.ts +0 -75
- package/core/pipe/china-num.pipe.d.ts +0 -7
- package/core/pipe/count.pipe.d.ts +0 -7
- package/core/pipe/day.pipe.d.ts +0 -8
- package/core/pipe/defaultVal.pipe.d.ts +0 -7
- package/core/pipe/dicts.pipe.d.ts +0 -10
- package/core/pipe/image-pipe.pipe.d.ts +0 -8
- package/core/pipe/is-empty.pipe.d.ts +0 -7
- package/core/pipe/is-not-empty.pipe.d.ts +0 -7
- package/core/pipe/oss.pipe.d.ts +0 -7
- package/core/pipe/ossStatic.pipe.d.ts +0 -7
- package/core/pipe/pipe-module.module.d.ts +0 -21
- package/core/pipe/remove-html.pipe.d.ts +0 -10
- package/core/pipe/safe-compute.pipe.d.ts +0 -7
- package/core/pipe/safe-html.pipe.d.ts +0 -10
- package/core/pipe/safe-url.pipe.d.ts +0 -10
- package/core/routereuse/atr-reuse-strategy.d.ts +0 -19
- package/core/services/dict/dict.service.d.ts +0 -20
- package/core/services/http.service.d.ts +0 -31
- package/core/services/menu.service.d.ts +0 -30
- package/core/services/upload-oss.service.d.ts +0 -14
- package/core/utils/ToolsUtil.d.ts +0 -180
- package/core/utils/localstorage.util.d.ts +0 -15
- package/core/utils/sessionstorage.util.d.ts +0 -15
- package/esm2022/atr-components.mjs +0 -5
- package/esm2022/atr-components.module.mjs +0 -36
- package/esm2022/atr-public-api.mjs +0 -55
- package/esm2022/core/animations/animations.mjs +0 -10
- package/esm2022/core/animations/fly-in.mjs +0 -19
- package/esm2022/core/animations/scroll-screen.mjs +0 -23
- package/esm2022/core/auth/auth.guard.mjs +0 -37
- package/esm2022/core/base/atr-common.mjs +0 -48
- package/esm2022/core/directive/Infinite-scroll.directive.mjs +0 -36
- package/esm2022/core/directive/debounce-click.directive.mjs +0 -41
- package/esm2022/core/directive/error-img.directive.mjs +0 -31
- package/esm2022/core/directive/hq-spin.directive.mjs +0 -48
- package/esm2022/core/directive/role.directive.mjs +0 -69
- package/esm2022/core/interceptor/base.interceptor.mjs +0 -165
- package/esm2022/core/ngz-module/cus-zorro-antd.module.mjs +0 -292
- package/esm2022/core/pipe/china-num.pipe.mjs +0 -36
- package/esm2022/core/pipe/count.pipe.mjs +0 -34
- package/esm2022/core/pipe/day.pipe.mjs +0 -24
- package/esm2022/core/pipe/defaultVal.pipe.mjs +0 -23
- package/esm2022/core/pipe/dicts.pipe.mjs +0 -28
- package/esm2022/core/pipe/image-pipe.pipe.mjs +0 -17
- package/esm2022/core/pipe/is-empty.pipe.mjs +0 -20
- package/esm2022/core/pipe/is-not-empty.pipe.mjs +0 -17
- package/esm2022/core/pipe/oss.pipe.mjs +0 -17
- package/esm2022/core/pipe/ossStatic.pipe.mjs +0 -17
- package/esm2022/core/pipe/pipe-module.module.mjs +0 -78
- package/esm2022/core/pipe/remove-html.pipe.mjs +0 -21
- package/esm2022/core/pipe/safe-compute.pipe.mjs +0 -23
- package/esm2022/core/pipe/safe-html.pipe.mjs +0 -20
- package/esm2022/core/pipe/safe-url.pipe.mjs +0 -20
- package/esm2022/core/routereuse/atr-reuse-strategy.mjs +0 -79
- package/esm2022/core/services/dict/dict.service.mjs +0 -152
- package/esm2022/core/services/http.service.mjs +0 -316
- package/esm2022/core/services/menu.service.mjs +0 -130
- package/esm2022/core/services/upload-oss.service.mjs +0 -74
- package/esm2022/core/utils/ToolsUtil.mjs +0 -622
- package/esm2022/core/utils/localstorage.util.mjs +0 -94
- package/esm2022/core/utils/sessionstorage.util.mjs +0 -73
- package/esm2022/lib/shared/atr-shared.module.mjs +0 -248
- package/esm2022/lib/shared/echarts/echarts.component.mjs +0 -77
- package/esm2022/lib/shared/form/form.component.mjs +0 -624
- package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
- package/esm2022/lib/shared/local-upload/local-upload.component.mjs +0 -68
- package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +0 -254
- package/esm2022/lib/shared/select-icons/select-icons.component.mjs +0 -90
- package/esm2022/lib/shared/select-tree/select-tree.component.mjs +0 -55
- package/esm2022/lib/shared/service/busi.service.mjs +0 -69
- package/esm2022/lib/shared/share.service.mjs +0 -107
- package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
- package/esm2022/lib/shared/table/table-td/table-td.component.mjs +0 -165
- package/esm2022/lib/shared/table/table.component.mjs +0 -766
- package/esm2022/lib/shared/upload/upload.component.mjs +0 -273
- package/esm2022/lib/shared/validators/atr-validtors.mjs +0 -9
- package/esm2022/lib/shared/video/video.component.mjs +0 -16
- package/esm2022/lib/shared/view-form/view-form.component.mjs +0 -186
- package/lib/shared/atr-shared.module.d.ts +0 -39
- package/lib/shared/echarts/echarts.component.d.ts +0 -34
- package/lib/shared/form/form.component.d.ts +0 -49
- package/lib/shared/img-canvas/img-canvas.component.d.ts +0 -28
- package/lib/shared/local-upload/local-upload.component.d.ts +0 -22
- package/lib/shared/quill-editor/quill-editor.component.d.ts +0 -45
- package/lib/shared/select-icons/select-icons.component.d.ts +0 -24
- package/lib/shared/select-tree/select-tree.component.d.ts +0 -23
- package/lib/shared/service/busi.service.d.ts +0 -20
- package/lib/shared/share.service.d.ts +0 -14
- package/lib/shared/table/table-form-item/table-form-item.component.d.ts +0 -25
- package/lib/shared/table/table-td/table-td.component.d.ts +0 -26
- package/lib/shared/table/table.component.d.ts +0 -94
- package/lib/shared/upload/upload.component.d.ts +0 -53
- package/lib/shared/validators/atr-validtors.d.ts +0 -2
- package/lib/shared/video/video.component.d.ts +0 -7
- package/lib/shared/view-form/view-form.component.d.ts +0 -27
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ImgCanvasComponent {
|
|
4
|
-
set url(url) {
|
|
5
|
-
// if (url && url.indexOf('?v=') < 0) {
|
|
6
|
-
// if (url.indexOf("?") < 0) {
|
|
7
|
-
// url += "?";
|
|
8
|
-
//
|
|
9
|
-
// }
|
|
10
|
-
// url += "v=" + new Date().getTime()
|
|
11
|
-
// }
|
|
12
|
-
this.imgUrl = url;
|
|
13
|
-
}
|
|
14
|
-
constructor(elementRef) {
|
|
15
|
-
this.elementRef = elementRef;
|
|
16
|
-
this.needTime = false;
|
|
17
|
-
this.width = 800;
|
|
18
|
-
this.height = 800;
|
|
19
|
-
this.clipArr = [];
|
|
20
|
-
this.rotateNum = 0;
|
|
21
|
-
this.loadOver = new EventEmitter();
|
|
22
|
-
this.needContextmenu = false;
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
}
|
|
26
|
-
getCanvasFull() {
|
|
27
|
-
let imgW = this.img.width; //图片的宽
|
|
28
|
-
let imgH = this.img.height; //图片的高
|
|
29
|
-
let cW = this.width;
|
|
30
|
-
let cH = this.height;
|
|
31
|
-
let rateW = imgH / imgW; //比例
|
|
32
|
-
let rateH = imgW / imgH; //比例
|
|
33
|
-
if (imgW > imgH) {
|
|
34
|
-
imgW = this.width;
|
|
35
|
-
imgH = imgW * rateW;
|
|
36
|
-
if (imgH > cH) {
|
|
37
|
-
imgH = cH;
|
|
38
|
-
imgW = imgH * rateH;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
imgH = this.height;
|
|
43
|
-
imgW = imgH * rateH;
|
|
44
|
-
if (imgW > cW) {
|
|
45
|
-
imgW = cW;
|
|
46
|
-
imgH = imgW * rateW;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// imgH = this.canvasDom.offsetHeight
|
|
50
|
-
// imgW = this.canvasDom.offsetWidth
|
|
51
|
-
// let canvasH = imgH * rate
|
|
52
|
-
// if (canvasH > this.height) {
|
|
53
|
-
// canvasH = this.height
|
|
54
|
-
// rate = canvasH / imgH
|
|
55
|
-
// canvasW = imgW * rate
|
|
56
|
-
// }
|
|
57
|
-
console.log("图片宽高", imgW + ";" + imgH);
|
|
58
|
-
return {
|
|
59
|
-
imgW: imgW,
|
|
60
|
-
imgH: imgH
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
initImg(needSession = true) {
|
|
64
|
-
this.canvasDom = this.canvas1.nativeElement;
|
|
65
|
-
// this.canvasDom = document.getElementById(this.canvasId);
|
|
66
|
-
//检测支持性
|
|
67
|
-
if (!this.canvasDom.getContext('2d'))
|
|
68
|
-
return;
|
|
69
|
-
//获得 2d 上下文对象
|
|
70
|
-
let context1 = this.canvasDom.getContext('2d');
|
|
71
|
-
let img = new Image();
|
|
72
|
-
img.setAttribute('crossOrigin', 'anonymous');
|
|
73
|
-
if (this.needTime) {
|
|
74
|
-
if (this.imgUrl.indexOf("?") < 0) {
|
|
75
|
-
this.imgUrl += "?";
|
|
76
|
-
}
|
|
77
|
-
this.imgUrl += "v=" + new Date().getTime();
|
|
78
|
-
}
|
|
79
|
-
img.src = this.imgUrl;
|
|
80
|
-
img.onload = () => {
|
|
81
|
-
this.img = img;
|
|
82
|
-
const { imgW, imgH } = this.getCanvasFull();
|
|
83
|
-
this.canvasDom.width = this.width;
|
|
84
|
-
this.canvasDom.height = this.height;
|
|
85
|
-
if (this.clipArr && this.clipArr.length > 0) {
|
|
86
|
-
this.goClip(context1);
|
|
87
|
-
}
|
|
88
|
-
// 参数 1:要绘制的 img 参数 2、3:绘制的 img 在 canvas 中的坐标 参数4,5是width,height
|
|
89
|
-
context1.drawImage(this.img, 0, 0, this.width, this.height);
|
|
90
|
-
this.loadOver.emit({ code: 'loadOver' });
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
goClip(context) {
|
|
94
|
-
context.beginPath();
|
|
95
|
-
context.moveTo(this.clipArr[0].x1, this.clipArr[0].y1);
|
|
96
|
-
this.clipArr.forEach((item, index) => {
|
|
97
|
-
if (index > 0) {
|
|
98
|
-
context.lineTo(item.x1, item.y1);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
context.lineTo(this.clipArr[0].x1, this.clipArr[0].y1);
|
|
102
|
-
context.clip();
|
|
103
|
-
}
|
|
104
|
-
ngAfterViewInit() {
|
|
105
|
-
setTimeout(() => {
|
|
106
|
-
console.log('当前组件宽高', this.elementRef.nativeElement.offsetHeight);
|
|
107
|
-
this.initImg();
|
|
108
|
-
}, 300);
|
|
109
|
-
}
|
|
110
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImgCanvasComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
111
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImgCanvasComponent, selector: "app-img", inputs: { needTime: "needTime", url: "url", clipArr: "clipArr", rotateNum: "rotateNum", needContextmenu: "needContextmenu" }, outputs: { loadOver: "loadOver" }, viewQueries: [{ propertyName: "canvas1", first: true, predicate: ["canvas1"], descendants: true }], ngImport: i0, template: "<canvas #canvas1 style=\"width: 100%;height: 100%;\" oncontextmenu=\"return needContextmenu\">\n \u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u753B\u5E03\uFF01\n</canvas>\n<ng-content></ng-content>\n", styles: [""] }); }
|
|
112
|
-
}
|
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImgCanvasComponent, decorators: [{
|
|
114
|
-
type: Component,
|
|
115
|
-
args: [{ selector: 'app-img', template: "<canvas #canvas1 style=\"width: 100%;height: 100%;\" oncontextmenu=\"return needContextmenu\">\n \u60A8\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u753B\u5E03\uFF01\n</canvas>\n<ng-content></ng-content>\n" }]
|
|
116
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { needTime: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], url: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], canvas1: [{
|
|
121
|
-
type: ViewChild,
|
|
122
|
-
args: ['canvas1', { static: false }]
|
|
123
|
-
}], clipArr: [{
|
|
124
|
-
type: Input
|
|
125
|
-
}], rotateNum: [{
|
|
126
|
-
type: Input
|
|
127
|
-
}], loadOver: [{
|
|
128
|
-
type: Output
|
|
129
|
-
}], needContextmenu: [{
|
|
130
|
-
type: Input
|
|
131
|
-
}] } });
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLWNhbnZhcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2ltZy1jYW52YXMvaW1nLWNhbnZhcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2ltZy1jYW52YXMvaW1nLWNhbnZhcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBU25ILE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IsSUFBYSxHQUFHLENBQUMsR0FBVztRQUMxQix1Q0FBdUM7UUFDdkMsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixFQUFFO1FBQ0YsTUFBTTtRQUNOLHVDQUF1QztRQUN2QyxJQUFJO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQWFELFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF4QmpDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFlMUIsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFHSixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsS0FBSyxDQUFBO0lBR2hDLENBQUM7SUFFRCxRQUFRO0lBRVIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQSxDQUFBLE1BQU07UUFDL0IsSUFBSSxJQUFJLEdBQUcsSUFB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T0FBTyxFQUFFLENBQUE7UUFDaEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsQ0FBQzsrR0F2SFUsa0JBQWtCO21HQUFsQixrQkFBa0Isb1RDVC9CLDhNQUlBOzs0RkRLYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsU0FBUzsrRUFNVixRQUFRO3NCQUFoQixLQUFLO2dCQUVPLEdBQUc7c0JBQWYsS0FBSztnQkFXaUMsT0FBTztzQkFBN0MsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQU01QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNFLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlVXRpbH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdXRpbHMvc2Vzc2lvbnN0b3JhZ2UudXRpbFwiO1xuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW1nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltZy1jYW52YXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbWctY2FudmFzLmNvbXBvbmVudC5sZXNzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1nQ2FudmFzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBuZWVkVGltZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICAvLyBpZiAodXJsICYmIHVybC5pbmRleE9mKCc/dj0nKSA8IDApIHtcbiAgICAvLyAgIGlmICh1cmwuaW5kZXhPZihcIj9cIikgPCAwKSB7XG4gICAgLy8gICAgIHVybCArPSBcIj9cIjtcbiAgICAvL1xuICAgIC8vICAgfVxuICAgIC8vICAgdXJsICs9IFwidj1cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgLy8gfVxuICAgIHRoaXMuaW1nVXJsID0gdXJsO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzMScsIHtzdGF0aWM6IGZhbHNlfSkgY2FudmFzMTogYW55O1xuICBjYW52YXNEb206IGFueVxuICB3aWR0aCA9IDgwMDtcbiAgaGVpZ2h0ID0gODAwO1xuICBpbWdVcmw6IGFueTtcbiAgaW1nOiBhbnk7XG4gIEBJbnB1dCgpIGNsaXBBcnI6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHJvdGF0ZU51bTogYW55ID0gMDtcbiAgQE91dHB1dCgpIGxvYWRPdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbmVlZENvbnRleHRtZW51ID0gZmFsc2VcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBnZXRDYW52YXNGdWxsKCkge1xuICAgIGxldCBpbWdXID0gdGhpcy5pbWcud2lkdGgvL+WbvueJh+eahOWuvVxuICAgIGxldCBpbWdIID0gdGhpcy5pbWcuaGVpZ2h0Ly/lm77niYfnmoTpq5hcbiAgICBsZXQgY1cgPSB0aGlzLndpZHRoO1xuICAgIGxldCBjSCA9IHRoaXMuaGVpZ2h0O1xuICAgIGxldCByYXRlVyA9IGltZ0ggLyBpbWdXLy/mr5TkvotcbiAgICBsZXQgcmF0ZUggPSBpbWdXIC8gaW1nSC8v5q+U5L6LXG4gICAgaWYgKGltZ1cgPiBpbWdIKSB7XG4gICAgICBpbWdXID0gdGhpcy53aWR0aFxuICAgICAgaW1nSCA9IGltZ1cgKiByYXRlVztcbiAgICAgIGlmIChpbWdIID4gY0gpIHtcbiAgICAgICAgaW1nSCA9IGNIXG4gICAgICAgIGltZ1cgPSBpbWdIICogcmF0ZUhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW1nSCA9IHRoaXMuaGVpZ2h0XG4gICAgICBpbWdXID0gaW1nSCAqIHJhdGVIO1xuICAgICAgaWYgKGltZ1cgPiBjVykge1xuICAgICAgICBpbWdXID0gY1dcbiAgICAgICAgaW1nSCA9IGltZ1cgKiByYXRlV1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGltZ0ggPSB0aGlzLmNhbnZhc0RvbS5vZmZzZXRIZWlnaHRcbiAgICAvLyBpbWdXID0gdGhpcy5jYW52YXNEb20ub2Zmc2V0V2lkdGhcbiAgICAvLyBsZXQgY2FudmFzSCA9IGltZ0ggKiByYXRlXG4gICAgLy8gaWYgKGNhbnZhc0ggPiB0aGlzLmhlaWdodCkge1xuICAgIC8vICAgY2FudmFzSCA9IHRoaXMuaGVpZ2h0XG4gICAgLy8gICByYXRlID0gY2FudmFzSCAvIGltZ0hcbiAgICAvLyAgIGNhbnZhc1cgPSBpbWdXICogcmF0ZVxuICAgIC8vIH1cbiAgICBjb25zb2xlLmxvZyhcIuWbvueJh+WuvemrmFwiLCBpbWdXICsgXCI7XCIgKyBpbWdIKVxuICAgIHJldHVybiB7XG4gICAgICBpbWdXOiBpbWdXLFxuICAgICAgaW1nSDogaW1nSFxuICAgIH1cbiAgfVxuXG4gIGluaXRJbWcobmVlZFNlc3Npb24gPSB0cnVlKSB7XG4gICAgdGhpcy5jYW52YXNEb20gPSB0aGlzLmNhbnZhczEubmF0aXZlRWxlbWVudDtcbiAgICAvLyB0aGlzLmNhbnZhc0RvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY2FudmFzSWQpO1xuICAgIC8v5qOA5rWL5pSv5oyB5oCnXG4gICAgaWYgKCF0aGlzLmNhbnZhc0RvbS5nZXRDb250ZXh0KCcyZCcpKSByZXR1cm47XG4gICAgLy/ojrflvpcgMmQg5LiK5LiL5paH5a+56LGhXG4gICAgbGV0IGNvbnRleHQxID0gdGhpcy5jYW52YXNEb20uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBsZXQgaW1nID0gbmV3IEltYWdlKClcbiAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICdhbm9ueW1vdXMnKVxuICAgIGlmICh0aGlzLm5lZWRUaW1lKSB7XG4gICAgICBpZiAodGhpcy5pbWdVcmwuaW5kZXhPZihcIj9cIikgPCAwKSB7XG4gICAgICAgIHRoaXMuaW1nVXJsICs9IFwiP1wiO1xuICAgICAgfVxuICAgICAgdGhpcy5pbWdVcmwgKz0gXCJ2PVwiICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICB9XG4gICAgaW1nLnNyYyA9IHRoaXMuaW1nVXJsXG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuaW1nID0gaW1nXG4gICAgICBjb25zdCB7aW1nVywgaW1nSH0gPSB0aGlzLmdldENhbnZhc0Z1bGwoKTtcbiAgICAgIHRoaXMuY2FudmFzRG9tLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgIHRoaXMuY2FudmFzRG9tLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgaWYgKHRoaXMuY2xpcEFyciAmJiB0aGlzLmNsaXBBcnIubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdvQ2xpcChjb250ZXh0MSlcbiAgICAgIH1cbiAgICAgIC8vIOWPguaVsCAx77ya6KaB57uY5Yi255qEIGltZyAgIOWPguaVsCAy44CBM++8mue7mOWItueahCBpbWcg5ZyoIGNhbnZhcyDkuK3nmoTlnZDmoIcg5Y+C5pWwNCw15pivd2lkdGjvvIxoZWlnaHRcbiAgICAgIGNvbnRleHQxLmRyYXdJbWFnZSh0aGlzLmltZywgMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsKTtcbiAgICAgIHRoaXMubG9hZE92ZXIuZW1pdCh7Y29kZTogJ2xvYWRPdmVyJ30pXG4gICAgfVxuICB9XG5cblxuICBnb0NsaXAoY29udGV4dDogYW55KSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKVxuICAgIGNvbnRleHQubW92ZVRvKHRoaXMuY2xpcEFyclswXS54MSwgdGhpcy5jbGlwQXJyWzBdLnkxKTtcbiAgICB0aGlzLmNsaXBBcnIuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29udGV4dC5saW5lVG8oaXRlbS54MSwgaXRlbS55MSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnRleHQubGluZVRvKHRoaXMuY2xpcEFyclswXS54MSwgdGhpcy5jbGlwQXJyWzBdLnkxKTtcbiAgICBjb250ZXh0LmNsaXAoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCflvZPliY3nu4Tku7blrr3pq5gnLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpXG4gICAgICB0aGlzLmluaXRJbWcoKVxuICAgIH0sIDMwMClcbiAgfVxuXG59XG4iLCI8Y2FudmFzICNjYW52YXMxIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO1wiIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gbmVlZENvbnRleHRtZW51XCI+XG4gIOaCqOeahOa1j+iniOWZqOS4jeaUr+aMgeeUu+W4g++8gVxuPC9jYW52YXM+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { LocalStorageUtil } from "../../../core/utils/localstorage.util";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "ng-zorro-antd/button";
|
|
6
|
-
import * as i3 from "ng-zorro-antd/core/transition-patch";
|
|
7
|
-
import * as i4 from "ng-zorro-antd/core/wave";
|
|
8
|
-
import * as i5 from "ng-zorro-antd/icon";
|
|
9
|
-
import * as i6 from "ng-zorro-antd/upload";
|
|
10
|
-
import * as i7 from "../../../core/directive/role.directive";
|
|
11
|
-
export class LocalUploadComponent {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.nzAccept = 'application/vnd.ms-excel';
|
|
14
|
-
this.afterChange = new EventEmitter();
|
|
15
|
-
this.showList = false;
|
|
16
|
-
this.header = (file) => {
|
|
17
|
-
let obj = {
|
|
18
|
-
"x-header-atr": "web",
|
|
19
|
-
"token": LocalStorageUtil.getUserToken(),
|
|
20
|
-
// "orgCode" : ToolsUtil.getOrgCode()
|
|
21
|
-
};
|
|
22
|
-
return obj;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
ngOnInit() {
|
|
26
|
-
// this.header = this.getDefaultHeader(new HttpHeaders());
|
|
27
|
-
}
|
|
28
|
-
onChange(params) {
|
|
29
|
-
console.log(params);
|
|
30
|
-
if (params.type == "success" || params.type == "removed") {
|
|
31
|
-
let fileUrls = [];
|
|
32
|
-
for (let file of params.fileList) {
|
|
33
|
-
if (file["key"] != undefined) {
|
|
34
|
-
fileUrls.push(file["key"]);
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if (file.originFileObj) {
|
|
38
|
-
let originFileObj = file.originFileObj;
|
|
39
|
-
if (originFileObj["key"] != undefined) {
|
|
40
|
-
fileUrls.push(originFileObj["key"]);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
this.afterChange.emit(params);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocalUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
48
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LocalUploadComponent, selector: "atr-local-upload", inputs: { beforeUpload: "beforeUpload", url: "url", nzAccept: "nzAccept", name: "name", code: "code", withoutRole: "withoutRole" }, outputs: { afterChange: "afterChange" }, ngImport: i0, template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\"\r\n [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n nzListType=\"picture-card\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3.ɵ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: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i6.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: i7.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }] }); }
|
|
49
|
-
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocalUploadComponent, decorators: [{
|
|
51
|
-
type: Component,
|
|
52
|
-
args: [{ selector: 'atr-local-upload', template: "<ng-container *ngIf=\"!withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\"\r\n [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n nzListType=\"picture-card\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n *atrRole=\"code\" [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n<ng-container *ngIf=\"withoutRole\">\r\n <nz-upload [nzAction]=\"url\" [nzAccept]=\"nzAccept\" [nzHeaders]=\"header\" [nzShowUploadList]=\"showList\"\r\n [nzBeforeUpload]=\"beforeUpload\"\r\n (nzChange)=\"onChange($event)\"\r\n [nzLimit]='1'>\r\n <button nz-button nzSize=\"small\"><i nz-icon nzType=\"upload\"></i><span> {{name}}</span></button>\r\n </nz-upload>\r\n</ng-container>\r\n" }]
|
|
53
|
-
}], ctorParameters: () => [], propDecorators: { beforeUpload: [{
|
|
54
|
-
type: Input
|
|
55
|
-
}], url: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], nzAccept: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}], name: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}], code: [{
|
|
62
|
-
type: Input
|
|
63
|
-
}], withoutRole: [{
|
|
64
|
-
type: Input
|
|
65
|
-
}], afterChange: [{
|
|
66
|
-
type: Output
|
|
67
|
-
}] } });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvbG9jYWwtdXBsb2FkL2xvY2FsLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2xvY2FsLXVwbG9hZC9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxvQkFBb0I7SUFXL0I7UUFSUyxhQUFRLEdBQUcsMEJBQTBCLENBQUM7UUFLL0MsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRCxhQUFRLEdBQVEsS0FBSyxDQUFDO1FBTXRCLFdBQU0sR0FBSSxDQUFDLElBQWtCLEVBQUUsRUFBRTtZQUMvQixJQUFJLEdBQUcsR0FBRztnQkFDUixjQUFjLEVBQUMsS0FBSztnQkFDcEIsT0FBTyxFQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRTtnQkFDekMscUNBQXFDO2FBQ3RDLENBQUE7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztJQWJjLENBQUM7SUFFakIsUUFBUTtRQUNOLDBEQUEwRDtJQUM1RCxDQUFDO0lBVUQsUUFBUSxDQUFDLE1BQTJCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7b0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNCLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsYUFBYSxDQUFBO29CQUMzQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEVBQUU7d0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7cUJBQ3BDO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7K0dBNUNVLG9CQUFvQjttR0FBcEIsb0JBQW9CLHFPQ1RqQyx1NkJBa0JBOzs0RkRUYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO3dEQUtuQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVV0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL2xvY2Fsc3RvcmFnZS51dGlsXCI7XHJcbmltcG9ydCB7TnpVcGxvYWRDaGFuZ2VQYXJhbSwgTnpVcGxvYWRGaWxlfSBmcm9tICduZy16b3Jyby1hbnRkL3VwbG9hZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F0ci1sb2NhbC11cGxvYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2NhbC11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xvY2FsLXVwbG9hZC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbFVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgYmVmb3JlVXBsb2FkOiBhbnk7XHJcbiAgQElucHV0KCkgdXJsOmFueTtcclxuICBASW5wdXQoKSBuekFjY2VwdCA9ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnO1xyXG4gIEBJbnB1dCgpIG5hbWU6YW55O1xyXG4gIEBJbnB1dCgpIGNvZGU6YW55O1xyXG4gIEBJbnB1dCgpIHdpdGhvdXRSb2xlOmFueTtcclxuICBAT3V0cHV0KClcclxuICBhZnRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHNob3dMaXN0IDphbnkgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMuaGVhZGVyID0gdGhpcy5nZXREZWZhdWx0SGVhZGVyKG5ldyBIdHRwSGVhZGVycygpKTtcclxuICB9XHJcbiAgaGVhZGVyICA9IChmaWxlOiBOelVwbG9hZEZpbGUpID0+IHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwieC1oZWFkZXItYXRyXCI6XCJ3ZWJcIixcclxuICAgICAgXCJ0b2tlblwiIDogTG9jYWxTdG9yYWdlVXRpbC5nZXRVc2VyVG9rZW4oKSxcclxuICAgICAgLy8gXCJvcmdDb2RlXCIgOiBUb29sc1V0aWwuZ2V0T3JnQ29kZSgpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9O1xyXG4gIG9uQ2hhbmdlKHBhcmFtczogTnpVcGxvYWRDaGFuZ2VQYXJhbSkge1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKTtcclxuICAgIGlmIChwYXJhbXMudHlwZSA9PSBcInN1Y2Nlc3NcIiB8fCBwYXJhbXMudHlwZSA9PSBcInJlbW92ZWRcIikge1xyXG4gICAgICBsZXQgZmlsZVVybHM6IGFueVtdID0gW107XHJcbiAgICAgIGZvciAobGV0IGZpbGUgb2YgcGFyYW1zLmZpbGVMaXN0KSB7XHJcbiAgICAgICAgaWYgKGZpbGVbXCJrZXlcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmaWxlVXJscy5wdXNoKGZpbGVbXCJrZXlcIl0pO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxlLm9yaWdpbkZpbGVPYmopIHtcclxuICAgICAgICAgIGxldCBvcmlnaW5GaWxlT2JqOiBhbnkgPSBmaWxlLm9yaWdpbkZpbGVPYmpcclxuICAgICAgICAgIGlmIChvcmlnaW5GaWxlT2JqW1wia2V5XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmaWxlVXJscy5wdXNoKG9yaWdpbkZpbGVPYmpbXCJrZXlcIl0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmFmdGVyQ2hhbmdlLmVtaXQocGFyYW1zKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gZ2V0RGVmYXVsdEhlYWRlcihfaGVhZGVyczpIdHRwSGVhZGVycyk6SHR0cEhlYWRlcnN7XHJcbiAgLy8gICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIngtaGVhZGVyLWF0clwiLFwibWFuYWdlXCIpO1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ0b2tlblwiLExvY2FsU3RvcmFnZVV0aWwuZ2V0VXNlclRva2VuKCkpO1xyXG4gIC8vICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJ1c2VySWRcIixMb2NhbFN0b3JhZ2VVdGlsLmdldFVzZXJJZCgpKTtcclxuICAvLyAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwib3JnQ29kZVwiLFRvb2xzVXRpbC5nZXRPcmdDb2RlKCkpO1xyXG4gIC8vICAgcmV0dXJuIF9oZWFkZXJzO1xyXG4gIC8vIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIXdpdGhvdXRSb2xlXCI+XHJcbiAgPG56LXVwbG9hZCBbbnpBY3Rpb25dPVwidXJsXCIgW256QWNjZXB0XT1cIm56QWNjZXB0XCJcclxuICAgICAgICAgICAgIFtuekhlYWRlcnNdPVwiaGVhZGVyXCIgW256U2hvd1VwbG9hZExpc3RdPVwic2hvd0xpc3RcIlxyXG4gICAgICAgICAgICAgbnpMaXN0VHlwZT1cInBpY3R1cmUtY2FyZFwiXHJcbiAgICAgICAgICAgICBbbnpCZWZvcmVVcGxvYWRdPVwiYmVmb3JlVXBsb2FkXCJcclxuICAgICAgICAgICAgIChuekNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICphdHJSb2xlPVwiY29kZVwiIFtuekxpbWl0XT0nMSc+XHJcbiAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiPjxpIG56LWljb24gbnpUeXBlPVwidXBsb2FkXCI+PC9pPjxzcGFuPiB7e25hbWV9fTwvc3Bhbj48L2J1dHRvbj5cclxuICA8L256LXVwbG9hZD5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ3aXRob3V0Um9sZVwiPlxyXG4gIDxuei11cGxvYWQgW256QWN0aW9uXT1cInVybFwiIFtuekFjY2VwdF09XCJuekFjY2VwdFwiIFtuekhlYWRlcnNdPVwiaGVhZGVyXCIgW256U2hvd1VwbG9hZExpc3RdPVwic2hvd0xpc3RcIlxyXG4gICAgICAgICAgICAgW256QmVmb3JlVXBsb2FkXT1cImJlZm9yZVVwbG9hZFwiXHJcbiAgICAgICAgICAgICAobnpDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBbbnpMaW1pdF09JzEnPlxyXG4gICAgPGJ1dHRvbiBuei1idXR0b24gbnpTaXplPVwic21hbGxcIj48aSBuei1pY29uIG56VHlwZT1cInVwbG9hZFwiPjwvaT48c3Bhbj4ge3tuYW1lfX08L3NwYW4+PC9idXR0b24+XHJcbiAgPC9uei11cGxvYWQ+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { Component, Input, forwardRef } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { debounceTime } from 'rxjs/operators';
|
|
4
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
|
-
import { UploadOssService } from "../../../core/services/upload-oss.service";
|
|
6
|
-
import { ToolsUtil } from "../../../core/utils/ToolsUtil";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../../core/services/upload-oss.service";
|
|
9
|
-
import * as i2 from "ng-zorro-antd/message";
|
|
10
|
-
import * as i3 from "@angular/common";
|
|
11
|
-
import * as i4 from "@angular/forms";
|
|
12
|
-
import * as i5 from "ng-zorro-antd/core/transition-patch";
|
|
13
|
-
import * as i6 from "ng-zorro-antd/icon";
|
|
14
|
-
import * as i7 from "ng-zorro-antd/modal";
|
|
15
|
-
import * as i8 from "ngx-quill";
|
|
16
|
-
// const icons:any = Quill.import('ui/icons');
|
|
17
|
-
// icons.undo = `<svg viewbox="0 0 18 18">
|
|
18
|
-
// <polygon class="ql-fill ql-stroke" points="6 10 4 12 2 10 6 10"></polygon>
|
|
19
|
-
// <path class="ql-stroke" d="M8.09,13.91A4.6,4.6,0,0,0,9,14,5,5,0,1,0,4,9"></path>
|
|
20
|
-
// </svg>`;
|
|
21
|
-
// icons.redo = `<svg viewbox="0 0 18 18">
|
|
22
|
-
// <polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon>
|
|
23
|
-
// <path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path>
|
|
24
|
-
// </svg>`;
|
|
25
|
-
export class QuillEditorComponent {
|
|
26
|
-
constructor(uploadOssService, message) {
|
|
27
|
-
this.uploadOssService = uploadOssService;
|
|
28
|
-
this.message = message;
|
|
29
|
-
this.placeholder = '请输入';
|
|
30
|
-
this.styles = { height: '350px' };
|
|
31
|
-
this.readOnly = false;
|
|
32
|
-
this.needImgSeq = false;
|
|
33
|
-
this.imgUrls = [];
|
|
34
|
-
this.editor$ = new Subject();
|
|
35
|
-
this.imgVis = false;
|
|
36
|
-
// const icons: any = Quill.import('ui/icons');
|
|
37
|
-
// icons["undo"] = `<svg viewbox="0 0 18 18">
|
|
38
|
-
// <polygon class="ql-fill ql-stroke" points="6 10 4 12 2 10 6 10"></polygon>
|
|
39
|
-
// <path class="ql-stroke" d="M8.09,13.91A4.6,4.6,0,0,0,9,14,5,5,0,1,0,4,9"></path>
|
|
40
|
-
// </svg>`;
|
|
41
|
-
// icons["redo"] = `<svg viewbox="0 0 18 18">
|
|
42
|
-
// <polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon>
|
|
43
|
-
// <path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path>
|
|
44
|
-
// </svg>`;
|
|
45
|
-
}
|
|
46
|
-
ngOnInit() {
|
|
47
|
-
this.editor$.pipe(debounceTime(700)).subscribe((editorContent) => {
|
|
48
|
-
if (typeof (this.onChangeListener) === 'function' && typeof (this.onTouchedListener)) {
|
|
49
|
-
this.onChangeListener(editorContent); // 告诉form,你的表单值改变成了payload
|
|
50
|
-
this.onTouchedListener(); // 告诉form,你的表单有交互发生
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
writeValue(value) {
|
|
55
|
-
this.value = value;
|
|
56
|
-
}
|
|
57
|
-
registerOnChange(fn) {
|
|
58
|
-
this.onChangeListener = fn;
|
|
59
|
-
}
|
|
60
|
-
registerOnTouched(fn) {
|
|
61
|
-
this.onTouchedListener = fn;
|
|
62
|
-
}
|
|
63
|
-
setDisabledState(isDisabled) {
|
|
64
|
-
}
|
|
65
|
-
onChange(quill) {
|
|
66
|
-
this.editor$.next(quill.html);
|
|
67
|
-
}
|
|
68
|
-
EditorCreated(quill) {
|
|
69
|
-
const toolbar = quill.getModule('toolbar');
|
|
70
|
-
toolbar.addHandler('image', this.imageHandler.bind(this));
|
|
71
|
-
this.editor = quill;
|
|
72
|
-
let that = this;
|
|
73
|
-
quill.on('text-change', function (delta, oldDelta, source) {
|
|
74
|
-
if (source == 'api') {
|
|
75
|
-
}
|
|
76
|
-
else if (source == 'user') {
|
|
77
|
-
console.log('user');
|
|
78
|
-
that.uploadImgs([], 0);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
getBlobByBase64(url, oldUrl) {
|
|
83
|
-
const c = document.createElement('canvas');
|
|
84
|
-
console.log(c);
|
|
85
|
-
const ctx = c.getContext('2d');
|
|
86
|
-
ctx.stroke();
|
|
87
|
-
let blob = ToolsUtil.dataURItoBlob(url);
|
|
88
|
-
blob.name = '.png';
|
|
89
|
-
let delta = this.editor.getContents();
|
|
90
|
-
console.log('delta', delta);
|
|
91
|
-
for (let i = 0; i < delta.ops.length; i++) {
|
|
92
|
-
if (delta.ops[i].insert.image == oldUrl) {
|
|
93
|
-
return {
|
|
94
|
-
index: i,
|
|
95
|
-
blob: blob,
|
|
96
|
-
oldUrl: oldUrl
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
uploadImgs(blods, index) {
|
|
103
|
-
let details = this.editor.getContents();
|
|
104
|
-
let opt = details.ops[index];
|
|
105
|
-
if (opt && opt.insert && opt.insert.image) {
|
|
106
|
-
if (ToolsUtil.isBase64(opt.insert.image)) {
|
|
107
|
-
blods.push(this.getBlobByBase64(opt.insert.image, opt.insert.image));
|
|
108
|
-
this.isEndContents(blods, index);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
let c = document.createElement('canvas');
|
|
112
|
-
let ctx = c.getContext('2d');
|
|
113
|
-
let img = new Image();
|
|
114
|
-
img.src = opt.insert.image;
|
|
115
|
-
img.setAttribute('crossOrigin', '*');
|
|
116
|
-
let that = this;
|
|
117
|
-
img.onload = function () {
|
|
118
|
-
c.width = img.width;
|
|
119
|
-
c.height = img.height;
|
|
120
|
-
ctx.drawImage(img, 0, 0, img.width, img.height);
|
|
121
|
-
let url = c.toDataURL();
|
|
122
|
-
blods.push(that.getBlobByBase64(url, img.src));
|
|
123
|
-
that.isEndContents(blods, index);
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
this.isEndContents(blods, index);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
uploadImg(blods) {
|
|
132
|
-
if (!blods || blods.length <= 0) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
for (let i = 0; i < blods.length; i++) {
|
|
136
|
-
let blob = blods[i];
|
|
137
|
-
this.uploadOssService.uploadOss(blob).subscribe((url) => {
|
|
138
|
-
let delta = this.editor.getContents();
|
|
139
|
-
delta.filter((opt) => opt && opt.insert && opt.insert.image == blods[i].oldUrl).forEach((opt, index) => {
|
|
140
|
-
opt.insert.image = url;
|
|
141
|
-
});
|
|
142
|
-
this.editor.setContents(delta, 'api');
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
isEndContents(blods, index) {
|
|
147
|
-
let details = this.editor.getContents();
|
|
148
|
-
if (++index != details.ops.length) {
|
|
149
|
-
this.uploadImgs(blods, index);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
this.uploadImg(blods);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
imageHandler() {
|
|
156
|
-
const Imageinput = document.createElement('input');
|
|
157
|
-
Imageinput.setAttribute('type', 'file');
|
|
158
|
-
Imageinput.setAttribute('multiple', 'multiple');
|
|
159
|
-
Imageinput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp');
|
|
160
|
-
Imageinput.classList.add('ql-image');
|
|
161
|
-
Imageinput.addEventListener('change', () => {
|
|
162
|
-
if (this.needImgSeq) {
|
|
163
|
-
this.imgVis = true;
|
|
164
|
-
}
|
|
165
|
-
console.log(Imageinput);
|
|
166
|
-
let files = Imageinput.files;
|
|
167
|
-
if (files === null || files.length == 0) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
this.imgUrls = [];
|
|
171
|
-
for (let i = 0; i < files.length; i++) {
|
|
172
|
-
const file = files[i];
|
|
173
|
-
if (file === null) {
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
const error = (res) => {
|
|
177
|
-
this.message.warning('上传失败');
|
|
178
|
-
};
|
|
179
|
-
this.uploadOssService.uploadOss(file).subscribe((url) => {
|
|
180
|
-
console.log(file);
|
|
181
|
-
if (url) {
|
|
182
|
-
this.imgUrls.push({ url: url, file: file, index: i });
|
|
183
|
-
if (!this.needImgSeq) {
|
|
184
|
-
this.editor.insertEmbed(this.editor.getSelection(true).index, 'image', url);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
this.message.warning('上传失败');
|
|
189
|
-
}
|
|
190
|
-
if (this.needImgSeq && this.imgUrls.length == files.length) {
|
|
191
|
-
this.imgVis = true;
|
|
192
|
-
this.imgUrls.sort((a, b) => a.index - b.index);
|
|
193
|
-
document.getElementById("te")?.click();
|
|
194
|
-
}
|
|
195
|
-
}, error);
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
Imageinput.click();
|
|
199
|
-
}
|
|
200
|
-
saveSeq() {
|
|
201
|
-
console.log(123);
|
|
202
|
-
for (let i = this.imgUrls.length - 1; i >= 0; i--) {
|
|
203
|
-
this.editor.insertEmbed(this.editor.getSelection(true).index, 'image', this.imgUrls[i].url);
|
|
204
|
-
}
|
|
205
|
-
this.imgVis = false;
|
|
206
|
-
}
|
|
207
|
-
arrowUp(index) {
|
|
208
|
-
let img = this.imgUrls[index];
|
|
209
|
-
this.imgUrls[index] = this.imgUrls[index - 1];
|
|
210
|
-
this.imgUrls[index - 1] = img;
|
|
211
|
-
}
|
|
212
|
-
arrowDown(index) {
|
|
213
|
-
let img = this.imgUrls[index];
|
|
214
|
-
this.imgUrls[index] = this.imgUrls[index + 1];
|
|
215
|
-
this.imgUrls[index + 1] = img;
|
|
216
|
-
}
|
|
217
|
-
cancle() {
|
|
218
|
-
this.imgVis = false;
|
|
219
|
-
}
|
|
220
|
-
te() {
|
|
221
|
-
console.log('上传完毕');
|
|
222
|
-
}
|
|
223
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: QuillEditorComponent, deps: [{ token: i1.UploadOssService }, { token: i2.NzMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
224
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: QuillEditorComponent, selector: "app-quill-editor", inputs: { placeholder: "placeholder", styles: "styles", value: "value", readOnly: "readOnly", needImgSeq: "needImgSeq" }, providers: [
|
|
225
|
-
UploadOssService,
|
|
226
|
-
{
|
|
227
|
-
provide: NG_VALUE_ACCESSOR,
|
|
228
|
-
useExisting: forwardRef(() => QuillEditorComponent),
|
|
229
|
-
multi: true
|
|
230
|
-
}
|
|
231
|
-
], ngImport: i0, template: "<quill-editor\r\n [styles]=\"styles\"\r\n [placeholder]=\"placeholder\"\r\n (onEditorCreated)=\"EditorCreated($event)\"\r\n [(ngModel)]=\"value\"\r\n (onContentChanged)=\"onChange($event)\"\r\n [readOnly]=\"readOnly\"\r\n></quill-editor>\r\n<!--\u8FD9\u4E2Adiv,\u662F\u56E0\u4E3A\u4E0A\u4F20\u5B8C\u6BD5\u7126\u70B9\u8FD8\u5728\u5BCC\u6587\u672C\u91CC,\u5F39\u51FA\u65E0\u6CD5\u663E\u793A.....-->\r\n<div id=\"te\" (click)=\"te()\"></div>\r\n<nz-modal [(nzVisible)]=\"imgVis\" (nzOnOk)=\"saveSeq()\" (nzOnCancel)=\"cancle()\" nzMaskClosable=\"false\"\r\n [nzStyle]=\"{padding:0}\">\r\n <ng-container *nzModalContent>\r\n <div style=\"max-height:600px;overflow:auto;margin-top: 10px;\">\r\n <ng-container *ngTemplateOutlet=\"imgsContent\"></ng-container>\r\n </div>\r\n </ng-container>\r\n</nz-modal>\r\n<ng-template #imgsContent>\r\n <ng-container *ngFor=\"let imgOpt of imgUrls;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgOpt.url\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'5px' }\"/>\r\n <div style=\"margin-left: 20px; color: grey;\">{{imgOpt.file.name}}</div>\r\n <div style=\"margin-right: 20px; flex: 1;text-align: right;\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\">\r\n <i nz-icon nzType=\"arrow-up\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < imgUrls.length - 1\" (click)=\"arrowDown(i)\">\r\n <i nz-icon nzType=\"arrow-down\" nzTheme=\"outline\" 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-template>\r\n\r\n", styles: [":host{width:100%;height:100%;display:block}.img-div{border:1px solid #d9d9d9;border-radius:4px;margin-top:5px;display:flex;align-items:center;padding:0 5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.ɵ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: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i7.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "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: "directive", type: i7.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "component", type: i8.QuillEditorComponent, selector: "quill-editor" }] }); }
|
|
232
|
-
}
|
|
233
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: QuillEditorComponent, decorators: [{
|
|
234
|
-
type: Component,
|
|
235
|
-
args: [{ selector: 'app-quill-editor', providers: [
|
|
236
|
-
UploadOssService,
|
|
237
|
-
{
|
|
238
|
-
provide: NG_VALUE_ACCESSOR,
|
|
239
|
-
useExisting: forwardRef(() => QuillEditorComponent),
|
|
240
|
-
multi: true
|
|
241
|
-
}
|
|
242
|
-
], template: "<quill-editor\r\n [styles]=\"styles\"\r\n [placeholder]=\"placeholder\"\r\n (onEditorCreated)=\"EditorCreated($event)\"\r\n [(ngModel)]=\"value\"\r\n (onContentChanged)=\"onChange($event)\"\r\n [readOnly]=\"readOnly\"\r\n></quill-editor>\r\n<!--\u8FD9\u4E2Adiv,\u662F\u56E0\u4E3A\u4E0A\u4F20\u5B8C\u6BD5\u7126\u70B9\u8FD8\u5728\u5BCC\u6587\u672C\u91CC,\u5F39\u51FA\u65E0\u6CD5\u663E\u793A.....-->\r\n<div id=\"te\" (click)=\"te()\"></div>\r\n<nz-modal [(nzVisible)]=\"imgVis\" (nzOnOk)=\"saveSeq()\" (nzOnCancel)=\"cancle()\" nzMaskClosable=\"false\"\r\n [nzStyle]=\"{padding:0}\">\r\n <ng-container *nzModalContent>\r\n <div style=\"max-height:600px;overflow:auto;margin-top: 10px;\">\r\n <ng-container *ngTemplateOutlet=\"imgsContent\"></ng-container>\r\n </div>\r\n </ng-container>\r\n</nz-modal>\r\n<ng-template #imgsContent>\r\n <ng-container *ngFor=\"let imgOpt of imgUrls;let i = index\">\r\n <div class=\"img-div\">\r\n <img [src]=\"imgOpt.url\" [ngStyle]=\"{ width: '100px',display: 'inline-block', margin:'5px' }\"/>\r\n <div style=\"margin-left: 20px; color: grey;\">{{imgOpt.file.name}}</div>\r\n <div style=\"margin-right: 20px; flex: 1;text-align: right;\">\r\n <a title=\"\u4E0A\u79FB\" *ngIf=\" i > 0\" style=\"display: block;\" (click)=\"arrowUp(i)\">\r\n <i nz-icon nzType=\"arrow-up\" nzTheme=\"outline\" style=\"color: #1890ff; font-size: 15px;\"></i>\r\n \u4E0A\u79FB</a>\r\n <a title=\"\u4E0B\u79FB\" *ngIf=\" i < imgUrls.length - 1\" (click)=\"arrowDown(i)\">\r\n <i nz-icon nzType=\"arrow-down\" nzTheme=\"outline\" 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-template>\r\n\r\n", styles: [":host{width:100%;height:100%;display:block}.img-div{border:1px solid #d9d9d9;border-radius:4px;margin-top:5px;display:flex;align-items:center;padding:0 5px}\n"] }]
|
|
243
|
-
}], ctorParameters: () => [{ type: i1.UploadOssService }, { type: i2.NzMessageService }], propDecorators: { placeholder: [{
|
|
244
|
-
type: Input
|
|
245
|
-
}], styles: [{
|
|
246
|
-
type: Input
|
|
247
|
-
}], value: [{
|
|
248
|
-
type: Input
|
|
249
|
-
}], readOnly: [{
|
|
250
|
-
type: Input
|
|
251
|
-
}], needImgSeq: [{
|
|
252
|
-
type: Input
|
|
253
|
-
}] } });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcXVpbGwtZWRpdG9yL3F1aWxsLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3F1aWxsLWVkaXRvci9xdWlsbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7QUFDeEQsOENBQThDO0FBQzlDLDBDQUEwQztBQUMxQywrRUFBK0U7QUFDL0UscUZBQXFGO0FBQ3JGLFdBQVc7QUFDWCwwQ0FBMEM7QUFDMUMsbUZBQW1GO0FBQ25GLHFGQUFxRjtBQUNyRixXQUFXO0FBZVgsTUFBTSxPQUFPLG9CQUFvQjtJQWMvQixZQUFvQixnQkFBa0MsRUFBVSxPQUF5QjtRQUFyRSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFaaEYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsV0FBTSxHQUFRLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO1FBRWhDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFD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LGl2REFtQ0E7OzRGRExhLG9CQUFvQjtrQkFiaEMsU0FBUzsrQkFDRSxrQkFBa0IsYUFHakI7d0JBQ1QsZ0JBQWdCO3dCQUNoQjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0hBSVEsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0LCBmb3J3YXJkUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOek1lc3NhZ2VTZXJ2aWNlfSBmcm9tICduZy16b3Jyby1hbnRkL21lc3NhZ2UnO1xyXG5pbXBvcnQge1VwbG9hZE9zc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3VwbG9hZC1vc3Muc2VydmljZVwiO1xyXG5pbXBvcnQge1Rvb2xzVXRpbH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdXRpbHMvVG9vbHNVdGlsXCI7XHJcbi8vIGNvbnN0IGljb25zOmFueSA9IFF1aWxsLmltcG9ydCgndWkvaWNvbnMnKTtcclxuLy8gaWNvbnMudW5kbyA9IGA8c3ZnIHZpZXdib3g9XCIwIDAgMTggMThcIj5cclxuLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiNiAxMCA0IDEyIDIgMTAgNiAxMFwiPjwvcG9seWdvbj5cclxuLy8gICA8cGF0aCBjbGFzcz1cInFsLXN0cm9rZVwiIGQ9XCJNOC4wOSwxMy45MUE0LjYsNC42LDAsMCwwLDksMTQsNSw1LDAsMSwwLDQsOVwiPjwvcGF0aD5cclxuLy8gPC9zdmc+YDtcclxuLy8gaWNvbnMucmVkbyA9IGA8c3ZnIHZpZXdib3g9XCIwIDAgMTggMThcIj5cclxuLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiMTIgMTAgMTQgMTIgMTYgMTAgMTIgMTBcIj48L3BvbHlnb24+XHJcbi8vICAgPHBhdGggY2xhc3M9XCJxbC1zdHJva2VcIiBkPVwiTTkuOTEsMTMuOTFBNC42LDQuNiwwLDAsMSw5LDE0YTUsNSwwLDEsMSw1LTVcIj48L3BhdGg+XHJcbi8vIDwvc3ZnPmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1xdWlsbC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWlsbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1aWxsLWVkaXRvci5jb21wb25lbnQubGVzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgVXBsb2FkT3NzU2VydmljZSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFF1aWxsRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWlsbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICfor7fovpPlhaUnO1xyXG4gIEBJbnB1dCgpIHN0eWxlczogYW55ID0ge2hlaWdodDogJzM1MHB4J307XHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyB8IGFueTsgLy8g57uE5Lu25a+55bqU55qEIOKAnCBuZ01vZGVsIOKAnVxyXG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbmVlZEltZ1NlcTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRvcjogYW55O1xyXG4gIG9uQ2hhbmdlTGlzdGVuZXI6IGFueTsgLy8g5pS55Y+Y5YC85Zue6LCDXHJcbiAgb25Ub3VjaGVkTGlzdGVuZXI6IGFueTsgLy8g5Lqk5LqS5Zue6LCDXHJcbiAgaW1nVXJsczogYW55ID0gW107XHJcbiAgZWRpdG9yJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBpbWdWaXMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1cGxvYWRPc3NTZXJ2aWNlOiBVcGxvYWRPc3NTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2U6IE56TWVzc2FnZVNlcnZpY2UpIHtcclxuICAgIC8vIGNvbnN0IGljb25zOiBhbnkgID0gUXVpbGwuaW1wb3J0KCd1aS9pY29ucycpO1xyXG4gICAgLy8gaWNvbnNbXCJ1bmRvXCJdID0gYDxzdmcgdmlld2JveD1cIjAgMCAxOCAxOFwiPlxyXG4gICAgLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiNiAxMCA0IDEyIDIgMTAgNiAxMFwiPjwvcG9seWdvbj5cclxuICAgIC8vICAgPHBhdGggY2xhc3M9XCJxbC1zdHJva2VcIiBkPVwiTTguMDksMTMuOTFBNC42LDQuNiwwLDAsMCw5LDE0LDUsNSwwLDEsMCw0LDlcIj48L3BhdGg+XHJcbiAgICAvLyA8L3N2Zz5gO1xyXG4gICAgLy8gaWNvbnNbXCJyZWRvXCJdID0gYDxzdmcgdmlld2JveD1cIjAgMCAxOCAxOFwiPlxyXG4gICAgLy8gICA8cG9seWdvbiBjbGFzcz1cInFsLWZpbGwgcWwtc3Ryb2tlXCIgcG9pbnRzPVwiMTIgMTAgMTQgMTIgMTYgMTAgMTIgMTBcIj48L3BvbHlnb24+XHJcbiAgICAvLyAgIDxwYXRoIGNsYXNzPVwicWwtc3Ryb2tlXCIgZD1cIk05LjkxLDEzLjkxQTQuNiw0LjYsMCwwLDEsOSwxNGE1LDUsMCwxLDEsNS01XCI+PC9wYXRoPlxyXG4gICAgLy8gPC9zdmc+YDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5lZGl0b3IkLnBpcGUoXHJcbiAgICAgIGRlYm91bmNlVGltZSg3MDApXHJcbiAgICApLnN1YnNjcmliZSgoZWRpdG9yQ29udGVudDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMub25DaGFuZ2VMaXN0ZW5lcikgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mICh0aGlzLm9uVG91Y2hlZExpc3RlbmVyKSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VMaXN0ZW5lcihlZGl0b3JDb250ZW50KTsgLy8g5ZGK6K+JZm9ybe+8jOS9oOeahOihqOWNleWAvOaUueWPmOaIkOS6hnBheWxvYWRcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZExpc3RlbmVyKCk7IC8vIOWRiuiviWZvcm3vvIzkvaDnmoTooajljZXmnInkuqTkupLlj5HnlJ9cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlTGlzdGVuZXIgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkTGlzdGVuZXIgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShxdWlsbDogYW55KSB7XHJcbiAgICB0aGlzLmVkaXRvciQubmV4dChxdWlsbC5odG1sKTtcclxuICB9XHJcblxyXG4gIEVkaXRvckNyZWF0ZWQocXVpbGw6IGFueSkge1xyXG4gICAgY29uc3QgdG9vbGJhciA9IHF1aWxsLmdldE1vZHVsZSgndG9vbGJhcicpO1xyXG4gICAgdG9vbGJhci5hZGRIYW5kbGVyKCdpbWFnZScsIHRoaXMuaW1hZ2VIYW5kbGVyLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5lZGl0b3IgPSBxdWlsbDtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHF1aWxsLm9uKCd0ZXh0LWNoYW5nZScsIGZ1bmN0aW9uIChkZWx0YTogYW55LCBvbGREZWx0YTogYW55LCBzb3VyY2U6IGFueSkge1xyXG4gICAgICBpZiAoc291cmNlID09ICdhcGknKSB7XHJcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlID09ICd1c2VyJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd1c2VyJyk7XHJcbiAgICAgICAgdGhhdC51cGxvYWRJbWdzKFtdLCAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRCbG9iQnlCYXNlNjQodXJsOiBhbnksIG9sZFVybDogYW55KSB7XHJcbiAgICBjb25zdCBjOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNvbnNvbGUubG9nKGMpO1xyXG4gICAgY29uc3QgY3R4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY3R4LnN0cm9rZSgpO1xyXG4gICAgbGV0IGJsb2I6IGFueSA9IFRvb2xzVXRpbC5kYXRhVVJJdG9CbG9iKHVybCk7XHJcbiAgICBibG9iLm5hbWUgPSAnLnBuZyc7XHJcbiAgICBsZXQgZGVsdGEgPSB0aGlzLmVkaXRvci5nZXRDb250ZW50cygpO1xyXG4gICAgY29uc29sZS5sb2coJ2RlbHRhJywgZGVsdGEpXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbHRhLm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoZGVsdGEub3BzW2ldLmluc2VydC5pbWFnZSA9PSBvbGRVcmwpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICBibG9iOiBibG9iLFxyXG4gICAgICAgICAgb2xkVXJsOiBvbGRVcmxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHVwbG9hZEltZ3MoYmxvZHM6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGRldGFpbHMgPSB0aGlzLmVkaXRvci5nZXRDb250ZW50cygpO1xyXG4gICAgbGV0IG9wdCA9IGRldGFpbHMub3BzW2luZGV4XTtcclxuICAgIGlmIChvcHQgJiYgb3B0Lmluc2VydCAmJiBvcHQuaW5zZXJ0LmltYWdlKSB7XHJcbiAgICAgIGlmIChUb29sc1V0aWwuaXNCYXNlNjQob3B0Lmluc2VydC5pbWFnZSkpIHtcclxuICAgICAgICBibG9kcy5wdXNoKHRoaXMuZ2V0QmxvYkJ5QmFzZTY0KG9wdC5pbnNlcnQuaW1hZ2UsIG9wdC5pbnNlcnQuaW1hZ2UpKTtcclxuICAgICAgICB0aGlzLmlzRW5kQ29udGVudHMoYmxvZHMsIGluZGV4KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgbGV0IGN0eDogYW55ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWcuc3JjID0gb3B0Lmluc2VydC5pbWFnZTtcclxuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdjcm9zc09yaWdpbicsICcqJyk7XHJcbiAgICAgICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBjLndpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgICAgICAgYy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XHJcbiAgICAgICAgICBsZXQgdXJsID0gYy50b0RhdGFVUkwoKTtcclxuICAgICAgICAgIGJsb2RzLnB1c2godGhhdC5nZXRCbG9iQnlCYXNlNjQodXJsLCBpbWcuc3JjKSlcclxuICAgICAgICAgIHRoYXQuaXNFbmRDb250ZW50cyhibG9kcywgaW5kZXgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRW5kQ29udGVudHMoYmxvZHMsIGluZGV4KVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgdXBsb2FkSW1nKGJsb2RzOmFueSkge1xyXG4gICAgaWYgKCFibG9kcyB8fCBibG9kcy5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IGkgPSAwO2k8IGJsb2RzLmxlbmd0aDtpKyspe1xyXG4gICAgICBsZXQgYmxvYiA9IGJsb2RzW2ldO1xyXG4gICAgICB0aGlzLnVwbG9hZE9zc1NlcnZpY2UudXBsb2FkT3NzKGJsb2IpLnN1YnNjcmliZSgodXJsKSA9PiB7XHJcbiAgICAgICAgbGV0IGRlbHRhID0gdGhpcy5lZGl0b3IuZ2V0Q29udGVudHMoKTtcclxuICAgICAgICBkZWx0YS5maWx0ZXIoKG9wdDphbnkpID0+IG9wdCAmJiBvcHQuaW5zZXJ0ICYmIG9wdC5pbnNlcnQuaW1hZ2UgPT0gYmxvZHNbaV0ub2xkVXJsKS5mb3JFYWNoKChvcHQ6YW55LCBpbmRleDphbnkpID0+IHtcclxuICAgICAgICAgIG9wdC5pbnNlcnQuaW1hZ2UgPSB1cmxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50cyhkZWx0YSwgJ2FwaScpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBpc0VuZENvbnRlbnRzKGJsb2RzOmFueSwgaW5kZXg6YW55KSB7XHJcbiAgICBsZXQgZGV0YWlscyA9IHRoaXMuZWRpdG9yLmdldENvbnRlbnRzKCk7XHJcbiAgICBpZiAoKytpbmRleCAhPSBkZXRhaWxzLm9wcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy51cGxvYWRJbWdzKGJsb2RzLCBpbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVwbG9hZEltZyhibG9kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWFnZUhhbmRsZXIoKSB7XHJcbiAgICBjb25zdCBJbWFnZWlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgIEltYWdlaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcclxuICAgIEltYWdlaW5wdXQuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xyXG4gICAgSW1hZ2VpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsICdpbWFnZS9wbmcsIGltYWdlL2dpZiwgaW1hZ2UvanBlZywgaW1hZ2UvYm1wJyk7XHJcbiAgICBJbWFnZWlucHV0LmNsYXNzTGlzdC5hZGQoJ3FsLWltYWdlJyk7XHJcbiAgICBJbWFnZWlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubmVlZEltZ1NlcSkge1xyXG4gICAgICAgIHRoaXMuaW1nVmlzID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhJbWFnZWlucHV0KTtcclxuICAgICAgbGV0IGZpbGVzOiBhbnkgPSBJbWFnZWlucHV0LmZpbGVzO1xyXG4gICAgICBpZiAoZmlsZXMgPT09IG51bGwgfHwgZmlsZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbWdVcmxzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XHJcbiAgICAgICAgaWYgKGZpbGUgPT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGVycm9yID0gKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2Uud2FybmluZygn5LiK5Lyg5aSx6LSlJyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRPc3NTZXJ2aWNlLnVwbG9hZE9zcyhmaWxlKS5zdWJzY3JpYmUoKHVybCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZmlsZSk7XHJcbiAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nVXJscy5wdXNoKHt1cmw6IHVybCwgZmlsZTogZmlsZSwgaW5kZXg6IGl9KTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm5lZWRJbWdTZXEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRFbWJlZCh0aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXgsICdpbWFnZScsIHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZS53YXJuaW5nKCfkuIrkvKDlpLHotKUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm5lZWRJbWdTZXEgJiYgdGhpcy5pbWdVcmxzLmxlbmd0aCA9PSBmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5pbWdWaXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmltZ1VybHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZVwiKT8uY2xpY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBJbWFnZWlucHV0LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlU2VxKCkge1xyXG4gICAgY29uc29sZS5sb2coMTIzKTtcclxuICAgIGZvciAobGV0IGkgPSB0aGlzLmltZ1VybHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0RW1iZWQodGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4LCAnaW1hZ2UnLCB0aGlzLmltZ1VybHNbaV0udXJsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW1nVmlzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhcnJvd1VwKGluZGV4OiBhbnkpIHtcclxuICAgIGxldCBpbWcgPSB0aGlzLmltZ1VybHNbaW5kZXhdO1xyXG4gICAgdGhpcy5pbWdVcmxzW2luZGV4XSA9IHRoaXMuaW1nVXJsc1tpbmRleCAtIDFdO1xyXG4gICAgdGhpcy5pbWdVcmxzW2luZGV4IC0gMV0gPSBpbWc7XHJcbiAgfVxyXG5cclxuICBhcnJvd0Rvd24oaW5kZXg6IGFueSkge1xyXG4gICAgbGV0IGltZyA9IHRoaXMuaW1nVXJsc1tpbmRleF07XHJcbiAgICB0aGlzLmltZ1VybHNbaW5kZXhdID0gdGhpcy5pbWdVcmxzW2luZGV4ICsgMV07XHJcbiAgICB0aGlzLmltZ1VybHNbaW5kZXggKyAxXSA9IGltZztcclxuICB9XHJcblxyXG4gIGNhbmNsZSgpIHtcclxuICAgIHRoaXMuaW1nVmlzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCfkuIrkvKDlrozmr5UnKVxyXG4gIH1cclxufVxyXG4iLCI8cXVpbGwtZWRpdG9yXHJcbiAgW3N0eWxlc109XCJzdHlsZXNcIlxyXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgKG9uRWRpdG9yQ3JlYXRlZCk9XCJFZGl0b3JDcmVhdGVkKCRldmVudClcIlxyXG4gIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gIChvbkNvbnRlbnRDaGFuZ2VkKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gIFtyZWFkT25seV09XCJyZWFkT25seVwiXHJcbj48L3F1aWxsLWVkaXRvcj5cclxuPCEtLei/meS4qmRpdizmmK/lm6DkuLrkuIrkvKDlrozmr5XnhKbngrnov5jlnKjlr4zmlofmnKzph4ws5by55Ye65peg5rOV5pi+56S6Li4uLi4tLT5cclxuPGRpdiBpZD1cInRlXCIgKGNsaWNrKT1cInRlKClcIj48L2Rpdj5cclxuPG56LW1vZGFsIFsobnpWaXNpYmxlKV09XCJpbWdWaXNcIiAobnpPbk9rKT1cInNhdmVTZXEoKVwiIChuek9uQ2FuY2VsKT1cImNhbmNsZSgpXCIgbnpNYXNrQ2xvc2FibGU9XCJmYWxzZVwiXHJcbiAgICAgICAgICBbbnpTdHlsZV09XCJ7cGFkZGluZzowfVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm56TW9kYWxDb250ZW50PlxyXG4gIDxkaXYgc3R5bGU9XCJtYXgtaGVpZ2h0OjYwMHB4O292ZXJmbG93OmF1dG87bWFyZ2luLXRvcDogMTBweDtcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbWdzQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L256LW1vZGFsPlxyXG48bmctdGVtcGxhdGUgI2ltZ3NDb250ZW50PlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltZ09wdCBvZiBpbWdVcmxzO2xldCBpID0gaW5kZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbWctZGl2XCI+XHJcbiAgICAgIDxpbWcgW3NyY109XCJpbWdPcHQudXJsXCIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMHB4JyxkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywgbWFyZ2luOic1cHgnIH1cIi8+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDsgY29sb3I6IGdyZXk7XCI+e3tpbWdPcHQuZmlsZS5uYW1lfX08L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweDsgZmxleDogMTt0ZXh0LWFsaWduOiByaWdodDtcIj5cclxuICAgICAgICA8YSB0aXRsZT1cIuS4iuenu1wiICpuZ0lmPVwiIGkgPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIiAoY2xpY2spPVwiYXJyb3dVcChpKVwiPlxyXG4gICAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJhcnJvdy11cFwiIG56VGhlbWU9XCJvdXRsaW5lXCIgc3R5bGU9XCJjb2xvcjogIzE4OTBmZjsgZm9udC1zaXplOiAxNXB4O1wiPjwvaT5cclxuICAgICAgICAgIOS4iuenuzwvYT5cclxuICAgICAgICA8YSB0aXRsZT1cIuS4i+enu1wiICpuZ0lmPVwiIGkgPCBpbWdVcmxzLmxlbmd0aCAtIDFcIiAoY2xpY2spPVwiYXJyb3dEb3duKGkpXCI+XHJcbiAgICAgICAgICA8aSBuei1pY29uIG56VHlwZT1cImFycm93LWRvd25cIiBuelRoZW1lPVwib3V0bGluZVwiIHN0eWxlPVwiY29sb3I6ICMxODkwZmY7IGZvbnQtc2l6ZTogMTVweFwiPjwvaT5cclxuICAgICAgICAgIOS4i+enuzwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiJdfQ==
|