{"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","eventArgs","shouldSendRemoveRequest","fileNames","_supportsRemove","data","_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","CLEAR","PAUSE","RESUME","PROGRESS","REMOVE","VALIDATIONERRORS","PROGRESSHIDEDELAY","PROGRESSHIDEDURATION","headerStatusIcon","loading","warning","Upload","extend","init","options","activeInput","ns","initialFiles","that","this","fn","call","directory","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","autoRetryAfter","bufferChunkSize","maxAutoRetries","removeVerb","autoUpload","withCredentials","accept","useArrayBuffer","select","cancel","retry","remove","pause","resume","clearSelectedFiles","uploadSelectedFiles","dropFilesHere","invalidFiles","statusUploading","statusUploaded","statusWarning","statusFailed","headerStatusUploading","headerStatusPaused","headerStatusUploaded","invalidMaxFileSize","invalidMinFileSize","invalidFileExtension","validation","setOptions","attr","_supportsMultiple","enable","disable","toggleClass","prop","focus","destroy","customDropZone","document","add","off","onPause","pauseIcon","find","removeClass","addClass","parent","onResume","playIcon","onSaveSelected","getFiles","filesData","j","allFiles","listItems","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","_onInputKeyDown","firstButton","keyCode","keys","TAB","_inputFiles","_isAsyncNonBatch","onSelect","_readDirectory","item","deferred","Deferred","dirReader","createReader","readEntries","entries","resolve","reject","promise","_readFile","fullpath","fullPath","relativePath","slice","droppedFolderFiles","droppedFolderCounter","setTimeout","_proceedDroppedItems","_traverseFileTree","skipCounter","then","items","isFile","isDirectory","_onDrop","entry","dt","originalEvent","dataTransfer","droppedFiles","directoryDrop","webkitGetAsEntry","splice","_filesContainValidationErrors","hasErrors","batch","currentFile","idx","_enqueueFile","_fileAction","_prepareTemplateData","templateData","_prepareDefaultSingleFileEntryTemplate","errors","_prepareDefaultMultipleFileEntriesTemplate","filesHaveValidationErrors","totalFileSize","sort","a","b","existingFileEntries","removeEventArgs","fileUid","fileList","appendTo","angular","elements","width","headers","allCompletedFiles","allInvalidFiles","_hideUploadButton","fileElement","actionKey","skipClear","classDictionary","iconsClassDictionary","hasOwnProperty","_clearFileAction","append","show","_renderAction","_fileState","stateKey","states","uploading","text","uploaded","failed","currentState","actionClass","actionText","iconClass","empty","button","icon","hasValidationErrors","_checkAllComplete","finish","onRetry","clearEventArgs","_onFileProgress","percentComplete","progressPct","warningPct","prepend","_onUploadSuccess","_setUploadErrorState","_hideUploadProgress","_onUploadError","module","chunkSize","_decreasePosition","_autoRetryAfter","retries","performUpload","uploadPercentage","_updateUploadProgress","fileMetaData","metaData","totalChunks","Math","round","chunkIndex","delay","fadeOut","css","_showUploadButton","uploadButton","clearButton","_showHeaderUploadStatus","isUploading","headerUploadStatus","after","failedUploads","headerUploadStatusIcon","currentlyUploading","not","currentlyInvalid","currentlyFailed","currentlyPaused","concurrent","html","onAbort","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","iframe","form","saveField","createFrame","registerFrame","createForm","frame","key","dataInput","cleanupFrame","unregisterFrame","body","prependTo","one","onIframeLoad","submit","started","contents","ex","processResponse","fakeXHR","jsonResult","statusText","status","stopFrameSubmit","id","action","stop","execCommand","grep","position","cancelled","paused","prev","sourceElement","fileEntries","prepareChunk","enqueueFiles","filesLength","webkitRelativePath","formData","createFormData","createXHR","removeFileEntry","populateFormData","FileReader","postFormData","reader","onload","fileArrayBuffer","_appendBuffer","result","err","onerror","readAsArrayBuffer","_getCurrentChunk","buffer1","buffer2","tmp","Uint8Array","byteLength","set","buffer","filter","prevEntry","stopUploadRequest","_increaseChunkIndex","addEventListener","onRequestSuccess","onRequestError","onRequestProgress","open","setRequestHeader","send","chunk","serializedMetaData","JSON","stringify","raiseError","parseSuccess","next","cleanupFileEntry","_resetChunkIndex","uploadComplete","loaded","total","abort","contentType","ceil","uploadUid","_decreaseChunkIndex","methodToInvoke","oldPosition","_getChunker","mozSlice","webkitSlice","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', CLEAR = 'clear', PAUSE = 'pause', RESUME = 'resume', 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-check'\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.directory = that.options.directory;\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 CLEAR,\n PROGRESS,\n REMOVE,\n PAUSE,\n RESUME\n ],\n options: {\n name: 'Upload',\n enabled: true,\n multiple: true,\n directory: false,\n showFileList: true,\n template: '',\n files: [],\n async: {\n autoRetryAfter: 0,\n bufferChunkSize: 10000000,\n maxAutoRetries: 1,\n removeVerb: 'POST',\n autoUpload: true,\n withCredentials: true,\n accept: '*/*; q=0.5, application/json',\n useArrayBuffer: false\n },\n localization: {\n 'select': 'Select files...',\n 'cancel': 'Cancel',\n 'retry': 'Retry',\n 'remove': 'Remove',\n 'pause': 'Pause',\n 'resume': 'Resume',\n 'clearSelectedFiles': 'Clear',\n 'uploadSelectedFiles': 'Upload',\n 'dropFilesHere': 'Drop files here to upload',\n 'invalidFiles': 'Invalid file(s). Please check file upload requirements.',\n 'statusUploading': 'uploading',\n 'statusUploaded': 'uploaded',\n 'statusWarning': 'warning',\n 'statusFailed': 'failed',\n 'headerStatusUploading': 'Uploading...',\n 'headerStatusPaused': 'Paused',\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 that.directory = that.options.directory;\n activeInput.attr('multiple', that._supportsMultiple() ? that.multiple : false);\n if (that.directory) {\n activeInput.attr('webkitdirectory', that.directory);\n activeInput.attr('directory', that.directory);\n }\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 focus: function () {\n this.element.focus();\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 pause: function (fileEntry) {\n this._module.onPause({ target: $(fileEntry, this.wrapper) });\n var pauseIcon = fileEntry.find('.k-i-pause-sm');\n pauseIcon.removeClass('k-i-pause-sm').addClass('k-i-play-sm').attr('title', this.localization.resume);\n $(pauseIcon).parent().attr('aria-label', this.localization.resume);\n },\n resume: function (fileEntry) {\n this._module.onResume({ target: $(fileEntry, this.wrapper) });\n var playIcon = fileEntry.find('.k-i-play-sm');\n playIcon.removeClass('k-i-play-sm').addClass('k-i-pause-sm').attr('title', this.localization.pause);\n $(playIcon).parent().attr('aria-label', this.localization.pause);\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 if (that.directory) {\n input.attr('webkitdirectory', that.directory);\n input.attr('directory', that.directory);\n }\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 _readDirectory: function (item) {\n var deferred = new $.Deferred();\n var dirReader = item.createReader();\n dirReader.readEntries(function (entries) {\n deferred.resolve(entries);\n }, deferred.reject);\n return deferred.promise();\n },\n _readFile: function (item) {\n var that = this;\n var fullpath = item.fullPath;\n item.file(function (file) {\n file.relativePath = fullpath.slice(1);\n that.droppedFolderFiles.push(file);\n that.droppedFolderCounter--;\n if (that.droppedFolderCounter === 0) {\n setTimeout(function () {\n if (that.droppedFolderCounter === 0) {\n if (that.droppedFolderFiles.length) {\n that._proceedDroppedItems(that.droppedFolderFiles);\n that.droppedFolderFiles = [];\n }\n }\n }, 0);\n }\n }, function () {\n logToConsole('File error.');\n });\n },\n _traverseFileTree: function (item, skipCounter) {\n var that = this;\n if (!skipCounter) {\n that.droppedFolderCounter--;\n }\n this._readDirectory(item).then(function (items) {\n that.droppedFolderCounter += items.length;\n for (var i = 0; i < items.length; i++) {\n if (items[i].isFile) {\n that._readFile(items[i]);\n } else if (items[i].isDirectory) {\n that._traverseFileTree(items[i]);\n }\n }\n });\n },\n _onDrop: function (e) {\n var dt = e.originalEvent.dataTransfer;\n var that = this;\n var droppedFiles = dt.files;\n var length;\n stopEvent(e);\n if (that.options.directoryDrop && dt.items) {\n length = dt.items.length;\n that.droppedFolderCounter = 0;\n that.droppedFolderFiles = [];\n for (var i = 0; i < length; i++) {\n if (dt.items[i].webkitGetAsEntry) {\n var entry = dt.items[i].webkitGetAsEntry();\n if (entry.isDirectory) {\n that._traverseFileTree(entry, true);\n } else if (entry.isFile) {\n that.droppedFolderFiles.push(dt.files[i]);\n }\n } else {\n that._proceedDroppedItems(droppedFiles);\n }\n }\n } else {\n that._proceedDroppedItems(droppedFiles);\n }\n },\n _proceedDroppedItems: function (droppedFiles) {\n var that = this;\n var files = assignGuidToFiles(getAllFileInfo(droppedFiles), that._isAsyncNonBatch());\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._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 += '' + that.localization.invalidFiles + '';\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');\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 = {\n files: existingFileEntries.data('fileNames'),\n headers: {}\n };\n if (!that.trigger(REMOVE, removeEventArgs)) {\n that._module.onRemove({ target: $(existingFileEntries, that.wrapper) }, removeEventArgs);\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, skipClear) {\n var classDictionary = {\n remove: 'k-i-x',\n cancel: 'k-i-cancel',\n retry: 'k-i-retry',\n pause: 'k-i-pause-sm'\n };\n var iconsClassDictionary = {\n remove: 'k-i-close',\n cancel: 'k-i-close',\n retry: 'k-i-reload-sm',\n pause: 'k-i-pause-sm'\n };\n if (!classDictionary.hasOwnProperty(actionKey)) {\n return;\n }\n if (!skipClear) {\n this._clearFileAction(fileElement);\n }\n if (!this.options.template) {\n if (!skipClear) {\n fileElement.find('.k-upload-status .k-upload-action').remove();\n }\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').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 $('').on('focus', function () {\n $(this).addClass('k-state-focused');\n }).on('blur', function () {\n $(this).removeClass('k-state-focused');\n });\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 = {\n files: files,\n headers: {}\n };\n if (icon.hasClass('k-i-x')) {\n if (!that.trigger(REMOVE, eventArgs)) {\n that._module.onRemove({ target: $(fileEntry, that.wrapper) }, eventArgs, !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-pause-sm')) {\n that.trigger(PAUSE, eventArgs);\n that.pause(fileEntry);\n that._updateHeaderUploadStatus();\n } else if (icon.hasClass('k-i-play-sm')) {\n that.trigger(RESUME, eventArgs);\n that.resume(fileEntry);\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 var clearEventArgs = {};\n if (!wrapper.hasClass('k-state-disabled') && !that.trigger(CLEAR, clearEventArgs)) {\n that.clearAllFiles();\n }\n return false;\n },\n _onFileProgress: function (e, percentComplete) {\n var progressPct;\n var warningPct;\n if (percentComplete > 100) {\n percentComplete = 100;\n }\n if (!this.options.template) {\n progressPct = $('.k-upload-pct', e.target);\n warningPct = $('.k-i-warning', e.target);\n if (warningPct.length) {\n warningPct.removeClass('k-i-warning').removeClass('k-icon').addClass('k-upload-pct');\n } else if (progressPct.length === 0) {\n $('.k-upload-status', e.target).prepend('');\n }\n if (percentComplete !== 100) {\n $('.k-upload-pct', e.target).text(percentComplete + '%');\n } else {\n $('.k-upload-pct', e.target).remove();\n }\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 module = that._module;\n var fileEntry = getFileEntry(e);\n var fileUid = fileEntry.data('uid');\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 if (!that.options.async.chunkSize) {\n that._hideUploadProgress(fileEntry);\n } else {\n if (module._decreasePosition) {\n module._decreasePosition(fileUid);\n }\n }\n that._checkAllComplete();\n if (this.options.async.autoRetryAfter) {\n this._autoRetryAfter(fileEntry);\n }\n },\n _autoRetryAfter: function (fileEntry) {\n var that = this;\n var retries = this._module.retries;\n if (!retries) {\n return;\n }\n if (!retries[fileEntry.data('uid')]) {\n retries[fileEntry.data('uid')] = 1;\n }\n if (retries[fileEntry.data('uid')] <= this.options.async.maxAutoRetries) {\n retries[fileEntry.data('uid')]++;\n setTimeout(function () {\n that._module.performUpload(fileEntry);\n }, this.options.async.autoRetryAfter);\n }\n },\n _setUploadErrorState: function (fileEntry) {\n var that = this;\n var uploadPercentage;\n that._fileState(fileEntry, 'failed');\n fileEntry.removeClass('k-file-progress').addClass('k-file-error');\n that._updateUploadProgress(fileEntry);\n uploadPercentage = $('.k-upload-pct', fileEntry);\n if (uploadPercentage.length > 0) {\n if (!uploadPercentage.parent().find('.k-i-warning').length) {\n uploadPercentage.removeClass('k-upload-pct').addClass('k-icon k-i-warning');\n }\n uploadPercentage.empty();\n } else {\n $('.k-upload-status', fileEntry).prepend('');\n }\n this._updateHeaderUploadStatus();\n this._fileAction(fileEntry, 'retry');\n this._fileAction(fileEntry, REMOVE, true);\n },\n _updateUploadProgress: function (fileEntry) {\n var that = this;\n if (!that.options.async.chunkSize) {\n $('.k-progress', fileEntry).width('100%');\n } else {\n var fileUid = fileEntry.data('uid');\n if (that._module.metaData) {\n var fileMetaData = that._module.metaData[fileUid];\n if (fileMetaData) {\n var percentComplete = fileMetaData.totalChunks ? Math.round(fileMetaData.chunkIndex / fileMetaData.totalChunks * 100) : 100;\n that._onFileProgress({ target: $(fileEntry, that.wrapper) }, percentComplete);\n }\n }\n }\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);\n } else {\n headerUploadStatus = $(headerUploadStatus).append(localization.headerStatusUploaded);\n headerUploadStatus.find('.k-icon').addClass(headerStatusIcon.warning);\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 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 currentlyFailed = $('.k-file-error', that.wrapper);\n var currentlyPaused = $('.k-file', that.wrapper).find('.k-i-play-sm');\n var failedUploads, headerUploadStatusIcon;\n if (currentlyPaused.length && (currentlyPaused.length === currentlyUploading.length || !that.options.async.concurrent)) {\n headerUploadStatusIcon = $('.k-icon', headerUploadStatus).removeClass().addClass('k-icon').addClass('k-i-pause-sm');\n headerUploadStatus.html(headerUploadStatusIcon).append(that.localization.headerStatusPaused);\n } else if (currentlyUploading.length === 0 || currentlyInvalid.length > 0 || currentlyFailed.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);\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, eventArgs, onSuccess, onError) {\n var upload = this, removeField = upload.options.async.removeField || 'fileNames', params = $.extend(eventArgs.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 headers: eventArgs.headers,\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, eventArgs, 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, eventArgs, 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 this.position = {};\n this.metaData = {};\n this.cancelled = {};\n this.resume = {};\n this.paused = {};\n this.retries = {};\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 var prev;\n $.each(fileEntries, function (index) {\n hasValidationErrors = upload._filesContainValidationErrors($(this.data('fileNames')));\n if (upload.options.async.autoUpload) {\n if (!hasValidationErrors) {\n if (upload.options.async.chunkSize) {\n module.prepareChunk(this);\n prev = this.prev();\n if (upload.options.async.concurrent || index === 0 && !prev.length || index === 0 && prev.hasClass('k-file-success')) {\n module.performUpload(this);\n }\n } else {\n module.performUpload(this);\n }\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 this.addClass('k-toupload');\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 if (upload.directory || upload.options.directoryDrop) {\n $(files).each(function () {\n if (this.rawFile.webkitRelativePath || this.rawFile.relativePath) {\n this.name = this.rawFile.webkitRelativePath || this.rawFile.relativePath;\n }\n });\n }\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 if (upload.directory || upload.options.directoryDrop) {\n if (currentFile.rawFile.webkitRelativePath || currentFile.rawFile.relativePath) {\n currentFile.name = currentFile.rawFile.webkitRelativePath || currentFile.rawFile.relativePath;\n }\n }\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 }, files;\n if (!upload.trigger(UPLOAD, e)) {\n if (fileEntry.find('.k-i-cancel').length === 0) {\n if (upload.options.async.chunkSize) {\n upload._fileAction(fileEntry, PAUSE);\n }\n upload._fileAction(fileEntry, CANCEL, upload.options.async.chunkSize);\n }\n if (!upload.wrapper.find('.k-toupload').length) {\n upload._hideUploadButton();\n }\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 files = fileEntry.data('files');\n if (files) {\n this.populateFormData(formData, files);\n }\n }\n upload._fileState(fileEntry, 'uploading');\n $(fileEntry).removeClass('k-file-error').addClass('k-file-progress');\n if (upload.options.async.useArrayBuffer && window.FileReader) {\n this._readFile(upload.options.async.saveUrl, formData, fileEntry, xhr);\n } else {\n this.postFormData(upload.options.async.saveUrl, formData, fileEntry, xhr);\n }\n } else {\n this.removeFileEntry(fileEntry);\n }\n },\n _readFile: function (saveUrl, formData, fileEntry, xhr) {\n var that = this;\n var upload = that.upload;\n var file = fileEntry.data('files')[0];\n var reader = new FileReader();\n reader.onload = function (e) {\n try {\n if (!that.fileArrayBuffer) {\n that.fileArrayBuffer = e.target.result;\n } else {\n that.fileArrayBuffer = that._appendBuffer(that.fileArrayBuffer, e.target.result);\n }\n } catch (err) {\n upload._onUploadError({ target: $(fileEntry, upload.wrapper) }, xhr);\n return;\n }\n if (that.position[file.uid] > file.size) {\n that.postFormData(upload.options.async.saveUrl, that.fileArrayBuffer, fileEntry, xhr);\n that.fileArrayBuffer = null;\n } else {\n that._readFile(saveUrl, formData, fileEntry, xhr);\n }\n };\n reader.onerror = function () {\n upload._onUploadError({ target: $(fileEntry, upload.wrapper) }, xhr);\n };\n reader.readAsArrayBuffer(that._getCurrentChunk(file.rawFile, file.uid));\n },\n _appendBuffer: function (buffer1, buffer2) {\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n },\n onSaveSelected: function () {\n var module = this;\n var upload = module.upload;\n $('.k-toupload', this.element).filter(function () {\n var fileEntry = $(this);\n var started = isFileUploadStarted(fileEntry);\n var hasValidationErrors = upload._filesContainValidationErrors(fileEntry.data('fileNames'));\n return !started && !hasValidationErrors;\n }).each(function (index) {\n var fileEntry = $(this);\n var prevEntry = fileEntry.prev();\n fileEntry.removeClass('k-toupload');\n if (upload.options.async.chunkSize) {\n module.prepareChunk(fileEntry);\n if (upload.options.async.concurrent || index === 0 && !prevEntry.length || (index === 0 && prevEntry.hasClass('k-file-success') || prevEntry.hasClass('k-file-error'))) {\n module.performUpload(fileEntry);\n }\n } else {\n module.performUpload(fileEntry);\n }\n });\n },\n onCancel: function (e) {\n var fileEntry = getFileEntry(e);\n if (this.upload.options.async.chunkSize) {\n this.cancelled[fileEntry.data('uid')] = true;\n }\n this.stopUploadRequest(fileEntry);\n this.removeFileEntry(fileEntry);\n },\n onPause: function (e) {\n var fileEntry = getFileEntry(e);\n var fileUid = fileEntry.data('uid');\n var async = this.upload.options.async;\n if (async.chunkSize) {\n this.retries[fileUid] = async.maxAutoRetries + 1;\n this.paused[fileUid] = true;\n this.resume[fileUid] = false;\n }\n },\n onResume: function (e) {\n var fileEntry = getFileEntry(e);\n var fileUid = fileEntry.data('uid');\n if (this.upload.options.async.chunkSize) {\n delete this.paused[fileUid];\n this.resume[fileUid] = true;\n this.retries[fileEntry.data('uid')] = 1;\n this._increaseChunkIndex(fileUid);\n this.performUpload(fileEntry);\n }\n },\n onRetry: function (e) {\n var fileEntry = getFileEntry(e);\n var async = this.upload.options.async;\n if (async.chunkSize) {\n this.retries[fileEntry.data('uid')] = async.maxAutoRetries + 1;\n delete this.paused[fileEntry.data('uid')];\n }\n this.performUpload(fileEntry);\n },\n onRemove: function (e, eventArgs, shouldSendRemoveRequest) {\n var module = this;\n var upload = module.upload;\n var fileEntry = getFileEntry(e);\n var async = this.upload.options.async;\n if (async.chunkSize) {\n this.retries[fileEntry.data('uid')] = async.maxAutoRetries + 1;\n }\n if (fileEntry.hasClass('k-file-success')) {\n removeUploadedFile(fileEntry, upload, eventArgs, 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 chunk;\n var i;\n var length = files.length;\n var uid;\n var upload = this.upload;\n if (upload.options.async.chunkSize) {\n uid = files[0].uid;\n chunk = this._getCurrentChunk(files[0].rawFile, uid);\n data.append(upload.options.async.saveField || upload.name, chunk);\n var serializedMetaData = JSON.stringify(this.metaData[uid]);\n data.append('metadata', serializedMetaData);\n } else {\n for (i = 0; i < length; i++) {\n data.append(upload.options.async.saveField || upload.name, files[i].rawFile);\n }\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 function parseSuccess(jsonResult) {\n var batch = module.upload.options.async.batch;\n var chunkSize = module.upload.options.async.chunkSize;\n var concurrent = module.upload.options.async.concurrent;\n var fileUid = jsonResult.fileUid;\n if (module.paused[fileUid] || module.cancelled[fileUid]) {\n return;\n }\n delete module.retries[fileUid];\n if (chunkSize && !batch && !jsonResult.uploaded) {\n module._increaseChunkIndex(fileUid);\n module.performUpload(fileEntry);\n } else if (chunkSize && !batch && !concurrent && fileEntry.next().length && !fileEntry.next().hasClass('k-toupload')) {\n module.upload._onFileProgress({ target: $(fileEntry, module.upload.wrapper) }, 100);\n module._resetChunkIndex(fileUid);\n module.upload._onUploadSuccess({ target: $(fileEntry, module.upload.wrapper) }, jsonResult, xhr);\n module.performUpload(fileEntry.next());\n } else {\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 }\n }\n if (xhr.status >= 200 && xhr.status <= 299) {\n tryParseJSON(xhr.responseText, parseSuccess, 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 var chunkSize = this.upload.options.async.chunkSize;\n var concurrent = this.upload.options.async.concurrent;\n this.cleanupFileEntry(fileEntry);\n if (chunkSize && !concurrent) {\n if (fileEntry.next().length) {\n this.performUpload(fileEntry.next());\n }\n }\n this.upload._removeFileEntry(fileEntry);\n },\n onRequestProgress: function (e, fileEntry) {\n var percentComplete = Math.round(e.loaded * 100 / e.total);\n var fileUid = fileEntry.data('uid');\n var fileMetaData;\n if (this.upload.options.async.chunkSize) {\n fileMetaData = this.metaData[fileUid];\n percentComplete = fileMetaData.totalChunks ? Math.round(fileMetaData.chunkIndex / fileMetaData.totalChunks * 100) : 100;\n }\n this.upload._onFileProgress({ target: $(fileEntry, this.upload.wrapper) }, percentComplete);\n },\n stopUploadRequest: function (fileEntry) {\n fileEntry.data('request').abort();\n },\n prepareChunk: function (fileEntry) {\n var file = fileEntry.data('files')[0].rawFile;\n var uid = fileEntry.data('files')[0].uid;\n var chunkSize = this.upload.options.async.chunkSize;\n this.position[uid] = 0;\n this.metaData[uid] = {\n chunkIndex: 0,\n contentType: file.type,\n fileName: file.name,\n totalFileSize: file.size,\n totalChunks: Math.ceil(file.size / chunkSize),\n uploadUid: uid\n };\n },\n _decreaseChunkIndex: function (uid) {\n this.metaData[uid].chunkIndex--;\n },\n _increaseChunkIndex: function (uid) {\n this.metaData[uid].chunkIndex++;\n },\n _resetChunkIndex: function (uid) {\n this.metaData[uid].chunkIndex = 0;\n },\n _decreasePosition: function (uid) {\n this.position[uid] -= this.upload.options.async.chunkSize;\n },\n _getCurrentChunk: function (file, uid) {\n var oldPosition = this.position[uid];\n var methodToInvoke;\n var async = this.upload.options.async;\n var chunkSize = async.chunkSize || async.bufferChunkSize;\n if (!this.position[uid]) {\n this.position[uid] = 0;\n }\n this.position[uid] += chunkSize;\n if (!!(methodToInvoke = this._getChunker(file))) {\n return file[methodToInvoke](oldPosition, this.position[uid]);\n } else {\n return file;\n }\n },\n _getChunker: function (file) {\n if (file.slice) {\n return 'slice';\n } else if (file.mozSlice) {\n return 'mozSlice';\n } else if (file.webkitSlice) {\n return 'webkitSlice';\n } else {\n return null;\n }\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, eventArgs, 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, eventArgs, 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}));"]}