|
1 | 1 | (function () { |
2 | 2 | var classNone = 'none'; |
3 | 3 | var classHeader = 'header'; |
| 4 | + var leavingEvent = typeof window.onpagehide !== 'undefined' ? 'pagehide' : 'beforeunload'; |
4 | 5 |
|
5 | 6 | function enableFilter() { |
6 | 7 | if (!document.querySelector) { |
|
102 | 103 | var prevSessionFilter = sessionStorage.getItem(location.pathname); |
103 | 104 | sessionStorage.removeItem(location.pathname); |
104 | 105 |
|
105 | | - var leavingEvent = typeof window.onpagehide !== 'undefined' ? 'pagehide' : 'beforeunload'; |
106 | 106 | window.addEventListener(leavingEvent, function () { |
107 | 107 | if (input.value) { |
108 | 108 | sessionStorage.setItem(location.pathname, input.value); |
|
368 | 368 | }); |
369 | 369 | } |
370 | 370 |
|
371 | | - function enableDragUpload() { |
| 371 | + function enhanceUpload() { |
372 | 372 | if (!document.querySelector || !document.addEventListener || !document.body.classList) { |
373 | 373 | return; |
374 | 374 | } |
|
378 | 378 | return; |
379 | 379 | } |
380 | 380 | var fileInput = upload.querySelector('.file'); |
| 381 | + if (!fileInput) { |
| 382 | + return; |
| 383 | + } |
| 384 | + |
| 385 | + var uploadType = document.body.querySelector('.upload-type'); |
| 386 | + if (!uploadType) { |
| 387 | + return; |
| 388 | + } |
| 389 | + |
| 390 | + var file = 'file'; |
| 391 | + var dirFile = 'dirfile'; |
| 392 | + var innerDirFile = 'innerdirfile'; |
| 393 | + |
| 394 | + var optFile = uploadType.querySelector('.' + file); |
| 395 | + var optDirFile = uploadType.querySelector('.' + dirFile); |
| 396 | + var optInnerDirFile = uploadType.querySelector('.' + innerDirFile); |
| 397 | + var optActive = optFile; |
381 | 398 |
|
382 | | - var addClass = function (ele, className) { |
| 399 | + function addClass(ele, className) { |
383 | 400 | ele && ele.classList.add(className); |
384 | | - }; |
| 401 | + } |
385 | 402 |
|
386 | | - var removeClass = function (ele, className) { |
| 403 | + function removeClass(ele, className) { |
387 | 404 | ele && ele.classList.remove(className); |
388 | | - }; |
| 405 | + } |
389 | 406 |
|
390 | | - var onDragEnterOver = function (e) { |
391 | | - e.stopPropagation(); |
392 | | - e.preventDefault(); |
393 | | - addClass(e.currentTarget, 'dragging'); |
394 | | - }; |
| 407 | + function enableAddDir() { |
| 408 | + var classHidden = 'hidden'; |
| 409 | + var classActive = 'active'; |
395 | 410 |
|
396 | | - var onDragLeave = function (e) { |
397 | | - if (e.target === e.currentTarget) { |
398 | | - removeClass(e.currentTarget, 'dragging'); |
399 | | - } |
400 | | - }; |
| 411 | + function onClickOpt(e) { |
| 412 | + var optTarget = e.target; |
| 413 | + if (optTarget === optActive) { |
| 414 | + return; |
| 415 | + } |
| 416 | + removeClass(optActive, classActive); |
401 | 417 |
|
402 | | - var onDrop = function (e) { |
403 | | - e.stopPropagation(); |
404 | | - e.preventDefault(); |
405 | | - removeClass(e.currentTarget, 'dragging'); |
| 418 | + optActive = optTarget; |
| 419 | + addClass(optActive, classActive); |
406 | 420 |
|
407 | | - if (!e.dataTransfer.files) { |
| 421 | + fileInput.value = ''; |
| 422 | + } |
| 423 | + |
| 424 | + if (typeof fileInput.webkitdirectory === 'undefined') { |
408 | 425 | return; |
409 | 426 | } |
410 | | - fileInput.files = e.dataTransfer.files; |
411 | | - }; |
| 427 | + removeClass(optDirFile, classHidden); |
| 428 | + removeClass(optInnerDirFile, classHidden); |
| 429 | + |
| 430 | + if (optFile) { |
| 431 | + optFile.addEventListener('click', onClickOpt); |
| 432 | + optFile.addEventListener('click', function () { |
| 433 | + fileInput.name = file; |
| 434 | + fileInput.webkitdirectory = false; |
| 435 | + }); |
| 436 | + } |
| 437 | + if (optDirFile) { |
| 438 | + optDirFile.addEventListener('click', onClickOpt); |
| 439 | + optDirFile.addEventListener('click', function () { |
| 440 | + fileInput.name = dirFile; |
| 441 | + fileInput.webkitdirectory = true |
| 442 | + }); |
| 443 | + } |
| 444 | + if (optInnerDirFile) { |
| 445 | + optInnerDirFile.addEventListener('click', onClickOpt); |
| 446 | + optInnerDirFile.addEventListener('click', function () { |
| 447 | + fileInput.name = innerDirFile; |
| 448 | + fileInput.webkitdirectory = true |
| 449 | + }); |
| 450 | + } |
| 451 | + |
| 452 | + if (sessionStorage) { |
| 453 | + var uploadTypeField = 'upload-type'; |
| 454 | + var prevUploadType = sessionStorage.getItem(uploadTypeField); |
| 455 | + sessionStorage.removeItem(uploadTypeField); |
| 456 | + |
| 457 | + window.addEventListener(leavingEvent, function () { |
| 458 | + var activeUploadType = fileInput.name; |
| 459 | + if (activeUploadType !== file) { |
| 460 | + sessionStorage.setItem(uploadTypeField, activeUploadType) |
| 461 | + } |
| 462 | + }, false); |
| 463 | + |
| 464 | + if (prevUploadType === dirFile) { |
| 465 | + optDirFile && optDirFile.click(); |
| 466 | + } else if (prevUploadType === innerDirFile) { |
| 467 | + optInnerDirFile && optInnerDirFile.click(); |
| 468 | + } |
| 469 | + } |
| 470 | + } |
| 471 | + |
| 472 | + function enableAddDragDrop() { |
| 473 | + function onDragEnterOver(e) { |
| 474 | + e.stopPropagation(); |
| 475 | + e.preventDefault(); |
| 476 | + addClass(e.currentTarget, 'dragging'); |
| 477 | + } |
| 478 | + |
| 479 | + function onDragLeave(e) { |
| 480 | + if (e.target === e.currentTarget) { |
| 481 | + removeClass(e.currentTarget, 'dragging'); |
| 482 | + } |
| 483 | + } |
| 484 | + |
| 485 | + function onDrop(e) { |
| 486 | + e.stopPropagation(); |
| 487 | + e.preventDefault(); |
| 488 | + removeClass(e.currentTarget, 'dragging'); |
| 489 | + |
| 490 | + if (!e.dataTransfer.files) { |
| 491 | + return; |
| 492 | + } |
| 493 | + |
| 494 | + if (optFile && optActive !== optFile) { |
| 495 | + optFile.focus(); |
| 496 | + optFile.click(); |
| 497 | + } |
| 498 | + fileInput.files = e.dataTransfer.files; |
| 499 | + } |
| 500 | + |
| 501 | + upload.addEventListener('dragenter', onDragEnterOver, false); |
| 502 | + upload.addEventListener('dragover', onDragEnterOver, false); |
| 503 | + upload.addEventListener('dragleave', onDragLeave, false); |
| 504 | + upload.addEventListener('drop', onDrop, false); |
| 505 | + } |
412 | 506 |
|
413 | | - upload.addEventListener('dragenter', onDragEnterOver, false); |
414 | | - upload.addEventListener('dragover', onDragEnterOver, false); |
415 | | - upload.addEventListener('dragleave', onDragLeave, false); |
416 | | - upload.addEventListener('drop', onDrop, false); |
| 507 | + enableAddDir(); |
| 508 | + enableAddDragDrop(); |
417 | 509 | } |
418 | 510 |
|
419 | 511 | function enableNonRefreshDelete() { |
|
470 | 562 |
|
471 | 563 | enableFilter(); |
472 | 564 | enableKeyboardNavigate(); |
473 | | - enableDragUpload(); |
| 565 | + enhanceUpload(); |
474 | 566 | enableNonRefreshDelete(); |
475 | 567 | })(); |
0 commit comments