Skip to content

Commit fe089ea

Browse files
committed
refactor(defaultTheme): refine enhanceUpload() mode switch
1 parent 13d3fd1 commit fe089ea

File tree

3 files changed

+65
-51
lines changed

3 files changed

+65
-51
lines changed

src/tpl/defaultTheme/frontend/index.css

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -163,33 +163,39 @@ html.dragging::before {
163163

164164
.tab {
165165
display: flex;
166+
gap: 0.5em;
166167
white-space: nowrap;
167168
margin: 1em 1em -1em 1em;
168169
}
169170

170-
.tab label {
171+
.tab h3, .tab a {
171172
flex: 0 0 auto;
172-
margin-right: 0.5em;
173173
padding: 1em;
174+
}
175+
176+
.tab h3 {
177+
margin: 0;
178+
font-size: inherit;
179+
}
180+
181+
.tab a {
174182
cursor: pointer;
175183
}
176184

177-
.tab label:focus {
178-
outline: 0;
179-
text-decoration: underline;
180-
text-decoration-style: dotted;
185+
.tab a:focus {
186+
text-decoration: underline 1px dotted;
181187
}
182188

183-
.tab label:hover {
189+
.tab a:hover {
184190
background: #fbfbfb;
185191
}
186192

187-
.tab label.active {
193+
.tab a.active {
188194
color: #000;
189195
background: #f7f7f7;
190196
}
191197

192-
.tab label:last-child {
198+
.tab a:last-child {
193199
margin-right: 0;
194200
}
195201

@@ -544,11 +550,11 @@ html.dragging::before {
544550
border-color: #555 #555 transparent transparent;
545551
}
546552

547-
.tab label:hover {
553+
.tab a:hover {
548554
background-color: #181818;
549555
}
550556

551-
.tab label.active {
557+
.tab a.active {
552558
color: #fff;
553559
background-color: #222;
554560
}

src/tpl/defaultTheme/frontend/index.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@
5454
}
5555
</script>
5656
<div class="tab upload-type">
57-
<label class="file active" tabindex="0" role="button" title="{{.Trans.UploadFilesHint}}">{{.Trans.UploadFilesLabel}}</label>
58-
{{if .CanMkdir}}<label class="dirfile hidden" tabindex="0" role="button" title="{{.Trans.UploadDirHint}}">{{.Trans.UploadDirLabel}}</label>
59-
<label class="innerdirfile hidden" tabindex="0" role="button" title="{{.Trans.UploadDirContentsHint}}">{{.Trans.UploadDirContentsLabel}}</label>{{end}}
57+
<h3>{{.Trans.UploadLabel}}</h3>
58+
<a class="file active" tabindex="0" role="button" title="{{.Trans.UploadFilesHint}}">{{.Trans.UploadFilesLabel}}</a>
59+
{{if .CanMkdir}}<a class="dirfile hidden" tabindex="0" role="button" title="{{.Trans.UploadDirHint}}">{{.Trans.UploadDirLabel}}</a>
60+
<a class="innerdirfile hidden" tabindex="0" role="button" title="{{.Trans.UploadDirContentsHint}}">{{.Trans.UploadDirContentsLabel}}</a>{{end}}
6061
</div>
6162
<div class="panel upload">
6263
<form method="POST" action="{{.SubItemPrefix}}?upload" enctype="multipart/form-data">

src/tpl/defaultTheme/frontend/index.js

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,9 @@
442442
var fileInput = form.querySelector('.file');
443443
if (!fileInput) return;
444444

445+
var submitButton = form.querySelector('[type=submit]');
446+
if (submitButton) submitButton.classList.add(classNone);
447+
445448
var uploadType = document.body.querySelector('.upload-type');
446449
if (!uploadType) return;
447450

@@ -600,16 +603,13 @@
600603
}
601604
}
602605

603-
var switchToFileMode = noop;
604-
var switchToDirMode = noop;
605-
606-
function enableAddDirFile() {
606+
function enableFileDirModeSwitch() {
607607
var classHidden = 'hidden';
608608
var classActive = 'active';
609609

610610
function onClickOpt(optTarget, clearInput) {
611611
if (optTarget === optActive) {
612-
return;
612+
return false;
613613
}
614614
optActive.classList.remove(classActive);
615615

@@ -666,6 +666,25 @@
666666
if (optFile) {
667667
optFile.addEventListener('click', onClickOptFile);
668668
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+
});
669688
}
670689
if (optDirFile) {
671690
optDirFile.addEventListener('click', onClickOptDirFile);
@@ -679,49 +698,32 @@
679698
if (hasStorage) {
680699
var uploadTypeField = 'upload-type';
681700
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-
691701
if (prevUploadType === dirFile) {
692702
optDirFile && optDirFile.click();
693703
} else if (prevUploadType === innerDirFile) {
694704
optInnerDirFile && optInnerDirFile.click();
695705
}
696-
}
697706

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);
707709
}
708710

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+
}
711716
});
712-
if (nodir) {
713-
onClickOptFile(); // prevent clear input files
714-
}
715-
});
717+
}
716718

717-
switchToFileMode = function () {
719+
function switchToFileMode() {
718720
if (optFile && optActive !== optFile) {
719721
optFile.focus();
720722
onClickOptFile(true);
721723
}
722724
}
723725

724-
switchToDirMode = function () {
726+
function switchToDirMode() {
725727
if (optDirFile) {
726728
if (optActive !== optDirFile) {
727729
optDirFile.focus();
@@ -734,6 +736,11 @@
734736
}
735737
}
736738
}
739+
740+
return {
741+
switchToFileMode: switchToFileMode,
742+
switchToDirMode: switchToDirMode
743+
};
737744
}
738745

739746
function enableUploadProgress() { // also fix Safari upload filename has no path info
@@ -853,7 +860,7 @@
853860
});
854861
}
855862

856-
function enableAddDragDrop(uploadProgressively) {
863+
function enableAddDragDrop(uploadProgressively, switchToFileMode, switchToDirMode) {
857864
var isSelfDragging = false;
858865
var classDragging = 'dragging';
859866

@@ -919,7 +926,7 @@
919926
dragDropEl.addEventListener('drop', onDrop);
920927
}
921928

922-
function enableAddPasteProgressively(uploadProgressively) {
929+
function enableAddPasteProgressively(uploadProgressively, switchToFileMode, switchToDirMode) {
923930
var typeTextPlain = 'text/plain';
924931
var nonTextInputTypes = ['hidden', 'radio', 'checkbox', 'button', 'reset', 'submit', 'image'];
925932

@@ -1031,11 +1038,11 @@
10311038
});
10321039
}
10331040

1034-
enableAddDirFile();
1041+
var modes = enableFileDirModeSwitch();
10351042
var uploadProgressively = enableUploadProgress();
10361043
enableFormUploadProgress(uploadProgressively);
1037-
enableAddPasteProgressively(uploadProgressively);
1038-
enableAddDragDrop(uploadProgressively);
1044+
enableAddPasteProgressively(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode);
1045+
enableAddDragDrop(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode);
10391046
}
10401047

10411048
function enableNonRefreshDelete() {

0 commit comments

Comments
 (0)