1
1
let new_directory_name = document . getElementById ( "name" ) ;
2
2
let files = document . getElementById ( "files" ) ;
3
+ let dirs = document . getElementById ( "dirs" ) ;
3
4
4
5
var url_base = window . location ;
5
6
var current_path ;
@@ -15,10 +16,12 @@ function compareValues(a, b) {
15
16
}
16
17
}
17
18
18
- async function refresh_list ( ) {
19
-
20
-
19
+ function set_upload_enabled ( enabled ) {
20
+ files . disabled = ! enabled ;
21
+ dirs . disabled = ! enabled ;
22
+ }
21
23
24
+ async function refresh_list ( ) {
22
25
current_path = window . location . hash . substr ( 1 ) ;
23
26
if ( current_path == "" ) {
24
27
current_path = "/" ;
@@ -49,7 +52,7 @@ async function refresh_list() {
49
52
) ;
50
53
editable = status . headers . get ( "Access-Control-Allow-Methods" ) . includes ( "DELETE" ) ;
51
54
new_directory_name . disabled = ! editable ;
52
- files . disabled = ! editable ;
55
+ set_upload_enabled ( editable ) ;
53
56
if ( ! editable ) {
54
57
let usbwarning = document . querySelector ( "#usbwarning" ) ;
55
58
usbwarning . style . display = "block" ;
@@ -169,8 +172,25 @@ async function mkdir(e) {
169
172
}
170
173
171
174
async function upload ( e ) {
172
- for ( const file of files . files ) {
173
- let file_path = new URL ( "/fs" + current_path + file . name , url_base ) ;
175
+ set_upload_enabled ( false ) ;
176
+ let progress = document . querySelector ( "progress" ) ;
177
+ let made_dirs = new Set ( ) ;
178
+ progress . max = files . files . length + dirs . files . length ;
179
+ progress . value = 0 ;
180
+ for ( const file of [ ...files . files , ...dirs . files ] ) {
181
+ let file_name = file . name ;
182
+ if ( file . webkitRelativePath ) {
183
+ file_name = file . webkitRelativePath ;
184
+ let components = file_name . split ( "/" ) ;
185
+ components . pop ( ) ;
186
+ let parent_dir = components . join ( "/" ) ;
187
+ if ( ! made_dirs . has ( parent_dir ) ) {
188
+ new_directory_name . value = parent_dir ;
189
+ await mkdir ( null ) ;
190
+ made_dirs . add ( parent_dir ) ;
191
+ }
192
+ }
193
+ let file_path = new URL ( "/fs" + current_path + file_name , url_base ) ;
174
194
const response = await fetch ( file_path ,
175
195
{
176
196
method : "PUT" ,
@@ -184,9 +204,12 @@ async function upload(e) {
184
204
if ( response . ok ) {
185
205
refresh_list ( ) ;
186
206
}
207
+ progress . value += 1 ;
187
208
}
188
209
files . value = "" ;
189
- upload_button . disabled = true ;
210
+ dirs . value = "" ;
211
+ progress . value = 0 ;
212
+ set_upload_enabled ( true ) ;
190
213
}
191
214
192
215
async function del ( e ) {
@@ -234,14 +257,8 @@ find_devices();
234
257
let mkdir_button = document . getElementById ( "mkdir" ) ;
235
258
mkdir_button . onclick = mkdir ;
236
259
237
- let upload_button = document . getElementById ( "upload" ) ;
238
- upload_button . onclick = upload ;
239
-
240
- upload_button . disabled = files . files . length == 0 ;
241
-
242
- files . onchange = ( ) => {
243
- upload_button . disabled = files . files . length == 0 ;
244
- }
260
+ files . onchange = upload ;
261
+ dirs . onchange = upload ;
245
262
246
263
mkdir_button . disabled = new_directory_name . value . length == 0 ;
247
264
0 commit comments