|
1 | 1 | (function () { |
2 | | - function noop() { |
3 | | - } |
4 | | - |
5 | 2 | function logError(err) { |
6 | 3 | console.error(err); |
7 | 4 | } |
|
439 | 436 | var fileInput = form.querySelector('input[type=file]'); |
440 | 437 | if (!fileInput) return; |
441 | 438 |
|
| 439 | + var submitButton = form.querySelector('[type=submit]'); |
| 440 | + if (submitButton) submitButton.classList.add(classNone); |
| 441 | + |
442 | 442 | var uploadType = document.body.querySelector('.upload-type'); |
443 | 443 | if (!uploadType) return; |
444 | 444 |
|
|
597 | 597 | } |
598 | 598 | } |
599 | 599 |
|
600 | | - var switchToFileMode = noop; |
601 | | - var switchToDirMode = noop; |
602 | | - |
603 | | - function enableAddDirFile() { |
| 600 | + function enableFileDirModeSwitch() { |
604 | 601 | var classHidden = 'hidden'; |
605 | 602 | var classActive = 'active'; |
606 | 603 |
|
607 | 604 | function onClickOpt(optTarget, clearInput) { |
608 | 605 | if (optTarget === optActive) { |
609 | | - return; |
| 606 | + return false; |
610 | 607 | } |
611 | 608 | optActive.classList.remove(classActive); |
612 | 609 |
|
|
657 | 654 | } |
658 | 655 | } |
659 | 656 |
|
660 | | - optDirFile && optDirFile.classList.remove(classHidden); |
661 | | - optInnerDirFile && optInnerDirFile.classList.remove(classHidden); |
662 | | - |
663 | 657 | if (optFile) { |
664 | 658 | optFile.addEventListener('click', onClickOptFile); |
665 | 659 | optFile.addEventListener('keydown', onKeydownOpt); |
| 660 | + |
| 661 | + fileInput.addEventListener('change', function (e) { |
| 662 | + // workaround fix for old browsers, select dir not work but still act like select files |
| 663 | + // switch back to file |
| 664 | + if (optActive === optFile) { |
| 665 | + return; |
| 666 | + } |
| 667 | + var files = e.target.files; |
| 668 | + if (!files.length) { |
| 669 | + return; |
| 670 | + } |
| 671 | + |
| 672 | + var nodir = Array.prototype.slice.call(files).every(function (file) { |
| 673 | + return file.webkitRelativePath.indexOf('/') < 0; |
| 674 | + }); |
| 675 | + if (nodir) { |
| 676 | + onClickOptFile(); // prevent clear input files |
| 677 | + } |
| 678 | + }); |
666 | 679 | } |
667 | 680 | if (optDirFile) { |
668 | 681 | optDirFile.addEventListener('click', onClickOptDirFile); |
|
676 | 689 | if (hasStorage) { |
677 | 690 | var uploadTypeField = 'upload-type'; |
678 | 691 | var prevUploadType = sessionStorage.getItem(uploadTypeField); |
679 | | - sessionStorage.removeItem(uploadTypeField); |
680 | | - |
681 | | - window.addEventListener(leavingEvent, function () { |
682 | | - var activeUploadType = fileInput.name; |
683 | | - if (activeUploadType !== file) { |
684 | | - sessionStorage.setItem(uploadTypeField, activeUploadType) |
685 | | - } |
686 | | - }, false); |
687 | | - |
688 | 692 | if (prevUploadType === dirFile) { |
689 | 693 | optDirFile && optDirFile.click(); |
690 | 694 | } else if (prevUploadType === innerDirFile) { |
691 | 695 | optInnerDirFile && optInnerDirFile.click(); |
692 | 696 | } |
693 | | - } |
694 | 697 |
|
695 | | - optFile && fileInput.addEventListener('change', function (e) { |
696 | | - // workaround fix for mobile device, select dir not work but still act like select files |
697 | | - // switch back to file |
698 | | - if (optActive === optFile) { |
699 | | - return; |
700 | | - } |
701 | | - var files = e.target.files; |
702 | | - if (!files.length) { |
703 | | - return; |
| 698 | + if (prevUploadType !== null) { |
| 699 | + sessionStorage.removeItem(uploadTypeField); |
704 | 700 | } |
705 | 701 |
|
706 | | - var nodir = Array.prototype.slice.call(files).every(function (file) { |
707 | | - return file.webkitRelativePath.indexOf('/') < 0; |
| 702 | + window.addEventListener(leavingEvent, function () { |
| 703 | + var activeUploadType = fileInput.name; |
| 704 | + if (activeUploadType !== file) { |
| 705 | + sessionStorage.setItem(uploadTypeField, activeUploadType) |
| 706 | + } |
708 | 707 | }); |
709 | | - if (nodir) { |
710 | | - onClickOptFile(); // prevent clear input files |
711 | | - } |
712 | | - }); |
| 708 | + } |
713 | 709 |
|
714 | | - switchToFileMode = function () { |
| 710 | + function switchToFileMode() { |
715 | 711 | if (optFile && optActive !== optFile) { |
716 | 712 | optFile.focus(); |
717 | 713 | onClickOptFile(true); |
718 | 714 | } |
719 | 715 | } |
720 | 716 |
|
721 | | - switchToDirMode = function () { |
| 717 | + function switchToDirMode() { |
722 | 718 | if (optDirFile) { |
723 | 719 | if (optActive !== optDirFile) { |
724 | 720 | optDirFile.focus(); |
|
731 | 727 | } |
732 | 728 | } |
733 | 729 | } |
| 730 | + |
| 731 | + return { |
| 732 | + switchToFileMode: switchToFileMode, |
| 733 | + switchToDirMode: switchToDirMode |
| 734 | + }; |
734 | 735 | } |
735 | 736 |
|
736 | 737 | function enableUploadProgress() { // also fix Safari upload filename has no path info |
|
850 | 851 | }); |
851 | 852 | } |
852 | 853 |
|
853 | | - function enableAddDragDrop(uploadProgressively) { |
| 854 | + function enableAddDragDrop(uploadProgressively, switchToFileMode, switchToDirMode) { |
854 | 855 | var isSelfDragging = false; |
855 | 856 | var classDragging = 'dragging'; |
856 | 857 |
|
|
911 | 912 | dragDropEl.addEventListener('drop', onDrop); |
912 | 913 | } |
913 | 914 |
|
914 | | - function enableAddPasteProgressively(uploadProgressively) { |
| 915 | + function enableAddPasteProgressively(uploadProgressively, switchToFileMode, switchToDirMode) { |
915 | 916 | var typeTextPlain = 'text/plain'; |
916 | 917 | var nonTextInputTypes = ['hidden', 'radio', 'checkbox', 'button', 'reset', 'submit', 'image']; |
917 | 918 |
|
|
1020 | 1021 | }); |
1021 | 1022 | } |
1022 | 1023 |
|
1023 | | - enableAddDirFile(); |
| 1024 | + var modes = enableFileDirModeSwitch(); |
1024 | 1025 | var uploadProgressively = enableUploadProgress(); |
1025 | 1026 | enableFormUploadProgress(uploadProgressively); |
1026 | | - enableAddPasteProgressively(uploadProgressively); |
1027 | | - enableAddDragDrop(uploadProgressively); |
| 1027 | + enableAddPasteProgressively(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode); |
| 1028 | + enableAddDragDrop(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode); |
1028 | 1029 | } |
1029 | 1030 |
|
1030 | 1031 | function enableNonRefreshDelete() { |
|
0 commit comments