/*!
* bootstrap-fileinput v4.3.7
* http://plugins.krajee.com/file-input
*
* Author: Kartik Visweswaran
* Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com
*
* Licensed under the BSD 3-Clause
* https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md
*/
(function (factory) {
"use strict";
//noinspection JSUnresolvedVariable
if (typeof define === 'function' && define.amd) { // jshint ignore:line
// AMD. Register as an anonymous module.
define(['jquery'], factory); // jshint ignore:line
} else { // noinspection JSUnresolvedVariable
if (typeof module === 'object' && module.exports) { // jshint ignore:line
// Node/CommonJS
// noinspection JSUnresolvedVariable
module.exports = factory(require('jquery')); // jshint ignore:line
} else {
// Browser globals
factory(window.jQuery);
}
}
}(function ($) {
"use strict";
$.fn.fileinputLocales = {};
$.fn.fileinputThemes = {};
var NAMESPACE, MODAL_ID, FRAMES, SORT_CSS, STYLE_SETTING, OBJECT_PARAMS, DEFAULT_PREVIEW, objUrl, compare, handler,
isIE, getNum, hasFileAPISupport, hasDragDropSupport, hasFileUploadSupport, addCss, getElement, isEmpty, isArray,
ifSet, uniqId, htmlEncode, replaceTags, cleanMemory, findFileName, checkFullScreen, toggleFullScreen, moveArray,
cleanZoomCache, FileInput;
NAMESPACE = '.fileinput';
MODAL_ID = 'kvFileinputModal';
FRAMES = '.kv-preview-thumb';
SORT_CSS = 'file-sortable';
STYLE_SETTING = 'style="width:{width};height:{height};"';
OBJECT_PARAMS = '\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n';
DEFAULT_PREVIEW = '
\n' +
'{previewFileIcon}\n' +
'
';
//noinspection JSUnresolvedVariable
objUrl = window.URL || window.webkitURL;
compare = function (input, str, exact) {
return input !== undefined && (exact ? input === str : input.match(str));
};
handler = function ($el, event, callback, skipNS) {
var ev = skipNS ? event : event.split(' ').join(NAMESPACE + ' ') + NAMESPACE;
if ($el.length) {
$el.off(ev).on(ev, callback);
}
};
isIE = function (ver) {
// check for IE versions < 11
if (navigator.appName !== 'Microsoft Internet Explorer') {
return false;
}
if (ver === 10) {
return new RegExp('msie\\s' + ver, 'i').test(navigator.userAgent);
}
var div = document.createElement("div"), status;
div.innerHTML = "";
status = div.getElementsByTagName("i").length;
document.body.appendChild(div);
div.parentNode.removeChild(div);
return status;
};
getNum = function (num, def) {
def = def || 0;
if (typeof num === "number") {
return num;
}
if (typeof num === "string") {
num = parseFloat(num);
}
return isNaN(num) ? def : num;
};
hasFileAPISupport = function () {
return !!(window.File && window.FileReader);
};
hasDragDropSupport = function () {
var div = document.createElement('div');
/** @namespace div.draggable */
/** @namespace div.ondragstart */
/** @namespace div.ondrop */
return !isIE(9) && (div.draggable !== undefined || (div.ondragstart !== undefined && div.ondrop !== undefined));
};
hasFileUploadSupport = function () {
return hasFileAPISupport() && window.FormData;
};
addCss = function ($el, css) {
$el.removeClass(css).addClass(css);
};
isEmpty = function (value, trim) {
return value === undefined || value === null || value.length === 0 || (trim && $.trim(value) === '');
};
isArray = function (a) {
return Array.isArray(a) || Object.prototype.toString.call(a) === '[object Array]';
};
ifSet = function (needle, haystack, def) {
def = def || '';
return (haystack && typeof haystack === 'object' && needle in haystack) ? haystack[needle] : def;
};
getElement = function (options, param, value) {
return (isEmpty(options) || isEmpty(options[param])) ? value : $(options[param]);
};
uniqId = function () {
return Math.round(new Date().getTime() + (Math.random() * 100));
};
htmlEncode = function (str) {
return str.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};
replaceTags = function (str, tags) {
var out = str;
if (!tags) {
return out;
}
$.each(tags, function (key, value) {
if (typeof value === "function") {
value = value();
}
out = out.split(key).join(value);
});
return out;
};
cleanMemory = function ($thumb) {
var data = $thumb.is('img') ? $thumb.attr('src') : $thumb.find('source').attr('src');
/** @namespace objUrl.revokeObjectURL */
objUrl.revokeObjectURL(data);
};
findFileName = function (filePath) {
var sepIndex = filePath.lastIndexOf('/');
if (sepIndex === -1) {
sepIndex = filePath.lastIndexOf('\\');
}
return filePath.split(filePath.substring(sepIndex, sepIndex + 1)).pop();
};
checkFullScreen = function () {
//noinspection JSUnresolvedVariable
return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement ||
document.msFullscreenElement;
};
toggleFullScreen = function (maximize) {
var doc = document, de = doc.documentElement;
if (de && maximize && !checkFullScreen()) {
/** @namespace document.requestFullscreen */
/** @namespace document.msRequestFullscreen */
/** @namespace document.mozRequestFullScreen */
/** @namespace document.webkitRequestFullscreen */
/** @namespace Element.ALLOW_KEYBOARD_INPUT */
if (de.requestFullscreen) {
de.requestFullscreen();
} else if (de.msRequestFullscreen) {
de.msRequestFullscreen();
} else if (de.mozRequestFullScreen) {
de.mozRequestFullScreen();
} else if (de.webkitRequestFullscreen) {
de.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
}
} else {
/** @namespace document.exitFullscreen */
/** @namespace document.msExitFullscreen */
/** @namespace document.mozCancelFullScreen */
/** @namespace document.webkitExitFullscreen */
if (doc.exitFullscreen) {
doc.exitFullscreen();
} else if (doc.msExitFullscreen) {
doc.msExitFullscreen();
} else if (doc.mozCancelFullScreen) {
doc.mozCancelFullScreen();
} else if (doc.webkitExitFullscreen) {
doc.webkitExitFullscreen();
}
}
};
moveArray = function (arr, oldIndex, newIndex) {
if (newIndex >= arr.length) {
var k = newIndex - arr.length;
while ((k--) + 1) {
arr.push(undefined);
}
}
arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);
return arr;
};
cleanZoomCache = function ($el) {
var $cache = $el.closest('.kv-zoom-cache-theme');
if (!$cache.length) {
$cache = $el.closest('.kv-zoom-cache');
}
$cache.remove();
};
FileInput = function (element, options) {
var self = this;
self.$element = $(element);
if (!self._validate()) {
return;
}
self.isPreviewable = hasFileAPISupport();
self.isIE9 = isIE(9);
self.isIE10 = isIE(10);
if (self.isPreviewable || self.isIE9) {
self._init(options);
self._listen();
} else {
self.$element.removeClass('file-loading');
}
};
FileInput.prototype = {
constructor: FileInput,
_init: function (options) {
var self = this, $el = self.$element, t;
self.options = options;
$.each(options, function (key, value) {
switch (key) {
case 'minFileCount':
case 'maxFileCount':
case 'maxFileSize':
self[key] = getNum(value);
break;
default:
self[key] = value;
break;
}
});
self._initTemplateDefaults();
self.fileInputCleared = false;
self.fileBatchCompleted = true;
if (!self.isPreviewable) {
self.showPreview = false;
}
self.uploadFileAttr = !isEmpty($el.attr('name')) ? $el.attr('name') : 'file_data';
self.reader = null;
self.formdata = {};
self.clearStack();
self.uploadCount = 0;
self.uploadStatus = {};
self.uploadLog = [];
self.uploadAsyncCount = 0;
self.loadedImages = [];
self.totalImagesCount = 0;
self.ajaxRequests = [];
self.isError = false;
self.ajaxAborted = false;
self.cancelling = false;
t = self._getLayoutTemplate('progress');
self.progressTemplate = t.replace('{class}', self.progressClass);
self.progressCompleteTemplate = t.replace('{class}', self.progressCompleteClass);
self.progressErrorTemplate = t.replace('{class}', self.progressErrorClass);
self.dropZoneEnabled = hasDragDropSupport() && self.dropZoneEnabled;
self.isDisabled = self.$element.attr('disabled') || self.$element.attr('readonly');
self.isUploadable = hasFileUploadSupport() && !isEmpty(self.uploadUrl);
self.isClickable = self.browseOnZoneClick && self.showPreview &&
(self.isUploadable && self.dropZoneEnabled || !isEmpty(self.defaultPreviewContent));
self.slug = typeof options.slugCallback === "function" ? options.slugCallback : self._slugDefault;
self.mainTemplate = self.showCaption ? self._getLayoutTemplate('main1') : self._getLayoutTemplate('main2');
self.captionTemplate = self._getLayoutTemplate('caption');
self.previewGenericTemplate = self._getPreviewTemplate('generic');
if (self.resizeImage && (self.maxImageWidth || self.maxImageHeight)) {
self.imageCanvas = document.createElement('canvas');
self.imageCanvasContext = self.imageCanvas.getContext('2d');
}
if (isEmpty(self.$element.attr('id'))) {
self.$element.attr('id', uniqId());
}
if (self.$container === undefined) {
self.$container = self._createContainer();
} else {
self._refreshContainer();
}
self.$dropZone = self.$container.find('.file-drop-zone');
self.$progress = self.$container.find('.kv-upload-progress');
self.$btnUpload = self.$container.find('.fileinput-upload');
self.$captionContainer = getElement(options, 'elCaptionContainer', self.$container.find('.file-caption'));
self.$caption = getElement(options, 'elCaptionText', self.$container.find('.file-caption-name'));
self.$previewContainer = getElement(options, 'elPreviewContainer', self.$container.find('.file-preview'));
self.$preview = getElement(options, 'elPreviewImage', self.$container.find('.file-preview-thumbnails'));
self.$previewStatus = getElement(options, 'elPreviewStatus', self.$container.find('.file-preview-status'));
self.$errorContainer = getElement(options, 'elErrorContainer',
self.$previewContainer.find('.kv-fileinput-error'));
if (!isEmpty(self.msgErrorClass)) {
addCss(self.$errorContainer, self.msgErrorClass);
}
self.$errorContainer.hide();
self.previewInitId = "preview-" + uniqId();
self._initPreviewCache();
self._initPreview(true);
self._initPreviewActions();
self._setFileDropZoneTitle();
self.$element.removeClass('file-loading');
if (self.$element.attr('disabled')) {
self.disable();
}
self._initZoom();
},
_initTemplateDefaults: function () {
var self = this, tMain1, tMain2, tPreview, tFileIcon, tClose, tCaption, tBtnDefault, tBtnLink, tBtnBrowse,
tModalMain, tModal, tProgress, tSize, tFooter, tActions, tActionDelete, tActionUpload, tActionZoom,
tActionDrag, tTagBef, tTagBef1, tTagBef2, tTagAft, tGeneric, tHtml, tImage, tText, tVideo, tAudio,
tFlash, tObject, tPdf, tOther, tZoomCache;
tMain1 = '{preview}\n' +
'\n' +
'';
tMain2 = '{preview}\n\n{remove}\n{cancel}\n{upload}\n{browse}\n';
tPreview = '\n' +
' {close}' +
'
\n' +
'
\n' +
'
\n' +
'
' +
'
\n' +
'
\n' +
'
\n' +
'
';
tClose = '×
\n';
tFileIcon = '';
tCaption = '\n';
//noinspection HtmlUnknownAttribute
tBtnDefault = '';
//noinspection HtmlUnknownAttribute
tBtnLink = '{icon} {label}';
//noinspection HtmlUnknownAttribute
tBtnBrowse = '{icon} {label}
';
tModalMain = '';
tModal = '\n' +
'
\n' +
' \n' +
'
\n' +
'
\n' +
'
\n' + '{prev} {next}\n' +
'
\n' +
'
\n' +
'
\n';
tProgress = '\n' +
'
\n' +
' {percent}%\n' +
'
\n' +
'
';
tSize = ' ({sizeText})';
tFooter = '';
tActions = '{indicator}
\n' +
'{drag}\n' +
'';
//noinspection HtmlUnknownAttribute
tActionDelete = '\n';
tActionUpload = '';
tActionZoom = '';
tActionDrag = '{dragIcon}';
tTagBef = '\n';
tTagBef2 = tTagBef + ' title="{caption}" ' + STYLE_SETTING + '>
\n';
tTagAft = '
{footer}\n
\n';
tGeneric = '{content}\n';
tHtml = '
{data}
\n';
tImage = '

\n';
tText = '
\n';
tVideo = '
\n';
tAudio = '
\n';
tFlash = '
\n';
tObject = '
\n';
tPdf = '