Skip to content

Commit ff40288

Browse files
committed
feat(tpl): lift shared functions to upper scope
- entriesToFiles - itemsToFiles - itemsHasDir - switchToFileMode - switchToDirMode
1 parent 4f51493 commit ff40288

File tree

1 file changed

+96
-90
lines changed

1 file changed

+96
-90
lines changed

src/tpl/frontend/index.js

Lines changed: 96 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,96 @@
503503
return ts;
504504
}
505505

506+
function entriesToFiles(entries, onDone) {
507+
var files = [];
508+
var len = entries.length;
509+
var cb = 0;
510+
511+
function increaseCb() {
512+
cb++;
513+
if (cb === len) {
514+
onDone(files);
515+
}
516+
}
517+
518+
entries.forEach(function (entry) {
519+
if (entry.isFile) {
520+
var relativePath = entry.fullPath;
521+
if (relativePath[0] === '/') {
522+
relativePath = relativePath.substring(1);
523+
}
524+
entry.file(function (file) {
525+
files.push({file: file, relativePath: relativePath});
526+
increaseCb();
527+
}, function (err) {
528+
increaseCb();
529+
typeof console !== strUndef && console.error(err);
530+
});
531+
} else {
532+
var reader = entry.createReader();
533+
reader.readEntries(function (subEntries) {
534+
if (subEntries.length) {
535+
entriesToFiles(subEntries, function (subFiles) {
536+
Array.prototype.push.apply(files, subFiles);
537+
increaseCb();
538+
});
539+
} else {
540+
increaseCb();
541+
}
542+
});
543+
}
544+
});
545+
}
546+
547+
function itemsToFiles(dataTransferItems, onDone) {
548+
var entries = [];
549+
for (var i = 0, len = dataTransferItems.length; i < len; i++) {
550+
var entry = dataTransferItems[i].webkitGetAsEntry();
551+
entries.push(entry);
552+
}
553+
entriesToFiles(entries, onDone);
554+
}
555+
556+
function itemsHasDir(dataTransferItems) {
557+
if (!dataTransferItems) {
558+
return false;
559+
}
560+
var hasDir = false;
561+
var items = Array.prototype.slice.call(dataTransferItems);
562+
if (items.length && items[0].webkitGetAsEntry) {
563+
for (var i = 0, len = items.length; i < len; i++) {
564+
var entry = items[i].webkitGetAsEntry();
565+
if (entry.isDirectory) {
566+
hasDir = true;
567+
break;
568+
}
569+
}
570+
}
571+
return hasDir;
572+
}
573+
574+
function switchToFileMode() {
575+
if (optFile && optActive !== optFile) {
576+
optFile.focus();
577+
optFile.click();
578+
}
579+
}
580+
581+
function switchToDirMode() {
582+
if (!optDirFile && !optInnerDirFile) {
583+
return;
584+
}
585+
if (optActive === optFile) {
586+
if (optDirFile) {
587+
optDirFile.focus();
588+
optDirFile.click();
589+
} else if (optInnerDirFile) {
590+
optInnerDirFile.focus();
591+
optInnerDirFile.click();
592+
}
593+
}
594+
}
595+
506596
function enableAddDir() {
507597
var classHidden = 'hidden';
508598
var classActive = 'active';
@@ -715,56 +805,6 @@
715805
}
716806
}
717807

718-
function entriesToFiles(entries, onDone) {
719-
var files = [];
720-
var len = entries.length;
721-
var cb = 0;
722-
723-
function increaseCb() {
724-
cb++;
725-
if (cb === len) {
726-
onDone(files);
727-
}
728-
}
729-
730-
entries.forEach(function (entry) {
731-
if (entry.isFile) {
732-
var relativePath = entry.fullPath;
733-
if (relativePath[0] === '/') {
734-
relativePath = relativePath.substring(1);
735-
}
736-
entry.file(function (file) {
737-
files.push({file: file, relativePath: relativePath});
738-
increaseCb();
739-
}, function (err) {
740-
increaseCb();
741-
typeof console !== strUndef && console.error(err);
742-
});
743-
} else {
744-
var reader = entry.createReader();
745-
reader.readEntries(function (subEntries) {
746-
if (subEntries.length) {
747-
entriesToFiles(subEntries, function (subFiles) {
748-
Array.prototype.push.apply(files, subFiles);
749-
increaseCb();
750-
});
751-
} else {
752-
increaseCb();
753-
}
754-
});
755-
}
756-
});
757-
}
758-
759-
function itemsToFiles(items, onDone) {
760-
var entries = [];
761-
for (var i = 0, len = items.length; i < len; i++) {
762-
var entry = items[i].webkitGetAsEntry();
763-
entries.push(entry);
764-
}
765-
entriesToFiles(entries, onDone);
766-
}
767-
768808
function onDrop(e) {
769809
e.stopPropagation();
770810
e.preventDefault();
@@ -778,45 +818,18 @@
778818
return;
779819
}
780820

781-
var hasDir = false;
782-
if (e.dataTransfer.items) {
783-
var items = Array.prototype.slice.call(e.dataTransfer.items);
784-
if (items.length && items[0].webkitGetAsEntry) {
785-
for (var i = 0, len = items.length; i < len; i++) {
786-
var entry = items[i].webkitGetAsEntry();
787-
if (entry.isDirectory) {
788-
hasDir = true;
789-
break;
790-
}
791-
}
792-
}
793-
}
794-
795-
if (hasDir) {
821+
if (itemsHasDir(e.dataTransfer.items)) {
796822
if (!uploadProgressively) {
823+
// must use progressive upload by JS if has directory
797824
return;
798825
}
799-
if (!optDirFile && !optInnerDirFile) {
800-
return;
801-
}
802-
if (optActive === optFile) {
803-
if (optDirFile) {
804-
optDirFile.focus();
805-
optDirFile.click();
806-
} else if (optInnerDirFile) {
807-
optInnerDirFile.focus();
808-
optInnerDirFile.click();
809-
}
810-
}
826+
switchToDirMode();
811827
btnSubmit.disabled = true; // disable earlier
812828
itemsToFiles(e.dataTransfer.items, function (files) {
813829
uploadProgressively(files);
814830
});
815831
} else {
816-
if (optFile && optActive !== optFile) {
817-
optFile.focus();
818-
optFile.click();
819-
}
832+
switchToFileMode();
820833

821834
if (uploadProgressively) {
822835
var files = Array.prototype.slice.call(e.dataTransfer.files);
@@ -839,10 +852,7 @@
839852
document.documentElement.addEventListener('paste', function (e) {
840853
var data = e.clipboardData;
841854
if (data && data.files && data.files.length) {
842-
if (optFile && optActive !== optFile) {
843-
optFile.focus();
844-
optFile.click();
845-
}
855+
switchToFileMode();
846856
fileInput.files = data.files;
847857
form.submit();
848858
}
@@ -853,11 +863,7 @@
853863
var typeTextPlain = 'text/plain';
854864

855865
function uploadPastedFiles(files) {
856-
if (optFile && optActive !== optFile) {
857-
optFile.focus();
858-
optFile.click();
859-
}
860-
866+
switchToFileMode();
861867
var ts = getTimeStamp();
862868
files = files.map(function (f, i) {
863869
var filename = f.name;

0 commit comments

Comments
 (0)