1
+
2
+ var showDropZoneST = false ;
3
+ var dragAndDropStarted = false ;
4
+ var dragAndDropInDropZone = false ;
5
+ var dragAndDropFocus = false ;
6
+
7
+ function showDropZone ( event )
8
+ {
9
+ clearTimeout ( hideDropZoneST ) ;
10
+ clearTimeout ( showDropZoneST ) ;
11
+
12
+ let dropZone = document . querySelector ( '.drop-zone' ) ;
13
+
14
+ if ( ! dragAndDropStarted )
15
+ dropZone . innerHTML = template . load ( 'drop.zone.html' ) ;
16
+
17
+ if ( event . target . classList . contains ( 'drop-zone' ) || event . target . classList . contains ( 'drop-open' ) || event . target . classList . contains ( 'drop-add' ) )
18
+ {
19
+ dragAndDropFocus = false ;
20
+
21
+ dom . queryAll ( '.drop-zone > div' ) . removeClass ( 'focus' ) ;
22
+ if ( ! event . target . classList . contains ( 'drop-zone' ) )
23
+ {
24
+ dragAndDropFocus = event . target ;
25
+ event . target . classList . add ( 'focus' ) ;
26
+ }
27
+ }
28
+
29
+ dropZone . classList . remove ( 'hide' ) ;
30
+ dropZone . classList . add ( 'active' ) ;
31
+
32
+ dragAndDropStarted = true ;
33
+ dragAndDropInDropZone = true ;
34
+
35
+ showDropZoneST = setTimeout ( function ( ) {
36
+
37
+ dragAndDropInDropZone = false ;
38
+
39
+ } , 1 ) ;
40
+ }
41
+
42
+ var hideDropZoneST = false ;
43
+
44
+ function hideDropZone ( event , force = false )
45
+ {
46
+ if ( ! force && ( ! dragAndDropStarted || dragAndDropInDropZone ) ) return ;
47
+
48
+ clearTimeout ( hideDropZoneST ) ;
49
+
50
+ let dropZone = document . querySelector ( '.drop-zone' ) ;
51
+
52
+ dropZone . classList . add ( 'hide' ) ;
53
+
54
+ hideDropZoneST = setTimeout ( function ( ) {
55
+
56
+ dropZone . classList . remove ( 'hide' , 'active' ) ;
57
+
58
+ } , 500 ) ;
59
+
60
+ dragAndDropStarted = false ;
61
+
62
+ }
63
+
64
+ function checkDragPosition ( )
65
+ {
66
+ event . dataTransfer . dropEffect = 'link' ;
67
+ event . preventDefault ( ) ;
68
+ }
69
+
70
+ function handleDrop ( event )
71
+ {
72
+ if ( dragAndDropFocus && event . dataTransfer . files && event . dataTransfer . files [ 0 ] && event . dataTransfer . files [ 0 ] . path )
73
+ {
74
+ let type = dragAndDropFocus . dataset . type ;
75
+
76
+ if ( pathIsSupported ( event . dataTransfer . files [ 0 ] . path ) )
77
+ {
78
+ if ( type == 'add' )
79
+ addComicsToLibrary ( [ event . dataTransfer . files [ 0 ] . path ] ) ;
80
+ else
81
+ openComic ( event . dataTransfer . files [ 0 ] . path ) ;
82
+ }
83
+ else
84
+ {
85
+ alert ( language . global . unsupportedFile ) ;
86
+ }
87
+ }
88
+
89
+ dragAndDropFocus = false ;
90
+
91
+ hideDropZone ( event , true ) ;
92
+ }
93
+
94
+ function start ( )
95
+ {
96
+ app . event ( window , 'dragenter' , showDropZone ) ;
97
+ app . event ( window , 'dragleave' , hideDropZone ) ;
98
+ app . event ( window , 'dragover' , checkDragPosition ) ;
99
+ app . event ( window , 'drop' , handleDrop ) ;
100
+
101
+ app . event ( document , 'mouseenter' , function ( event ) {
102
+
103
+ if ( dragAndDropStarted )
104
+ hideDropZone ( event , true ) ;
105
+
106
+ } ) ;
107
+
108
+ }
109
+
110
+ module . exports = {
111
+ start : start ,
112
+ } ;
0 commit comments