فهرست منبع

Updates to release v4.4.3 fixes #1048 fixes #1049

Kartik Visweswaran 7 سال پیش
والد
کامیت
f4bce35dd5

+ 12 - 2
CHANGE.md

@@ -3,8 +3,18 @@ Change Log: `bootstrap-fileinput`
 
 ## version 4.4.3 (_under development_)
 
-**Date:** 17-Aug-2017
-
+**Date:** 18-Aug-2017
+
+- (enh #1049): New property `uploadUrlThumb`.
+- (enh #1048): Add ability to retry errored file uploads.
+    - New plugin properties added:
+        - `retryErrorUploads`: _boolean_, will determine if errored out thumbnails can be retried for upload and submitted again.
+        - `fileActionSettings.uploadRetryIcon`: Will change the icon of the upload button to retry icon specified here.
+        - `fileActionSettings.uploadRetryTitle`: Will change the title of the upload button to retry title specified here.
+        - `msgUploadError`: will be displayed within the progress bar on the errored out thumbnails.
+    - Other enhancements include:
+        - resetting progress bar correctly
+        - enhancing upload validation behavior so that if `retryErrorUploads` is `false`, then no upload button is shown on the errored out thumbnails.
 - (enh #1044): Add Slovak Translations.
 - (enh #1043): Add Czech Translations.
 - (enh #1042, #830): Fixes to initial preview delete (related to #1034).

+ 62 - 34
js/fileinput.js

@@ -683,6 +683,8 @@
                     uploadIcon: '<i class="glyphicon glyphicon-upload text-info"></i>',
                     uploadClass: 'btn btn-xs btn-default',
                     uploadTitle: 'Upload file',
+                    uploadRetryIcon: '<i class="glyphicon glyphicon-repeat text-info"></i>',
+                    uploadRetryTitle: 'Retry upload',
                     zoomIcon: '<i class="glyphicon glyphicon-zoom-in"></i>',
                     zoomClass: 'btn btn-xs btn-default',
                     zoomTitle: 'View Details',
@@ -1796,7 +1798,7 @@
                     var xhrobj = $.ajaxSettings.xhr();
                     return self._initXhr(xhrobj, previewId, self.getFileStack().length);
                 },
-                url: self.uploadUrl,
+                url: index && self.uploadUrlThumb ? self.uploadUrlThumb : self.uploadUrl,
                 type: 'POST',
                 dataType: 'json',
                 data: self.formdata,
@@ -1916,9 +1918,8 @@
             var self = this, total = self.getFileStack().length, formdata = new FormData(), outData,
                 previewId = self.previewInitId + "-" + i, $thumb, chkComplete, $btnUpload, $btnDelete,
                 hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData),
-                $prog = $('#' + previewId).find('.file-thumb-progress'),
-                fnBefore, fnSuccess, fnComplete, fnError, updateUploadLog, params = {id: previewId, index: i},
-                uploadFailed, multiUploadMode = !$h.isEmpty(self.$element.attr('multiple'));
+                $prog = $('#' + previewId).find('.file-thumb-progress'), uploadFailed, refreshButtons,
+                fnBefore, fnSuccess, fnComplete, fnError, updateUploadLog, params = {id: previewId, index: i};
             self.formdata = formdata;
             if (self.showPreview) {
                 $thumb = $('#' + previewId + ':not(.file-preview-initial)');
@@ -1930,7 +1931,7 @@
                 return;
             }
             updateUploadLog = function (i, previewId) {
-                if (multiUploadMode || !uploadFailed) {
+                if (!uploadFailed) {
                     self.updateStack(i, undefined);
                 }
                 self.uploadLog.push(previewId);
@@ -1947,7 +1948,7 @@
                     len = data.content.length;
                 }
                 setTimeout(function () {
-                    var triggerReset = multiUploadMode || !uploadFailed;
+                    var triggerReset = self.getFileStack(true).length === 0;
                     if (self.showPreview) {
                         self.previewCache.set(u.content, u.config, u.tags, u.append);
                         if (len) {
@@ -2034,10 +2035,14 @@
                     } else {
                         uploadFailed = true;
                         self._showUploadError(data.error, params);
-                        self._setPreviewError($thumb, i, (multiUploadMode ? null : self.filestack[i]));
+                        self._setPreviewError($thumb, i, self.filestack[i], self.retryErrorUploads);
+                        if (!self.retryErrorUploads) {
+                            $btnUpload.hide();
+                        }
                         if (allFiles) {
                             updateUploadLog(i, pid);
                         }
+                        self._setProgress(101, $('#' + pid).find('.file-thumb-progress'), self.msgUploadError);
                     }
                 }, 100);
             };
@@ -2066,9 +2071,13 @@
                         updateUploadLog(i, previewId);
                     }
                     self.uploadStatus[previewId] = 100;
-                    self._setPreviewError($thumb, i, (multiUploadMode ? null : self.filestack[i]));
+                    self._setPreviewError($thumb, i, self.filestack[i], self.retryErrorUploads);
+                    if (!self.retryErrorUploads) {
+                        $btnUpload.hide();
+                    }
                     $.extend(true, params, self._getOutData(jqXHR));
                     self._setProgress(101, $prog, self.msgAjaxProgressError.replace('{operation}', op));
+                    self._setProgress(101, $('#' + previewId).find('.file-thumb-progress'), self.msgUploadError);
                     self._showUploadError(errMsg, params);
                 }, 100);
             };
@@ -2113,19 +2122,19 @@
             };
             fnSuccess = function (data, textStatus, jqXHR) {
                 /** @namespace data.errorkeys */
-                var outData = self._getOutData(jqXHR, data), $thumbs = self._getThumbs(':not(.file-preview-error)'),
-                    key = 0,
+                var outData = self._getOutData(jqXHR, data), key = 0, 
+                    $thumbs = self._getThumbs(':not(.file-preview-success)'),
                     keys = $h.isEmpty(data) || $h.isEmpty(data.errorkeys) ? [] : data.errorkeys;
+
                 if ($h.isEmpty(data) || $h.isEmpty(data.error)) {
                     self._raise('filebatchuploadsuccess', [outData]);
                     setAllUploaded();
                     if (self.showPreview) {
                         $thumbs.each(function () {
-                            var $thumb = $(this), $btnUpload = $thumb.find('.kv-file-upload');
-                            $thumb.find('.kv-file-upload').hide();
+                            var $thumb = $(this);
                             self._setThumbStatus($thumb, 'Success');
                             $thumb.removeClass('file-uploading');
-                            $btnUpload.removeAttr('disabled');
+                            $thumb.find('.kv-file-upload').hide().removeAttr('disabled');
                         });
                         self._initUploadSuccess(data);
                     } else {
@@ -2135,27 +2144,29 @@
                 } else {
                     if (self.showPreview) {
                         $thumbs.each(function () {
-                            var $thumb = $(this), $btnDelete = $thumb.find('.kv-file-remove'),
-                                $btnUpload = $thumb.find('.kv-file-upload');
+                            var $thumb = $(this), i = $thumb.attr('data-fileindex');
                             $thumb.removeClass('file-uploading');
-                            $btnUpload.removeAttr('disabled');
-                            $btnDelete.removeAttr('disabled');
-                            if (keys.length === 0) {
-                                self._setPreviewError($thumb);
-                                return;
-                            }
-                            if ($.inArray(key, keys) !== -1) {
-                                self._setPreviewError($thumb);
+                            $thumb.find('.kv-file-upload').removeAttr('disabled');
+                            $thumb.find('.kv-file-remove').removeAttr('disabled');
+                            if (keys.length === 0 || $.inArray(key, keys) !== -1) {
+                                self._setPreviewError($thumb, i, self.filestack[i], self.retryErrorUploads);
+                                if (!self.retryErrorUploads) {
+                                    $thumb.find('.kv-file-upload').hide();
+                                    self.updateStack(i, undefined);
+                                }
                             } else {
                                 $thumb.find('.kv-file-upload').hide();
                                 self._setThumbStatus($thumb, 'Success');
-                                self.updateStack(key, undefined);
+                                self.updateStack(i, undefined);
+                            }
+                            if (!$thumb.hasClass('file-preview-error') || self.retryErrorUploads) {
+                                key++;
                             }
-                            key++;
                         });
                         self._initUploadSuccess(data);
                     }
                     self._showUploadError(data.error, outData, 'filebatchuploaderror');
+                    self._setProgress(101, self.$progress, self.msgUploadError);
                 }
             };
             fnComplete = function () {
@@ -2303,9 +2314,11 @@
                 var $el = $(this);
                 self._handler($el, 'click', function () {
                     var $frame = $el.closest($h.FRAMES), ind = $frame.attr('data-fileindex');
-                    if (!$frame.hasClass('file-preview-error')) {
-                        self._uploadSingle(ind, false);
+                    self.$progress.addClass('hide');
+                    if ($frame.hasClass('file-preview-error') && !self.retryErrorUploads) {
+                        return;
                     }
+                    self._uploadSingle(ind, false);
                 });
             });
         },
@@ -2800,9 +2813,6 @@
                 $indicator = $thumb.find('.file-upload-indicator'),
                 config = self.fileActionSettings;
             $thumb.removeClass('file-preview-success file-preview-error file-preview-loading');
-            if (status === 'Error') {
-                $thumb.find('.kv-file-upload').attr('disabled', true);
-            }
             if (status === 'Success') {
                 $thumb.find('.file-drag-handle').remove();
                 $indicator.css('margin-left', 0);
@@ -2810,6 +2820,9 @@
             $indicator.html(config[icon]);
             $indicator.attr('title', config[msg]);
             $thumb.addClass(css);
+            if (status === 'Error' && !self.retryErrorUploads) {
+                $thumb.find('.kv-file-upload').attr('disabled', true);
+            }
         },
         _setProgressCancelled: function () {
             var self = this;
@@ -2856,7 +2869,6 @@
                 sum += value;
             });
             self._setProgress(Math.floor(sum / total));
-
         },
         _validateMinCount: function () {
             var self = this, len = self.isUploadable ? self.getFileStack().length : self.$element.get(0).files.length;
@@ -2904,16 +2916,29 @@
                 return (skipNull ? n !== undefined : n !== undefined && n !== null);
             });
         },
-        _setPreviewError: function ($thumb, i, val) {
+        _setPreviewError: function ($thumb, i, val, repeat) {
             var self = this;
             if (i !== undefined) {
                 self.updateStack(i, val);
             }
-            if (self.removeFromPreviewOnError) {
+            if (self.removeFromPreviewOnError && !repeat) {
                 $thumb.remove();
             } else {
                 self._setThumbStatus($thumb, 'Error');
             }
+            self._refreshUploadButton($thumb, repeat);
+        },
+        _refreshUploadButton: function($thumb, repeat) {
+            var self = this, $btn = $thumb.find('.kv-file-upload'), cfg = self.fileActionSettings,
+                icon = cfg.uploadIcon, title = cfg.uploadTitle;
+            if (!$btn.length) {
+                return;
+            }
+            if (repeat) {
+                icon = cfg.uploadRetryIcon;
+                title = cfg.uploadRetryTitle
+            }
+            $btn.attr('title', title).html(icon);
         },
         _checkDimensions: function (i, chk, $img, $thumb, fname, type, params) {
             var self = this, msg, dim, tag = chk === 'Small' ? 'min' : 'max', limit = self[tag + 'Image' + type],
@@ -3815,6 +3840,7 @@
         uploadIcon: '<i class="glyphicon glyphicon-upload"></i>',
         uploadClass: 'btn btn-default',
         uploadUrl: null,
+        uploadUrlThumb: null,
         uploadAsync: true,
         uploadExtraData: {},
         zoomModalHeight: 480,
@@ -3857,7 +3883,8 @@
         textEncoding: 'UTF-8',
         ajaxSettings: {},
         ajaxDeleteSettings: {},
-        showAjaxErrorDetails: true
+        showAjaxErrorDetails: true,
+        retryErrorUploads: true
     };
 
     $.fn.fileinputLocales.en = {
@@ -3902,6 +3929,7 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
+        msgUploadError: 'Error',
         msgValidationError: 'Validation Error',
         msgLoading: 'Loading file {index} of {files} &hellip;',
         msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
js/fileinput.min.js


+ 3 - 1
js/locales/LANG.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Validation Error',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Validation Error',
         msgLoading: 'Loading file {index} of {files} &hellip;',
         msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',
         msgSelected: '{n} {files} selected',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Remove file',
             uploadTitle: 'Upload file',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'View details',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Not uploaded yet',

+ 3 - 1
js/locales/ar.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'خطأ التحقق من صحة',
+        msgUploadError: 'Error',
+        msgValidationError: : 'خطأ التحقق من صحة',
         msgLoading: 'تحميل ملف {index} من {files} &hellip;',
         msgProgress: 'تحميل ملف {index} من {files} - {name} - {percent}% منتهي.',
         msgSelected: '{n} {files} مختار(ة)',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'إزالة الملف',
             uploadTitle: 'رفع الملف',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'مشاهدة التفاصيل',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'لم يتم الرفع بعد',

+ 3 - 1
js/locales/az.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Yoxlama...',
         msgUploadEnd: 'Fayl(lar) yükləndi',
         msgUploadEmpty: 'Yükləmə üçün verilmiş məlumatlar yanlışdır',
-        msgValidationError: 'Yoxlama nəticəsi səhvir',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Yoxlama nəticəsi səhvir',
         msgLoading: '{files} fayldan {index} yüklənir &hellip;',
         msgProgress: '{files} fayldan {index} - {name} - {percent}% yükləndi.',
         msgSelected: 'Faylların sayı: {n}',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Faylı sil',
             uploadTitle: 'Faylı yüklə',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'məlumatlara bax',
             dragTitle: 'Yerini dəyiş və ya sırala',
             indicatorNewTitle: 'Davam edir',

+ 3 - 1
js/locales/bg.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'утвърждаване грешка',
+        msgUploadError: 'Error',
+        msgValidationError: : 'утвърждаване грешка',
         msgLoading: 'Зареждане на файл {index} от общо {files} &hellip;',
         msgProgress: 'Зареждане на файл {index} от общо {files} - {name} - {percent}% завършени.',
         msgSelected: '{n} {files} избрани',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Махни файл',
             uploadTitle: 'Качване на файл',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Вижте детайли',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Все още не е качил',

+ 3 - 1
js/locales/ca.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Error de validació',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Error de validació',
         msgLoading: 'Pujant fitxer {index} de {files} &hellip;',
         msgProgress: 'Pujant fitxer {index} de {files} - {name} - {percent}% completat.',
         msgSelected: '{n} {files} seleccionat(s)',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Eliminar arxiu',
             uploadTitle: 'Pujar arxiu',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Veure detalls',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'No pujat encara',

+ 3 - 1
js/locales/cr.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Provjera pogrešaka',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Provjera pogrešaka',
         msgLoading: 'Učitavanje datoteke {index} od {files} &hellip;',
         msgProgress: 'Učitavanje datoteke {index} od {files} - {name} - {percent}% završeno.',
         msgSelected: '{n} {files} je označeno',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Uklonite datoteku',
             uploadTitle: 'Postavi datoteku',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Pregledavati pojedinosti',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Još nije učitao',

+ 3 - 1
js/locales/cz.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Inicializujem...',
         msgUploadEnd: 'Hotovo',
         msgUploadEmpty: 'Pro nahrávání nejsou k dispozici žádné platné údaje.',
-        msgValidationError: 'Chyba ověření',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Chyba ověření',
         msgLoading: 'Nahrávání souboru {index} z {files} &hellip;',
         msgProgress: 'Nahrávání souboru {index} z {files} - {name} - {percent}% dokončeno.',
         msgSelected: '{n} {files} vybráno',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Odstranit soubor',
             uploadTitle: 'Nahrát soubor',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Zobrazit podrobnosti',
             dragTitle: 'Posunout / Přeskládat',
             indicatorNewTitle: 'Ještě nenahrál',

+ 3 - 1
js/locales/da.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Validering Fejl',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Validering Fejl',
         msgLoading: 'Henter fil {index} af {files} &hellip;',
         msgProgress: 'Henter fil {index} af {files} - {name} - {percent}% f&aelig;rdiggjort.',
         msgSelected: '{n} {files} valgt',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Fjern fil',
             uploadTitle: 'Upload fil',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Se detaljer',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Ikke uploadet endnu',

+ 3 - 1
js/locales/de.js

@@ -51,7 +51,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Validierungs fehler',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Validierungs fehler',
         msgLoading: 'Lade Datei {index} von {files} hoch&hellip;',
         msgProgress: 'Datei {index} von {files} - {name} - zu {percent}% fertiggestellt.',
         msgSelected: '{n} {files} ausgewählt',
@@ -75,6 +76,7 @@
         fileActionSettings: {
             removeTitle: 'Datei entfernen',
             uploadTitle: 'Datei hochladen',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Details anzeigen',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Noch nicht hochgeladen',

+ 3 - 1
js/locales/el.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Σφάλμα Επικύρωσης',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Σφάλμα Επικύρωσης',
         msgLoading: 'Φόρτωση αρχείου {index} από {files} &hellip;',
         msgProgress: 'Φόρτωση αρχείου {index} απο {files} - {name} - {percent}% ολοκληρώθηκε.',
         msgSelected: '{n} {files} επιλέχθηκαν',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Αφαιρέστε το αρχείο',
             uploadTitle: 'Μεταφορτώστε το αρχείο',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Δείτε λεπτομέρειες',
             dragTitle: 'Μετακίνηση/Προσπαρμογή',
             indicatorNewTitle: 'Δεν μεταφορτώθηκε ακόμα',

+ 3 - 1
js/locales/es.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Inicializando...',
         msgUploadEnd: 'Hecho',
         msgUploadEmpty: 'No existen datos válidos para el envío.',
-        msgValidationError: 'Error de validación',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Error de validación',
         msgLoading: 'Subiendo archivo {index} de {files} &hellip;',
         msgProgress: 'Subiendo archivo {index} de {files} - {name} - {percent}% completado.',
         msgSelected: '{n} {files} seleccionado(s)',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Eliminar archivo',
             uploadTitle: 'Subir archivo',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Ver detalles',
             dragTitle: 'Mover / Reordenar',
             indicatorNewTitle: 'No subido todavía',

+ 3 - 1
js/locales/et.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Validation Error',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Validation Error',
         msgLoading: 'Loading file {index} of {files} &hellip;',
         msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',
         msgSelected: '{n} {files} selected',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Eemalda fail',
             uploadTitle: 'Salvesta fail',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Vaata detaile',
             dragTitle: 'Liiguta / Korralda',
             indicatorNewTitle: 'Pole veel salvestatud',

+ 3 - 1
js/locales/fa.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'در حال شروع...',
         msgUploadEnd: 'انجام شد',
         msgUploadEmpty: 'هیچ داده معتبری برای بارگذاری موجود نیست.',
-        msgValidationError: 'خطای اعتبار سنجی',
+        msgUploadError: 'Error',
+        msgValidationError: : 'خطای اعتبار سنجی',
         msgLoading: 'بارگیری فایل {index} از {files} &hellip;',
         msgProgress: 'بارگیری فایل {index} از {files} - {name} - {percent}% تمام شد.',
         msgSelected: '{n} {files} انتخاب شده',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'حذف فایل',
             uploadTitle: 'آپلود فایل',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'دیدن جزئیات',
             dragTitle: 'جابجایی / چیدمان',
             indicatorNewTitle: 'آپلود نشده است',

+ 3 - 1
js/locales/fi.js

@@ -49,7 +49,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'Ei ladattavaa dataa.',
-        msgValidationError: 'Tiedoston latausvirhe',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Tiedoston latausvirhe',
         msgLoading: 'Ladataan tiedostoa {index} / {files} &hellip;',
         msgProgress: 'Ladataan tiedostoa {index} / {files} - {name} - {percent}% valmistunut.',
         msgSelected: '{n} tiedostoa valittu',
@@ -67,6 +68,7 @@
         fileActionSettings: {
             removeTitle: 'Poista tiedosto',
             uploadTitle: 'Upload file',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Yksityiskohdat',
             dragTitle: 'Siirrä / Järjestele',
             indicatorNewTitle: 'Ei ladattu',

+ 3 - 1
js/locales/fr.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initialisation...',
         msgUploadEnd: 'Terminé',
         msgUploadEmpty: 'Aucune donnée valide disponible pour transmission.',
-        msgValidationError: 'Erreur de validation',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Erreur de validation',
         msgLoading: 'Transmission du fichier {index} sur {files}&hellip;',
         msgProgress: 'Transmission du fichier {index} sur {files} - {name} - {percent}% faits.',
         msgSelected: '{n} {files} sélectionné(s)',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Supprimer le fichier',
             uploadTitle: 'Transférer le fichier',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Voir les détails',
             dragTitle: 'Déplacer / Réarranger',
             indicatorNewTitle: 'Pas encore transféré',

+ 3 - 1
js/locales/gl.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Inicialicando...',
         msgUploadEnd: 'Feito',
         msgUploadEmpty: 'Non existen datos válidos para o envío.',
-        msgValidationError: 'Erro de validación',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Erro de validación',
         msgLoading: 'Subindo arquivo {index} de {files} &hellip;',
         msgProgress: 'Subiendo arquivo {index} de {files} - {name} - {percent}% completado.',
         msgSelected: '{n} {files} seleccionado(s)',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Eliminar arquivo',
             uploadTitle: 'Subir arquivo',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Ver detalles',
             dragTitle: 'Mover / Reordenar',
             indicatorNewTitle: 'Non subido todavía',

+ 3 - 1
js/locales/hu.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Inicializálás...',
         msgUploadEnd: 'Kész',
         msgUploadEmpty: 'Nincs érvényes adat a feltöltéshez.',
-        msgValidationError: 'Érvényesítés hiba',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Érvényesítés hiba',
         msgLoading: '{index} / {files} töltése &hellip;',
         msgProgress: 'Feltöltés: {index} / {files} - {name} - {percent}% kész.',
         msgSelected: '{n} {files} kiválasztva.',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'A fájl eltávolítása',
             uploadTitle: 'fájl feltöltése',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Részletek megtekintése',
             dragTitle: 'Mozgatás / Átrendezés',
             indicatorNewTitle: 'Nem feltöltött',

+ 3 - 1
js/locales/id.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Kesalahan validasi',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Kesalahan validasi',
         msgLoading: 'Memuat {index} dari {files} berkas &hellip;',
         msgProgress: 'Memuat {index} dari {files} berkas - {name} - {percent}% selesai.',
         msgSelected: '{n} {files} dipilih',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Hapus berkas',
             uploadTitle: 'Unggah berkas',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Tampilkan Rincian',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Belum diunggah',

+ 3 - 1
js/locales/it.js

@@ -55,7 +55,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Errore di convalida',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Errore di convalida',
         msgLoading: 'Caricamento file {index} di {files}&hellip;',
         msgProgress: 'Caricamento file {index} di {files} - {name} - {percent}% completato.',
         msgSelected: '{n} {files} selezionati',
@@ -79,6 +80,7 @@
         fileActionSettings: {
             removeTitle: 'Rimuovere il file',
             uploadTitle: 'Caricare un file',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Guarda i dettagli',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Non ancora caricato',

+ 3 - 1
js/locales/ja.js

@@ -60,7 +60,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: '検証エラー',
+        msgUploadError: 'Error',
+        msgValidationError: : '検証エラー',
         msgLoading: '{files}個中{index}個目のファイルを読み込み中&hellip;',
         msgProgress: '{files}個中{index}個のファイルを読み込み中 - {name} - {percent}% 完了',
         msgSelected: '{n}個の{files}を選択',
@@ -87,6 +88,7 @@
         fileActionSettings: {
             removeTitle: 'ファイルを削除',
             uploadTitle: 'ファイルをアップロード',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'プレビュー',
             dragTitle: '移動 / 再配置',
             indicatorNewTitle: 'まだアップロードされていません',

+ 3 - 1
js/locales/kr.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: '업로드 가능 데이터가 존재하지 않습니다.',
-        msgValidationError: '유효성 오류',
+        msgUploadError: 'Error',
+        msgValidationError: : '유효성 오류',
         msgLoading: '파일 {files} 중 {index}번째를 로딩하고 있습니다. &hellip;',
         msgProgress: '파일 {files}의 {name}이 {percent}% 로딩되었습니다. ',
         msgSelected: '{n} {files}이 선택 되었습니다.',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: '파일 지우기',
             uploadTitle: '파일 업로드 하기',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: '세부 정보 보기',
             dragTitle: '옭기기 / 재배열하기',
             indicatorNewTitle: '아직 업로드가 안되었습니다.',

+ 3 - 1
js/locales/kz.js

@@ -41,7 +41,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Тексеру қатесі',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Тексеру қатесі',
         msgLoading: '{index} файлды {files} &hellip; жүктеу',
         msgProgress: '{index} файлды {files} - {name} - {percent}% жүктеу аяқталды.',
         msgSelected: 'Таңдалған файлдар саны: {n}',
@@ -65,6 +66,7 @@
         fileActionSettings: {
             removeTitle: 'Файлды өшіру',
             uploadTitle: 'Файлды жүктеу',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'мәліметтерді көру',
             dragTitle: 'Орнын ауыстыру',
             indicatorNewTitle: 'Жүктелген жоқ',

+ 3 - 1
js/locales/nl.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initialiseren...',
         msgUploadEnd: 'Gedaan',
         msgUploadEmpty: 'Geen geldige data beschikbaar voor upload.',
-        msgValidationError: 'Bevestiging fout',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Bevestiging fout',
         msgLoading: 'Bestanden laden {index} van de {files} &hellip;',
         msgProgress: 'Bestanden laden {index} van de {files} - {name} - {percent}% compleet.',
         msgSelected: '{n} {files} geselecteerd',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Verwijder bestand',
             uploadTitle: 'bestand uploaden',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Bekijk details',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Nog niet geupload',

+ 3 - 1
js/locales/no.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initialiserer...',
         msgUploadEnd: 'Ferdig',
         msgUploadEmpty: 'Ingen gyldige data tilgjengelig for opplastning.',
-        msgValidationError: 'Valideringsfeil',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Valideringsfeil',
         msgLoading: 'Laster fil {index} av {files} &hellip;',
         msgProgress: 'Laster fil {index} av {files} - {name} - {percent}% fullført.',
         msgSelected: '{n} {files} valgt',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Fjern fil',
             uploadTitle: 'Last opp fil',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Vis detaljer',
             dragTitle: 'Flytt / endre rekkefølge',
             indicatorNewTitle: 'Opplastning ikke fullført',

+ 3 - 1
js/locales/pl.js

@@ -43,7 +43,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Błąd walidacji',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Błąd walidacji',
         msgLoading: 'Wczytywanie pliku {index} z {files} &hellip;',
         msgProgress: 'Wczytywanie pliku {index} z {files} - {name} - {percent}% zakończone.',
         msgSelected: '{n} Plików zaznaczonych',
@@ -67,6 +68,7 @@
         fileActionSettings: {
             removeTitle: 'Usuń plik',
             uploadTitle: 'Przesyłanie pliku',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Pokaż szczegóły',
             dragTitle: 'Przenies / Ponownie zaaranżuj',
             indicatorNewTitle: 'Jeszcze nie przesłanych',

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

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Inicializando...',
         msgUploadEnd: 'Concluído',
         msgUploadEmpty: 'Nanhuma informação válida para upload.',
-        msgValidationError: 'Erro de validação',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Erro de validação',
         msgLoading: 'Enviando arquivo {index} de {files}&hellip;',
         msgProgress: 'Enviando arquivo {index} de {files} - {name} - {percent}% completo.',
         msgSelected: '{n} {files} selecionado(s)',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Remover arquivo',
             uploadTitle: 'Enviar arquivo',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Ver detalhes',
             dragTitle: 'Mover / Reordenar',
             indicatorNewTitle: 'Ainda não enviado',

+ 3 - 1
js/locales/pt.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Erro de validação',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Erro de validação',
         msgLoading: 'A carregar ficheiro {index} de {files} &hellip;',
         msgProgress: 'A carregar ficheiro {index} de {files} - {name} - {percent}% completo.',
         msgSelected: '{n} {files} seleccionados',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Remover arquivo',
             uploadTitle: 'Carregar arquivo',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Ver detalhes',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Ainda não carregou',

+ 3 - 1
js/locales/ro.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Eroare de validare',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Eroare de validare',
         msgLoading: 'Se încarcă fișierul {index} din {files} &hellip;',
         msgProgress: 'Se încarcă fișierul {index} din {files} - {name} - {percent}% încărcat.',
         msgSelected: '{n} {files} încărcate',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Scoateți fișier',
             uploadTitle: 'Incarca fisier',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Vezi detalii',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Nu a încărcat încă',

+ 3 - 1
js/locales/ru.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Инициализация...',
         msgUploadEnd: 'Готово',
         msgUploadEmpty: 'Недопустимые данные для загрузки',
-        msgValidationError: 'Ошибка проверки',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Ошибка проверки',
         msgLoading: 'Загрузка файла {index} из {files} &hellip;',
         msgProgress: 'Загрузка файла {index} из {files} - {name} - {percent}% завершено.',
         msgSelected: 'Выбрано файлов: {n}',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Удалить файл',
             uploadTitle: 'Загрузить файл',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'посмотреть детали',
             dragTitle: 'Переместить / Изменить порядок',
             indicatorNewTitle: 'Еще не загружен',

+ 3 - 1
js/locales/sk.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Inicializujem...',
         msgUploadEnd: 'Hotovo',
         msgUploadEmpty: 'Na nahrávanie nie sú k dispozícii žiadne platné údaje.',
-        msgValidationError: 'Chyba overenia',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Chyba overenia',
         msgLoading: 'Nahrávanie súboru {index} z {files} &hellip;',
         msgProgress: 'Nahrávanie súboru {index} z {files} - {name} - {percent}% dokončené.',
         msgSelected: '{n} {files} vybraté',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Odstrániť súbor',
             uploadTitle: 'Nahrať súbor',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Zobraziť podrobnosti',
             dragTitle: 'Posunúť / Preskládať',
             indicatorNewTitle: 'Ešte nenahral',

+ 3 - 1
js/locales/sl.js

@@ -51,7 +51,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Napaki pri validiranju',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Napaki pri validiranju',
         msgLoading: 'Nalaganje datoteke {index} od {files} &hellip;',
         msgProgress: 'Nalaganje datoteke {index} od {files} - {name} - {percent}% dokončano.',
         msgSelected: '{n} {files} izbrano',
@@ -75,6 +76,7 @@
         fileActionSettings: {
             removeTitle: 'Odstrani datoteko',
             uploadTitle: 'Naloži datoteko',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Poglej podrobnosti',
             dragTitle: 'Premaki / Razporedi',
             indicatorNewTitle: 'Še ni naloženo',

+ 3 - 1
js/locales/sv.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Påbörjar...',
         msgUploadEnd: 'Färdig',
         msgUploadEmpty: 'Ingen giltig data tillgänglig för uppladdning.',
-        msgValidationError: 'Valideringsfel',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Valideringsfel',
         msgLoading: 'Laddar fil {index} av {files} &hellip;',
         msgProgress: 'Laddar fil {index} av {files} - {name} - {percent}% färdig.',
         msgSelected: '{n} {files} valda',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Ta bort fil',
             uploadTitle: 'Ladda upp fil',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Visa detaljer',
             dragTitle: 'Flytta / Ändra ordning',
             indicatorNewTitle: 'Inte uppladdat ännu',

+ 3 - 1
js/locales/th.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'ข้อผิดพลาดในการตรวจสอบ',
+        msgUploadError: 'Error',
+        msgValidationError: : 'ข้อผิดพลาดในการตรวจสอบ',
         msgLoading: 'กำลังโหลดไฟล์ {index} จาก {files} &hellip;',
         msgProgress: 'กำลังโหลดไฟล์ {index} จาก {files} - {name} - {percent}%',
         msgSelected: '{n} {files} ถูกเลือก',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'ลบไฟล์',
             uploadTitle: 'อัปโหลดไฟล์',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'ดูรายละเอียด',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'ยังไม่ได้อัปโหลด',

+ 3 - 1
js/locales/tr.js

@@ -53,7 +53,8 @@
         msgUploadBegin: 'Başlıyor...',
         msgUploadEnd: 'Başarılı',
         msgUploadEmpty: 'Yüklemek için geçerli veri mevcut değil.',
-        msgValidationError: 'Doğrulama Hatası',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Doğrulama Hatası',
         msgLoading: 'Dosya yükleniyor {index} / {files} &hellip;',
         msgProgress: 'Dosya yükleniyor {index} / {files} - {name} - %{percent} tamamlandı.',
         msgSelected: '{n} {files} seçildi',
@@ -77,6 +78,7 @@
         fileActionSettings: {
             removeTitle: 'Dosyayı kaldır',
             uploadTitle: 'Dosyayı yükle',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Ayrıntıları görüntüle',
             dragTitle: 'Taşı / Yeniden düzenle',
             indicatorNewTitle: 'Henüz yüklenmedi',

+ 3 - 1
js/locales/uk.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Помилка перевірки',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Помилка перевірки',
         msgLoading: 'Загрузка файла {index} із {files} &hellip;',
         msgProgress: 'Загрузка файла {index} із {files} - {name} - {percent}% завершено.',
         msgSelected: '{n} {files} вибрано',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Видалити файл',
             uploadTitle: 'Загрузити файл',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Подивитися деталі',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: 'Ще не загружено',

+ 3 - 1
js/locales/vi.js

@@ -54,7 +54,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: 'Lỗi xác nhận',
+        msgUploadError: 'Error',
+        msgValidationError: : 'Lỗi xác nhận',
         msgLoading: 'Đang nạp {index} tập tin trong số {files} &hellip;',
         msgProgress: 'Đang nạp {index} tập tin trong số {files} - {name} - {percent}% hoàn thành.',
         msgSelected: '{n} {files} được chọn',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: 'Gỡ bỏ',
             uploadTitle: 'Upload tập tin',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: 'Phóng lớn',
             dragTitle: 'Di chuyển / Sắp xếp lại',
             indicatorNewTitle: 'Chưa được upload',

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

@@ -55,7 +55,8 @@
         msgUploadBegin: 'Initializing...',
         msgUploadEnd: 'Done',
         msgUploadEmpty: 'No valid data available for upload.',
-        msgValidationError: '驗證錯誤',
+        msgUploadError: 'Error',
+        msgValidationError: : '驗證錯誤',
         msgLoading: '載入第 {index} 個檔案,共 {files} &hellip;',
         msgProgress: '載入第 {index} 個檔案,共 {files} - {name} - {percent}% 成功.',
         msgSelected: '{n} {files} 選取',
@@ -79,6 +80,7 @@
         fileActionSettings: {
             removeTitle: '刪除檔案',
             uploadTitle: '上傳檔案',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: '詳細資料',
             dragTitle: 'Move / Rearrange',
             indicatorNewTitle: '尚未上傳',

+ 3 - 1
js/locales/zh.js

@@ -54,7 +54,8 @@
         msgUploadBegin: '正在初始化...',
         msgUploadEnd: '完成',
         msgUploadEmpty: '无效的文件上传.',
-        msgValidationError: '验证错误',
+        msgUploadError: 'Error',
+        msgValidationError: : '验证错误',
         msgLoading: '加载第 {index} 文件 共 {files} &hellip;',
         msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.',
         msgSelected: '{n} {files} 选中',
@@ -78,6 +79,7 @@
         fileActionSettings: {
             removeTitle: '删除文件',
             uploadTitle: '上传文件',
+            uploadRetryTitle: 'Retry upload',
             zoomTitle: '查看详情',
             dragTitle: '移动 / 重置',
             indicatorNewTitle: '没有上传',

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است