Skip to content

Commit 678131e

Browse files
committed
refactor(defaultTheme): refine enhanceUpload() mode switch
1 parent f7c8a5d commit 678131e

File tree

3 files changed

+65
-54
lines changed

3 files changed

+65
-54
lines changed

src/tpl/defaultTheme/frontend/index.css

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

160160
.tab {
161161
display: flex;
162+
gap: 0.5em;
162163
white-space: nowrap;
163164
margin: 1em 1em -1em 1em;
164165
}
165166

166-
.tab label {
167+
.tab h3, .tab a {
167168
flex: 0 0 auto;
168-
margin-right: 0.5em;
169169
padding: 1em;
170+
}
171+
172+
.tab h3 {
173+
margin: 0;
174+
font-size: inherit;
175+
}
176+
177+
.tab a {
170178
cursor: pointer;
171179
}
172180

173-
.tab label:focus {
174-
outline: 0;
175-
text-decoration: underline;
176-
text-decoration-style: dotted;
181+
.tab a:focus {
182+
text-decoration: underline 1px dotted;
177183
}
178184

179-
.tab label:hover {
185+
.tab a:hover {
180186
background: #fbfbfb;
181187
}
182188

183-
.tab label.active {
189+
.tab a.active {
184190
color: #000;
185191
background: #f7f7f7;
186192
}
187193

188-
.tab label:last-child {
194+
.tab a:last-child {
189195
margin-right: 0;
190196
}
191197

@@ -532,11 +538,11 @@ html.dragging::before {
532538
border-color: #555 #555 transparent transparent;
533539
}
534540

535-
.tab label:hover {
541+
.tab a:hover {
536542
background-color: #181818;
537543
}
538544

539-
.tab label.active {
545+
.tab a.active {
540546
color: #fff;
541547
background-color: #222;
542548
}

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 & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
(function () {
2-
function noop() {
3-
}
4-
52
function logError(err) {
63
console.error(err);
74
}
@@ -442,6 +439,9 @@
442439
var fileInput = form.querySelector('.file');
443440
if (!fileInput) return;
444441

442+
var submitButton = form.querySelector('[type=submit]');
443+
if (submitButton) submitButton.classList.add(classNone);
444+
445445
var uploadType = document.body.querySelector('.upload-type');
446446
if (!uploadType) return;
447447

@@ -600,16 +600,13 @@
600600
}
601601
}
602602

603-
var switchToFileMode = noop;
604-
var switchToDirMode = noop;
605-
606-
function enableAddDirFile() {
603+
function enableFileDirModeSwitch() {
607604
var classHidden = 'hidden';
608605
var classActive = 'active';
609606

610607
function onClickOpt(optTarget, clearInput) {
611608
if (optTarget === optActive) {
612-
return;
609+
return false;
613610
}
614611
optActive.classList.remove(classActive);
615612

@@ -666,6 +663,25 @@
666663
if (optFile) {
667664
optFile.addEventListener('click', onClickOptFile);
668665
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+
});
669685
}
670686
if (optDirFile) {
671687
optDirFile.addEventListener('click', onClickOptDirFile);
@@ -679,49 +695,32 @@
679695
if (hasStorage) {
680696
var uploadTypeField = 'upload-type';
681697
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-
691698
if (prevUploadType === dirFile) {
692699
optDirFile && optDirFile.click();
693700
} else if (prevUploadType === innerDirFile) {
694701
optInnerDirFile && optInnerDirFile.click();
695702
}
696-
}
697703

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);
707706
}
708707

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

717-
switchToFileMode = function () {
716+
function switchToFileMode() {
718717
if (optFile && optActive !== optFile) {
719718
optFile.focus();
720719
onClickOptFile(true);
721720
}
722721
}
723722

724-
switchToDirMode = function () {
723+
function switchToDirMode() {
725724
if (optDirFile) {
726725
if (optActive !== optDirFile) {
727726
optDirFile.focus();
@@ -734,6 +733,11 @@
734733
}
735734
}
736735
}
736+
737+
return {
738+
switchToFileMode: switchToFileMode,
739+
switchToDirMode: switchToDirMode
740+
};
737741
}
738742

739743
function enableUploadProgress() { // also fix Safari upload filename has no path info
@@ -853,7 +857,7 @@
853857
});
854858
}
855859

856-
function enableAddDragDrop(uploadProgressively) {
860+
function enableAddDragDrop(uploadProgressively, switchToFileMode, switchToDirMode) {
857861
var isSelfDragging = false;
858862
var classDragging = 'dragging';
859863

@@ -914,7 +918,7 @@
914918
dragDropEl.addEventListener('drop', onDrop);
915919
}
916920

917-
function enableAddPasteProgressively(uploadProgressively) {
921+
function enableAddPasteProgressively(uploadProgressively, switchToFileMode, switchToDirMode) {
918922
var typeTextPlain = 'text/plain';
919923
var nonTextInputTypes = ['hidden', 'radio', 'checkbox', 'button', 'reset', 'submit', 'image'];
920924

@@ -1023,11 +1027,11 @@
10231027
});
10241028
}
10251029

1026-
enableAddDirFile();
1030+
var modes = enableFileDirModeSwitch();
10271031
var uploadProgressively = enableUploadProgress();
10281032
enableFormUploadProgress(uploadProgressively);
1029-
enableAddPasteProgressively(uploadProgressively);
1030-
enableAddDragDrop(uploadProgressively);
1033+
enableAddPasteProgressively(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode);
1034+
enableAddDragDrop(uploadProgressively, modes.switchToFileMode, modes.switchToDirMode);
10311035
}
10321036

10331037
function enableNonRefreshDelete() {

0 commit comments

Comments
 (0)