|
442 | 442 | var fileInput = form.querySelector('.file');
|
443 | 443 | if (!fileInput) return;
|
444 | 444 |
|
| 445 | + var submitButton = form.querySelector('[type=submit]'); |
| 446 | + if (submitButton) submitButton.classList.add(classNone); |
| 447 | + |
445 | 448 | var uploadType = document.body.querySelector('.upload-type');
|
446 | 449 | if (!uploadType) return;
|
447 | 450 |
|
|
600 | 603 | }
|
601 | 604 | }
|
602 | 605 |
|
603 |
| - var switchToFileMode = noop; |
604 |
| - var switchToDirMode = noop; |
605 |
| - |
606 |
| - function enableAddDirFile() { |
| 606 | + function enableFileDirModeSwitch() { |
607 | 607 | var classHidden = 'hidden';
|
608 | 608 | var classActive = 'active';
|
609 | 609 |
|
610 | 610 | function onClickOpt(optTarget, clearInput) {
|
611 | 611 | if (optTarget === optActive) {
|
612 |
| - return; |
| 612 | + return false; |
613 | 613 | }
|
614 | 614 | optActive.classList.remove(classActive);
|
615 | 615 |
|
|
666 | 666 | if (optFile) {
|
667 | 667 | optFile.addEventListener('click', onClickOptFile);
|
668 | 668 | optFile.addEventListener('keydown', onKeydownOpt);
|
| 669 | + |
| 670 | + fileInput.addEventListener('change', function (e) { |
| 671 | + // workaround fix for old browsers, select dir not work but still act like select files |
| 672 | + // switch back to file |
| 673 | + if (optActive === optFile) { |
| 674 | + return; |
| 675 | + } |
| 676 | + var files = e.target.files; |
| 677 | + if (!files.length) { |
| 678 | + return; |
| 679 | + } |
| 680 | + |
| 681 | + var nodir = Array.prototype.slice.call(files).every(function (file) { |
| 682 | + return file.webkitRelativePath.indexOf('/') < 0; |
| 683 | + }); |
| 684 | + if (nodir) { |
| 685 | + onClickOptFile(); // prevent clear input files |
| 686 | + } |
| 687 | + }); |
669 | 688 | }
|
670 | 689 | if (optDirFile) {
|
671 | 690 | optDirFile.addEventListener('click', onClickOptDirFile);
|
|
679 | 698 | if (hasStorage) {
|
680 | 699 | var uploadTypeField = 'upload-type';
|
681 | 700 | 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 | 701 | if (prevUploadType === dirFile) {
|
692 | 702 | optDirFile && optDirFile.click();
|
693 | 703 | } else if (prevUploadType === innerDirFile) {
|
694 | 704 | optInnerDirFile && optInnerDirFile.click();
|
695 | 705 | }
|
696 |
| - } |
697 | 706 |
|
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; |
| 707 | + if (prevUploadType !== null) { |
| 708 | + sessionStorage.removeItem(uploadTypeField); |
707 | 709 | }
|
708 | 710 |
|
709 |
| - var nodir = Array.prototype.slice.call(files).every(function (file) { |
710 |
| - return file.webkitRelativePath.indexOf('/') < 0; |
| 711 | + window.addEventListener(leavingEvent, function () { |
| 712 | + var activeUploadType = fileInput.name; |
| 713 | + if (activeUploadType !== file) { |
| 714 | + sessionStorage.setItem(uploadTypeField, activeUploadType) |
| 715 | + } |
711 | 716 | });
|
712 |
| - if (nodir) { |
713 |
| - onClickOptFile(); // prevent clear input files |
714 |
| - } |
715 |
| - }); |
| 717 | + } |
716 | 718 |
|
717 |
| - switchToFileMode = function () { |
| 719 | + function switchToFileMode() { |
718 | 720 | if (optFile && optActive !== optFile) {
|
719 | 721 | optFile.focus();
|
720 | 722 | onClickOptFile(true);
|
721 | 723 | }
|
722 | 724 | }
|
723 | 725 |
|
724 |
| - switchToDirMode = function () { |
| 726 | + function switchToDirMode() { |
725 | 727 | if (optDirFile) {
|
726 | 728 | if (optActive !== optDirFile) {
|
727 | 729 | optDirFile.focus();
|
|
734 | 736 | }
|
735 | 737 | }
|
736 | 738 | }
|
| 739 | + |
| 740 | + return { |
| 741 | + switchToFileMode: switchToFileMode, |
| 742 | + switchToDirMode: switchToDirMode |
| 743 | + }; |
737 | 744 | }
|
738 | 745 |
|
739 | 746 | function enableUploadProgress() { // also fix Safari upload filename has no path info
|
|
853 | 860 | });
|
854 | 861 | }
|
855 | 862 |
|
856 |
| - function enableAddDragDrop(uploadProgressively) { |
| 863 | + function enableAddDragDrop(uploadProgressively, switchToFileMode, switchToDirMode) { |
857 | 864 | var isSelfDragging = false;
|
858 | 865 | var classDragging = 'dragging';
|
859 | 866 |
|
|
919 | 926 | dragDropEl.addEventListener('drop', onDrop);
|
920 | 927 | }
|
921 | 928 |
|
922 |
| - function enableAddPasteProgressively(uploadProgressively) { |
| 929 | + function enableAddPasteProgressively(uploadProgressively, switchToFileMode, switchToDirMode) { |
923 | 930 | var typeTextPlain = 'text/plain';
|
924 | 931 | var nonTextInputTypes = ['hidden', 'radio', 'checkbox', 'button', 'reset', 'submit', 'image'];
|
925 | 932 |
|
|
1031 | 1038 | });
|
1032 | 1039 | }
|
1033 | 1040 |
|
1034 |
| - enableAddDirFile(); |
| 1041 | + var modes = enableFileDirModeSwitch(); |
1035 | 1042 | var uploadProgressively = enableUploadProgress();
|
1036 | 1043 | enableFormUploadProgress(uploadProgressively);
|
1037 |
| - enableAddPasteProgressively(uploadProgressively); |
1038 |
| - enableAddDragDrop(uploadProgressively); |
| 1044 | + enableAddPasteProgressively(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode); |
| 1045 | + enableAddDragDrop(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode); |
1039 | 1046 | }
|
1040 | 1047 |
|
1041 | 1048 | function enableNonRefreshDelete() {
|
|
0 commit comments