1
+ //this was the hard way:
2
+ //I was trying to make it so you could drag in a bunch of files and it would keep the directory
3
+ //structure but not zip any __MACOSX files, but it just turned out too complicated, so I ended
4
+ //up making alt.js which takes an already created zip and just removes the __MACOSX files from
5
+ //there.
6
+
7
+ document . querySelector ( '#fileElem' ) . addEventListener ( 'change' , function ( ) {
8
+ handleFiles ( this . files ) ;
9
+ } , false ) ;
10
+
11
+ function handleFiles ( items ) {
12
+ //var fileblob = param[0];
13
+ //console.log(fileblob.name);
14
+
15
+ //var objectURL = window.URL.createObjectURL(fileblob);
16
+
17
+ //var ext = fileblob.name.split('.').pop();
18
+ //if (ext == 'zip') { unzipit(objectURL); }
19
+ //else if ( ext == 'swf' ) { swfit(objectURL); }
20
+ //else { console.log(ext); }
21
+ var zip = new JSZip ( ) ;
22
+
23
+ var proms = [ ] ;
24
+ proms . push ( new Promise ( function ( resolve , reject ) { setTimeout ( resolve , 200 , 'hello' ) ; } ) ) ;
25
+
26
+ //for (var file of files) {
27
+ /*for (var i = 0; i < items.length; i++) {
28
+ var item = items[i];
29
+ var file = files[i];
30
+
31
+ var filef = item.webkitGetAsEntry();
32
+ console.log(filef);
33
+ console.log(file);
34
+ var nam = filef.fullPath.split('/')[1];
35
+
36
+ console.log(filef.name);
37
+ if (filef.isDirectory) {
38
+ console.log('dir');
39
+ } else {
40
+ //console.log(nam)[1];
41
+ zip.file(nam, file)
42
+ }
43
+ }*/
44
+
45
+ gofile ( items ) ;
46
+
47
+ function gofile ( itemlist ) {
48
+ for ( var i = 0 ; i < itemlist ; i ++ ) {
49
+ //var file = filelist[i];
50
+ var item = itemlist [ i ] ;
51
+
52
+ var filef = item . webkitGetAsEntry ( ) ;
53
+ console . log ( filef ) ;
54
+ //console.log(file);
55
+
56
+
57
+ if ( filef . isDirectory ) {
58
+ var dirReader = entry . createReader ( ) ;
59
+ proms . push (
60
+ new Promise ( function ( resolve , reject ) {
61
+ dirReader . readEntries ( function ( results ) {
62
+ gofile ( itemlist ) ;
63
+ } ) ;
64
+ resolve ( ) ;
65
+ } )
66
+ ) ;
67
+ } else {
68
+ proms . push (
69
+ new Promise ( function ( resolve , reject ) {
70
+ var nam = filef . fullPath . split ( '/' ) [ 1 ] ;
71
+ console . log ( nam ) ;
72
+ item . file ( function ( blob ) {
73
+ zip . file ( nam , blob ) ;
74
+ } ) ;
75
+ } )
76
+ ) ;
77
+ }
78
+ }
79
+ }
80
+
81
+
82
+ Promise . all ( proms ) . then ( function ( values ) {
83
+ zip . generateAsync ( { type :"base64" } ) . then ( function ( base64 ) {
84
+ location . href = "data:application/zip;base64," + base64 ;
85
+ } ) ;
86
+ } ) ;
87
+
88
+
89
+
90
+
91
+ //https://stackoverflow.com/questions/13555785/remove-all-child-from-node-with-the-same-class-pure-js/13555954#13555954
92
+ var elements = document . getElementsByClassName ( 'deleteme' ) ;
93
+ while ( elements [ 0 ] ) {
94
+ elements [ 0 ] . parentNode . removeChild ( elements [ 0 ] ) ;
95
+ }
96
+ }
97
+
98
+ var dropbox ;
99
+
100
+ dropbox = document . body ;
101
+ dropbox . addEventListener ( "dragenter" , dragenter , false ) ;
102
+ dropbox . addEventListener ( "dragover" , dragover , false ) ;
103
+ dropbox . addEventListener ( "drop" , drop , false ) ;
104
+ dropbox . addEventListener ( "dragleave" , dragleave , false ) ;
105
+
106
+ function dragenter ( e ) {
107
+ e . stopPropagation ( ) ;
108
+ e . preventDefault ( ) ;
109
+ }
110
+
111
+ function dragover ( e ) {
112
+ e . stopPropagation ( ) ;
113
+ e . preventDefault ( ) ;
114
+ dropbox . classList . add ( 'animated' ) ;
115
+ }
116
+
117
+ function dragleave ( e ) {
118
+ e . stopPropagation ( ) ;
119
+ e . preventDefault ( ) ;
120
+ dropbox . classList . remove ( 'animated' ) ;
121
+ }
122
+
123
+ function drop ( e ) {
124
+ e . stopPropagation ( ) ;
125
+ e . preventDefault ( ) ;
126
+
127
+ var dt = e . dataTransfer ;
128
+ var files = dt . files ;
129
+ var items = dt . items ;
130
+
131
+ var l = [ ] ;
132
+ for ( var file of items ) {
133
+ var filef = file . webkitGetAsEntry ( ) ;
134
+ l . push ( filef ) ;
135
+ }
136
+ //handleFiles(l);
137
+ handleFiles ( items ) ;
138
+ }
0 commit comments