1
- import Cropper from 'cropperjs' ;
2
1
import { showElem } from '../../utils/dom.ts' ;
3
2
4
- export function initCompCropper ( ) {
3
+ export async function initCompCropper ( ) {
5
4
const cropperContainer = document . querySelector ( '#cropper-panel' ) ;
6
5
if ( ! cropperContainer ) {
7
6
return ;
8
7
}
9
8
10
- let filename ;
11
- let cropper ;
9
+ const { default : Cropper } = await import ( /* webpackChunkName: "cropperjs" */ 'cropperjs' ) ;
10
+
12
11
const source = document . querySelector ( '#cropper-source' ) ;
13
12
const result = document . querySelector ( '#cropper-result' ) ;
14
13
const input = document . querySelector ( '#new-avatar' ) ;
15
14
16
- const done = function ( url : string ) : void {
15
+ const done = function ( url : string , filename : string ) : void {
17
16
source . src = url ;
18
17
result . src = url ;
19
18
20
- if ( cropper ) {
21
- cropper . replace ( url ) ;
19
+ if ( input . _cropper ) {
20
+ input . _cropper . replace ( url ) ;
22
21
} else {
23
- cropper = new Cropper ( source , {
22
+ input . _cropper = new Cropper ( source , {
24
23
aspectRatio : 1 ,
25
24
viewMode : 1 ,
26
25
autoCrop : false ,
27
26
crop ( ) {
28
- const canvas = cropper . getCroppedCanvas ( ) ;
27
+ const canvas = input . _cropper . getCroppedCanvas ( ) ;
29
28
result . src = canvas . toDataURL ( ) ;
30
29
canvas . toBlob ( ( blob ) => {
31
30
const file = new File ( [ blob ] , filename , { type : 'image/png' , lastModified : Date . now ( ) } ) ;
@@ -42,20 +41,8 @@ export function initCompCropper() {
42
41
input . addEventListener ( 'change' , ( e : Event & { target : HTMLInputElement } ) => {
43
42
const files = e . target . files ;
44
43
45
- let reader ;
46
- let file ;
47
44
if ( files ?. length > 0 ) {
48
- file = files [ 0 ] ;
49
- filename = file . name ;
50
- if ( URL ) {
51
- done ( URL . createObjectURL ( file ) ) ;
52
- } else if ( FileReader ) {
53
- reader = new FileReader ( ) ;
54
- reader . addEventListener ( 'load' , ( ) => {
55
- done ( reader . result ) ;
56
- } ) ;
57
- reader . readAsDataURL ( file ) ;
58
- }
45
+ done ( URL . createObjectURL ( files [ 0 ] ) , files [ 0 ] . name ) ;
59
46
}
60
47
} ) ;
61
48
}
0 commit comments