{"version":3,"sources":["kendo.upload.js"],"names":["f","define","$","undefined","getFileName","input","map","inputFiles","file","name","join","$input","files","getAllFileInfo","stripPath","value","extension","getFileExtension","size","rawFiles","getFileInfo","rawFile","fileName","kendo","htmlEncode","fileSize","matches","match","rFileExtension","slashIndex","lastIndexOf","substr","assignGuidToFiles","unique","uid","guid","validateFiles","validationInfo","i","allowedExtensions","parseAllowedExtensions","maxFileSize","minFileSize","length","validateFileExtension","validateFileSize","extensions","ext","parsedExt","substring","toLowerCase","indexOf","validationErrors","inArray","INVALIDFILEEXTENSION","push","INVALIDMINFILESIZE","INVALIDMAXFILESIZE","getTotalFilesSizeMessage","totalSize","toFixed","shouldRemoveFileEntry","upload","multiple","wrapper","removeUploadedFile","fileEntry","data","shouldSendRemoveRequest","fileNames","_supportsRemove","_removeFileEntry","_submitRemove","textStatus","xhr","prevented","trigger","SUCCESS","operation","response","XMLHttpRequest","ERROR","logToConsole","responseText","tryParseJSON","onSuccess","onError","success","json","parseJSON","normalizeJSON","e","stopEvent","stopPropagation","preventDefault","bindDragEventWrappers","element","namespace","onDragEnter","onDragLeave","hideInterval","lastDrag","on","Date","setInterval","sinceLastDrag","clearInterval","isFileUploadStarted","is","getFileEntry","target","closest","iframeUploadModule","formDataUploadModule","window","Widget","ui","antiForgeryTokens","NS","SELECT","UPLOAD","COMPLETE","CANCEL","PROGRESS","REMOVE","VALIDATIONERRORS","PROGRESSHIDEDELAY","PROGRESSHIDEDURATION","headerStatusIcon","loading","warning","Upload","extend","init","options","activeInput","ns","initialFiles","that","this","fn","call","localization","_wrapInput","_activeInput","toggle","enabled","_ns","proxy","_onParentFormSubmit","_onParentFormReset","async","saveUrl","_module","_supportsFormData","_async","_renderInitialFiles","syncUploadModule","_supportsDrop","dropZone","_setupCustomDropZone","_setupDropZone","_onFileAction","_onClearSelected","_onUploadSelected","val","_onInputChange","events","showFileList","template","removeVerb","autoUpload","withCredentials","accept","select","cancel","retry","remove","clearSelectedFiles","uploadSelectedFiles","dropFilesHere","statusUploading","statusUploaded","statusWarning","statusFailed","headerStatusUploading","headerStatusUploaded","invalidMaxFileSize","invalidMinFileSize","invalidFileExtension","validation","setOptions","attr","_supportsMultiple","enable","disable","toggleClass","prop","destroy","customDropZone","document","add","off","onSaveSelected","getFiles","filesData","j","allFiles","listItems","find","clearAllFiles","each","index","_removeFileByDomElement","removeAllFiles","removeFileByUid","_removeFileByUid","clearFileByUid","clearFile","callback","_removeFile","removeFile","fileData","hasClass","onCancel","onRemove","_hideHeaderUploadstatus","_updateHeaderUploadStatus","_addInput","sourceInput","nodeType","clone","insertAfter","hide","removeAttr","focus","parent","addClass","removeClass","_onInputKeyDown","firstButton","keyCode","keys","TAB","_inputFiles","_isAsyncNonBatch","onSelect","_onDrop","dt","originalEvent","dataTransfer","droppedFiles","splice","_filesContainValidationErrors","hasErrors","batch","currentFile","idx","_enqueueFile","prepend","_fileAction","_prepareTemplateData","templateData","_prepareDefaultSingleFileEntryTemplate","errors","_prepareDefaultMultipleFileEntriesTemplate","filesHaveValidationErrors","totalFileSize","sort","a","b","existingFileEntries","removeEventArgs","fileUid","fileList","appendTo","angular","elements","width","allCompletedFiles","allInvalidFiles","_hideUploadButton","fileElement","actionKey","classDictionary","iconsClassDictionary","hasOwnProperty","_clearFileAction","append","show","_renderAction","_fileState","stateKey","states","uploading","text","uploaded","failed","currentState","actionClass","actionText","iconClass","empty","button","icon","hasValidationErrors","eventArgs","_checkAllComplete","finish","onRetry","_onFileProgress","percentComplete","progressPct","_onUploadSuccess","_setUploadErrorState","_hideUploadProgress","_onUploadError","uploadPercentage","delay","fadeOut","css","_showUploadButton","uploadButton","clearButton","_showHeaderUploadStatus","isUploading","headerUploadStatus","after","failedUploads","headerUploadStatusIcon","currentlyUploading","not","currentlyInvalid","html","onAbort","setTimeout","FormData","windows","_userAgent","support","browser","opera","safari","userAgent","isChrome","test","isSafari","isWindowsSafari","navigator","wrap","_bindDocumentDragEventWrappers","removeUrl","removeField","params","jQuery","ajax","type","dataType","dataFilter","url","traditional","error","xhrFields","prototype","filesContainErrors","relatedInput","iframes","_frameId","prepareUpload","performUpload","iframe","form","saveField","createFrame","registerFrame","createForm","frame","key","dataInput","cleanupFrame","unregisterFrame","body","prependTo","one","onIframeLoad","submit","module","started","contents","ex","processResponse","fakeXHR","jsonResult","statusText","status","stopFrameSubmit","id","action","stop","execCommand","grep","sourceElement","fileEntries","enqueueFiles","filesLength","formData","createFormData","createXHR","removeFileEntry","populateFormData","postFormData","stopUploadRequest","addEventListener","onRequestSuccess","onRequestError","onRequestProgress","open","setRequestHeader","send","raiseError","cleanupFileEntry","uploadComplete","Math","round","loaded","total","abort","plugin","amd","a1","a2","a3"],"mappings":"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","file":"kendo.upload.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.upload', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'upload',\n name: 'Upload',\n category: 'web',\n description: 'The Upload widget uses progressive enhancement to deliver the best possible uploading experience to users.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, antiForgeryTokens = kendo.antiForgeryTokens, logToConsole = kendo.logToConsole, rFileExtension = /\\.([^\\.]+)$/, NS = '.kendoUpload', SELECT = 'select', UPLOAD = 'upload', SUCCESS = 'success', ERROR = 'error', COMPLETE = 'complete', CANCEL = 'cancel', PROGRESS = 'progress', REMOVE = 'remove', VALIDATIONERRORS = 'validationErrors', INVALIDMAXFILESIZE = 'invalidMaxFileSize', INVALIDMINFILESIZE = 'invalidMinFileSize', INVALIDFILEEXTENSION = 'invalidFileExtension', PROGRESSHIDEDELAY = 1000, PROGRESSHIDEDURATION = 2000;\n var headerStatusIcon = {\n loading: 'k-i-loading',\n warning: 'k-i-warning',\n success: 'k-i-tick'\n };\n var Upload = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.name = element.name;\n that.multiple = that.options.multiple;\n that.localization = that.options.localization;\n var activeInput = that.element;\n that.wrapper = activeInput.closest('.k-upload');\n if (that.wrapper.length === 0) {\n that.wrapper = that._wrapInput(activeInput);\n }\n that._activeInput(activeInput);\n that.toggle(that.options.enabled);\n var ns = that._ns = NS + '-' + kendo.guid();\n activeInput.closest('form').on('submit' + ns, $.proxy(that._onParentFormSubmit, that)).on('reset' + ns, $.proxy(that._onParentFormReset, that));\n if (that.options.async.saveUrl) {\n that._module = that._supportsFormData() ? new formDataUploadModule(that) : new iframeUploadModule(that);\n that._async = true;\n var initialFiles = that.options.files;\n if (initialFiles.length > 0) {\n that._renderInitialFiles(initialFiles);\n }\n } else {\n that._module = new syncUploadModule(that);\n }\n if (that._supportsDrop()) {\n if (that.options.dropZone !== '') {\n that._setupCustomDropZone();\n } else {\n that._setupDropZone();\n }\n }\n that.wrapper.on('click', '.k-upload-action', $.proxy(that._onFileAction, that)).on('click', '.k-clear-selected', $.proxy(that._onClearSelected, that)).on('click', '.k-upload-selected', $.proxy(that._onUploadSelected, that));\n if (that.element.val()) {\n that._onInputChange({ target: that.element });\n }\n },\n events: [\n SELECT,\n UPLOAD,\n SUCCESS,\n ERROR,\n COMPLETE,\n CANCEL,\n PROGRESS,\n REMOVE\n ],\n options: {\n name: 'Upload',\n enabled: true,\n multiple: true,\n showFileList: true,\n template: '',\n files: [],\n async: {\n removeVerb: 'POST',\n autoUpload: true,\n withCredentials: true,\n accept: '*/*; q=0.5, application/json'\n },\n localization: {\n 'select': 'Select files...',\n 'cancel': 'Cancel',\n 'retry': 'Retry',\n 'remove': 'Remove',\n 'clearSelectedFiles': 'Clear',\n 'uploadSelectedFiles': 'Upload',\n 'dropFilesHere': 'drop files here to upload',\n 'statusUploading': 'uploading',\n 'statusUploaded': 'uploaded',\n 'statusWarning': 'warning',\n 'statusFailed': 'failed',\n 'headerStatusUploading': 'Uploading...',\n 'headerStatusUploaded': 'Done',\n 'invalidMaxFileSize': 'File size too large.',\n 'invalidMinFileSize': 'File size too small.',\n 'invalidFileExtension': 'File type not allowed.'\n },\n validation: {\n allowedExtensions: [],\n maxFileSize: 0,\n minFileSize: 0\n },\n dropZone: ''\n },\n setOptions: function (options) {\n var that = this, activeInput = that.element;\n Widget.fn.setOptions.call(that, options);\n that.multiple = that.options.multiple;\n activeInput.attr('multiple', that._supportsMultiple() ? that.multiple : false);\n that.toggle(that.options.enabled);\n },\n enable: function (enable) {\n enable = typeof enable === 'undefined' ? true : enable;\n this.toggle(enable);\n },\n disable: function () {\n this.toggle(false);\n },\n toggle: function (enable) {\n enable = typeof enable === 'undefined' ? enable : !enable;\n this.wrapper.toggleClass('k-state-disabled', enable);\n this.element.prop('disabled', enable);\n },\n destroy: function () {\n var that = this;\n var customDropZone = $(that.options.dropZone);\n $(document).add($('.k-dropzone', that.wrapper)).add(that.wrapper.closest('form')).off(that._ns);\n if (customDropZone.length > 0) {\n customDropZone.off(that._ns);\n }\n $(that.element).off(NS);\n Widget.fn.destroy.call(that);\n },\n upload: function () {\n var that = this;\n that._module.onSaveSelected();\n },\n getFiles: function () {\n var that = this;\n var filesData;\n var allFiles = [];\n var listItems = that.wrapper.find('.k-file');\n for (var i = 0; i < listItems.length; i++) {\n filesData = $(listItems[i]).data('fileNames');\n if (filesData) {\n for (var j = 0; j < filesData.length; j++) {\n allFiles.push(filesData[j]);\n }\n }\n }\n return allFiles;\n },\n clearAllFiles: function () {\n var that = this;\n var files = that.wrapper.find('.k-file');\n files.each(function (index, file) {\n that._removeFileByDomElement(file, false);\n });\n },\n removeAllFiles: function () {\n var that = this;\n var files = that.wrapper.find('.k-file');\n files.each(function (index, file) {\n that._removeFileByDomElement(file, true);\n });\n },\n removeFileByUid: function (uid) {\n this._removeFileByUid(uid, true);\n },\n clearFileByUid: function (uid) {\n this._removeFileByUid(uid, false);\n },\n _removeFileByUid: function (uid, shouldSendRemoveRequest) {\n var that = this;\n var fileEntry;\n if (typeof uid !== 'string') {\n return;\n }\n fileEntry = $('.k-file[' + kendo.attr('uid') + '=\"' + uid + '\"]', that.wrapper);\n if (fileEntry.length > 0) {\n that._removeFileByDomElement(fileEntry, shouldSendRemoveRequest);\n }\n },\n clearFile: function (callback) {\n this._removeFile(callback, false);\n },\n removeFile: function (callback) {\n this._removeFile(callback, true);\n },\n _removeFile: function (callback, shouldSendRemoveRequest) {\n var that = this;\n var files = that.wrapper.find('.k-file');\n var fileData;\n if (typeof callback === 'function') {\n files.each(function (index, file) {\n fileData = $(file).data('fileNames');\n if (callback(fileData)) {\n that._removeFileByDomElement(file, shouldSendRemoveRequest);\n }\n });\n }\n },\n _removeFileByDomElement: function (fileEntry, shouldSendRemoveRequest) {\n var that = this;\n var fileData = { target: $(fileEntry, that.wrapper) };\n var allFiles;\n if (that.options.async.saveUrl) {\n if ($(fileEntry).hasClass('k-file-progress')) {\n that._module.onCancel(fileData);\n } else {\n that._module.onRemove(fileData, {}, shouldSendRemoveRequest);\n }\n allFiles = $('.k-file', that.wrapper);\n if (allFiles.length === 0) {\n that._hideHeaderUploadstatus();\n } else {\n that._updateHeaderUploadStatus();\n }\n } else {\n that._module.onRemove(fileData, {}, shouldSendRemoveRequest);\n }\n },\n _addInput: function (sourceInput) {\n if (!sourceInput[0].nodeType) {\n return;\n }\n var that = this, input = sourceInput.clone().val('');\n input.insertAfter(that.element).data('kendoUpload', that);\n $(that.element).hide().attr('tabindex', '-1').removeAttr('id').off(NS);\n that._activeInput(input);\n that.element.focus();\n },\n _activeInput: function (input) {\n var that = this, wrapper = that.wrapper;\n that.element = input;\n input.attr('multiple', that._supportsMultiple() ? that.multiple : false).attr('autocomplete', 'off').on('click' + NS, function (e) {\n if (wrapper.hasClass('k-state-disabled')) {\n e.preventDefault();\n }\n }).on('focus' + NS, function () {\n $(this).parent().addClass('k-state-focused');\n }).on('blur' + NS, function () {\n $(this).parent().removeClass('k-state-focused');\n }).on('change' + NS, $.proxy(that._onInputChange, that)).on('keydown' + NS, $.proxy(that._onInputKeyDown, that));\n },\n _onInputKeyDown: function (e) {\n var that = this;\n var firstButton = that.wrapper.find('.k-upload-action:visible:first');\n if (e.keyCode === kendo.keys.TAB && firstButton.length > 0) {\n e.preventDefault();\n firstButton.focus();\n }\n },\n _onInputChange: function (e) {\n var that = this;\n var input = $(e.target);\n var files = assignGuidToFiles(that._inputFiles(input), that._isAsyncNonBatch());\n validateFiles(files, that.options.validation);\n var prevented = that.trigger(SELECT, { files: files });\n if (prevented) {\n that._addInput(input);\n input.remove();\n } else {\n that._module.onSelect({ target: input }, files);\n }\n },\n _onDrop: function (e) {\n var dt = e.originalEvent.dataTransfer;\n var that = this;\n var droppedFiles = dt.files;\n var files = assignGuidToFiles(getAllFileInfo(droppedFiles), that._isAsyncNonBatch());\n stopEvent(e);\n if (droppedFiles.length > 0 && !that.wrapper.hasClass('k-state-disabled')) {\n if (!that.multiple && files.length > 1) {\n files.splice(1, files.length - 1);\n }\n validateFiles(files, that.options.validation);\n var prevented = that.trigger(SELECT, { files: files });\n if (!prevented) {\n that._module.onSelect({ target: $('.k-dropzone', that.wrapper) }, files);\n }\n }\n },\n _filesContainValidationErrors: function (files) {\n var hasErrors = false;\n $(files).each(function (index, file) {\n if (file[VALIDATIONERRORS] && file[VALIDATIONERRORS].length > 0) {\n hasErrors = true;\n return false;\n }\n });\n return hasErrors;\n },\n _isAsyncNonBatch: function () {\n return this._async && !this.options.async.batch || false;\n },\n _renderInitialFiles: function (files) {\n var that = this;\n var idx = 0;\n files = assignGuidToFiles(files, true);\n for (idx = 0; idx < files.length; idx++) {\n var currentFile = files[idx];\n var fileEntry = that._enqueueFile(currentFile.name, { fileNames: [currentFile] });\n fileEntry.addClass('k-file-success').data('files', [files[idx]]);\n if (!that.options.template) {\n $('.k-upload-status', fileEntry).prepend('100%');\n }\n if (that._supportsRemove()) {\n that._fileAction(fileEntry, REMOVE);\n }\n }\n },\n _prepareTemplateData: function (name, data) {\n var filesData = data.fileNames, templateData = {}, totalSize = 0, idx = 0;\n for (idx = 0; idx < filesData.length; idx++) {\n totalSize += filesData[idx].size;\n }\n templateData.name = name;\n templateData.size = totalSize;\n templateData.files = data.fileNames;\n return templateData;\n },\n _prepareDefaultSingleFileEntryTemplate: function (data) {\n var that = this;\n var file = data.fileNames[0];\n var fileSize = getTotalFilesSizeMessage(data.fileNames);\n var errors = file[VALIDATIONERRORS];\n var template = '';\n if (errors && errors.length > 0) {\n template += '
  • ' + '' + '!' + '' + '' + '' + '' + file.name + '' + '' + that.localization[errors[0]] + '' + '';\n } else {\n template += '
  • ' + '' + '' + file.extension.substring(1) + '' + '' + '' + '' + file.name + '' + '' + fileSize + '';\n }\n template += '';\n return $(template);\n },\n _prepareDefaultMultipleFileEntriesTemplate: function (data) {\n var that = this;\n var files = data.fileNames;\n var filesHaveValidationErrors = that._filesContainValidationErrors(files);\n var totalFileSize = getTotalFilesSizeMessage(files);\n var template = '';\n var i, currentFile;\n if (filesHaveValidationErrors) {\n template += '
  • ' + '' + '!';\n } else {\n template += '
  • ' + '';\n }\n template += '';\n files.sort(function (a, b) {\n if (a[VALIDATIONERRORS]) {\n return -1;\n }\n if (b[VALIDATIONERRORS]) {\n return 1;\n }\n return 0;\n });\n template += '';\n for (i = 0; i < files.length; i++) {\n currentFile = files[i];\n if (currentFile[VALIDATIONERRORS] && currentFile[VALIDATIONERRORS].length > 0) {\n template += '' + currentFile.name + '';\n } else {\n template += '' + currentFile.name + '';\n }\n }\n if (filesHaveValidationErrors) {\n template += 'Invalid files(s). Please check file upload requirements.';\n } else {\n template += 'Total: ' + files.length + ' files, ' + totalFileSize + '';\n }\n template += '';\n return $(template);\n },\n _enqueueFile: function (name, data) {\n var that = this;\n var existingFileEntries;\n var fileEntry;\n var fileUid = data.fileNames[0].uid;\n var fileList = $('.k-upload-files', that.wrapper);\n var options = that.options;\n var template = options.template;\n var templateData;\n var removeEventArgs;\n if (fileList.length === 0) {\n fileList = $('').appendTo(that.wrapper);\n if (!that.options.showFileList) {\n fileList.hide();\n }\n that.wrapper.removeClass('k-upload-empty');\n }\n existingFileEntries = $('.k-file', fileList);\n if (!template) {\n if (data.fileNames.length === 1) {\n fileEntry = that._prepareDefaultSingleFileEntryTemplate(data);\n } else {\n fileEntry = that._prepareDefaultMultipleFileEntriesTemplate(data);\n }\n } else {\n templateData = that._prepareTemplateData(name, data);\n template = kendo.template(template);\n fileEntry = $('
  • ' + template(templateData) + '
  • ');\n fileEntry.find('.k-upload-action').addClass('k-button k-button-bare');\n that.angular('compile', function () {\n return {\n elements: fileEntry,\n data: [templateData]\n };\n });\n }\n fileEntry.attr(kendo.attr('uid'), fileUid).appendTo(fileList).data(data);\n if (!that._async) {\n $('.k-progress', fileEntry).width('100%');\n }\n if (!that.multiple && existingFileEntries.length > 0) {\n removeEventArgs = { files: existingFileEntries.data('fileNames') };\n if (!that.trigger(REMOVE, removeEventArgs)) {\n that._module.onRemove({ target: $(existingFileEntries, that.wrapper) }, removeEventArgs.data);\n }\n }\n return fileEntry;\n },\n _removeFileEntry: function (fileEntry) {\n var that = this;\n var fileList = fileEntry.closest('.k-upload-files');\n var allFiles, allCompletedFiles, allInvalidFiles;\n fileEntry.remove();\n allFiles = $('.k-file', fileList);\n allCompletedFiles = $('.k-file-success, .k-file-error', fileList);\n allInvalidFiles = $('.k-file-invalid', fileList);\n if (allCompletedFiles.length === allFiles.length || allInvalidFiles.length === allFiles.length) {\n this._hideUploadButton();\n }\n if (allFiles.length === 0) {\n fileList.remove();\n that.wrapper.addClass('k-upload-empty');\n that._hideHeaderUploadstatus();\n } else {\n that._updateHeaderUploadStatus();\n }\n },\n _fileAction: function (fileElement, actionKey) {\n var classDictionary = {\n remove: 'k-i-delete',\n cancel: 'k-i-cancel',\n retry: 'k-i-retry'\n };\n var iconsClassDictionary = {\n remove: 'k-i-close',\n cancel: 'k-i-close',\n retry: 'k-i-refresh'\n };\n if (!classDictionary.hasOwnProperty(actionKey)) {\n return;\n }\n this._clearFileAction(fileElement);\n if (!this.options.template) {\n fileElement.find('.k-upload-status .k-upload-action').remove();\n fileElement.find('.k-upload-status').append(this._renderAction(classDictionary[actionKey], this.localization[actionKey], iconsClassDictionary[actionKey]));\n } else {\n fileElement.find('.k-upload-action').addClass('k-button k-button-bare').append('').show();\n }\n },\n _fileState: function (fileEntry, stateKey) {\n var localization = this.localization, states = {\n uploading: { text: localization.statusUploading },\n uploaded: { text: localization.statusUploaded },\n failed: { text: localization.statusFailed }\n }, currentState = states[stateKey];\n if (currentState) {\n $('span.k-file-state', fileEntry).text(currentState.text);\n }\n },\n _renderAction: function (actionClass, actionText, iconClass) {\n if (actionClass !== '') {\n return $('');\n } else {\n return $('');\n }\n },\n _clearFileAction: function (fileElement) {\n $('.k-upload-action', fileElement).empty().hide();\n },\n _onFileAction: function (e) {\n var that = this;\n if (!that.wrapper.hasClass('k-state-disabled')) {\n var button = $(e.target).closest('.k-upload-action');\n var icon = button.find('.k-icon');\n var fileEntry = button.closest('.k-file');\n var files = fileEntry.data('fileNames');\n var hasValidationErrors = that._filesContainValidationErrors(files);\n var eventArgs = { files: files };\n if (icon.hasClass('k-i-delete')) {\n if (!that.trigger(REMOVE, eventArgs)) {\n that._module.onRemove({ target: $(fileEntry, that.wrapper) }, eventArgs.data, !hasValidationErrors);\n }\n } else if (icon.hasClass('k-i-cancel')) {\n that.trigger(CANCEL, eventArgs);\n that._module.onCancel({ target: $(fileEntry, that.wrapper) });\n that._checkAllComplete();\n that._updateHeaderUploadStatus();\n } else if (icon.hasClass('k-i-retry')) {\n $('.k-i-warning', fileEntry).remove();\n $('.k-progress', fileEntry).finish().show();\n that._module.onRetry({ target: $(fileEntry, that.wrapper) });\n }\n }\n return false;\n },\n _onUploadSelected: function () {\n var that = this;\n var wrapper = that.wrapper;\n if (!wrapper.hasClass('k-state-disabled')) {\n this._module.onSaveSelected();\n }\n return false;\n },\n _onClearSelected: function () {\n var that = this;\n var wrapper = that.wrapper;\n if (!wrapper.hasClass('k-state-disabled')) {\n that.clearAllFiles();\n }\n return false;\n },\n _onFileProgress: function (e, percentComplete) {\n var progressPct;\n if (percentComplete > 100) {\n percentComplete = 100;\n }\n if (!this.options.template) {\n progressPct = $('.k-upload-pct', e.target);\n if (progressPct.length === 0) {\n $('.k-upload-status', e.target).prepend('');\n }\n $('.k-upload-pct', e.target).text(percentComplete + '%');\n $('.k-progress', e.target).width(percentComplete + '%');\n } else {\n $('.k-progress', e.target).width(percentComplete + '%');\n }\n this.trigger(PROGRESS, {\n files: getFileEntry(e).data('fileNames'),\n percentComplete: percentComplete\n });\n },\n _onUploadSuccess: function (e, response, xhr) {\n var that = this;\n var fileEntry = getFileEntry(e);\n var prevented = that.trigger(SUCCESS, {\n files: fileEntry.data('fileNames'),\n response: response,\n operation: 'upload',\n XMLHttpRequest: xhr\n });\n if (prevented) {\n that._setUploadErrorState(fileEntry);\n } else {\n that._fileState(fileEntry, 'uploaded');\n fileEntry.removeClass('k-file-progress').addClass('k-file-success');\n that._updateHeaderUploadStatus();\n if (that._supportsRemove()) {\n that._fileAction(fileEntry, REMOVE);\n } else {\n that._clearFileAction(fileEntry);\n }\n }\n that._hideUploadProgress(fileEntry);\n that._checkAllComplete();\n },\n _onUploadError: function (e, xhr) {\n var that = this;\n var fileEntry = getFileEntry(e);\n that._setUploadErrorState(fileEntry);\n that.trigger(ERROR, {\n operation: 'upload',\n files: fileEntry.data('fileNames'),\n XMLHttpRequest: xhr\n });\n logToConsole('Server response: ' + xhr.responseText);\n that._hideUploadProgress(fileEntry);\n that._checkAllComplete();\n },\n _setUploadErrorState: function (fileEntry) {\n var that = this;\n var uploadPercentage = $('.k-upload-pct', fileEntry);\n that._fileState(fileEntry, 'failed');\n fileEntry.removeClass('k-file-progress').addClass('k-file-error');\n $('.k-progress', fileEntry).width('100%');\n if (uploadPercentage.length > 0) {\n uploadPercentage.empty().removeClass('k-upload-pct').addClass('k-icon k-i-warning');\n } else {\n $('.k-upload-status', fileEntry).prepend('');\n }\n this._updateHeaderUploadStatus();\n this._fileAction(fileEntry, 'retry');\n },\n _hideUploadProgress: function (fileEntry) {\n $('.k-progress', fileEntry).delay(PROGRESSHIDEDELAY).fadeOut(PROGRESSHIDEDURATION, function () {\n $(this).css('width', '0%');\n });\n },\n _showUploadButton: function () {\n var that = this;\n var uploadButton = $('.k-upload-selected', that.wrapper);\n var clearButton = $('.k-clear-selected', that.wrapper);\n if (uploadButton.length === 0) {\n uploadButton = that._renderAction('', this.localization.uploadSelectedFiles).addClass('k-upload-selected');\n clearButton = that._renderAction('', this.localization.clearSelectedFiles).addClass('k-clear-selected');\n }\n this.wrapper.append(clearButton, uploadButton);\n },\n _hideUploadButton: function () {\n $('.k-upload-selected, .k-clear-selected', this.wrapper).remove();\n },\n _showHeaderUploadStatus: function (isUploading) {\n var that = this;\n var localization = that.localization;\n var dropZone = $('.k-dropzone', that.wrapper);\n var headerUploadStatus = $('.k-upload-status-total', that.wrapper);\n if (headerUploadStatus.length !== 0) {\n headerUploadStatus.remove();\n }\n headerUploadStatus = '';\n if (isUploading) {\n headerUploadStatus = $(headerUploadStatus).append(localization.headerStatusUploading);\n headerUploadStatus.find('.k-icon').addClass(headerStatusIcon.loading).text(localization.statusUploading);\n } else {\n headerUploadStatus = $(headerUploadStatus).append(localization.headerStatusUploaded);\n headerUploadStatus.find('.k-icon').addClass(headerStatusIcon.warning).text(localization.statusWarning);\n }\n if (dropZone.length > 0) {\n dropZone.append(headerUploadStatus);\n } else {\n $('.k-upload-button', that.wrapper).after(headerUploadStatus);\n }\n },\n _updateHeaderUploadStatus: function () {\n var that = this;\n var localization = that.localization;\n var headerUploadStatus = $('.k-upload-status-total', this.wrapper);\n var currentlyUploading = $('.k-file', that.wrapper).not('.k-file-success, .k-file-error, .k-file-invalid');\n var currentlyInvalid = $('.k-file-invalid', that.wrapper);\n var failedUploads, headerUploadStatusIcon;\n if (currentlyUploading.length === 0 || currentlyInvalid.length > 0) {\n failedUploads = $('.k-file.k-file-error, .k-file.k-file-invalid', that.wrapper);\n headerUploadStatus = $('.k-upload-status-total', that.wrapper);\n headerUploadStatusIcon = $('.k-icon', headerUploadStatus).removeClass().addClass('k-icon').addClass(failedUploads.length !== 0 ? headerStatusIcon.warning : headerStatusIcon.success).text(failedUploads.length !== 0 ? localization.statusWarning : localization.statusUploaded);\n headerUploadStatus.html(headerUploadStatusIcon).append(that.localization.headerStatusUploaded);\n }\n },\n _hideHeaderUploadstatus: function () {\n $('.k-upload-status-total', this.wrapper).remove();\n },\n _onParentFormSubmit: function () {\n var upload = this, element = upload.element;\n if (typeof this._module.onAbort !== 'undefined') {\n this._module.onAbort();\n }\n if (!element.value) {\n var input = $(element);\n input.attr('disabled', 'disabled');\n window.setTimeout(function () {\n input.removeAttr('disabled');\n }, 0);\n }\n },\n _onParentFormReset: function () {\n $('.k-upload-files', this.wrapper).remove();\n },\n _supportsFormData: function () {\n return typeof FormData != 'undefined';\n },\n _supportsMultiple: function () {\n var windows = this._userAgent().indexOf('Windows') > -1;\n return !kendo.support.browser.opera && !(kendo.support.browser.safari && windows);\n },\n _supportsDrop: function () {\n var userAgent = this._userAgent().toLowerCase();\n var isChrome = /chrome/.test(userAgent);\n var isSafari = !isChrome && /safari/.test(userAgent);\n var isWindowsSafari = isSafari && /windows/.test(userAgent);\n return !isWindowsSafari && this._supportsFormData() && this.options.async.saveUrl;\n },\n _userAgent: function () {\n return navigator.userAgent;\n },\n _setupDropZone: function () {\n var that = this;\n $('.k-upload-button', that.wrapper).wrap('
    ');\n var ns = that._ns;\n var dropZone = $('.k-dropzone', that.wrapper).append($('' + that.localization.dropFilesHere + '')).on('dragenter' + ns, stopEvent).on('dragover' + ns, function (e) {\n e.preventDefault();\n }).on('drop' + ns, $.proxy(that._onDrop, that));\n bindDragEventWrappers(dropZone, ns, function () {\n if (!dropZone.closest('.k-upload').hasClass('k-state-disabled')) {\n dropZone.addClass('k-dropzone-hovered');\n }\n }, function () {\n dropZone.removeClass('k-dropzone-hovered');\n });\n that._bindDocumentDragEventWrappers(dropZone);\n },\n _setupCustomDropZone: function () {\n var that = this;\n var dropZone = $(that.options.dropZone);\n $('.k-upload-button', that.wrapper).wrap('
    ');\n var ns = that._ns;\n dropZone.on('dragenter' + ns, stopEvent).on('dragover' + ns, function (e) {\n e.preventDefault();\n }).on('drop' + ns, $.proxy(that._onDrop, that));\n bindDragEventWrappers(dropZone, ns, function (e) {\n if (!that.wrapper.hasClass('k-state-disabled')) {\n dropZone.removeClass('k-dropzone-hovered');\n $(e.target).addClass('k-dropzone-hovered');\n }\n }, function () {\n dropZone.removeClass('k-dropzone-hovered');\n });\n that._bindDocumentDragEventWrappers(dropZone);\n },\n _bindDocumentDragEventWrappers: function (dropZone) {\n var that = this;\n var ns = that._ns;\n bindDragEventWrappers($(document), ns, function () {\n if (!that.wrapper.hasClass('k-state-disabled')) {\n dropZone.addClass('k-dropzone-active');\n dropZone.closest('.k-upload').removeClass('k-upload-empty');\n }\n }, function () {\n dropZone.removeClass('k-dropzone-active');\n if ($('li.k-file', dropZone.closest('.k-upload')).length === 0) {\n dropZone.closest('.k-upload').addClass('k-upload-empty');\n }\n });\n },\n _supportsRemove: function () {\n return !!this.options.async.removeUrl;\n },\n _submitRemove: function (fileNames, data, onSuccess, onError) {\n var upload = this, removeField = upload.options.async.removeField || 'fileNames', params = $.extend(data, antiForgeryTokens());\n params[removeField] = fileNames;\n jQuery.ajax({\n type: this.options.async.removeVerb,\n dataType: 'json',\n dataFilter: normalizeJSON,\n url: this.options.async.removeUrl,\n traditional: true,\n data: params,\n success: onSuccess,\n error: onError,\n xhrFields: { withCredentials: this.options.async.withCredentials }\n });\n },\n _wrapInput: function (input) {\n var that = this;\n var options = that.options;\n input.wrap('
    ');\n if (!options.async.saveUrl) {\n input.closest('.k-upload').addClass('k-upload-sync');\n }\n input.closest('.k-upload').addClass('k-upload-empty');\n input.closest('.k-button').append('' + this.localization.select + '');\n return input.closest('.k-upload');\n },\n _checkAllComplete: function () {\n if ($('.k-file.k-file-progress', this.wrapper).length === 0) {\n this.trigger(COMPLETE);\n }\n },\n _inputFiles: function (sourceInput) {\n return inputFiles(sourceInput);\n }\n });\n var syncUploadModule = function (upload) {\n this.name = 'syncUploadModule';\n this.element = upload.wrapper;\n this.upload = upload;\n this.element.closest('form').attr('enctype', 'multipart/form-data').attr('encoding', 'multipart/form-data');\n };\n syncUploadModule.prototype = {\n onSelect: function (e, files) {\n var upload = this.upload;\n var sourceInput = $(e.target);\n var filesContainErrors = upload._filesContainValidationErrors(files);\n upload._addInput(sourceInput);\n var fileData = { 'fileNames': files };\n if (filesContainErrors) {\n sourceInput.remove();\n } else {\n fileData.relatedInput = sourceInput;\n }\n var file = upload._enqueueFile(getFileName(sourceInput), fileData);\n if (filesContainErrors) {\n upload._hideUploadProgress(file);\n }\n upload._fileAction(file, REMOVE);\n },\n onRemove: function (e) {\n var fileEntry = getFileEntry(e);\n var relatedInput = fileEntry.data('relatedInput');\n if (relatedInput) {\n relatedInput.remove();\n }\n this.upload._removeFileEntry(fileEntry);\n }\n };\n var iframeUploadModule = function (upload) {\n this.name = 'iframeUploadModule';\n this.element = upload.wrapper;\n this.upload = upload;\n this.iframes = [];\n };\n Upload._frameId = 0;\n iframeUploadModule.prototype = {\n onSelect: function (e, files) {\n var upload = this.upload;\n var sourceInput = $(e.target);\n var hasValidationErrors = upload._filesContainValidationErrors(files);\n var fileEntry = this.prepareUpload(sourceInput, files, hasValidationErrors);\n if (upload.options.async.autoUpload) {\n if (!hasValidationErrors) {\n this.performUpload(fileEntry);\n } else {\n upload._fileAction(fileEntry, REMOVE);\n upload._showHeaderUploadStatus(false);\n }\n } else {\n upload._fileAction(fileEntry, REMOVE);\n if (!hasValidationErrors) {\n upload._showUploadButton();\n } else {\n upload._updateHeaderUploadStatus();\n }\n }\n if (hasValidationErrors) {\n upload._hideUploadProgress(fileEntry);\n }\n },\n prepareUpload: function (sourceInput, files, hasValidationErrors) {\n var upload = this.upload;\n var activeInput = $(upload.element);\n var name = upload.options.async.saveField || sourceInput.attr('name');\n var fileEntry, fileData, iframe, form;\n upload._addInput(sourceInput);\n sourceInput.attr('name', name);\n if (!hasValidationErrors) {\n iframe = this.createFrame(upload.name + '_' + Upload._frameId++);\n this.registerFrame(iframe);\n form = this.createForm(upload.options.async.saveUrl, iframe.attr('name')).append(activeInput);\n fileData = {\n 'frame': iframe,\n 'relatedInput': activeInput,\n 'fileNames': files\n };\n } else {\n sourceInput.remove();\n fileData = { 'fileNames': files };\n }\n fileEntry = upload._enqueueFile(getFileName(sourceInput), fileData);\n if (iframe) {\n iframe.data({\n 'form': form,\n 'file': fileEntry\n });\n }\n return fileEntry;\n },\n performUpload: function (fileEntry) {\n var e = { files: fileEntry.data('fileNames') };\n var iframe = fileEntry.data('frame');\n var upload = this.upload;\n if (!upload.trigger(UPLOAD, e)) {\n upload._hideUploadButton();\n upload._showHeaderUploadStatus(true);\n iframe.appendTo(document.body);\n var form = iframe.data('form').attr('action', upload.options.async.saveUrl).appendTo(document.body);\n e.data = $.extend({}, e.data, antiForgeryTokens());\n for (var key in e.data) {\n var dataInput = form.find('input[name=\\'' + key + '\\']');\n if (dataInput.length === 0) {\n dataInput = $('', {\n type: 'hidden',\n name: key\n }).prependTo(form);\n }\n dataInput.val(e.data[key]);\n }\n upload._fileAction(fileEntry, CANCEL);\n upload._fileState(fileEntry, 'uploading');\n $(fileEntry).removeClass('k-file-error').addClass('k-file-progress');\n iframe.one('load', $.proxy(this.onIframeLoad, this));\n form[0].submit();\n } else {\n upload._removeFileEntry(iframe.data('file'));\n this.cleanupFrame(iframe);\n this.unregisterFrame(iframe);\n }\n },\n onSaveSelected: function () {\n var module = this;\n var upload = module.upload;\n $('.k-file', this.element).each(function () {\n var fileEntry = $(this);\n var started = isFileUploadStarted(fileEntry);\n var hasValidationErrors = upload._filesContainValidationErrors(fileEntry.data('fileNames'));\n if (!started && !hasValidationErrors) {\n module.performUpload(fileEntry);\n }\n });\n },\n onIframeLoad: function (e) {\n var iframe = $(e.target), responseText;\n try {\n responseText = iframe.contents().text();\n } catch (ex) {\n responseText = 'Error trying to get server response: ' + ex;\n }\n this.processResponse(iframe, responseText);\n },\n processResponse: function (iframe, responseText) {\n var fileEntry = iframe.data('file'), module = this, fakeXHR = { responseText: responseText };\n tryParseJSON(responseText, function (jsonResult) {\n $.extend(fakeXHR, {\n statusText: 'OK',\n status: '200'\n });\n module.upload._onFileProgress({ target: $(fileEntry, module.upload.wrapper) }, 100);\n module.upload._onUploadSuccess({ target: $(fileEntry, module.upload.wrapper) }, jsonResult, fakeXHR);\n module.cleanupFrame(iframe);\n module.unregisterFrame(iframe);\n }, function () {\n $.extend(fakeXHR, {\n statusText: 'error',\n status: '500'\n });\n module.upload._onUploadError({ target: $(fileEntry, module.upload.wrapper) }, fakeXHR);\n });\n },\n onCancel: function (e) {\n var iframe = $(e.target).data('frame');\n this.stopFrameSubmit(iframe);\n this.cleanupFrame(iframe);\n this.unregisterFrame(iframe);\n this.upload._removeFileEntry(iframe.data('file'));\n },\n onRetry: function (e) {\n var fileEntry = getFileEntry(e);\n this.performUpload(fileEntry);\n },\n onRemove: function (e, data, shouldSendRemoveRequest) {\n var module = this;\n var upload = module.upload;\n var fileEntry = getFileEntry(e);\n var iframe = fileEntry.data('frame');\n if (iframe) {\n module.unregisterFrame(iframe);\n upload._removeFileEntry(fileEntry);\n module.cleanupFrame(iframe);\n } else {\n if (fileEntry.hasClass('k-file-success')) {\n removeUploadedFile(fileEntry, upload, data, shouldSendRemoveRequest);\n } else {\n upload._removeFileEntry(fileEntry);\n }\n }\n },\n onAbort: function () {\n var element = this.element, module = this;\n $.each(this.iframes, function () {\n $('input', this.data('form')).appendTo(element);\n module.stopFrameSubmit(this[0]);\n this.data('form').remove();\n this.remove();\n });\n this.iframes = [];\n },\n createFrame: function (id) {\n return $('');\n },\n createForm: function (action, target) {\n return $('
    ');\n },\n stopFrameSubmit: function (frame) {\n if (typeof frame.stop != 'undefined') {\n frame.stop();\n } else if (frame.document) {\n frame.document.execCommand('Stop');\n }\n },\n registerFrame: function (frame) {\n this.iframes.push(frame);\n },\n unregisterFrame: function (frame) {\n this.iframes = $.grep(this.iframes, function (value) {\n return value.attr('name') != frame.attr('name');\n });\n },\n cleanupFrame: function (frame) {\n var form = frame.data('form');\n frame.data('file').data('frame', null);\n setTimeout(function () {\n form.remove();\n frame.remove();\n }, 1);\n }\n };\n var formDataUploadModule = function (upload) {\n this.name = 'formDataUploadModule';\n this.element = upload.wrapper;\n this.upload = upload;\n };\n formDataUploadModule.prototype = {\n onSelect: function (e, files) {\n var upload = this.upload;\n var module = this;\n var sourceElement = $(e.target);\n var fileEntries = this.prepareUpload(sourceElement, files);\n var hasValidationErrors;\n $.each(fileEntries, function () {\n hasValidationErrors = upload._filesContainValidationErrors($(this.data('fileNames')));\n if (upload.options.async.autoUpload) {\n if (!hasValidationErrors) {\n module.performUpload(this);\n } else {\n upload._fileAction(this, REMOVE);\n upload._showHeaderUploadStatus(false);\n }\n } else {\n upload._fileAction(this, REMOVE);\n if (!hasValidationErrors) {\n upload._showUploadButton();\n } else {\n upload._updateHeaderUploadStatus();\n }\n }\n if (hasValidationErrors) {\n upload._hideUploadProgress(this);\n }\n });\n },\n prepareUpload: function (sourceElement, files) {\n var fileEntries = this.enqueueFiles(files);\n if (sourceElement.is('input')) {\n $.each(fileEntries, function () {\n $(this).data('relatedInput', sourceElement);\n });\n sourceElement.data('relatedFileEntries', fileEntries);\n this.upload._addInput(sourceElement);\n }\n return fileEntries;\n },\n enqueueFiles: function (files) {\n var upload = this.upload;\n var name;\n var i;\n var filesLength = files.length;\n var currentFile;\n var fileEntry;\n var fileEntries = [];\n if (upload.options.async.batch === true) {\n name = $.map(files, function (file) {\n return file.name;\n }).join(', ');\n fileEntry = upload._enqueueFile(name, { fileNames: files });\n fileEntry.data('files', files);\n fileEntries.push(fileEntry);\n } else {\n for (i = 0; i < filesLength; i++) {\n currentFile = files[i];\n name = currentFile.name;\n fileEntry = upload._enqueueFile(name, { fileNames: [currentFile] });\n fileEntry.data('files', [currentFile]);\n fileEntries.push(fileEntry);\n }\n }\n return fileEntries;\n },\n performUpload: function (fileEntry) {\n var upload = this.upload, formData = this.createFormData(), xhr = this.createXHR(), e = {\n files: fileEntry.data('fileNames'),\n XMLHttpRequest: xhr\n };\n if (!upload.trigger(UPLOAD, e)) {\n upload._fileAction(fileEntry, CANCEL);\n upload._hideUploadButton();\n upload._showHeaderUploadStatus(true);\n if (e.formData) {\n formData = e.formData;\n } else {\n e.data = $.extend({}, e.data, antiForgeryTokens());\n for (var key in e.data) {\n formData.append(key, e.data[key]);\n }\n this.populateFormData(formData, fileEntry.data('files'));\n }\n upload._fileState(fileEntry, 'uploading');\n $(fileEntry).removeClass('k-file-error').addClass('k-file-progress');\n this.postFormData(upload.options.async.saveUrl, formData, fileEntry, xhr);\n } else {\n this.removeFileEntry(fileEntry);\n }\n },\n onSaveSelected: function () {\n var module = this;\n var upload = module.upload;\n $('.k-file', this.element).each(function () {\n var fileEntry = $(this);\n var started = isFileUploadStarted(fileEntry);\n var hasValidationErrors = upload._filesContainValidationErrors(fileEntry.data('fileNames'));\n if (!started && !hasValidationErrors) {\n module.performUpload(fileEntry);\n }\n });\n },\n onCancel: function (e) {\n var fileEntry = getFileEntry(e);\n this.stopUploadRequest(fileEntry);\n this.removeFileEntry(fileEntry);\n },\n onRetry: function (e) {\n var fileEntry = getFileEntry(e);\n this.performUpload(fileEntry);\n },\n onRemove: function (e, data, shouldSendRemoveRequest) {\n var module = this;\n var upload = module.upload;\n var fileEntry = getFileEntry(e);\n if (fileEntry.hasClass('k-file-success')) {\n removeUploadedFile(fileEntry, upload, data, shouldSendRemoveRequest);\n } else {\n module.removeFileEntry(fileEntry);\n }\n },\n createXHR: function () {\n return new XMLHttpRequest();\n },\n postFormData: function (url, data, fileEntry, xhr) {\n var module = this;\n fileEntry.data('request', xhr);\n xhr.addEventListener('load', function (e) {\n module.onRequestSuccess.call(module, e, fileEntry);\n }, false);\n xhr.addEventListener(ERROR, function (e) {\n module.onRequestError.call(module, e, fileEntry);\n }, false);\n xhr.upload.addEventListener('progress', function (e) {\n module.onRequestProgress.call(module, e, fileEntry);\n }, false);\n xhr.open('POST', url, true);\n xhr.withCredentials = this.upload.options.async.withCredentials;\n var accept = this.upload.options.async.accept;\n if (accept) {\n xhr.setRequestHeader('Accept', accept);\n }\n xhr.send(data);\n },\n createFormData: function () {\n return new FormData();\n },\n populateFormData: function (data, files) {\n var upload = this.upload, i, length = files.length;\n for (i = 0; i < length; i++) {\n data.append(upload.options.async.saveField || upload.name, files[i].rawFile);\n }\n return data;\n },\n onRequestSuccess: function (e, fileEntry) {\n var xhr = e.target, module = this;\n function raiseError() {\n module.upload._onUploadError({ target: $(fileEntry, module.upload.wrapper) }, xhr);\n }\n if (xhr.status >= 200 && xhr.status <= 299) {\n tryParseJSON(xhr.responseText, function (jsonResult) {\n module.upload._onFileProgress({ target: $(fileEntry, module.upload.wrapper) }, 100);\n module.upload._onUploadSuccess({ target: $(fileEntry, module.upload.wrapper) }, jsonResult, xhr);\n module.cleanupFileEntry(fileEntry);\n }, raiseError);\n } else {\n raiseError();\n }\n },\n onRequestError: function (e, fileEntry) {\n var xhr = e.target;\n this.upload._onUploadError({ target: $(fileEntry, this.upload.wrapper) }, xhr);\n },\n cleanupFileEntry: function (fileEntry) {\n var relatedInput = fileEntry.data('relatedInput'), uploadComplete = true;\n if (relatedInput) {\n $.each(relatedInput.data('relatedFileEntries') || [], function () {\n if (this.parent().length > 0 && this[0] != fileEntry[0]) {\n uploadComplete = uploadComplete && this.hasClass('k-file-success');\n }\n });\n if (uploadComplete) {\n relatedInput.remove();\n }\n }\n },\n removeFileEntry: function (fileEntry) {\n this.cleanupFileEntry(fileEntry);\n this.upload._removeFileEntry(fileEntry);\n },\n onRequestProgress: function (e, fileEntry) {\n var percentComplete = Math.round(e.loaded * 100 / e.total);\n this.upload._onFileProgress({ target: $(fileEntry, this.upload.wrapper) }, percentComplete);\n },\n stopUploadRequest: function (fileEntry) {\n fileEntry.data('request').abort();\n }\n };\n function getFileName(input) {\n return $.map(inputFiles(input), function (file) {\n return file.name;\n }).join(', ');\n }\n function inputFiles($input) {\n var input = $input[0];\n if (input.files) {\n return getAllFileInfo(input.files);\n } else {\n return [{\n name: stripPath(input.value),\n extension: getFileExtension(input.value),\n size: null\n }];\n }\n }\n function getAllFileInfo(rawFiles) {\n return $.map(rawFiles, function (file) {\n return getFileInfo(file);\n });\n }\n function getFileInfo(rawFile) {\n var fileName = rawFile.name || rawFile.fileName;\n return {\n name: kendo.htmlEncode(fileName),\n extension: getFileExtension(fileName),\n size: typeof rawFile.size == 'number' ? rawFile.size : rawFile.fileSize,\n rawFile: rawFile\n };\n }\n function getFileExtension(fileName) {\n var matches = fileName.match(rFileExtension);\n return matches ? matches[0] : '';\n }\n function stripPath(name) {\n var slashIndex = name.lastIndexOf('\\\\');\n return slashIndex != -1 ? name.substr(slashIndex + 1) : name;\n }\n function assignGuidToFiles(files, unique) {\n var uid = kendo.guid();\n return $.map(files, function (file) {\n file.uid = unique ? kendo.guid() : uid;\n return file;\n });\n }\n function validateFiles(files, validationInfo) {\n var allowedExtensions = parseAllowedExtensions(validationInfo.allowedExtensions);\n var maxFileSize = validationInfo.maxFileSize;\n var minFileSize = validationInfo.minFileSize;\n for (var i = 0; i < files.length; i++) {\n validateFileExtension(files[i], allowedExtensions);\n validateFileSize(files[i], minFileSize, maxFileSize);\n }\n }\n function parseAllowedExtensions(extensions) {\n var allowedExtensions = $.map(extensions, function (ext) {\n var parsedExt = ext.substring(0, 1) === '.' ? ext : '.' + ext;\n return parsedExt.toLowerCase();\n });\n return allowedExtensions;\n }\n function validateFileExtension(file, allowedExtensions) {\n if (allowedExtensions.length > 0) {\n if (allowedExtensions.indexOf(file.extension.toLowerCase()) < 0) {\n file.validationErrors = file.validationErrors || [];\n if ($.inArray(INVALIDFILEEXTENSION, file.validationErrors) === -1) {\n file.validationErrors.push(INVALIDFILEEXTENSION);\n }\n }\n }\n }\n function validateFileSize(file, minFileSize, maxFileSize) {\n if (minFileSize !== 0 && file.size < minFileSize) {\n file.validationErrors = file.validationErrors || [];\n if ($.inArray(INVALIDMINFILESIZE, file.validationErrors) === -1) {\n file.validationErrors.push(INVALIDMINFILESIZE);\n }\n }\n if (maxFileSize !== 0 && file.size > maxFileSize) {\n file.validationErrors = file.validationErrors || [];\n if ($.inArray(INVALIDMAXFILESIZE, file.validationErrors) === -1) {\n file.validationErrors.push(INVALIDMAXFILESIZE);\n }\n }\n }\n function getTotalFilesSizeMessage(files) {\n var totalSize = 0;\n if (typeof files[0].size == 'number') {\n for (var i = 0; i < files.length; i++) {\n if (files[i].size) {\n totalSize += files[i].size;\n }\n }\n } else {\n return '';\n }\n totalSize /= 1024;\n if (totalSize < 1024) {\n return totalSize.toFixed(2) + ' KB';\n } else {\n return (totalSize / 1024).toFixed(2) + ' MB';\n }\n }\n function shouldRemoveFileEntry(upload) {\n return !upload.multiple && $('.k-file', upload.wrapper).length > 1;\n }\n function removeUploadedFile(fileEntry, upload, data, shouldSendRemoveRequest) {\n if (!upload._supportsRemove()) {\n if (shouldRemoveFileEntry(upload) || !shouldSendRemoveRequest) {\n upload._removeFileEntry(fileEntry);\n }\n return;\n }\n var files = fileEntry.data('fileNames');\n var fileNames = $.map(files, function (file) {\n return file.name;\n });\n if (shouldSendRemoveRequest === false) {\n upload._removeFileEntry(fileEntry);\n return;\n }\n upload._submitRemove(fileNames, data, function onSuccess(data, textStatus, xhr) {\n var prevented = upload.trigger(SUCCESS, {\n operation: 'remove',\n files: files,\n response: data,\n XMLHttpRequest: xhr\n });\n if (!prevented) {\n upload._removeFileEntry(fileEntry);\n }\n }, function onError(xhr) {\n if (shouldRemoveFileEntry(upload)) {\n upload._removeFileEntry(fileEntry);\n }\n upload.trigger(ERROR, {\n operation: 'remove',\n files: files,\n XMLHttpRequest: xhr\n });\n logToConsole('Server response: ' + xhr.responseText);\n });\n }\n function tryParseJSON(input, onSuccess, onError) {\n var success = false, json = '';\n try {\n json = $.parseJSON(normalizeJSON(input));\n success = true;\n } catch (e) {\n onError();\n }\n if (success) {\n onSuccess(json);\n }\n }\n function normalizeJSON(input) {\n if (typeof input === 'undefined' || input === '') {\n input = '{}';\n }\n return input;\n }\n function stopEvent(e) {\n e.stopPropagation();\n e.preventDefault();\n }\n function bindDragEventWrappers(element, namespace, onDragEnter, onDragLeave) {\n var hideInterval, lastDrag;\n element.on('dragenter' + namespace, function (e) {\n onDragEnter(e);\n lastDrag = new Date();\n if (!hideInterval) {\n hideInterval = setInterval(function () {\n var sinceLastDrag = new Date() - lastDrag;\n if (sinceLastDrag > 100) {\n onDragLeave();\n clearInterval(hideInterval);\n hideInterval = null;\n }\n }, 100);\n }\n }).on('dragover' + namespace, function () {\n lastDrag = new Date();\n });\n }\n function isFileUploadStarted(fileEntry) {\n return fileEntry.is('.k-file-progress, .k-file-success, .k-file-error');\n }\n function getFileEntry(e) {\n return $(e.target).closest('.k-file');\n }\n kendo.ui.plugin(Upload);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}