Skip to content

Commit c2c6db4

Browse files
committed
feat(tpl): add upload failed hint
When upload failed, show failed hint, and stop processing rest of the batch queue. User must reload page manually.
1 parent dbdf6c3 commit c2c6db4

File tree

4 files changed

+42
-11
lines changed

4 files changed

+42
-11
lines changed

src/i18n/translation.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ type Translation struct {
1111
UploadDirContentsHint string
1212
UploadLabel string
1313
UploadingLabel string
14+
UploadSuccessLabel string
15+
UploadFailLabel string
1416

1517
ListDirLabel string
1618
ListNameLabel string
@@ -45,6 +47,8 @@ var translationEnUs = Translation{
4547
UploadDirContentsHint: "Upload contents of directory",
4648
UploadLabel: "Upload",
4749
UploadingLabel: "Uploading...",
50+
UploadSuccessLabel: "Upload success",
51+
UploadFailLabel: "Upload failed",
4852

4953
ListDirLabel: "Dir",
5054
ListNameLabel: "Name",
@@ -79,6 +83,8 @@ var translationZhSimp = Translation{
7983
UploadDirContentsHint: "上传目录下的内容",
8084
UploadLabel: "上传",
8185
UploadingLabel: "上传中……",
86+
UploadSuccessLabel: "上传成功",
87+
UploadFailLabel: "上传失败",
8288

8389
ListDirLabel: "目录",
8490
ListNameLabel: "名称",
@@ -113,6 +119,8 @@ var translationZhTrad = Translation{
113119
UploadDirContentsHint: "上傳目錄下的內容",
114120
UploadLabel: "上傳",
115121
UploadingLabel: "上傳中……",
122+
UploadSuccessLabel: "上傳成功",
123+
UploadFailLabel: "上傳失敗",
116124

117125
ListDirLabel: "目錄",
118126
ListNameLabel: "名稱",

src/tpl/frontend/index.css

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@ html.dragging::before {
210210
pointer-events: none;
211211
}
212212

213-
.upload-status.uploading {
213+
.upload-status.uploading,
214+
.upload-status.failed {
214215
visibility: visible;
215216
}
216217

@@ -223,12 +224,21 @@ html.dragging::before {
223224
transition: transform .2s, opacity .2s;
224225
padding: 0.5em 1em;
225226
color: #fff;
227+
white-space: nowrap;
228+
}
229+
230+
.upload-status .label.tips {
226231
background: #c9c;
227232
background-color: rgba(204, 153, 204, 0.8);
228-
white-space: nowrap;
229233
}
230234

231-
.upload-status.uploading .label {
235+
.upload-status .label.failed {
236+
background: #800000;
237+
background-color: rgba(128, 0, 0, 0.8);
238+
}
239+
240+
.upload-status.uploading .label.tips,
241+
.upload-status.failed .label.failed {
232242
opacity: 1;
233243
transform: translate(-50%, 10%);
234244
}

src/tpl/frontend/index.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
{{if .CanUpload}}
2525
<div class="upload-status">
26-
<span class="label">{{.Trans.UploadingLabel}}</span>
26+
<span class="label tips">{{.Trans.UploadingLabel}}</span>
27+
<span class="label failed">{{.Trans.UploadFailLabel}}<span class="message"></span></span>
2728
<span class="progress"></span>
2829
</div>
2930
{{end}}

src/tpl/frontend/index.js

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -792,20 +792,31 @@
792792
var uploading = false;
793793
var batches = [];
794794
var classUploading = 'uploading';
795+
var classFailed = 'failed';
795796
var elUploadStatus = document.body.querySelector('.upload-status');
796797
var elProgress = elUploadStatus && elUploadStatus.querySelector('.progress');
798+
var elFailedMessage = elUploadStatus && elUploadStatus.querySelector('.failed .message');
797799

798800
function onComplete() {
799801
if (elProgress) {
800802
elProgress.style.width = '';
801803
}
804+
}
805+
806+
function onSuccess() {
802807
if (batches.length) {
803-
uploadBatch(batches.shift());
808+
return uploadBatch(batches.shift()); // use "return" for tail call optimize
804809
} else {
805810
uploading = false;
806-
if (elUploadStatus) {
807-
removeClass(elUploadStatus, classUploading);
808-
}
811+
removeClass(elUploadStatus, classUploading);
812+
}
813+
}
814+
815+
function onFail(e) {
816+
removeClass(elUploadStatus, classUploading);
817+
addClass(elUploadStatus, classFailed);
818+
if (elFailedMessage) {
819+
elFailedMessage.textContent = " - " + e.type;
809820
}
810821
}
811822

@@ -829,9 +840,7 @@
829840
batches.push(files);
830841
} else {
831842
uploading = true;
832-
if (elUploadStatus) {
833-
addClass(elUploadStatus, classUploading);
834-
}
843+
addClass(elUploadStatus, classUploading);
835844
uploadBatch(files);
836845
}
837846
}
@@ -857,8 +866,11 @@
857866

858867
var xhr = new XMLHttpRequest();
859868
xhr.upload.addEventListener('error', onComplete);
869+
xhr.upload.addEventListener('error', onFail);
860870
xhr.upload.addEventListener('abort', onComplete);
871+
xhr.upload.addEventListener('abort', onFail);
861872
xhr.upload.addEventListener('load', onComplete);
873+
xhr.upload.addEventListener('load', onSuccess);
862874
xhr.upload.addEventListener('load', onLoad);
863875
if (elProgress) {
864876
xhr.upload.addEventListener('progress', onProgress);

0 commit comments

Comments
 (0)