|
@@ -2858,254 +2858,6 @@
|
|
|
_slugDefault: function (text) {
|
|
|
return $h.isEmpty(text) ? '' : String(text).replace(/[\[\]\/\{}:;#%=\(\)\*\+\?\\\^\$\|<>&"']/g, '_');
|
|
|
},
|
|
|
- _readFiles: function (files) {
|
|
|
- this.reader = new FileReader();
|
|
|
- var self = this, $el = self.$element, $preview = self.$preview, reader = self.reader,
|
|
|
- $container = self.$previewContainer, $status = self.$previewStatus, msgLoading = self.msgLoading,
|
|
|
- msgProgress = self.msgProgress, previewInitId = self.previewInitId, numFiles = files.length,
|
|
|
- settings = self.fileTypeSettings, ctr = self.filestack.length, readFile,
|
|
|
- fileTypes = self.allowedFileTypes, typLen = fileTypes ? fileTypes.length : 0,
|
|
|
- fileExt = self.allowedFileExtensions, strExt = $h.isEmpty(fileExt) ? '' : fileExt.join(', '),
|
|
|
- maxPreviewSize = self.maxFilePreviewSize && parseFloat(self.maxFilePreviewSize),
|
|
|
- canPreview = $preview.length && (!maxPreviewSize || isNaN(maxPreviewSize)),
|
|
|
- throwError = function (msg, file, previewId, index) {
|
|
|
- var p1 = $.extend(true, {}, self._getOutData({}, {}, files), {id: previewId, index: index}),
|
|
|
- p2 = {id: previewId, index: index, file: file, files: files}, $thumb;
|
|
|
- self._previewDefault(file, previewId, true);
|
|
|
- if (self.isAjaxUpload) {
|
|
|
- self.addToStack(undefined);
|
|
|
- setTimeout(function () {
|
|
|
- readFile(index + 1);
|
|
|
- }, 100);
|
|
|
- } else {
|
|
|
- numFiles = 0;
|
|
|
- }
|
|
|
- self._initFileActions();
|
|
|
- $thumb = $('#' + previewId);
|
|
|
- $thumb.find('.kv-file-upload').hide();
|
|
|
- if (self.removeFromPreviewOnError) {
|
|
|
- $thumb.remove();
|
|
|
- }
|
|
|
- self.isError = self.isAjaxUpload ? self._showUploadError(msg, p1) : self._showError(msg, p2);
|
|
|
- self._updateFileDetails(numFiles);
|
|
|
- };
|
|
|
-
|
|
|
- self.loadedImages = [];
|
|
|
- self.totalImagesCount = 0;
|
|
|
-
|
|
|
- $.each(files, function (key, file) {
|
|
|
- var func = self.fileTypeSettings.image;
|
|
|
- if (func && func(file.type)) {
|
|
|
- self.totalImagesCount++;
|
|
|
- }
|
|
|
- });
|
|
|
- readFile = function (i) {
|
|
|
- if ($h.isEmpty($el.attr('multiple'))) {
|
|
|
- numFiles = 1;
|
|
|
- }
|
|
|
- if (i >= numFiles) {
|
|
|
- if (self.isAjaxUpload && self.filestack.length > 0) {
|
|
|
- self._raise('filebatchselected', [self.getFileStack()]);
|
|
|
- } else {
|
|
|
- self._raise('filebatchselected', [files]);
|
|
|
- }
|
|
|
- $container.removeClass('file-thumb-loading');
|
|
|
- $status.html('');
|
|
|
- return;
|
|
|
- }
|
|
|
- var node = ctr + i, previewId = previewInitId + "-" + node, file = files[i], fSizeKB, j, msg,
|
|
|
- fnText = settings.text, fnImage = settings.image, fnHtml = settings.html, typ, chk, typ1, typ2,
|
|
|
- caption = file.name ? self.slug(file.name) : '', fileSize = (file.size || 0) / 1000,
|
|
|
- fileExtExpr = '', previewData = $h.objUrl.createObjectURL(file), fileCount = 0, strTypes = '',
|
|
|
- func, knownTypes = 0, isText, isHtml, isImage, txtFlag, processFileLoaded = function () {
|
|
|
- var msg = msgProgress.setTokens({
|
|
|
- 'index': i + 1,
|
|
|
- 'files': numFiles,
|
|
|
- 'percent': 50,
|
|
|
- 'name': caption
|
|
|
- });
|
|
|
- setTimeout(function () {
|
|
|
- $status.html(msg);
|
|
|
- self._updateFileDetails(numFiles);
|
|
|
- readFile(i + 1);
|
|
|
- }, 100);
|
|
|
- self._raise('fileloaded', [file, previewId, i, reader]);
|
|
|
- };
|
|
|
- if (typLen > 0) {
|
|
|
- for (j = 0; j < typLen; j++) {
|
|
|
- typ1 = fileTypes[j];
|
|
|
- typ2 = self.msgFileTypes[typ1] || typ1;
|
|
|
- strTypes += j === 0 ? typ2 : ', ' + typ2;
|
|
|
- }
|
|
|
- }
|
|
|
- if (caption === false) {
|
|
|
- readFile(i + 1);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (caption.length === 0) {
|
|
|
- msg = self.msgInvalidFileName.replace('{name}', $h.htmlEncode(file.name));
|
|
|
- throwError(msg, file, previewId, i);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!$h.isEmpty(fileExt)) {
|
|
|
- fileExtExpr = new RegExp('\\.(' + fileExt.join('|') + ')$', 'i');
|
|
|
- }
|
|
|
- fSizeKB = fileSize.toFixed(2);
|
|
|
- if (self.maxFileSize > 0 && fileSize > self.maxFileSize) {
|
|
|
- msg = self.msgSizeTooLarge.setTokens({
|
|
|
- 'name': caption,
|
|
|
- 'size': fSizeKB,
|
|
|
- 'maxSize': self.maxFileSize
|
|
|
- });
|
|
|
- throwError(msg, file, previewId, i);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (self.minFileSize !== null && fileSize <= $h.getNum(self.minFileSize)) {
|
|
|
- msg = self.msgSizeTooSmall.setTokens({
|
|
|
- 'name': caption,
|
|
|
- 'size': fSizeKB,
|
|
|
- 'minSize': self.minFileSize
|
|
|
- });
|
|
|
- throwError(msg, file, previewId, i);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!$h.isEmpty(fileTypes) && $h.isArray(fileTypes)) {
|
|
|
- for (j = 0; j < fileTypes.length; j += 1) {
|
|
|
- typ = fileTypes[j];
|
|
|
- func = settings[typ];
|
|
|
- fileCount += !func || (typeof func !== 'function') ? 0 : (func(file.type, file.name) ? 1 : 0);
|
|
|
- }
|
|
|
- if (fileCount === 0) {
|
|
|
- msg = self.msgInvalidFileType.setTokens({'name': caption, 'types': strTypes});
|
|
|
- throwError(msg, file, previewId, i);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- if (fileCount === 0 && !$h.isEmpty(fileExt) && $h.isArray(fileExt) && !$h.isEmpty(fileExtExpr)) {
|
|
|
- chk = $h.compare(caption, fileExtExpr);
|
|
|
- fileCount += $h.isEmpty(chk) ? 0 : chk.length;
|
|
|
- if (fileCount === 0) {
|
|
|
- msg = self.msgInvalidFileExtension.setTokens({'name': caption, 'extensions': strExt});
|
|
|
- throwError(msg, file, previewId, i);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!self.showPreview) {
|
|
|
- if (self.isAjaxUpload) {
|
|
|
- self.addToStack(file);
|
|
|
- }
|
|
|
- setTimeout(function () {
|
|
|
- readFile(i + 1);
|
|
|
- self._updateFileDetails(numFiles);
|
|
|
- }, 100);
|
|
|
- self._raise('fileloaded', [file, previewId, i, reader]);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!canPreview && fileSize > maxPreviewSize) {
|
|
|
- self.addToStack(file);
|
|
|
- $container.addClass('file-thumb-loading');
|
|
|
- self._previewDefault(file, previewId);
|
|
|
- self._initFileActions();
|
|
|
- self._updateFileDetails(numFiles);
|
|
|
- readFile(i + 1);
|
|
|
- return;
|
|
|
- }
|
|
|
- if ($preview.length && FileReader !== undefined) {
|
|
|
- isText = fnText(file.type, caption);
|
|
|
- isHtml = fnHtml(file.type, caption);
|
|
|
- isImage = fnImage(file.type, caption);
|
|
|
- $status.html(msgLoading.replace('{index}', i + 1).replace('{files}', numFiles));
|
|
|
- $container.addClass('file-thumb-loading');
|
|
|
- reader.onerror = function (evt) {
|
|
|
- self._errorHandler(evt, caption);
|
|
|
- };
|
|
|
- reader.onload = function (theFile) {
|
|
|
- var hex, fileInfo, uint, byte, bytes = [], contents, mime, readTextImage = function (textFlag) {
|
|
|
- var newReader = new FileReader();
|
|
|
- newReader.onerror = function (theFileNew) {
|
|
|
- self._errorHandler(theFileNew, caption);
|
|
|
- };
|
|
|
- newReader.onload = function (theFileNew) {
|
|
|
- self._previewFile(i, file, theFileNew, previewId, previewData, fileInfo);
|
|
|
- self._initFileActions();
|
|
|
- processFileLoaded();
|
|
|
- };
|
|
|
- if (textFlag) {
|
|
|
- newReader.readAsText(file, self.textEncoding);
|
|
|
- } else {
|
|
|
- newReader.readAsDataURL(file);
|
|
|
- }
|
|
|
- };
|
|
|
- fileInfo = {'name': caption, 'type': file.type};
|
|
|
- $.each(settings, function (key, func) {
|
|
|
- if (key !== 'object' && key !== 'other' && func(file.type, caption)) {
|
|
|
- knownTypes++;
|
|
|
- }
|
|
|
- });
|
|
|
- if (knownTypes === 0) {// auto detect mime types from content if no known file types detected
|
|
|
- uint = new Uint8Array(theFile.target.result);
|
|
|
- for (j = 0; j < uint.length; j++) {
|
|
|
- byte = uint[j].toString(16);
|
|
|
- bytes.push(byte);
|
|
|
- }
|
|
|
- hex = bytes.join('').toLowerCase().substring(0, 8);
|
|
|
- mime = $h.getMimeType(hex, '', '');
|
|
|
- if ($h.isEmpty(mime)) { // look for ascii text content
|
|
|
- contents = $h.arrayBuffer2String(reader.result);
|
|
|
- mime = $h.isSvg(contents) ? 'image/svg+xml' : $h.getMimeType(hex, contents, file.type);
|
|
|
- }
|
|
|
- fileInfo = {'name': caption, 'type': mime};
|
|
|
- isText = fnText(mime, '');
|
|
|
- isHtml = fnHtml(mime, '');
|
|
|
- isImage = fnImage(mime, '');
|
|
|
- txtFlag = isText || isHtml;
|
|
|
- if (txtFlag || isImage) {
|
|
|
- readTextImage(txtFlag);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- self._previewFile(i, file, theFile, previewId, previewData, fileInfo);
|
|
|
- self._initFileActions();
|
|
|
- processFileLoaded();
|
|
|
- };
|
|
|
- reader.onprogress = function (data) {
|
|
|
- if (data.lengthComputable) {
|
|
|
- var fact = (data.loaded / data.total) * 100, progress = Math.ceil(fact);
|
|
|
- msg = msgProgress.setTokens({
|
|
|
- 'index': i + 1,
|
|
|
- 'files': numFiles,
|
|
|
- 'percent': progress,
|
|
|
- 'name': caption
|
|
|
- });
|
|
|
- setTimeout(function () {
|
|
|
- $status.html(msg);
|
|
|
- }, 100);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- if (isText || isHtml) {
|
|
|
- reader.readAsText(file, self.textEncoding);
|
|
|
- } else {
|
|
|
- if (isImage) {
|
|
|
- reader.readAsDataURL(file);
|
|
|
- } else {
|
|
|
- reader.readAsArrayBuffer(file);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- self._previewDefault(file, previewId);
|
|
|
- setTimeout(function () {
|
|
|
- readFile(i + 1);
|
|
|
- self._updateFileDetails(numFiles);
|
|
|
- }, 100);
|
|
|
- self._raise('fileloaded', [file, previewId, i, reader]);
|
|
|
- }
|
|
|
- self.addToStack(file);
|
|
|
- };
|
|
|
-
|
|
|
- readFile(0);
|
|
|
- self._updateFileDetails(numFiles, false);
|
|
|
- },
|
|
|
_updateFileDetails: function (numFiles) {
|
|
|
var self = this, $el = self.$element, fileStack = self.getFileStack(),
|
|
|
name = ($h.isIE(9) && $h.findFileName($el.val())) ||
|
|
@@ -3750,7 +3502,7 @@
|
|
|
}
|
|
|
}
|
|
|
if (self.isPreviewable) {
|
|
|
- self._readFiles(tfiles);
|
|
|
+ self.readFiles(tfiles);
|
|
|
} else {
|
|
|
self._updateFileDetails(1);
|
|
|
}
|
|
@@ -3838,6 +3590,257 @@
|
|
|
var self = this, len = self.isAjaxUpload ? self.getFileStack().length : self.$element.get(0).files.length;
|
|
|
return self._getFileCount(len);
|
|
|
},
|
|
|
+ readFiles: function (files) {
|
|
|
+ this.reader = new FileReader();
|
|
|
+ if (!(files instanceof Array)) {
|
|
|
+ files = [files];
|
|
|
+ }
|
|
|
+ var self = this, $el = self.$element, $preview = self.$preview, reader = self.reader,
|
|
|
+ $container = self.$previewContainer, $status = self.$previewStatus, msgLoading = self.msgLoading,
|
|
|
+ msgProgress = self.msgProgress, previewInitId = self.previewInitId, numFiles = files.length,
|
|
|
+ settings = self.fileTypeSettings, ctr = self.filestack.length, readFile,
|
|
|
+ fileTypes = self.allowedFileTypes, typLen = fileTypes ? fileTypes.length : 0,
|
|
|
+ fileExt = self.allowedFileExtensions, strExt = $h.isEmpty(fileExt) ? '' : fileExt.join(', '),
|
|
|
+ maxPreviewSize = self.maxFilePreviewSize && parseFloat(self.maxFilePreviewSize),
|
|
|
+ canPreview = $preview.length && (!maxPreviewSize || isNaN(maxPreviewSize)),
|
|
|
+ throwError = function (msg, file, previewId, index) {
|
|
|
+ var p1 = $.extend(true, {}, self._getOutData({}, {}, files), {id: previewId, index: index}),
|
|
|
+ p2 = {id: previewId, index: index, file: file, files: files}, $thumb;
|
|
|
+ self._previewDefault(file, previewId, true);
|
|
|
+ if (self.isAjaxUpload) {
|
|
|
+ self.addToStack(undefined);
|
|
|
+ setTimeout(function () {
|
|
|
+ readFile(index + 1);
|
|
|
+ }, 100);
|
|
|
+ } else {
|
|
|
+ numFiles = 0;
|
|
|
+ }
|
|
|
+ self._initFileActions();
|
|
|
+ $thumb = $('#' + previewId);
|
|
|
+ $thumb.find('.kv-file-upload').hide();
|
|
|
+ if (self.removeFromPreviewOnError) {
|
|
|
+ $thumb.remove();
|
|
|
+ }
|
|
|
+ self.isError = self.isAjaxUpload ? self._showUploadError(msg, p1) : self._showError(msg, p2);
|
|
|
+ self._updateFileDetails(numFiles);
|
|
|
+ };
|
|
|
+
|
|
|
+ self.loadedImages = [];
|
|
|
+ self.totalImagesCount = 0;
|
|
|
+
|
|
|
+ $.each(files, function (key, file) {
|
|
|
+ var func = self.fileTypeSettings.image;
|
|
|
+ if (func && func(file.type)) {
|
|
|
+ self.totalImagesCount++;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ readFile = function (i) {
|
|
|
+ if ($h.isEmpty($el.attr('multiple'))) {
|
|
|
+ numFiles = 1;
|
|
|
+ }
|
|
|
+ if (i >= numFiles) {
|
|
|
+ if (self.isAjaxUpload && self.filestack.length > 0) {
|
|
|
+ self._raise('filebatchselected', [self.getFileStack()]);
|
|
|
+ } else {
|
|
|
+ self._raise('filebatchselected', [files]);
|
|
|
+ }
|
|
|
+ $container.removeClass('file-thumb-loading');
|
|
|
+ $status.html('');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var node = ctr + i, previewId = previewInitId + "-" + node, file = files[i], fSizeKB, j, msg,
|
|
|
+ fnText = settings.text, fnImage = settings.image, fnHtml = settings.html, typ, chk, typ1, typ2,
|
|
|
+ caption = file.name ? self.slug(file.name) : '', fileSize = (file.size || 0) / 1000,
|
|
|
+ fileExtExpr = '', previewData = $h.objUrl.createObjectURL(file), fileCount = 0, strTypes = '',
|
|
|
+ func, knownTypes = 0, isText, isHtml, isImage, txtFlag, processFileLoaded = function () {
|
|
|
+ var msg = msgProgress.setTokens({
|
|
|
+ 'index': i + 1,
|
|
|
+ 'files': numFiles,
|
|
|
+ 'percent': 50,
|
|
|
+ 'name': caption
|
|
|
+ });
|
|
|
+ setTimeout(function () {
|
|
|
+ $status.html(msg);
|
|
|
+ self._updateFileDetails(numFiles);
|
|
|
+ readFile(i + 1);
|
|
|
+ }, 100);
|
|
|
+ self._raise('fileloaded', [file, previewId, i, reader]);
|
|
|
+ };
|
|
|
+ if (typLen > 0) {
|
|
|
+ for (j = 0; j < typLen; j++) {
|
|
|
+ typ1 = fileTypes[j];
|
|
|
+ typ2 = self.msgFileTypes[typ1] || typ1;
|
|
|
+ strTypes += j === 0 ? typ2 : ', ' + typ2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (caption === false) {
|
|
|
+ readFile(i + 1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (caption.length === 0) {
|
|
|
+ msg = self.msgInvalidFileName.replace('{name}', $h.htmlEncode(file.name));
|
|
|
+ throwError(msg, file, previewId, i);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!$h.isEmpty(fileExt)) {
|
|
|
+ fileExtExpr = new RegExp('\\.(' + fileExt.join('|') + ')$', 'i');
|
|
|
+ }
|
|
|
+ fSizeKB = fileSize.toFixed(2);
|
|
|
+ if (self.maxFileSize > 0 && fileSize > self.maxFileSize) {
|
|
|
+ msg = self.msgSizeTooLarge.setTokens({
|
|
|
+ 'name': caption,
|
|
|
+ 'size': fSizeKB,
|
|
|
+ 'maxSize': self.maxFileSize
|
|
|
+ });
|
|
|
+ throwError(msg, file, previewId, i);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (self.minFileSize !== null && fileSize <= $h.getNum(self.minFileSize)) {
|
|
|
+ msg = self.msgSizeTooSmall.setTokens({
|
|
|
+ 'name': caption,
|
|
|
+ 'size': fSizeKB,
|
|
|
+ 'minSize': self.minFileSize
|
|
|
+ });
|
|
|
+ throwError(msg, file, previewId, i);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!$h.isEmpty(fileTypes) && $h.isArray(fileTypes)) {
|
|
|
+ for (j = 0; j < fileTypes.length; j += 1) {
|
|
|
+ typ = fileTypes[j];
|
|
|
+ func = settings[typ];
|
|
|
+ fileCount += !func || (typeof func !== 'function') ? 0 : (func(file.type, file.name) ? 1 : 0);
|
|
|
+ }
|
|
|
+ if (fileCount === 0) {
|
|
|
+ msg = self.msgInvalidFileType.setTokens({'name': caption, 'types': strTypes});
|
|
|
+ throwError(msg, file, previewId, i);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (fileCount === 0 && !$h.isEmpty(fileExt) && $h.isArray(fileExt) && !$h.isEmpty(fileExtExpr)) {
|
|
|
+ chk = $h.compare(caption, fileExtExpr);
|
|
|
+ fileCount += $h.isEmpty(chk) ? 0 : chk.length;
|
|
|
+ if (fileCount === 0) {
|
|
|
+ msg = self.msgInvalidFileExtension.setTokens({'name': caption, 'extensions': strExt});
|
|
|
+ throwError(msg, file, previewId, i);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!self.showPreview) {
|
|
|
+ if (self.isAjaxUpload) {
|
|
|
+ self.addToStack(file);
|
|
|
+ }
|
|
|
+ setTimeout(function () {
|
|
|
+ readFile(i + 1);
|
|
|
+ self._updateFileDetails(numFiles);
|
|
|
+ }, 100);
|
|
|
+ self._raise('fileloaded', [file, previewId, i, reader]);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!canPreview && fileSize > maxPreviewSize) {
|
|
|
+ self.addToStack(file);
|
|
|
+ $container.addClass('file-thumb-loading');
|
|
|
+ self._previewDefault(file, previewId);
|
|
|
+ self._initFileActions();
|
|
|
+ self._updateFileDetails(numFiles);
|
|
|
+ readFile(i + 1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if ($preview.length && FileReader !== undefined) {
|
|
|
+ isText = fnText(file.type, caption);
|
|
|
+ isHtml = fnHtml(file.type, caption);
|
|
|
+ isImage = fnImage(file.type, caption);
|
|
|
+ $status.html(msgLoading.replace('{index}', i + 1).replace('{files}', numFiles));
|
|
|
+ $container.addClass('file-thumb-loading');
|
|
|
+ reader.onerror = function (evt) {
|
|
|
+ self._errorHandler(evt, caption);
|
|
|
+ };
|
|
|
+ reader.onload = function (theFile) {
|
|
|
+ var hex, fileInfo, uint, byte, bytes = [], contents, mime, readTextImage = function (textFlag) {
|
|
|
+ var newReader = new FileReader();
|
|
|
+ newReader.onerror = function (theFileNew) {
|
|
|
+ self._errorHandler(theFileNew, caption);
|
|
|
+ };
|
|
|
+ newReader.onload = function (theFileNew) {
|
|
|
+ self._previewFile(i, file, theFileNew, previewId, previewData, fileInfo);
|
|
|
+ self._initFileActions();
|
|
|
+ processFileLoaded();
|
|
|
+ };
|
|
|
+ if (textFlag) {
|
|
|
+ newReader.readAsText(file, self.textEncoding);
|
|
|
+ } else {
|
|
|
+ newReader.readAsDataURL(file);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ fileInfo = {'name': caption, 'type': file.type};
|
|
|
+ $.each(settings, function (key, func) {
|
|
|
+ if (key !== 'object' && key !== 'other' && func(file.type, caption)) {
|
|
|
+ knownTypes++;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (knownTypes === 0) {// auto detect mime types from content if no known file types detected
|
|
|
+ uint = new Uint8Array(theFile.target.result);
|
|
|
+ for (j = 0; j < uint.length; j++) {
|
|
|
+ byte = uint[j].toString(16);
|
|
|
+ bytes.push(byte);
|
|
|
+ }
|
|
|
+ hex = bytes.join('').toLowerCase().substring(0, 8);
|
|
|
+ mime = $h.getMimeType(hex, '', '');
|
|
|
+ if ($h.isEmpty(mime)) { // look for ascii text content
|
|
|
+ contents = $h.arrayBuffer2String(reader.result);
|
|
|
+ mime = $h.isSvg(contents) ? 'image/svg+xml' : $h.getMimeType(hex, contents, file.type);
|
|
|
+ }
|
|
|
+ fileInfo = {'name': caption, 'type': mime};
|
|
|
+ isText = fnText(mime, '');
|
|
|
+ isHtml = fnHtml(mime, '');
|
|
|
+ isImage = fnImage(mime, '');
|
|
|
+ txtFlag = isText || isHtml;
|
|
|
+ if (txtFlag || isImage) {
|
|
|
+ readTextImage(txtFlag);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ self._previewFile(i, file, theFile, previewId, previewData, fileInfo);
|
|
|
+ self._initFileActions();
|
|
|
+ processFileLoaded();
|
|
|
+ };
|
|
|
+ reader.onprogress = function (data) {
|
|
|
+ if (data.lengthComputable) {
|
|
|
+ var fact = (data.loaded / data.total) * 100, progress = Math.ceil(fact);
|
|
|
+ msg = msgProgress.setTokens({
|
|
|
+ 'index': i + 1,
|
|
|
+ 'files': numFiles,
|
|
|
+ 'percent': progress,
|
|
|
+ 'name': caption
|
|
|
+ });
|
|
|
+ setTimeout(function () {
|
|
|
+ $status.html(msg);
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ if (isText || isHtml) {
|
|
|
+ reader.readAsText(file, self.textEncoding);
|
|
|
+ } else {
|
|
|
+ if (isImage) {
|
|
|
+ reader.readAsDataURL(file);
|
|
|
+ } else {
|
|
|
+ reader.readAsArrayBuffer(file);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ self._previewDefault(file, previewId);
|
|
|
+ setTimeout(function () {
|
|
|
+ readFile(i + 1);
|
|
|
+ self._updateFileDetails(numFiles);
|
|
|
+ }, 100);
|
|
|
+ self._raise('fileloaded', [file, previewId, i, reader]);
|
|
|
+ }
|
|
|
+ self.addToStack(file);
|
|
|
+ };
|
|
|
+
|
|
|
+ readFile(0);
|
|
|
+ self._updateFileDetails(numFiles, false);
|
|
|
+ },
|
|
|
lock: function () {
|
|
|
var self = this;
|
|
|
self._resetErrors();
|