瀏覽代碼

Fix #1398: Resumable uploads enhancements

Kartik Visweswaran 6 年之前
父節點
當前提交
a49a4f187c

+ 7 - 0
CHANGE.md

@@ -5,6 +5,13 @@ Change Log: `bootstrap-fileinput`
 
 **Date:** _under development_
 
+- (enh #1398): Resumable uploads enhancements (only when `enableResumableUpload` is `true`):
+    - Add new properties to fileActionSettings:
+        - `indicatorPaused`
+        - `indicatorPausedTitle`
+    - Enhance pause and resume behavior by showing appropriate indicators on the file thumbnails
+    - Add `resume` method and enhance `pause` method for resumable uploads
+    - Remove upload button from individual thumbnails and ability to upload selective single file for resumable uploads.
 - (enh #1397): Correct `uploadParamNames` to include all parameters.
 
 ## version 5.0.2

+ 67 - 75
js/fileinput.js

@@ -1043,10 +1043,9 @@
                     rm.lastProgress = 0;
                     if (self.showPreview) {
                         rm.$thumb = fm.getThumb(id) || null;
-                        rm.$progress = rm.$btnUpload = rm.$btnDelete = null;
+                        rm.$progress = rm.$btnDelete = null;
                         if (rm.$thumb && rm.$thumb.length) {
                             rm.$progress = rm.$thumb.find('.file-thumb-progress');
-                            rm.$btnUpload = rm.$thumb.find('.kv-file-upload');
                             rm.$btnDelete = rm.$thumb.find('.kv-file-remove');
                         }
                     }
@@ -1067,7 +1066,7 @@
                     rm.processed = {};
                 },
                 setProcessed: function (status) {
-                    var rm = self.resumableManager, fm = self.fileManager, id = rm.id, msg, $btnUpload = rm.$btnUpload,
+                    var rm = self.resumableManager, fm = self.fileManager, id = rm.id, msg,
                         $thumb = rm.$thumb, $prog = rm.$progress, hasThumb = $thumb && $thumb.length,
                         params = {id: hasThumb ? $thumb.attr('id') : '', index: fm.getIndex(id), fileId: id};
                     rm.completed = true;
@@ -1081,7 +1080,6 @@
                             self._setProgress(101, $prog);
                             self._setThumbStatus($thumb, 'Success');
                             self._initUploadSuccess(rm.processed[id].data, $thumb);
-                            $btnUpload.hide();
                         }
                         self.fileManager.removeFile(id);
                         delete rm.processed[id];
@@ -1093,11 +1091,6 @@
                         if (self.showPreview) {
                             self._setThumbStatus($thumb, 'Error');
                             self._setPreviewError($thumb, true);
-                            if (!self.retryErrorUploads) {
-                                $btnUpload.hide();
-                            } else {
-                                $btnUpload.removeAttr('disabled');
-                            }
                             self._setProgress(101, $prog, self.msgProgressError);
                             self._setProgress(101, self.$progress, self.msgProgressError);
                             self.cancelling = true;
@@ -1164,24 +1157,6 @@
                         self.unlock();
                     }
                 },
-                uploadSingle: function (id) {
-                    var rm = self.resumableManager, fm = self.fileManager, flag = 'new', intervalId;
-                    intervalId = setInterval(function () {
-                        rm.checkAborted(intervalId);
-                        if (flag === 'new') {
-                            self.lock();
-                            flag = 'processing';
-                            if (fm.stack[id]) {
-                                rm.init(id, fm.stack[id]);
-                                rm.uploadResumable();
-                            }
-                        }
-                        if (!fm.isPending(id) && rm.completed || fm.isProcessed()) {
-                            clearInterval(intervalId);
-                            self.unlock();
-                        }
-                    }, self.processDelay);
-                },
                 upload: function () {
                     var rm = self.resumableManager, fm = self.fileManager, ids = fm.getIdList(), flag = 'new',
                         intervalId;
@@ -1297,7 +1272,7 @@
                 sendAjax: function (index, retry) {
                     var fm = self.fileManager, rm = self.resumableManager, opts = self.resumableUploadOptions, f,
                         chunkSize = rm.chunkSize, id = rm.id, file = rm.file, $thumb = rm.$thumb,
-                        $btnUpload = rm.$btnUpload, $btnDelete = rm.$btnDelete;
+                        $btnDelete = rm.$btnDelete;
                     if (rm.processed[id] && rm.processed[id][index]) {
                         return;
                     }
@@ -1312,15 +1287,15 @@
                     fd = new FormData();
                     f = fm.stack[id];
                     self._setUploadData(fd, {
-                        fileId: id,
-                        fileName: rm.fileName,
-                        fileSize: file.size,
-                        fileRelativePath: f.relativePath,
-                        fileBlob: [blob, rm.fileName],
+                        chunkCount: rm.chunkCount,
                         chunkIndex: index,
                         chunkSize: chunkSize,
                         chunkSizeStart: chunkSize * index,
-                        chunkCount: rm.chunkCount,
+                        fileBlob: [blob, rm.fileName],
+                        fileId: id,
+                        fileName: rm.fileName,
+                        fileRelativePath: f.relativePath,
+                        fileSize: file.size,
                         retryCount: retry
                     });
                     if (rm.$progress && rm.$progress.length) {
@@ -1333,7 +1308,6 @@
                                 self._setThumbStatus($thumb, 'Loading');
                                 $h.addCss($thumb, 'file-uploading');
                             }
-                            $btnUpload.attr('disabled', true);
                             $btnDelete.attr('disabled', true);
                         }
                         self._raise('filechunkbeforesend', [id, index, retry, fm, rm, outData]);
@@ -1685,10 +1659,12 @@
                     indicatorSuccess: '<i class="glyphicon glyphicon-ok-sign text-success"></i>',
                     indicatorError: '<i class="glyphicon glyphicon-exclamation-sign text-danger"></i>',
                     indicatorLoading: '<i class="glyphicon glyphicon-hourglass text-muted"></i>',
+                    indicatorPaused: '<i class="glyphicon glyphicon-pause text-primary"></i>',
                     indicatorNewTitle: 'Not uploaded yet',
                     indicatorSuccessTitle: 'Uploaded',
                     indicatorErrorTitle: 'Upload Error',
-                    indicatorLoadingTitle: 'Uploading ...'
+                    indicatorLoadingTitle: 'Uploading ...',
+                    indicatorPausedTitle: 'Upload Paused'
                 }
             };
             $.each(self.defaults, function (key, setting) {
@@ -3160,11 +3136,7 @@
                 $prog, fnBefore, fnSuccess, fnComplete, fnError, updateUploadLog, op = self.ajaxOperations.uploadThumb,
                 errMsg, fileObj = fm.getFile(id), rm = self.resumableManager,
                 params = {id: previewId, index: i, fileId: id}, fileName = self.fileManager.getFileName(id, true);
-            if (self.enableResumableUpload) {
-                self.paused = false;
-                self.cancelling = false;
-                fm.initStats(id);
-                rm.uploadSingle(id);
+            if (self.enableResumableUpload) { // not enabled for resumable uploads
                 return;
             }
             if (self.showPreview) {
@@ -3931,7 +3903,7 @@
                 css = 'file-preview-' + status.toLowerCase(),
                 $indicator = $thumb.find('.file-upload-indicator'),
                 config = self.fileActionSettings;
-            $thumb.removeClass('file-preview-success file-preview-error file-preview-loading');
+            $thumb.removeClass('file-preview-success file-preview-error file-preview-paused file-preview-loading');
             if (status === 'Success') {
                 $thumb.find('.file-drag-handle').remove();
             }
@@ -4483,11 +4455,16 @@
             dUrl,
             dFile
         ) {
+            var self = this;
             if (!cfg.type && isInit) {
                 cfg.type = 'image';
             }
-            if (typeof showUpl === 'function') {
-                showUpl = showUpl(cfg);
+            if (self.enableResumableUpload) {
+                showUpl = false;
+            } else {
+                if (typeof showUpl === 'function') {
+                    showUpl = showUpl(cfg);
+                }
             }
             if (typeof showDwn === 'function') {
                 showDwn = showDwn(cfg);
@@ -4845,6 +4822,9 @@
                 if (self.isAjaxUpload && self.fileManager.exists(fileId)) {
                     msg = self.msgDuplicateFile.setTokens({name: caption, size: fSizeKB});
                     throwError(msg, file, previewId, i, fileId);
+                    if (self.showPreview && $('#' + previewId).length) {
+                        $('#' + previewId).remove();
+                    }
                     return;
                 }
                 if (!self.canPreview(file)) {
@@ -4983,10 +4963,38 @@
             self._raise('fileunlock', [self.fileManager.stack, self._getExtraData()]);
             return self.$element;
         },
+        resume: function () {
+            var self = this, flag = false, $pr = self.$progress, rm = self.resumableManager;
+            if (!self.enableResumableUpload) {
+                return self.$element;
+            }
+            if (self.paused) {
+                $pr.html(self.progressPauseTemplate.setTokens({
+                    percent: 101,
+                    status: self.msgUploadResume,
+                    stats: ''
+                }));
+            } else {
+                flag = true;
+            }
+            self.paused = false;
+            if (flag) {
+                $pr.html(self.progressInfoTemplate.setTokens({
+                    percent: 101,
+                    status: self.msgUploadBegin,
+                    stats: ''
+                }));
+            }
+            setTimeout(function () {
+                rm.upload();
+            }, self.processDelay);
+            return self.$element;
+        },
         pause: function () {
-            var self = this, rm = self.resumableManager, xhr = self.ajaxRequests, len = xhr.length, i;
+            var self = this, rm = self.resumableManager, xhr = self.ajaxRequests, len = xhr.length, i,
+                pct = rm.getProgress(), actions = self.fileActionSettings;
             if (!self.enableResumableUpload) {
-                return;
+                return self.$element;
             }
             if (rm.chunkIntervalId) {
                 clearInterval(rm.chunkIntervalId);
@@ -5002,12 +5010,17 @@
                 }
             }
             if (self.showPreview) {
-                rm.$btnUpload.removeAttr('disabled');
                 self._getThumbs().each(function () {
-                    var $thumb = $(this), fileId = $thumb.attr('data-fileid');
+                    var $thumb = $(this), fileId = $thumb.attr('data-fileid'), t = self._getLayoutTemplate('stats'),
+                        stats, $indicator = $thumb.find('.file-upload-indicator');
                     $thumb.removeClass('file-uploading');
+                    if ($indicator.attr('title') === actions.indicatorLoadingTitle) {
+                        self._setThumbStatus($thumb, 'Paused');
+                        stats = t.setTokens({pendingTime: self.msgPaused, uploadSpeed: ''});
+                        self.paused = true;
+                        self._setProgress(pct, $thumb.find('.file-thumb-progress'), pct + '%', stats);
+                    }
                     if (!self.fileManager.getFile(fileId)) {
-                        $thumb.find('.kv-file-upload').removeClass('disabled').removeAttr('disabled');
                         $thumb.find('.kv-file-remove').removeClass('disabled').removeAttr('disabled');
                     }
                 });
@@ -5133,8 +5146,8 @@
             return self.$element;
         },
         upload: function () {
-            var self = this, fm = self.fileManager, totLen = fm.count(), i, outData, len, rm = self.resumableManager,
-                hasExtraData = !$.isEmptyObject(self._getExtraData()), $pr = self.$progress;
+            var self = this, fm = self.fileManager, totLen = fm.count(), i, outData, len,
+                hasExtraData = !$.isEmptyObject(self._getExtraData());
             if (!self.isAjaxUpload || self.isDisabled || !self._isFileSelectionValid(totLen)) {
                 return;
             }
@@ -5153,6 +5166,9 @@
                 self._uploadExtraOnly();
                 return;
             }
+            if (self.enableResumableUpload) {
+                return self.resume();
+            }
             if (self.uploadAsync || self.enableResumableUpload) {
                 outData = self._getOutData(null);
                 self._raise('filebatchpreupload', [outData]);
@@ -5167,30 +5183,6 @@
                 self._initSortable();
                 self.cacheInitialPreview = self.getPreview();
             }
-            if (self.enableResumableUpload) {
-                var flag = false;
-                if (self.paused) {
-                    $pr.html(self.progressPauseTemplate.setTokens({
-                        percent: 101,
-                        status: self.msgUploadResume,
-                        stats: ''
-                    }));
-                } else {
-                    flag = true;
-                }
-                self.paused = false;
-                if (flag) {
-                    $pr.html(self.progressInfoTemplate.setTokens({
-                        percent: 101,
-                        status: self.msgUploadBegin,
-                        stats: ''
-                    }));
-                }
-                setTimeout(function () {
-                    rm.upload();
-                }, self.processDelay);
-                return self.$element;
-            }
             self._setProgress(2);
             self.hasInitData = false;
             if (self.uploadAsync) {

文件差異過大導致無法顯示
+ 0 - 0
js/fileinput.min.js


+ 2 - 1
js/locales/LANG.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Not uploaded yet',
             indicatorSuccessTitle: 'Uploaded',
             indicatorErrorTitle: 'Upload Error',
-            indicatorLoadingTitle: 'Uploading ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Uploading ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/ar.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'لم يتم الرفع بعد',
             indicatorSuccessTitle: 'تم الرفع',
             indicatorErrorTitle: 'خطأ بالرفع',
-            indicatorLoadingTitle: 'جارٍ الرفع ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'جارٍ الرفع ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/az.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Davam edir',
             indicatorSuccessTitle: 'Tamamlandı',
             indicatorErrorTitle: 'Yükləmə xətası',
-            indicatorLoadingTitle: 'Yükləmə ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Yükləmə ...'
         },
         previewZoomButtonTitles: {
             prev: 'Əvvəlki fayla bax',

+ 2 - 1
js/locales/bg.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Все още не е качил',
             indicatorSuccessTitle: 'Качено',
             indicatorErrorTitle: 'Качи Error',
-            indicatorLoadingTitle: 'Качва се ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Качва се ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/ca.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'No pujat encara',
             indicatorSuccessTitle: 'Subido',
             indicatorErrorTitle: 'Pujar Error',
-            indicatorLoadingTitle: 'Pujant ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Pujant ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/cr.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Još nije učitao',
             indicatorSuccessTitle: 'Preneseno',
             indicatorErrorTitle: 'Postavi Greška',
-            indicatorLoadingTitle: 'Prijenos ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Prijenos ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/cs.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Ještě nenahrál',
             indicatorSuccessTitle: 'Nahraný',
             indicatorErrorTitle: 'Chyba nahrávání',
-            indicatorLoadingTitle: 'Nahrávání ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Nahrávání ...'
         },
         previewZoomButtonTitles: {
             prev: 'Zobrazit předchozí soubor',

+ 2 - 1
js/locales/da.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Ikke uploadet endnu',
             indicatorSuccessTitle: 'Uploadet',
             indicatorErrorTitle: 'Upload fejl',
-            indicatorLoadingTitle: 'Uploader ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Uploader ...'
         },
         previewZoomButtonTitles: {
             prev: 'Se forrige fil',

+ 2 - 1
js/locales/de.js

@@ -94,7 +94,8 @@
             indicatorNewTitle: 'Noch nicht hochgeladen',
             indicatorSuccessTitle: 'Hochgeladen',
             indicatorErrorTitle: 'Upload Fehler',
-            indicatorLoadingTitle: 'Hochladen ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Hochladen ...'
         },
         previewZoomButtonTitles: {
             prev: 'Vorherige Datei anzeigen',

+ 2 - 1
js/locales/el.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Δεν μεταφορτώθηκε ακόμα',
             indicatorSuccessTitle: 'Μεταφορτώθηκε',
             indicatorErrorTitle: 'Σφάλμα Μεταφόρτωσης',
-            indicatorLoadingTitle: 'Μεταφόρτωση ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Μεταφόρτωση ...'
         },
         previewZoomButtonTitles: {
             prev: 'Προηγούμενο αρχείο',

+ 2 - 1
js/locales/es.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'No subido todavía',
             indicatorSuccessTitle: 'Subido',
             indicatorErrorTitle: 'Error al subir',
-            indicatorLoadingTitle: 'Subiendo...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Subiendo...'
         },
         previewZoomButtonTitles: {
             prev: 'Anterior',

+ 2 - 1
js/locales/et.js

@@ -95,7 +95,8 @@
             indicatorNewTitle: 'Pole veel salvestatud',
             indicatorSuccessTitle: 'Uploaded',
             indicatorErrorTitle: 'Salvestamise viga',
-            indicatorLoadingTitle: 'Salvestan ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Salvestan ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/fa.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'آپلود نشده است',
             indicatorSuccessTitle: 'آپلود شده',
             indicatorErrorTitle: 'بارگذاری خطا',
-            indicatorLoadingTitle: 'آپلود ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'آپلود ...'
         },
         previewZoomButtonTitles: {
             prev: 'مشاهده فایل قبلی',

+ 2 - 1
js/locales/fi.js

@@ -84,7 +84,8 @@
             indicatorNewTitle: 'Ei ladattu',
             indicatorSuccessTitle: 'Ladattu',
             indicatorErrorTitle: 'Lataus epäonnistui',
-            indicatorLoadingTitle: 'Ladataan ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Ladataan ...'
         },
         previewZoomButtonTitles: {
             prev: 'Seuraava tiedosto',

+ 2 - 1
js/locales/fr.js

@@ -95,7 +95,8 @@
             indicatorNewTitle: 'Pas encore transféré',
             indicatorSuccessTitle: 'Posté',
             indicatorErrorTitle: 'Ajouter erreur',
-            indicatorLoadingTitle: 'En cours...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'En cours...'
         },
         previewZoomButtonTitles: {
             prev: 'Voir le fichier précédent',

+ 2 - 1
js/locales/gl.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Non subido aínda',
             indicatorSuccessTitle: 'Subido',
             indicatorErrorTitle: 'Erro ao subir',
-            indicatorLoadingTitle: 'Subindo...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Subindo...'
         },
         previewZoomButtonTitles: {
             prev: 'Ver arquivo anterior',

+ 2 - 1
js/locales/he.js

@@ -91,7 +91,8 @@
             indicatorNewTitle: 'עדיין לא הועלה',
             indicatorSuccessTitle: 'הועלה',
             indicatorErrorTitle: 'שגיאת העלאה',
-            indicatorLoadingTitle: 'מעלה...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'מעלה...'
         },
         previewZoomButtonTitles: {
             prev: 'הצגת את הקובץ הקודם',

+ 2 - 1
js/locales/hu.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Nem feltöltött',
             indicatorSuccessTitle: 'Feltöltött',
             indicatorErrorTitle: 'Feltöltés hiba',
-            indicatorLoadingTitle: 'Feltöltés ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Feltöltés ...'
         },
         previewZoomButtonTitles: {
             prev: 'Elöző fájl megnézése',

+ 2 - 1
js/locales/id.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Belum diunggah',
             indicatorSuccessTitle: 'Sudah diunggah',
             indicatorErrorTitle: 'Kesalahan dalam mengungah',
-            indicatorLoadingTitle: 'Mengunggah ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Mengunggah ...'
         },
         previewZoomButtonTitles: {
             prev: 'Lihat berkas sebelumnya',

+ 2 - 1
js/locales/it.js

@@ -98,7 +98,8 @@
             indicatorNewTitle: 'Non ancora caricato',
             indicatorSuccessTitle: 'Caricati',
             indicatorErrorTitle: 'Carica Errore',
-            indicatorLoadingTitle: 'Caricamento ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Caricamento ...'
         },
         previewZoomButtonTitles: {
             prev: 'Vedi il file precedente',

+ 2 - 1
js/locales/ja.js

@@ -105,7 +105,8 @@
             indicatorNewTitle: 'まだアップロードされていません',
             indicatorSuccessTitle: 'アップロード済み',
             indicatorErrorTitle: 'アップロード失敗',
-            indicatorLoadingTitle: 'アップロード中...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'アップロード中...'
         },
         previewZoomButtonTitles: {
             prev: '前のファイルを表示',

+ 2 - 1
js/locales/ka.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'ჯერ არ ატვირთულა',
             indicatorSuccessTitle: 'ატვირთულია',
             indicatorErrorTitle: 'ატვირთვის შეცდომა',
-            indicatorLoadingTitle: 'ატვირთვა ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'ატვირთვა ...'
         },
         previewZoomButtonTitles: {
             prev: 'წინა ფაილის ნახვა',

+ 2 - 1
js/locales/kr.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: '아직 업로드 되지 않았습니다',
             indicatorSuccessTitle: '업로드 성공',
             indicatorErrorTitle: '업로드 중 에러 발생',
-            indicatorLoadingTitle: '업로드 중 ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  '업로드 중 ...'
         },
         previewZoomButtonTitles: {
             prev: '이전 파일',

+ 2 - 1
js/locales/kz.js

@@ -84,7 +84,8 @@
             indicatorNewTitle: 'Жүктелген жоқ',
             indicatorSuccessTitle: 'Жүктелген',
             indicatorErrorTitle: 'Жүктелу қатесі ',
-            indicatorLoadingTitle: 'Жүктелу ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Жүктелу ...'
         },
         previewZoomButtonTitles: {
             prev: 'Алдыңғы файлды қарау',

+ 2 - 1
js/locales/lt.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Dar neįkelta',
             indicatorSuccessTitle: 'Įkelta',
             indicatorErrorTitle: 'Įkėlimo Klaida',
-            indicatorLoadingTitle: 'Įkeliama ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Įkeliama ...'
         },
         previewZoomButtonTitles: {
             prev: 'Peržiūrėti ankstesnį failą',

+ 2 - 1
js/locales/nl.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Nog niet geupload',
             indicatorSuccessTitle: 'geupload',
             indicatorErrorTitle: 'fout uploaden',
-            indicatorLoadingTitle: 'uploaden ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'uploaden ...'
         },
         previewZoomButtonTitles: {
             prev: 'Toon vorig bestand',

+ 2 - 1
js/locales/no.js

@@ -95,7 +95,8 @@
             indicatorNewTitle: 'Opplastning ikke fullført',
             indicatorSuccessTitle: 'Opplastet',
             indicatorErrorTitle: 'Opplastningsfeil',
-            indicatorLoadingTitle: 'Laster opp ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Laster opp ...'
         },
         previewZoomButtonTitles: {
             prev: 'Vis forrige fil',

+ 2 - 1
js/locales/pl.js

@@ -86,7 +86,8 @@
             indicatorNewTitle: 'Jeszcze nie przesłany',
             indicatorSuccessTitle: 'Dodane',
             indicatorErrorTitle: 'Błąd',
-            indicatorLoadingTitle: 'Przesyłanie ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Przesyłanie ...'
         },
         previewZoomButtonTitles: {
             prev: 'Pokaż poprzedni plik',

+ 2 - 1
js/locales/pt-BR.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Ainda não enviado',
             indicatorSuccessTitle: 'Enviado',
             indicatorErrorTitle: 'Erro',
-            indicatorLoadingTitle: 'Enviando...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Enviando...'
         },
         previewZoomButtonTitles: {
             prev: 'Visualizar arquivo anterior',

+ 2 - 1
js/locales/pt.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Ainda não carregou',
             indicatorSuccessTitle: 'Carregado',
             indicatorErrorTitle: 'Carregar Erro',
-            indicatorLoadingTitle: 'A carregar ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'A carregar ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/ro.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Nu a încărcat încă',
             indicatorSuccessTitle: 'încărcat',
             indicatorErrorTitle: 'Încărcați eroare',
-            indicatorLoadingTitle: 'Se încarcă ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Se încarcă ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/ru.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Еще не загружен',
             indicatorSuccessTitle: 'Загружен',
             indicatorErrorTitle: 'Ошибка загрузки',
-            indicatorLoadingTitle: 'Загрузка ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Загрузка ...'
         },
         previewZoomButtonTitles: {
             prev: 'Посмотреть предыдущий файл',

+ 2 - 1
js/locales/sk.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'Ešte nenahral',
             indicatorSuccessTitle: 'Nahraný',
             indicatorErrorTitle: 'Chyba pri nahrávaní',
-            indicatorLoadingTitle: 'Nahrávanie ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Nahrávanie ...'
         },
         previewZoomButtonTitles: {
             prev: 'Zobraziť predchádzajúci súbor',

+ 2 - 1
js/locales/sl.js

@@ -94,7 +94,8 @@
             indicatorNewTitle: 'Še ni naloženo',
             indicatorSuccessTitle: 'Naloženo',
             indicatorErrorTitle: 'Napaka pri nalaganju',
-            indicatorLoadingTitle: 'Nalagam ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Nalagam ...'
         },
         previewZoomButtonTitles: {
             prev: 'Poglej prejšno datoteko',

+ 2 - 1
js/locales/sv.js

@@ -95,7 +95,8 @@
             indicatorNewTitle: 'Inte uppladdat ännu',
             indicatorSuccessTitle: 'Uppladdad',
             indicatorErrorTitle: 'Uppladdningsfel',
-            indicatorLoadingTitle: 'Laddar upp...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Laddar upp...'
         },
         previewZoomButtonTitles: {
             prev: 'Visa föregående fil',

+ 2 - 1
js/locales/th.js

@@ -96,7 +96,8 @@
             indicatorNewTitle: 'ยังไม่ได้อัปโหลด',
             indicatorSuccessTitle: 'อัพโหลด',
             indicatorErrorTitle: 'อัปโหลดข้อผิดพลาด',
-            indicatorLoadingTitle: 'อัพโหลด ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'อัพโหลด ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/tr.js

@@ -95,7 +95,8 @@
             indicatorNewTitle: 'Henüz yüklenmedi',
             indicatorSuccessTitle: 'Yüklendi',
             indicatorErrorTitle: 'Yükleme Hatası',
-            indicatorLoadingTitle: 'Yükleniyor ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Yükleniyor ...'
         },
         previewZoomButtonTitles: {
             prev: 'Önceki dosyayı göster',

+ 2 - 1
js/locales/uk.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Ще не відвантажено',
             indicatorSuccessTitle: 'Відвантажено',
             indicatorErrorTitle: 'Помилка при відвантаженні',
-            indicatorLoadingTitle: 'Завантаження ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Завантаження ...'
         },
         previewZoomButtonTitles: {
             prev: 'Переглянути попередній файл',

+ 2 - 1
js/locales/uz.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Not uploaded yet',
             indicatorSuccessTitle: 'Uploaded',
             indicatorErrorTitle: 'Upload Error',
-            indicatorLoadingTitle: 'Uploading ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Uploading ...'
         },
         previewZoomButtonTitles: {
             prev: 'View previous file',

+ 2 - 1
js/locales/vi.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: 'Chưa được upload',
             indicatorSuccessTitle: 'Đã upload',
             indicatorErrorTitle: 'Upload bị lỗi',
-            indicatorLoadingTitle: 'Đang upload ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  'Đang upload ...'
         },
         previewZoomButtonTitles: {
             prev: 'Xem tập tin phía trước',

+ 2 - 1
js/locales/zh-TW.js

@@ -98,7 +98,8 @@
             indicatorNewTitle: '尚未上傳',
             indicatorSuccessTitle: '上傳成功',
             indicatorErrorTitle: '上傳失敗',
-            indicatorLoadingTitle: '上傳中 ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  '上傳中 ...'
         },
         previewZoomButtonTitles: {
             prev: '預覽上壹個文件',

+ 2 - 1
js/locales/zh.js

@@ -97,7 +97,8 @@
             indicatorNewTitle: '没有上传',
             indicatorSuccessTitle: '上传',
             indicatorErrorTitle: '上传错误',
-            indicatorLoadingTitle: '上传 ...'
+            indicatorPausedTitle: 'Upload Paused',
+            indicatorLoadingTitle:  '上传 ...'
         },
         previewZoomButtonTitles: {
             prev: '预览上一个文件',

+ 2 - 1
themes/explorer-fa/theme.js

@@ -67,7 +67,8 @@
             indicatorNew: '<i class="fa fa-plus-circle text-warning"></i>',
             indicatorSuccess: '<i class="fa fa-check-circle text-success"></i>',
             indicatorError: '<i class="fa fa-exclamation-circle text-danger"></i>',
-            indicatorLoading: '<i class="fa fa-hourglass text-muted"></i>'
+            indicatorLoading: '<i class="fa fa-hourglass text-muted"></i>',
+            indicatorPaused: '<i class="fa fa-pause text-info"></i>'
         },
         previewZoomButtonIcons: {
             prev: '<i class="fa fa-caret-left fa-lg"></i>',

文件差異過大導致無法顯示
+ 0 - 0
themes/explorer-fa/theme.min.js


+ 2 - 1
themes/explorer-fas/theme.js

@@ -67,7 +67,8 @@
             indicatorNew: '<i class="fas fa-plus-circle text-warning"></i>',
             indicatorSuccess: '<i class="fas fa-check-circle text-success"></i>',
             indicatorError: '<i class="fas fa-exclamation-circle text-danger"></i>',
-            indicatorLoading: '<i class="fas fa-hourglass text-muted"></i>'
+            indicatorLoading: '<i class="fas fa-hourglass text-muted"></i>',
+            indicatorPaused: '<i class="fa fa-pause text-info"></i>'
         },
         previewZoomButtonIcons: {
             prev: '<i class="fas fa-caret-left fa-lg"></i>',

文件差異過大導致無法顯示
+ 0 - 0
themes/explorer-fas/theme.min.js


+ 2 - 1
themes/fa/theme.js

@@ -24,7 +24,8 @@
             indicatorNew: '<i class="fa fa-plus-circle text-warning"></i>',
             indicatorSuccess: '<i class="fa fa-check-circle text-success"></i>',
             indicatorError: '<i class="fa fa-exclamation-circle text-danger"></i>',
-            indicatorLoading: '<i class="fa fa-hourglass text-muted"></i>'
+            indicatorLoading: '<i class="fa fa-hourglass text-muted"></i>',
+            indicatorPaused: '<i class="fa fa-pause text-info"></i>'
         },
         layoutTemplates: {
             fileIcon: '<i class="fa fa-file kv-caption-icon"></i> '

+ 1 - 1
themes/fa/theme.min.js

@@ -9,4 +9,4 @@
  *
  * Licensed under the BSD-3-Clause
  * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
- */!function(a){"use strict";a.fn.fileinputThemes.fa={fileActionSettings:{removeIcon:'<i class="fa fa-trash"></i>',uploadIcon:'<i class="fa fa-upload"></i>',uploadRetryIcon:'<i class="fa fa-repeat"></i>',downloadIcon:'<i class="fa fa-download"></i>',zoomIcon:'<i class="fa fa-search-plus"></i>',dragIcon:'<i class="fa fa-arrows"></i>',indicatorNew:'<i class="fa fa-plus-circle text-warning"></i>',indicatorSuccess:'<i class="fa fa-check-circle text-success"></i>',indicatorError:'<i class="fa fa-exclamation-circle text-danger"></i>',indicatorLoading:'<i class="fa fa-hourglass text-muted"></i>'},layoutTemplates:{fileIcon:'<i class="fa fa-file kv-caption-icon"></i> '},previewZoomButtonIcons:{prev:'<i class="fa fa-caret-left fa-lg"></i>',next:'<i class="fa fa-caret-right fa-lg"></i>',toggleheader:'<i class="fa fa-fw fa-arrows-v"></i>',fullscreen:'<i class="fa fa-fw fa-arrows-alt"></i>',borderless:'<i class="fa fa-fw fa-external-link"></i>',close:'<i class="fa fa-fw fa-remove"></i>'},previewFileIcon:'<i class="fa fa-file"></i>',browseIcon:'<i class="fa fa-folder-open"></i>',removeIcon:'<i class="fa fa-trash"></i>',cancelIcon:'<i class="fa fa-ban"></i>',pauseIcon:'<i class="fa fa-pause"></i>',uploadIcon:'<i class="fa fa-upload"></i>',msgValidationErrorIcon:'<i class="fa fa-exclamation-circle"></i> '}}(window.jQuery);
+ */!function(a){"use strict";a.fn.fileinputThemes.fa={fileActionSettings:{removeIcon:'<i class="fa fa-trash"></i>',uploadIcon:'<i class="fa fa-upload"></i>',uploadRetryIcon:'<i class="fa fa-repeat"></i>',downloadIcon:'<i class="fa fa-download"></i>',zoomIcon:'<i class="fa fa-search-plus"></i>',dragIcon:'<i class="fa fa-arrows"></i>',indicatorNew:'<i class="fa fa-plus-circle text-warning"></i>',indicatorSuccess:'<i class="fa fa-check-circle text-success"></i>',indicatorError:'<i class="fa fa-exclamation-circle text-danger"></i>',indicatorLoading:'<i class="fa fa-hourglass text-muted"></i>',indicatorPaused:'<i class="fa fa-pause text-info"></i>'},layoutTemplates:{fileIcon:'<i class="fa fa-file kv-caption-icon"></i> '},previewZoomButtonIcons:{prev:'<i class="fa fa-caret-left fa-lg"></i>',next:'<i class="fa fa-caret-right fa-lg"></i>',toggleheader:'<i class="fa fa-fw fa-arrows-v"></i>',fullscreen:'<i class="fa fa-fw fa-arrows-alt"></i>',borderless:'<i class="fa fa-fw fa-external-link"></i>',close:'<i class="fa fa-fw fa-remove"></i>'},previewFileIcon:'<i class="fa fa-file"></i>',browseIcon:'<i class="fa fa-folder-open"></i>',removeIcon:'<i class="fa fa-trash"></i>',cancelIcon:'<i class="fa fa-ban"></i>',pauseIcon:'<i class="fa fa-pause"></i>',uploadIcon:'<i class="fa fa-upload"></i>',msgValidationErrorIcon:'<i class="fa fa-exclamation-circle"></i> '}}(window.jQuery);

+ 2 - 1
themes/fas/theme.js

@@ -24,7 +24,8 @@
             indicatorNew: '<i class="fas fa-plus-circle text-warning"></i>',
             indicatorSuccess: '<i class="fas fa-check-circle text-success"></i>',
             indicatorError: '<i class="fas fa-exclamation-circle text-danger"></i>',
-            indicatorLoading: '<i class="fas fa-hourglass text-muted"></i>'
+            indicatorLoading: '<i class="fas fa-hourglass text-muted"></i>',
+            indicatorPaused: '<i class="fa fa-pause text-info"></i>'
         },
         layoutTemplates: {
             fileIcon: '<i class="fas fa-file kv-caption-icon"></i> '

+ 1 - 1
themes/fas/theme.min.js

@@ -9,4 +9,4 @@
  *
  * Licensed under the BSD-3-Clause
  * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
- */!function(a){"use strict";a.fn.fileinputThemes.fas={fileActionSettings:{removeIcon:'<i class="fas fa-trash-alt"></i>',uploadIcon:'<i class="fas fa-upload"></i>',uploadRetryIcon:'<i class="fas fa-redo-alt"></i>',downloadIcon:'<i class="fas fa-download"></i>',zoomIcon:'<i class="fas fa-search-plus"></i>',dragIcon:'<i class="fas fa-arrows-alt"></i>',indicatorNew:'<i class="fas fa-plus-circle text-warning"></i>',indicatorSuccess:'<i class="fas fa-check-circle text-success"></i>',indicatorError:'<i class="fas fa-exclamation-circle text-danger"></i>',indicatorLoading:'<i class="fas fa-hourglass text-muted"></i>'},layoutTemplates:{fileIcon:'<i class="fas fa-file kv-caption-icon"></i> '},previewZoomButtonIcons:{prev:'<i class="fas fa-caret-left fa-lg"></i>',next:'<i class="fas fa-caret-right fa-lg"></i>',toggleheader:'<i class="fas fa-fw fa-arrows-alt-v"></i>',fullscreen:'<i class="fas fa-fw fa-arrows-alt"></i>',borderless:'<i class="fas fa-fw fa-external-link-alt"></i>',close:'<i class="fas fa-fw fa-times"></i>'},previewFileIcon:'<i class="fas fa-file"></i>',browseIcon:'<i class="fas fa-folder-open"></i>',removeIcon:'<i class="fas fa-trash-alt"></i>',cancelIcon:'<i class="fas fa-ban"></i>',pauseIcon:'<i class="fas fa-pause"></i>',uploadIcon:'<i class="fas fa-upload"></i>',msgValidationErrorIcon:'<i class="fas fa-exclamation-circle"></i> '}}(window.jQuery);
+ */!function(a){"use strict";a.fn.fileinputThemes.fas={fileActionSettings:{removeIcon:'<i class="fas fa-trash-alt"></i>',uploadIcon:'<i class="fas fa-upload"></i>',uploadRetryIcon:'<i class="fas fa-redo-alt"></i>',downloadIcon:'<i class="fas fa-download"></i>',zoomIcon:'<i class="fas fa-search-plus"></i>',dragIcon:'<i class="fas fa-arrows-alt"></i>',indicatorNew:'<i class="fas fa-plus-circle text-warning"></i>',indicatorSuccess:'<i class="fas fa-check-circle text-success"></i>',indicatorError:'<i class="fas fa-exclamation-circle text-danger"></i>',indicatorLoading:'<i class="fas fa-hourglass text-muted"></i>',indicatorPaused:'<i class="fa fa-pause text-info"></i>'},layoutTemplates:{fileIcon:'<i class="fas fa-file kv-caption-icon"></i> '},previewZoomButtonIcons:{prev:'<i class="fas fa-caret-left fa-lg"></i>',next:'<i class="fas fa-caret-right fa-lg"></i>',toggleheader:'<i class="fas fa-fw fa-arrows-alt-v"></i>',fullscreen:'<i class="fas fa-fw fa-arrows-alt"></i>',borderless:'<i class="fas fa-fw fa-external-link-alt"></i>',close:'<i class="fas fa-fw fa-times"></i>'},previewFileIcon:'<i class="fas fa-file"></i>',browseIcon:'<i class="fas fa-folder-open"></i>',removeIcon:'<i class="fas fa-trash-alt"></i>',cancelIcon:'<i class="fas fa-ban"></i>',pauseIcon:'<i class="fas fa-pause"></i>',uploadIcon:'<i class="fas fa-upload"></i>',msgValidationErrorIcon:'<i class="fas fa-exclamation-circle"></i> '}}(window.jQuery);

部分文件因文件數量過多而無法顯示