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