Forráskód Böngészése

Clipboard paste and caption styling enhancements fix #1713 fix #1714

Kartik Visweswaran 3 éve
szülő
commit
a854635e67

+ 2 - 0
CHANGE.md

@@ -5,6 +5,8 @@ Change Log: `bootstrap-fileinput`
 
 **Date**: _under development_
 
+- (enh #1714): Various enhancements to file caption styling and file preview processing.
+- (enh #1713): Allow pasting files and images from clipboard to the fileinput.
 - (enh #1710): Correct isEmpty helper.
 - (bug #1709): Corrections to image resizing.
 - (bug #1708): Corrections to reselection/upload of image file deleted earlier.

+ 36 - 7
css/fileinput-rtl.css

@@ -10,70 +10,99 @@
  * Licensed under the BSD-3-Clause
  * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
  */
-.kv-rtl .close, .kv-rtl .krajee-default .file-actions, .kv-rtl .krajee-default .file-other-error {
+
+.kv-rtl .close,
+.kv-rtl .krajee-default .file-actions,
+.kv-rtl .krajee-default .file-other-error {
     float: left;
 }
-.kv-rtl .krajee-default.file-preview-frame, .kv-rtl .krajee-default .file-drag-handle, .kv-rtl .krajee-default .file-upload-indicator {
+
+.kv-rtl .krajee-default.file-preview-frame,
+.kv-rtl .krajee-default .file-drag-handle,
+.kv-rtl .krajee-default .file-upload-indicator {
     float: right;
 }
-.kv-rtl .file-zoom-dialog, .kv-rtl .file-error-message pre, .kv-rtl .file-error-message ul {
+
+.kv-rtl .file-zoom-dialog,
+.kv-rtl .file-error-message pre,
+.kv-rtl .file-error-message ul {
     text-align: right;
 }
+
 .kv-rtl {
     direction: rtl;
 }
+
 .kv-rtl .floating-buttons {
     left: 10px;
     right: auto;
 }
+
 .kv-rtl .floating-buttons .btn-kv {
     margin-left: 0;
     margin-right: 3px;
 }
+
 .kv-rtl .file-caption-icon {
     left: auto;
-    right: 8px;
+    padding: 0.5rem;
+    right: 4px;
 }
+
 .kv-rtl .file-drop-zone {
     margin: 12px 12px 12px 15px;
 }
+
 .kv-rtl .btn-kv-prev {
     right: 1px;
     left: auto;
 }
+
 .kv-rtl .btn-kv-next {
     left: 1px;
     right: auto;
 }
-.kv-rtl .pull-right, .kv-rtl .float-right {
+
+.kv-rtl .pull-right,
+.kv-rtl .float-right {
     float: left !important;
 }
-.kv-rtl .pull-left, .kv-rtl .float-left {
+
+.kv-rtl .pull-left,
+.kv-rtl .float-left {
     float: right !important;
 }
+
 .kv-rtl .kv-zoom-title {
     direction: ltr;
 }
+
 .kv-rtl .krajee-default.file-preview-frame {
     box-shadow: -1px 1px 5px 0 #a2958a;
 }
+
 .kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover {
     box-shadow: -3px 3px 5px 0 #333;
 }
+
 .kv-rtl .kv-zoom-actions .btn-kv {
     margin-left: 0;
     margin-right: 3px;
 }
+
 .kv-rtl .file-caption.icon-visible .file-caption-name {
     padding-left: 0;
-    padding-right: 15px;
+    padding-right: 30px;
 }
+
 .kv-rtl .input-group-btn > .btn:last-child {
     border-radius: 4px 0 0 4px;
 }
+
 .kv-rtl .input-group .form-control:first-child {
     border-radius: 0 4px 4px 0;
 }
+
 .kv-rtl .btn-file input[type=file] {
     left: auto;
     right: 0;

+ 1 - 1
css/fileinput-rtl.min.css

@@ -9,4 +9,4 @@
  *
  * Licensed under the BSD-3-Clause
  * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
- */.kv-rtl .close,.kv-rtl .krajee-default .file-actions,.kv-rtl .krajee-default .file-other-error{float:left}.kv-rtl .krajee-default .file-drag-handle,.kv-rtl .krajee-default .file-upload-indicator,.kv-rtl .krajee-default.file-preview-frame{float:right}.kv-rtl .file-error-message pre,.kv-rtl .file-error-message ul,.kv-rtl .file-zoom-dialog{text-align:right}.kv-rtl{direction:rtl}.kv-rtl .floating-buttons{left:10px;right:auto}.kv-rtl .floating-buttons .btn-kv{margin-left:0;margin-right:3px}.kv-rtl .file-caption-icon{left:auto;right:8px}.kv-rtl .file-drop-zone{margin:12px 12px 12px 15px}.kv-rtl .btn-kv-prev{right:1px;left:auto}.kv-rtl .btn-kv-next{left:1px;right:auto}.kv-rtl .float-right,.kv-rtl .pull-right{float:left!important}.kv-rtl .float-left,.kv-rtl .pull-left{float:right!important}.kv-rtl .kv-zoom-title{direction:ltr}.kv-rtl .krajee-default.file-preview-frame{box-shadow:-1px 1px 5px 0 #a2958a}.kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover{box-shadow:-3px 3px 5px 0 #333}.kv-rtl .kv-zoom-actions .btn-kv{margin-left:0;margin-right:3px}.kv-rtl .file-caption.icon-visible .file-caption-name{padding-left:0;padding-right:15px}.kv-rtl .input-group-btn>.btn:last-child{border-radius:4px 0 0 4px}.kv-rtl .input-group .form-control:first-child{border-radius:0 4px 4px 0}.kv-rtl .btn-file input[type=file]{left:auto;right:0;text-align:left;background:100% 0 none}
+ */.kv-rtl .close,.kv-rtl .krajee-default .file-actions,.kv-rtl .krajee-default .file-other-error{float:left}.kv-rtl .krajee-default .file-drag-handle,.kv-rtl .krajee-default .file-upload-indicator,.kv-rtl .krajee-default.file-preview-frame{float:right}.kv-rtl .file-error-message pre,.kv-rtl .file-error-message ul,.kv-rtl .file-zoom-dialog{text-align:right}.kv-rtl{direction:rtl}.kv-rtl .floating-buttons{left:10px;right:auto}.kv-rtl .floating-buttons .btn-kv{margin-left:0;margin-right:3px}.kv-rtl .file-caption-icon{left:auto;padding:.5rem;right:4px}.kv-rtl .file-drop-zone{margin:12px 12px 12px 15px}.kv-rtl .btn-kv-prev{right:1px;left:auto}.kv-rtl .btn-kv-next{left:1px;right:auto}.kv-rtl .float-right,.kv-rtl .pull-right{float:left!important}.kv-rtl .float-left,.kv-rtl .pull-left{float:right!important}.kv-rtl .kv-zoom-title{direction:ltr}.kv-rtl .krajee-default.file-preview-frame{box-shadow:-1px 1px 5px 0 #a2958a}.kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover{box-shadow:-3px 3px 5px 0 #333}.kv-rtl .kv-zoom-actions .btn-kv{margin-left:0;margin-right:3px}.kv-rtl .file-caption.icon-visible .file-caption-name{padding-left:0;padding-right:30px}.kv-rtl .input-group-btn>.btn:last-child{border-radius:4px 0 0 4px}.kv-rtl .input-group .form-control:first-child{border-radius:0 4px 4px 0}.kv-rtl .btn-file input[type=file]{left:auto;right:0;text-align:left;background:100% 0 none}

+ 81 - 35
css/fileinput.css

@@ -10,7 +10,8 @@
  * Licensed under the BSD-3-Clause
  * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
  */
-.file-loading input[type=file], input[type=file].file-loading {
+.file-loading input[type=file],
+input[type=file].file-loading {
     width: 0;
     height: 0;
 }
@@ -29,11 +30,31 @@
     box-shadow: none;
 }
 
-.kv-hidden, .file-caption-icon, .file-zoom-dialog .modal-header:before, .file-zoom-dialog .modal-header:after, .file-input-new .file-preview, .file-input-new .close, .file-input-new .glyphicon-file, .file-input-new .fileinput-remove-button, .file-input-new .fileinput-upload-button, .file-input-new .no-browse .input-group-btn, .file-input-ajax-new .fileinput-remove-button, .file-input-ajax-new .fileinput-upload-button, .file-input-ajax-new .no-browse .input-group-btn, .hide-content .kv-file-content, .is-locked .fileinput-upload-button, .is-locked .fileinput-remove-button {
+.kv-hidden,
+.file-caption-icon,
+.file-zoom-dialog .modal-header:before,
+.file-zoom-dialog .modal-header:after,
+.file-input-new .file-preview,
+.file-input-new .close,
+.file-input-new .glyphicon-file,
+.file-input-new .fileinput-remove-button,
+.file-input-new .fileinput-upload-button,
+.file-input-new .no-browse .input-group-btn,
+.file-input-ajax-new .fileinput-remove-button,
+.file-input-ajax-new .fileinput-upload-button,
+.file-input-ajax-new .no-browse .input-group-btn,
+.hide-content .kv-file-content,
+.is-locked .fileinput-upload-button,
+.is-locked .fileinput-remove-button {
     display: none;
 }
 
-.btn-file input[type=file], .file-caption-icon, .file-preview .fileinput-remove, .krajee-default .file-thumb-progress, .file-zoom-dialog .btn-navigate, .file-zoom-dialog .floating-buttons {
+.btn-file input[type=file],
+.file-caption-icon,
+.file-preview .fileinput-remove,
+.krajee-default .file-thumb-progress,
+.file-zoom-dialog .btn-navigate,
+.file-zoom-dialog .floating-buttons {
     position: absolute;
 }
 
@@ -41,35 +62,50 @@
     line-height: inherit;
 }
 
-.file-input, .file-loading:before, .btn-file, .file-caption, .file-preview, .krajee-default.file-preview-frame, .krajee-default .file-thumbnail-footer, .file-zoom-dialog .modal-dialog {
+.file-input,
+.file-loading:before,
+.btn-file,
+.file-caption,
+.file-preview,
+.krajee-default.file-preview-frame,
+.krajee-default .file-thumbnail-footer,
+.file-zoom-dialog .modal-dialog {
     position: relative;
 }
 
-.file-error-message pre, .file-error-message ul, .krajee-default .file-actions, .krajee-default .file-other-error {
+.file-error-message pre,
+.file-error-message ul,
+.krajee-default .file-actions,
+.krajee-default .file-other-error {
     text-align: left;
 }
 
-.file-error-message pre, .file-error-message ul {
+.file-error-message pre,
+.file-error-message ul {
     margin: 0;
 }
 
-.krajee-default .file-drag-handle, .krajee-default .file-upload-indicator {
+.krajee-default .file-drag-handle,
+.krajee-default .file-upload-indicator {
     float: left;
     margin-top: 10px;
     width: 16px;
     height: 16px;
 }
 
-.file-thumb-progress .progress, .file-thumb-progress .progress-bar {
+.file-thumb-progress .progress,
+.file-thumb-progress .progress-bar {
     font-family: Verdana, Helvetica, sans-serif;
     font-size: 0.7rem;
 }
 
-.krajee-default .file-thumb-progress .progress, .kv-upload-progress .progress {
+.krajee-default .file-thumb-progress .progress,
+.kv-upload-progress .progress {
     background-color: #ccc;
 }
 
-.krajee-default .file-caption-info, .krajee-default .file-size-info {
+.krajee-default .file-caption-info,
+.krajee-default .file-size-info {
     display: block;
     white-space: nowrap;
     overflow: hidden;
@@ -79,17 +115,23 @@
     margin: auto;
 }
 
-.file-zoom-content > .file-object.type-video, .file-zoom-content > .file-object.type-flash, .file-zoom-content > .file-object.type-image {
+.file-zoom-content>.file-object.type-video,
+.file-zoom-content>.file-object.type-flash,
+.file-zoom-content>.file-object.type-image {
     max-width: 100%;
     max-height: 100%;
     width: auto;
 }
 
-.file-zoom-content > .file-object.type-video, .file-zoom-content > .file-object.type-flash {
+.file-zoom-content>.file-object.type-video,
+.file-zoom-content>.file-object.type-flash {
     height: 100%;
 }
 
-.file-zoom-content > .file-object.type-pdf, .file-zoom-content > .file-object.type-html, .file-zoom-content > .file-object.type-text, .file-zoom-content > .file-object.type-default {
+.file-zoom-content>.file-object.type-pdf,
+.file-zoom-content>.file-object.type-html,
+.file-zoom-content>.file-object.type-text,
+.file-zoom-content>.file-object.type-default {
     width: 100%;
 }
 
@@ -131,26 +173,27 @@
     height: 100%;
 }
 
-.file-caption .file-caption-name {
-    width: 100%;
-    margin: 0;
-    padding: 0;
-    box-shadow: none;
-    border: none;
-    background: none;
-    outline: none;
-}
-
 .file-caption.icon-visible .file-caption-icon {
     display: inline-block;
 }
 
 .file-caption.icon-visible .file-caption-name {
-    padding-left: 15px;
+    padding-left: 30px;
+}
+
+.file-caption-name:not(.file-caption-disabled) {
+    background-color: transparent;
+}
+
+.file-caption-name.file-processing {
+    font-style: italic;
+    border-color: #bbb;
+    opacity: 0.5;
 }
 
 .file-caption-icon {
-    left: 8px;
+    padding: 0.5rem;
+    left: 4px;
 }
 
 .file-error-message {
@@ -200,10 +243,10 @@
 .file-preview-image {
     font: 40px Impact, Charcoal, sans-serif;
     color: #008000;
-    width:auto;
-    height:auto;
-    max-width:100%;
-    max-height:100%;
+    width: auto;
+    height: auto;
+    max-width: 100%;
+    max-height: 100%;
 }
 
 .krajee-default.file-preview-frame {
@@ -319,7 +362,9 @@
     font-family: Verdana, Helvetica, sans-serif;
 }
 
+
 /*noinspection CssOverwrittenProperties*/
+
 .file-zoom-dialog .file-other-icon {
     font-size: 22em;
     font-size: 50vmin;
@@ -389,8 +434,9 @@
     border-bottom-right-radius: 4px;
 }
 
-.file-caption-main {
+.file-caption {
     width: 100%;
+    position: relative;
 }
 
 .file-thumb-loading {
@@ -422,7 +468,7 @@
 .file-drop-zone-title {
     color: #aaa;
     font-size: 1.6em;
-    text-align:center;
+    text-align: center;
     padding: 85px 10px;
     cursor: default;
 }
@@ -478,12 +524,12 @@
     max-height: 100%;
 }
 
-.file-zoom-content > .file-object.type-image {
+.file-zoom-content>.file-object.type-image {
     height: auto;
     min-height: inherit;
 }
 
-.file-zoom-content > .file-object.type-audio {
+.file-zoom-content>.file-object.type-audio {
     width: auto;
     height: 30px;
 }
@@ -507,7 +553,6 @@
         align-items: center;
         flex-direction: column;
     }
-
     .file-zoom-dialog .modal-header {
         flex-direction: column;
     }
@@ -544,7 +589,8 @@
     opacity: 1;
 }
 
-.file-grabbing, .file-grabbing * {
+.file-grabbing,
+.file-grabbing * {
     cursor: not-allowed !important;
 }
 

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
css/fileinput.min.css


+ 61 - 29
js/fileinput.js

@@ -1677,8 +1677,9 @@
                 }, defBtnCss1 = 'btn btn-sm btn-kv ' + $h.defaultButtonCss();
             tMain1 = '{preview}\n' +
                 '<div class="kv-upload-progress kv-hidden"></div><div class="clearfix"></div>\n' +
-                '<div class="input-group {class}">\n' +
-                '  {caption}\n' +
+                '<div class="file-caption {class}">\n' +
+                '  <span class="file-caption-icon"></span>\n' +
+                '  <div class="input-group">\n' + '{caption}\n' +
                 ($h.isBs(5) ? '' : '<div class="input-group-btn input-group-append">\n') +
                 '      {remove}\n' +
                 '      {cancel}\n' +
@@ -1686,6 +1687,7 @@
                 '      {upload}\n' +
                 '      {browse}\n' +
                 ($h.isBs(5) ? '' : '    </div>\n') +
+                '  </div>'
                 '</div>';
             tMain2 = '{preview}\n<div class="kv-upload-progress kv-hidden"></div>\n<div class="clearfix"></div>\n' +
                 '{remove}\n{cancel}\n{upload}\n{browse}\n';
@@ -1701,10 +1703,7 @@
             tClose = $h.closeButton('fileinput-remove');
             tFileIcon = '<i class="glyphicon glyphicon-file"></i>';
             // noinspection HtmlUnknownAttribute
-            tCaption = '<div class="file-caption form-control {class}" {tabIndexConfig}>\n' +
-                '  <span class="file-caption-icon"></span>\n' +
-                '  <input readonly class="file-caption-name">\n' +
-                '</div>';
+            tCaption = '<input readonly class="file-caption-name form-control {class}">\n';
             //noinspection HtmlUnknownAttribute
             tBtnDefault = '<button type="{type}" title="{title}" class="{css}" ' +
                 '{status} {tabIndexConfig}>{icon} {label}</button>';
@@ -2292,7 +2291,7 @@
             var self = this;
             css = (css ? css + ' ' : '') + 'has-error';
             self.$container.removeClass(css).addClass('has-error');
-            $h.addCss(self.$captionContainer, 'is-invalid');
+            $h.addCss(self.$caption, 'is-invalid');
         },
         _resetErrors: function (fade) {
             var self = this, $error = self.$errorContainer, history = self.resumableUploadOptions.retainErrorHistory;
@@ -2301,7 +2300,7 @@
             }
             self.isError = false;
             self.$container.removeClass('has-error');
-            self.$captionContainer.removeClass('is-invalid');
+            self.$caption.removeClass('is-invalid is-valid file-processing');
             $error.html('');
             if (fade) {
                 $error.fadeOut('slow');
@@ -2507,6 +2506,7 @@
                 }
             });
             self._handler($el, 'change', $.proxy(self._change, self));
+            self._handler(self.$caption, 'paste', $.proxy(self.paste, self));
             if (self.showBrowse) {
                 self._handler(self.$btnFile, 'click', $.proxy(self._browse, self));
                 self._handler(self.$btnFile, 'keypress', function (e) {
@@ -2533,6 +2533,9 @@
             self._handler($(document), fullScreenEv, function () {
                 self._listenFullScreen($h.checkFullScreen());
             });
+            self.$caption.on('focus', function() {
+                self.$captionContainer.focus();
+            });
             self._autoFitContent();
             self._initClickable();
             self._refreshPreview();
@@ -2616,23 +2619,24 @@
             }
 
         },
+        _dropFiles: function (e, files) {
+            var self = this, $el = self.$element;
+            if (!self.isAjaxUpload) {
+                self.changeTriggered = true;
+                $el.get(0).files = files;
+                setTimeout(function () {
+                    self.changeTriggered = false;
+                    $el.trigger('change' + self.namespace);
+                }, self.processDelay);
+            } else {
+                self._change(e, files);
+            }
+            self.$dropZone.removeClass('file-highlighted');
+        },
         _zoneDrop: function (e) {
             /** @namespace e.originalEvent.dataTransfer */
             var self = this, i, $el = self.$element, dt = e.originalEvent.dataTransfer,
-                files = dt.files, items = dt.items, folders = $h.getDragDropFolders(items),
-                processFiles = function () {
-                    if (!self.isAjaxUpload) {
-                        self.changeTriggered = true;
-                        $el.get(0).files = files;
-                        setTimeout(function () {
-                            self.changeTriggered = false;
-                            $el.trigger('change' + self.namespace);
-                        }, self.processDelay);
-                    } else {
-                        self._change(e, files);
-                    }
-                    self.$dropZone.removeClass('file-highlighted');
-                };
+                files = dt.files, items = dt.items, folders = $h.getDragDropFolders(items);
             e.preventDefault();
             if (self.isDisabled || $h.isEmpty(files)) {
                 return;
@@ -2653,10 +2657,10 @@
                     }
                 }
                 setTimeout(function () {
-                    processFiles();
+                    self._dropFiles(e, files);
                 }, 500);
             } else {
-                processFiles();
+                self._dropFiles(e, files);
             }
         },
         _uploadClick: function (e) {
@@ -3273,9 +3277,10 @@
                 jqXHR: jqXHR
             };
         },
-        _getMsgSelected: function (n) {
+        _getMsgSelected: function (n, processing) {
             var self = this, strFiles = n === 1 ? self.fileSingle : self.filePlural;
-            return n > 0 ? self.msgSelected.replace('{n}', n).replace('{files}', strFiles) : self.msgNoFilesSelected;
+            return n > 0 ? self.msgSelected.replace('{n}', n).replace('{files}', strFiles) :
+                (processing ? self.msgProcessing : self.msgNoFilesSelected);
         },
         _getFrame: function (id, skipWarning) {
             var self = this, $frame = $h.getFrameElement(self.$preview, id);
@@ -4264,9 +4269,10 @@
             }
             n = self.isAjaxUpload ? self.fileManager.count() : numFiles;
             nFiles = self.previewCache.count(true) + n;
-            log = n === 1 ? label : self._getMsgSelected(nFiles);
+            log = n === 1 ? label : self._getMsgSelected(nFiles, true);
             if (self.isError) {
                 self.$previewContainer.removeClass('file-thumb-loading');
+                self._initCapStatus();
                 self.$previewStatus.html('');
                 self.$captionContainer.removeClass('icon-visible');
             } else {
@@ -5207,6 +5213,18 @@
             }
             return self._getFileCount(len);
         },
+        _initCapStatus: function(status) {
+            var self = this, $cap = self.$caption;
+            $cap.removeClass('is-valid file-processing');
+            if (!status) {
+                return;
+            }
+            if (status === 'processing') {
+                $cap.addClass('file-processing');
+            } else {
+                $cap.addClass('is-valid');
+            }
+        },
         readFiles: function (files) {
             this.reader = new FileReader();
             var self = this, reader = self.reader, $container = self.$previewContainer,
@@ -5271,6 +5289,7 @@
                         self._raise('filebatchselected', [files]);
                     }
                     $container.removeClass('file-thumb-loading');
+                    self._initCapStatus('valid');
                     $status.html('');
                     return;
                 }
@@ -5392,6 +5411,7 @@
                     }
                     if (self.showPreview && canLoad) {
                         $container.addClass('file-thumb-loading');
+                        self._initCapStatus('processing');
                         self._previewDefault(file);
                         self._initFileActions();
                     }
@@ -5407,6 +5427,7 @@
                 isImage = fnImage(file.type, caption);
                 $status.html(msgLoading.replace('{index}', i + 1).replace('{files}', numFiles));
                 $container.addClass('file-thumb-loading');
+                self._initCapStatus('processing');
                 reader.onerror = function (evt) {
                     self._errorHandler(evt, caption);
                 };
@@ -5423,6 +5444,7 @@
                                 reader.abort();
                                 $status.html('');
                                 $container.removeClass('file-thumb-loading');
+                                self._initCapStatus('valid');
                                 self.enable();
                                 return;
                             }
@@ -5463,6 +5485,7 @@
                         reader.abort();
                         $status.html('');
                         $container.removeClass('file-thumb-loading');
+                        self._initCapStatus('valid');
                         self.enable();
                         return;
                     }
@@ -5506,6 +5529,7 @@
             if (!selectMode && self.showPause) {
                 $container.find('.fileinput-pause').show();
             }
+            self._initCapStatus('processing');
             self._raise('filelock', [self.fileManager.stack, self._getExtraData()]);
             return self.$element;
         },
@@ -5525,6 +5549,7 @@
             if (reset) {
                 self._resetFileStack();
             }
+            self._initCapStatus();
             self._raise('fileunlock', [self.fileManager.stack, self._getExtraData()]);
             return self.$element;
         },
@@ -5549,6 +5574,13 @@
             }, self.processDelay);
             return self.$element;
         },
+        paste: function (e) {
+            var self = this, ev = e.originalEvent, files = ev.clipboardData && ev.clipboardData.files || null;
+            if (files) {
+                self._dropFiles(e, files);
+            }
+            return self.$element;
+        },
         pause: function () {
             var self = this, rm = self.resumableManager, xhr = self.ajaxRequests, len = xhr.length, i,
                 pct = rm.getProgress(), actions = self.fileActionSettings, tm = self.taskManager,
@@ -5885,7 +5917,7 @@
         previewClass: '',
         captionClass: '',
         frameClass: 'krajee-default',
-        mainClass: 'file-caption-main',
+        mainClass: '',
         mainTemplate: null,
         fileSizeGetter: null,
         initialCaption: '',
@@ -6043,7 +6075,6 @@
         pdfRendererUrl: '',
         pdfRendererTemplate: '<iframe ' + IFRAME_ATTRIBS + '></iframe>',
         tabIndexConfig: {
-            caption: 500,
             browse: 500,
             remove: 500,
             upload: 500,
@@ -6109,6 +6140,7 @@
         msgLoading: 'Loading file {index} of {files} &hellip;',
         msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',
         msgSelected: '{n} {files} selected',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Drag & drop files only! {n} folder(s) dropped were skipped.',
         msgImageWidthSmall: 'Width of image file "{name}" must be at least {size} px.',
         msgImageHeightSmall: 'Height of image file "{name}" must be at least {size} px.',

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
js/fileinput.min.js


+ 1 - 0
js/locales/LANG.js

@@ -66,6 +66,7 @@
         msgLoading: 'Loading file {index} of {files} &hellip;',
         msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',
         msgSelected: '{n} {files} selected',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Drag & drop files only! Skipped {n} dropped folder(s).',
         msgImageWidthSmall: 'Width of image file "{name}" must be at least {size} px.',
         msgImageHeightSmall: 'Height of image file "{name}" must be at least {size} px.',

+ 1 - 0
js/locales/ar.js

@@ -67,6 +67,7 @@
         msgLoading: 'تحميل ملف {index} من {files} &hellip;',
         msgProgress: 'تحميل ملف {index} من {files} - {name} - {percent}% منتهي.',
         msgSelected: '{n} {files} مختار(ة)',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'اسحب وأفلت الملفات فقط! تم تخطي {n} مجلد(ات).',
         msgImageWidthSmall: 'عرض ملف الصورة "{name}" يجب أن يكون على الأقل {size} px.',
         msgImageHeightSmall: 'طول ملف الصورة "{name}" يجب أن يكون على الأقل {size} px.',

+ 1 - 0
js/locales/az.js

@@ -67,6 +67,7 @@
         msgLoading: '{files} fayldan {index} yüklənir &hellip;',
         msgProgress: '{files} fayldan {index} - {name} - {percent}% yükləndi.',
         msgSelected: 'Faylların sayı: {n}',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Ancaq faylların daşınmasına icazə verilir! {n} qovluq yüklənmədi.',
         msgImageWidthSmall: '{name} faylının eni {size} px -dən kiçik olmamalıdır.',
         msgImageHeightSmall: '{name} faylının hündürlüyü {size} px -dən kiçik olmamalıdır.',

+ 1 - 0
js/locales/ca.js

@@ -66,6 +66,7 @@
         msgLoading: 'Pujant fitxer {index} de {files} &hellip;',
         msgProgress: 'Pujant fitxer {index} de {files} - {name} - {percent}% completat.',
         msgSelected: '{n} {files} seleccionat(s)',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Arrossegueu i deixeu anar únicament arxius. Omesa(es) {n} carpeta(es).',
         msgImageWidthSmall: 'L\'ample de la imatge "{name}" ha de ser almenys {size} px.',
         msgImageHeightSmall: 'L\'alçada de la imatge "{name}" ha de ser almenys {size} px.',

+ 1 - 0
js/locales/cs.js

@@ -66,6 +66,7 @@
         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',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Táhni a pusť pouze soubory! Vynechané {n} pustěné složk(y).',
         msgImageWidthSmall: 'Šířka obrázku "{name}", musí být alespoň {size} px.',
         msgImageHeightSmall: 'Výška obrázku "{name}", musí být alespoň {size} px.',

+ 1 - 0
js/locales/da.js

@@ -66,6 +66,7 @@
         msgLoading: 'Henter fil {index} af {files} &hellip;',
         msgProgress: 'Henter fil {index} af {files} - {name} - {percent}% færdiggjort.',
         msgSelected: '{n} {files} valgt',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Drag & drop kun filer! {n} mappe(r) sprunget over.',
         msgImageWidthSmall: 'Bredden af billedet "{name}" skal være på mindst {size} px.',
         msgImageHeightSmall: 'Højden af billedet "{name}" skal være på mindst {size} px.',

+ 1 - 0
js/locales/de.js

@@ -64,6 +64,7 @@
         msgLoading: 'Lade Datei {index} von {files} hoch &hellip;',
         msgProgress: 'Datei {index} von {files} - {name} - zu {percent}% fertiggestellt.',
         msgSelected: '{n} {files} ausgewählt',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Drag & Drop funktioniert nur bei Dateien! {n} Ordner übersprungen.',
         msgImageWidthSmall: 'Breite der Bilddatei "{name}" muss mindestens {size} px betragen.',
         msgImageHeightSmall: 'Höhe der Bilddatei "{name}" muss mindestens {size} px betragen.',

+ 1 - 0
js/locales/el.js

@@ -66,6 +66,7 @@
         msgLoading: 'Φόρτωση αρχείου {index} από {files} &hellip;',
         msgProgress: 'Φόρτωση αρχείου {index} από {files} - {name} - {percent}% ολοκληρώθηκε.',
         msgSelected: '{n} {files} επιλέχθηκαν',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Μπορείτε να σύρετε μόνο αρχεία! Παραβλέφθηκαν {n} φάκελος(-οι).',
         msgImageWidthSmall: 'Το πλάτος του αρχείου εικόνας "{name}" πρέπει να είναι τουλάχιστον {size} px.',
         msgImageHeightSmall: 'Το ύψος του αρχείου εικόνας "{name}" πρέπει να είναι τουλάχιστον {size} px.',

+ 1 - 0
js/locales/es.js

@@ -66,6 +66,7 @@
         msgLoading: 'Subiendo archivo {index} de {files} &hellip;',
         msgProgress: 'Subiendo archivo {index} de {files} - {name} - {percent}% completado.',
         msgSelected: '{n} {files} seleccionado(s)',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Arrastre y suelte únicamente archivos. Omitida(s) {n} carpeta(s).',
         msgImageWidthSmall: 'El ancho de la imagen "{name}" debe ser de al menos {size} px.',
         msgImageHeightSmall: 'La altura de la imagen "{name}" debe ser de al menos {size} px.',

+ 1 - 0
js/locales/fa.js

@@ -67,6 +67,7 @@
         msgLoading: 'بارگیری فایل {index} از {files} &hellip;',
         msgProgress: 'بارگیری فایل {index} از {files} - {name} - {percent}% تمام شد.',
         msgSelected: '{n} {files} انتخاب شده',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'فقط فایل‌ها را بکشید و رها کنید! {n} پوشه نادیده گرفته شد.',
         msgImageWidthSmall: 'عرض فایل تصویر "{name}" باید حداقل {size} پیکسل باشد.',
         msgImageHeightSmall: 'ارتفاع فایل تصویر "{name}" باید حداقل {size} پیکسل باشد.',

+ 1 - 0
js/locales/fr.js

@@ -66,6 +66,7 @@
         msgLoading: 'Transmission du fichier {index} sur {files} &hellip;',
         msgProgress: 'Transmission du fichier {index} sur {files} - {name} - {percent}%.',
         msgSelected: '{n} {files} sélectionné(s)',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Glissez et déposez uniquement des fichiers ! {n} répertoire(s) exclu(s).',
         msgImageWidthSmall: 'La largeur de l\'image "{name}" doit être d\'au moins {size} px.',
         msgImageHeightSmall: 'La hauteur de l\'image "{name}" doit être d\'au moins {size} px.',

+ 1 - 0
js/locales/gl.js

@@ -66,6 +66,7 @@
         msgLoading: 'Subindo arquivo {index} de {files} &hellip;',
         msgProgress: 'Subindo arquivo {index} de {files} - {name} - {percent}% completado.',
         msgSelected: '{n} {files} seleccionado(s)',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Arrastra e solta unicamente arquivos. Omitida(s) {n} carpeta(s).',
         msgImageWidthSmall: 'O ancho da imaxe "{name}" debe ser de ao menos {size} px.',
         msgImageHeightSmall: 'A altura da imaxe "{name}" debe ser de ao menos {size} px.',

+ 1 - 0
js/locales/he.js

@@ -63,6 +63,7 @@
         msgLoading: 'טוען קובץ {index} של {files} &hellip;',
         msgProgress: 'טוען קובץ {index} של {files} - {name} - {percent}% הושלמה.',
         msgSelected: '{n} {files} נבחרו',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'גרירת קבצים ושחרורם בלבד! דילוג {n} גרירת תיקיה(s).',
         msgImageWidthSmall: 'רוחב קובץ התמונה "{name}" חייב להיות לפחות {size} px.',
         msgImageHeightSmall: 'גובה קובץ התמונה "{name}" חייב להיות לפחות {size} px.',

+ 1 - 0
js/locales/hu.js

@@ -66,6 +66,7 @@
         msgLoading: '{index}. fájl töltése&hellip;',
         msgProgress: '{index}. fájl töltése&hellip; - {name} - {percent}% kész.',
         msgSelected: '{n} fájl kiválasztva',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Csak fájlokat húzzon ide! Kihagyva {n} könyvtár.',
         msgImageWidthSmall: '"{name}" kép szélességének legalább {size} pixelnek kell lennie.',
         msgImageHeightSmall: '"{name}" kép magasságának legalább {size} pixelnek kell lennie.',

+ 1 - 0
js/locales/id.js

@@ -67,6 +67,7 @@
         msgLoading: 'Memuat {index} dari {files} berkas &hellip;',
         msgProgress: 'Memuat {index} dari {files} berkas - {name} - {percent}% selesai.',
         msgSelected: '{n} {files} dipilih',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Hanya tahan dan lepas file saja! {n} folder diabaikan.',
         msgImageWidthSmall: 'Lebar dari gambar "{name}" harus sekurangnya {size} px.',
         msgImageHeightSmall: 'Tinggi dari gambar "{name}" harus sekurangnya {size} px.',

+ 1 - 0
js/locales/it.js

@@ -68,6 +68,7 @@
         msgLoading: 'Caricamento file {index} di {files} &hellip;',
         msgProgress: 'Caricamento file {index} di {files} - {name} - {percent}% completato.',
         msgSelected: '{n} {files} selezionati',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Trascina solo file! Ignorata/e {n} cartella/e.',
         msgImageWidthSmall: 'La larghezza dell\'immagine "{name}" deve essere di almeno {size} px.',
         msgImageHeightSmall: 'L\'altezza dell\'immagine "{name}" deve essere di almeno {size} px.',

+ 1 - 0
js/locales/ka.js

@@ -67,6 +67,7 @@
         msgLoading: 'ატვირთვა {index} / {files} &hellip;',
         msgProgress: 'ფაილის ატვირთვა დასრულებულია {index} / {files} - {name} - {percent}%.',
         msgSelected: 'არჩეულია {n} {file}',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'დაშვებულია მხოლოდ ფაილების გადმოთრევა! გამოტოვებულია {n} გადმოთრეული ფოლდერი.',
         msgImageWidthSmall: 'სურათის "{name}" სიგანე უნდა იყოს არანაკლებ {size} px.',
         msgImageHeightSmall: 'სურათის "{name}" სიმაღლე უნდა იყოს არანაკლებ {size} px.',

+ 1 - 0
js/locales/lv.js

@@ -60,6 +60,7 @@
         msgLoading: 'Lejupielādē failu {index} no {files} &hellip;',
         msgProgress: 'Notiek faila {index} ielāde no {files} - {name} - pabeigts {percent}%.',
         msgSelected: 'Atlasīti faili: {n}',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Atļauts ievilkt un noņemt vienīgi failus! Trūkst {n} mapes.',
         msgImageWidthSmall: 'Attēla platumam {name} jābūt vismaz {size} px.',
         msgImageHeightSmall: 'Attēla augstumam {name} jābūt vismaz {size} px.',

+ 1 - 0
js/locales/nl.js

@@ -66,6 +66,7 @@
         msgLoading: 'Bestanden laden {index} van de {files} &hellip;',
         msgProgress: 'Bestanden laden {index} van de {files} - {name} - {percent}% compleet.',
         msgSelected: '{n} {files} geselecteerd',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Drag & drop alleen bestanden! {n} overgeslagen map(pen).',
         msgImageWidthSmall: 'Breedte van het foto-bestand "{name}" moet minstens {size} px zijn.',
         msgImageHeightSmall: 'Hoogte van het foto-bestand "{name}" moet minstens {size} px zijn.',

+ 1 - 0
js/locales/pl.js

@@ -56,6 +56,7 @@
         msgLoading: 'Wczytywanie pliku {index} z {files} &hellip;',
         msgProgress: 'Wczytywanie pliku {index} z {files} - {name} - {percent}% zakończone.',
         msgSelected: '{n} Plików zaznaczonych',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Metodą przeciągnij i upuść, można przenosić tylko pliki. Pominięto {n} katalogów.',
         msgImageWidthSmall: 'Szerokość pliku obrazu "{name}" musi być co najmniej {size} px.',
         msgImageHeightSmall: 'Wysokość pliku obrazu "{name}" musi być co najmniej {size} px.',

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

@@ -66,6 +66,7 @@
         msgLoading: 'Enviando arquivo {index} de {files} &hellip;',
         msgProgress: 'Enviando arquivo {index} de {files} - {name} - {percent}% completo.',
         msgSelected: '{n} {files} selecionado(s)',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Arraste e solte apenas arquivos! {n} pasta(s) ignoradas.',
         msgImageWidthSmall: 'Largura do arquivo de imagem "{name}" deve ser pelo menos {size} px.',
         msgImageHeightSmall: 'Altura do arquivo de imagem "{name}" deve ser pelo menos {size} px.',

+ 1 - 0
js/locales/pt.js

@@ -66,6 +66,7 @@
         msgLoading: 'A enviar ficheiro {index} de {files} &hellip;',
         msgProgress: 'A enviar ficheiro {index} de {files} - {name} - {percent}% completo.',
         msgSelected: '{n} {files} selecionados',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Arrastar e largar ficheiros apenas. {n} pasta(s) ignoradas.',
         msgImageWidthSmall: 'Largura da imagem "{name}" deve ser pelo menos {size} px.',
         msgImageHeightSmall: 'Altura da imagem "{name}" deve ser pelo menos {size} px.',

+ 1 - 0
js/locales/ru.js

@@ -67,6 +67,7 @@
         msgLoading: 'Загрузка файла {index} из {files} &hellip;',
         msgProgress: 'Загрузка файла {index} из {files} - {name} - {percent}% завершено.',
         msgSelected: 'Выбрано файлов: {n}',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Разрешено перетаскивание только файлов! Пропущено {n} папок.',
         msgImageWidthSmall: 'Ширина изображения {name} должна быть не меньше {size} px.',
         msgImageHeightSmall: 'Высота изображения {name} должна быть не меньше {size} px.',

+ 1 - 0
js/locales/sk.js

@@ -66,6 +66,7 @@
         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é',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Tiahni a pusť iba súbory! Vynechané {n} pustené prečinok(y).',
         msgImageWidthSmall: 'Šírka obrázku "{name}", musí byť minimálne {size} px.',
         msgImageHeightSmall: 'Výška obrázku "{name}", musí byť minimálne {size} px.',

+ 1 - 0
js/locales/sr-latn.js

@@ -66,6 +66,7 @@
         msgLoading: 'Učitavanje dokumenta {index} od {files} &hellip;',
         msgProgress: 'Učitavanje dokumenta {index} od {files} - {name} - {percent}% završeno.',
         msgSelected: '{n} dokumenata odabrano',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Prevlačenje foldera nije dozvoljeno! {n} prevučenih foldera nije dodato.',
         msgImageWidthSmall: 'Širina slike "{name}" mora biti veća od {size} px.',
         msgImageHeightSmall: 'Visina slike "{name}" mora biti veća od {size} px.',

+ 1 - 0
js/locales/tr.js

@@ -66,6 +66,7 @@
         msgLoading: 'Dosya yükleniyor {index} / {files} &hellip;',
         msgProgress: 'Dosya yükleniyor {index} / {files} - {name} - %{percent} tamamlandı.',
         msgSelected: '{n} {files} seçildi',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Yalnızca dosyaları sürükleyip bırakabilirsiniz! {n} dizin(ler) göz ardı edildi.',
         msgImageWidthSmall: '"{name}" adlı görüntü dosyasının genişliği en az {size} piksel olmalıdır.',
         msgImageHeightSmall: '"{name}" adlı görüntü dosyasının yüksekliği en az {size} piksel olmalıdır.',

+ 1 - 0
js/locales/uk.js

@@ -67,6 +67,7 @@
         msgLoading: 'Відвантаження файла {index} із {files} &hellip;',
         msgProgress: 'Відвантаження файла {index} із {files} - {name} - {percent}% завершено.',
         msgSelected: '{n} {files} обрано',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Дозволено перетягувати тільки файли! Пропущено {n} тек.',
         msgImageWidthSmall: 'Ширина зображення "{name}" повинна бути не менше {size} px.',
         msgImageHeightSmall: 'Висота зображення "{name}" повинна бути не менше {size} px.',

+ 1 - 0
js/locales/uz-cyrl.js

@@ -65,6 +65,7 @@
         msgLoading: '{Files} дан {index} файлини юклаш &hellip;',
         msgProgress: '{Files} дан {index}{name} файлини юклашда  - {percent}% тугалланди.',
         msgSelected: '{n} {files} танланган',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Фақат тортиб қўйиладон файллар! {n} та папка(lar) ўтказиб юборилди.',
         msgImageWidthSmall: '"{name}" файл эни камида {size} px бўлиши лозим.',
         msgImageHeightSmall: '"{name}" файл бўйи камида {size} px бўлиши лозим.',

+ 1 - 0
js/locales/uz.js

@@ -67,6 +67,7 @@
         msgLoading: '{Files} dan {index} faylini yuklash &hellip;',
         msgProgress: '{Files} dan {index}{name} faylini yuklashi  - {percent}% tugallandi.',
         msgSelected: '{n} {files} tanlangan',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: 'Faqat tortib qo‘yiladon fayllar! {n} o‘tirilgan tashlangan papka(lar).',
         msgImageWidthSmall: '"{name}" fayl kengligi {size} px dan kam bo‘lmasligi lozim.',
         msgImageHeightSmall: '"{name}" fayl bo‘yi {size} px dan kam bo‘lmasligi lozim.',

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

@@ -68,6 +68,7 @@
         msgLoading: '載入第 {index} 個檔案,共 {files} &hellip;',
         msgProgress: '載入第 {index} 個檔案,共 {files} - {name} - {percent}% 成功.',
         msgSelected: '{n} {files} 選取',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: '只支援單檔拖曳! 無法使用 {n} 拖拽的資料夹.',
         msgImageWidthSmall: '圖檔寬度"{name}"必須至少為{size}像素(px).',
         msgImageHeightSmall: '圖檔高度"{name}"必須至少為{size}像素(px).',

+ 1 - 0
js/locales/zh.js

@@ -67,6 +67,7 @@
         msgLoading: '加载第 {index} 文件 共 {files} &hellip;',
         msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.',
         msgSelected: '{n} {files} 选中',
+        msgProcessing: 'Processing ...',
         msgFoldersNotAllowed: '只支持拖拽文件! 跳过 {n} 拖拽的文件夹.',
         msgImageWidthSmall: '图像文件的"{name}"的宽度必须是至少{size}像素.',
         msgImageHeightSmall: '图像文件的"{name}"的高度必须至少为{size}像素.',

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott