{"version":3,"file":"kendo.upload.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","Widget","ui","antiForgeryTokens","logToConsole","rFileExtension","NS","SELECT","UPLOAD","SUCCESS","ERROR","COMPLETE","CANCEL","CLEAR","PAUSE","RESUME","PROGRESS","REMOVE","INVALIDMAXFILESIZE","INVALIDMINFILESIZE","INVALIDFILEEXTENSION","FOCUS_STATE","TABINDEX","headerStatusIcon","Upload","extend","init","element","options","that","this","fn","call","name","multiple","directory","localization","activeInput","wrapper","closest","length","_wrapInput","_activeInput","toggle","enabled","ns","_ns","guid","on","_onParentFormSubmit","bind","_onParentFormReset","_initUploadModule","_toggleDropZone","_onFileAction","_onClearSelected","_onUploadSelected","_onKeyDown","_focusout","val","_onInputChange","target","events","showFileList","template","files","async","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","uploadSuccess","uploadFail","invalidMaxFileSize","invalidMinFileSize","invalidFileExtension","validation","allowedExtensions","maxFileSize","minFileSize","dropZone","saveUrl","_module","_supportsFormData","formDataUploadModule","iframeUploadModule","_async","initialFiles","_renderInitialFiles","syncUploadModule","setOptions","off","attr","_supportsMultiple","enable","disable","toggleClass","prop","focus","trigger","destroy","customDropZone","document","add","fileEntry","onPause","pauseIcon","find","removeClass","addClass","parent","onResume","playIcon","upload","onSaveSelected","getFiles","filesData","allFiles","listItems","i","data","j","push","clearAllFiles","each","index","file","_removeFileByDomElement","removeAllFiles","removeFileByUid","uid","_removeFileByUid","clearFileByUid","shouldSendRemoveRequest","clearFile","callback","_removeFile","removeFile","fileData","hasClass","onCancel","onRemove","_hideHeaderUploadstatus","_updateHeaderUploadStatus","_addInput","sourceInput","nodeType","input","clone","insertAfter","prefix","hide","removeAttr","e","preventDefault","_adjustFocusState","focusedItem","toFocus","_arrowKeyNavigation","key","kendoKeys","keys","DOWN","stopPropagation","first","next","UP","prev","RIGHT","LEFT","_preventFocusRemove","_asyncCommandKeyNavigation","eventArgs","_retryClicked","ESC","_checkAllComplete","SPACEBAR","ENTER","is","chunkSize","concurrent","finish","show","metaData","prepareChunk","onRetry","_commandKeyNavigation","hasValidationErrors","_filesContainValidationErrors","headers","DELETE","TAB","commandKeys","keyCode","indexOf","assignGuidToFiles","_inputFiles","_isAsyncNonBatch","validateFiles","onSelect","_readDirectory","item","deferred","Deferred","dirReader","createReader","allFolderFiles","readEntries","entries","concat","resolve","reject","promise","_readFile","fullpath","fullPath","relativePath","slice","droppedFolderFiles","droppedFolderCounter","setTimeout","_proceedDroppedItems","_traverseFileTree","skipCounter","then","items","isFile","isDirectory","_onDrop","dt","originalEvent","dataTransfer","droppedFiles","stopEvent","directoryDrop","webkitGetAsEntry","entry","getAllFileInfo","splice","hasErrors","batch","idx","currentFile","_enqueueFile","fileNames","_supportsRemove","_fileAction","_prepareTemplateData","templateData","totalSize","size","_prepareDefaultSingleFileEntryTemplate","fileSize","getTotalFilesSizeMessage","fileGroup","getFileGroup","extension","errors","_prepareDefaultMultipleFileEntriesTemplate","filesHaveValidationErrors","totalFileSize","sort","a","b","existingFileEntries","removeEventArgs","fileUid","fileList","appendTo","angular","elements","width","_removeFileEntry","allCompletedFiles","allInvalidFiles","_hideActionButtons","fileElement","actionKey","skipClear","firstActionButton","classDictionary","iconsClassDictionary","hasOwnProperty","_clearFileAction","append","_renderAction","_fileState","stateKey","currentState","uploading","text","uploaded","failed","actionClass","actionText","iconClass","empty","button","icon","_onFileProgress","percentComplete","prepend","getFileEntry","_onUploadSuccess","response","xhr","fileInfo","operation","XMLHttpRequest","_setUploadErrorState","after","_hideUploadProgress","_onUploadError","module","responseText","_decreasePosition","_autoRetryAfter","retries","performUpload","uploadPercentage","_updateUploadProgress","fileMetaData","totalChunks","Math","round","delay","fadeOut","css","_showActionButtons","actionsWrapper","uploadButton","clearButton","_showHeaderUploadStatus","isUploading","headerUploadStatus","failedUploads","headerUploadStatusIcon","currentlyUploading","not","currentlyInvalid","currentlyFailed","currentlyPaused","html","onAbort","value","windows","_userAgent","support","browser","opera","safari","_supportsDrop","userAgent","toLowerCase","test","navigator","_setupDropZone","dropEffect","bindDragEventWrappers","_bindDocumentDragEventWrappers","_setupCustomDropZone","removeUrl","_submitRemove","onSuccess","onError","removeField","params","jQuery","ajax","type","dataType","dataFilter","normalizeJSON","url","traditional","success","error","xhrFields","hasLabel","wrap","inputFiles","prototype","filesContainErrors","relatedInput","getFileName","iframes","_frameId","prepareUpload","iframe","form","saveField","createFrame","registerFrame","createForm","frame","fileValidation","cleanupFrame","unregisterFrame","body","dataInput","prependTo","one","onIframeLoad","submit","started","isFileUploadStarted","contents","ex","processResponse","fakeXHR","tryParseJSON","jsonResult","statusText","status","stopFrameSubmit","removeUploadedFile","id","action","stop","execCommand","grep","position","cancelled","paused","map","join","$input","slashIndex","lastIndexOf","substr","getFileExtension","rawFiles","fileName","rawFile","htmlEncode","matches","match","unique","validationInfo","extensions","ext","substring","validateFileExtension","validateFileSize","validationErrors","inArray","toFixed","shouldRemoveFileEntry","textStatus","json","JSON","parse","namespace","onDragEnter","onDragLeave","hideInterval","lastDrag","Date","setInterval","clearInterval","sourceElement","fileEntries","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","FormData","chunk","serializedMetaData","stringify","raiseError","cleanupFileEntry","_resetChunkIndex","uploadComplete","isUploadButtonVisible","loaded","total","abort","chunkIndex","contentType","ceil","uploadUid","_decreaseChunkIndex","methodToInvoke","oldPosition","_getChunker","mozSlice","webkitSlice","plugin"],"sources":["kendo.upload.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core'], factory) :\n factory();\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\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n antiForgeryTokens = kendo.antiForgeryTokens,\n logToConsole = kendo.logToConsole,\n rFileExtension = /\\.([^\\.]+)$/,\n NS = \".kendoUpload\",\n SELECT = \"select\",\n UPLOAD = \"upload\",\n SUCCESS = \"success\",\n ERROR = \"error\",\n COMPLETE = \"complete\",\n CANCEL = \"cancel\",\n CLEAR = \"clear\",\n PAUSE = \"pause\",\n RESUME = \"resume\",\n PROGRESS = \"progress\",\n REMOVE = \"remove\",\n VALIDATIONERRORS = \"validationErrors\",\n INVALIDMAXFILESIZE = \"invalidMaxFileSize\",\n INVALIDMINFILESIZE = \"invalidMinFileSize\",\n INVALIDFILEEXTENSION = \"invalidFileExtension\",\n PROGRESSHIDEDELAY = 1000,\n PROGRESSHIDEDURATION = 2000,\n FOCUS_STATE = \"k-focus\",\n TABINDEX = \"tabindex\";\n\n var headerStatusIcon = {\n loading: \"k-i-upload\",\n warning: \"k-i-warning\",\n success: \"k-i-check\"\n };\n\n var Upload = Widget.extend({\n init: function(element, options) {\n var that = this;\n\n Widget.fn.init.call(that, element, options);\n\n that.name = element.name;\n that.multiple = that.options.multiple;\n that.directory = that.options.directory;\n that.localization = that.options.localization;\n\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\n that._activeInput(activeInput);\n that.toggle(that.options.enabled);\n\n var ns = that._ns = NS + \"-\" + kendo.guid();\n activeInput.closest(\"form\")\n .on(\"submit\" + ns, that._onParentFormSubmit.bind(that))\n .on(\"reset\" + ns, that._onParentFormReset.bind(that));\n\n that._initUploadModule();\n\n that._toggleDropZone();\n\n that.wrapper\n .on(\"click\", \".k-upload-action\", that._onFileAction.bind(that))\n .on(\"click\", \".k-clear-selected\", that._onClearSelected.bind(that))\n .on(\"click\", \".k-upload-selected\", that._onUploadSelected.bind(that))\n .on(\"keydown\", that._onKeyDown.bind(that))\n .on(\"focusout\", that._focusout.bind(that));\n\n if (that.element.val()) {\n that._onInputChange({ target: that.element });\n }\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\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 \"uploadSuccess\": \"File(s) uploaded successfully.\",\n \"uploadFail\": \"File(s) failed to upload.\",\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\n _initUploadModule: function() {\n var that = this,\n options = that.options;\n\n if (options.async.saveUrl) {\n that._module = that._supportsFormData() ?\n new formDataUploadModule(that) :\n new iframeUploadModule(that);\n that._async = true;\n\n var initialFiles = options.files;\n if (initialFiles.length > 0) {\n that._renderInitialFiles(initialFiles);\n }\n\n } else {\n that._module = new syncUploadModule(that);\n }\n },\n\n setOptions: function(options) {\n var that = this,\n activeInput = that.element;\n\n $(that.options.dropZone).off(that._ns);\n\n Widget.fn.setOptions.call(that, options);\n\n that.multiple = that.options.multiple;\n that.directory = that.options.directory;\n\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 that._initUploadModule();\n\n that._toggleDropZone();\n },\n\n enable: function(enable) {\n enable = typeof (enable) === \"undefined\" ? true : enable;\n this.toggle(enable);\n },\n\n disable: function() {\n this.toggle(false);\n },\n\n toggle: function(enable) {\n enable = typeof (enable) === \"undefined\" ? enable : !enable;\n this.wrapper.toggleClass(\"k-disabled\", enable);\n this.element.prop(\"disabled\", enable);\n },\n\n focus: function() {\n this.element.trigger(\"focus\");\n },\n\n destroy: function() {\n var that = this;\n var customDropZone = $(that.options.dropZone);\n\n $(document)\n .add($(\".k-dropzone\", that.wrapper))\n .add(that.wrapper.closest(\"form\"))\n .off(that._ns);\n\n if (customDropZone.length > 0) {\n customDropZone.off(that._ns);\n }\n\n $(that.element).off(NS);\n\n Widget.fn.destroy.call(that);\n },\n pause: function(fileEntry) {\n this._module.onPause({ target: $(fileEntry, this.wrapper) });\n\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\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\n that._module.onSaveSelected();\n },\n\n getFiles: function() {\n var that = this;\n var filesData;\n var allFiles = [];\n var listItems = that.wrapper.find(\".k-file\");\n\n for (var i = 0; i < listItems.length; i++) {\n filesData = $(listItems[i]).data(\"fileNames\");\n\n if (filesData) {\n for (var j = 0; j < filesData.length; j++) {\n allFiles.push(filesData[j]);\n }\n }\n }\n\n return allFiles;\n },\n\n clearAllFiles: function() {\n var that = this;\n var files = that.wrapper.find(\".k-file\");\n\n files.each(function(index, file) {\n that._removeFileByDomElement(file, false);\n });\n },\n\n removeAllFiles: function() {\n var that = this;\n var files = that.wrapper.find(\".k-file\");\n\n files.each(function(index, file) {\n that._removeFileByDomElement(file, true);\n });\n },\n\n removeFileByUid: function(uid) {\n this._removeFileByUid(uid, true);\n },\n\n clearFileByUid: function(uid) {\n this._removeFileByUid(uid, false);\n },\n\n _removeFileByUid: function(uid, shouldSendRemoveRequest) {\n var that = this;\n var fileEntry;\n\n if (typeof uid !== 'string') { return; }\n\n fileEntry = $('.k-file[' + kendo.attr('uid') + '=\"' + uid + '\"]', that.wrapper);\n\n if (fileEntry.length > 0) {\n that._removeFileByDomElement(fileEntry, shouldSendRemoveRequest);\n }\n },\n\n clearFile: function(callback) {\n this._removeFile(callback, false);\n },\n\n removeFile: function(callback) {\n this._removeFile(callback, true);\n },\n\n _removeFile: function(callback, shouldSendRemoveRequest) {\n var that = this;\n var files = that.wrapper.find(\".k-file\");\n var fileData;\n\n if (typeof callback === \"function\") {\n files.each(function(index, file) {\n fileData = $(file).data(\"fileNames\");\n\n if (callback(fileData)) {\n that._removeFileByDomElement(file, shouldSendRemoveRequest);\n }\n });\n }\n },\n\n _removeFileByDomElement: function(fileEntry, shouldSendRemoveRequest) {\n var that = this;\n var fileData = {\n target: $(fileEntry, that.wrapper)\n };\n var allFiles;\n\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\n allFiles = $(\".k-file\", that.wrapper);\n\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\n _addInput: function(sourceInput) {\n //check if source input is a DOM element. Required for some unit tests\n if (!sourceInput[0].nodeType) {\n return;\n }\n\n var that = this,\n input = sourceInput.clone().val(\"\");\n\n input\n .insertAfter(that.element)\n .data(\"kendo\" + that.options.prefix + that.options.name, that);\n\n $(that.element)\n .hide()\n .attr(TABINDEX, \"-1\")\n .removeAttr(\"id\")\n .off(NS);\n\n that._activeInput(input);\n that.element.trigger(\"focus\");\n },\n\n _activeInput: function(input) {\n var that = this,\n wrapper = that.wrapper;\n\n that.element = input;\n\n if (that.directory) {\n input.attr(\"webkitdirectory\", that.directory);\n input.attr(\"directory\", that.directory);\n }\n\n input\n .attr(\"multiple\", that._supportsMultiple() ? that.multiple : false)\n .attr(\"autocomplete\", \"off\")\n .on(\"click\" + NS, function(e) {\n if (wrapper.hasClass(\"k-disabled\")) {\n e.preventDefault();\n }\n })\n .on(\"focus\" + NS, function() {\n $(this).parent().addClass(FOCUS_STATE);\n })\n .on(\"blur\" + NS, function() {\n $(this).parent().removeClass(FOCUS_STATE);\n })\n .on(\"change\" + NS, that._onInputChange.bind(that));\n },\n\n _adjustFocusState: function(focusedItem, toFocus) {\n focusedItem.removeClass(FOCUS_STATE);\n focusedItem.attr(TABINDEX, -1);\n toFocus.addClass(FOCUS_STATE);\n toFocus.attr(TABINDEX, 0);\n },\n\n _arrowKeyNavigation: function(e, key, focusedItem) {\n var that = this,\n kendoKeys = kendo.keys,\n toFocus;\n\n if (key === kendoKeys.DOWN) {\n e.preventDefault();\n e.stopPropagation();\n\n toFocus = that.wrapper.find(\".k-upload-files .k-file\").first();\n\n if (focusedItem.length > 0) {\n if (focusedItem.hasClass(\"k-upload-action\")) {\n focusedItem.removeClass(FOCUS_STATE);\n focusedItem = focusedItem.closest(\".k-file\");\n }\n\n toFocus = focusedItem.next();\n }\n\n that._adjustFocusState(focusedItem, toFocus);\n\n if (!toFocus || toFocus.length === 0) {\n toFocus = that.wrapper.find(\".k-clear-selected\");\n }\n } else if (key === kendoKeys.UP) {\n e.preventDefault();\n e.stopPropagation();\n\n toFocus = that.wrapper.find(\".k-upload-files .k-file:last\");\n\n if (focusedItem.length > 0) {\n if (focusedItem.hasClass(\"k-upload-action\")) {\n focusedItem.removeClass(FOCUS_STATE);\n focusedItem = focusedItem.closest(\".k-file\");\n }\n\n toFocus = focusedItem.prev();\n }\n\n that._adjustFocusState(focusedItem, toFocus);\n } else if (key === kendoKeys.RIGHT) {\n if (focusedItem.hasClass(\"k-upload-action\")) {\n toFocus = focusedItem.next(\".k-upload-action\");\n\n if (!toFocus || toFocus.length === 0) {\n toFocus = focusedItem.parent().find(\".k-upload-action:first\");\n }\n } else if (focusedItem.length > 0) {\n toFocus = focusedItem.find(\".k-upload-action:first\");\n }\n\n if (toFocus && toFocus.length > 0) {\n focusedItem.removeClass(FOCUS_STATE);\n toFocus.addClass(FOCUS_STATE);\n }\n } else if (key === kendoKeys.LEFT) {\n if (focusedItem.hasClass(\"k-upload-action\")) {\n toFocus = focusedItem.prev(\".k-upload-action\");\n\n if (!toFocus || toFocus.length === 0) {\n toFocus = focusedItem.parent().find(\".k-upload-action:last\");\n }\n } else if (focusedItem.length > 0) {\n toFocus = focusedItem.find(\".k-upload-action:last\");\n }\n\n if (toFocus && toFocus.length > 0) {\n focusedItem.removeClass(FOCUS_STATE);\n toFocus.addClass(FOCUS_STATE);\n }\n }\n\n if ((!toFocus || toFocus.length === 0) && (key === kendoKeys.UP || key === kendoKeys.DOWN)) {\n toFocus = that.element;\n }\n\n if (toFocus && toFocus.length > 0) {\n that._preventFocusRemove = true;\n toFocus.trigger(\"focus\");\n }\n },\n\n _asyncCommandKeyNavigation: function(key, focusedItem, eventArgs) {\n var that = this,\n kendoKeys = kendo.keys,\n fileEntry = $(focusedItem, that.wrapper);\n\n that._retryClicked = false;\n\n if (key === kendoKeys.ESC && focusedItem.find(\".k-i-cancel\").length > 0) {\n that.trigger(CANCEL, eventArgs);\n that._module.onCancel({ target: fileEntry });\n that._checkAllComplete();\n that._updateHeaderUploadStatus();\n that._preventFocusRemove = true;\n that.element.trigger(\"focus\");\n } else if (key === kendoKeys.SPACEBAR) {\n if (focusedItem.find(\".k-i-pause-sm\").length > 0) {\n that.trigger(PAUSE, eventArgs);\n that.pause(focusedItem);\n that._updateHeaderUploadStatus();\n } else if (focusedItem.find(\".k-i-play-sm\").length > 0) {\n that.trigger(RESUME, eventArgs);\n that.resume(focusedItem);\n }\n } else if (key === kendoKeys.ENTER && !focusedItem.is(\".k-file-progress, .k-file-success, .k-file-invalid\")) {\n if (that.options.async.chunkSize && !that.options.async.concurrent && $('.k-file-progress', that.wrapper).length > 0) {\n return;\n }\n\n $(\".k-i-warning\", focusedItem).remove();\n $(\".k-progressbar\", focusedItem).finish().show();\n\n if (!that._module.metaData[fileEntry.data(\"uid\")]) {\n that._module.prepareChunk(fileEntry);\n }\n\n that._module.onRetry({ target: fileEntry });\n that._retryClicked = true;\n }\n },\n\n _commandKeyNavigation: function(key, focusedItem) {\n var that = this,\n kendoKeys = kendo.keys,\n files = focusedItem.data(\"fileNames\"),\n hasValidationErrors = that._filesContainValidationErrors(files),\n eventArgs = {\n files: files,\n headers: {}\n };\n\n if (key === kendoKeys.DELETE) {\n if (!that.trigger(REMOVE, eventArgs)) {\n that._module.onRemove({ target: $(focusedItem, that.wrapper) }, eventArgs, !hasValidationErrors);\n that._preventFocusRemove = true;\n that.element.trigger(\"focus\");\n }\n } else if (key === kendoKeys.TAB) {\n focusedItem.removeClass(FOCUS_STATE);\n focusedItem.attr(TABINDEX, -1);\n } else if (!!that.options.async.saveUrl) {\n that._asyncCommandKeyNavigation(key, focusedItem, eventArgs);\n }\n },\n\n _focusout: function() {\n var focusedItem = this.wrapper.find(\".k-upload-files .k-file.\" + FOCUS_STATE);\n\n if (!this._preventFocusRemove) {\n focusedItem.removeClass(FOCUS_STATE);\n focusedItem.attr(TABINDEX, -1);\n } else {\n this._preventFocusRemove = false;\n }\n },\n\n _onKeyDown: function(e) {\n var that = this,\n focusedItem = that.wrapper.find(\".k-upload-files .k-file.\" + FOCUS_STATE + \",\" + \".k-upload-action.\" + FOCUS_STATE),\n kendoKeys = kendo.keys,\n commandKeys = [kendoKeys.DELETE, kendoKeys.ESC, kendoKeys.ENTER, kendoKeys.SPACEBAR, kendoKeys.TAB],\n key = e.keyCode;\n\n if (key === kendoKeys.DOWN || key === kendoKeys.UP || key === kendoKeys.LEFT || key === kendoKeys.RIGHT) {\n that._arrowKeyNavigation(e, key, focusedItem);\n } else if (focusedItem.length > 0 && focusedItem.hasClass(\"k-file\") && commandKeys.indexOf(key) > -1 && !that.wrapper.hasClass(\"k-disabled\")) {\n if (key === kendoKeys.SPACEBAR) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n that._commandKeyNavigation(key, focusedItem);\n }\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\n validateFiles(files, that.options.validation);\n\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\n _readDirectory: function(item) {\n var deferred = new $.Deferred();\n var dirReader = item.createReader();\n var allFolderFiles = [];\n\n var readEntries = function() {\n dirReader.readEntries(function(entries) {\n if (!entries.length) {\n deferred.resolve(allFolderFiles);\n } else {\n allFolderFiles = allFolderFiles.concat(entries);\n readEntries();\n }\n }, deferred.reject);\n };\n\n readEntries();\n\n return deferred.promise();\n },\n\n _readFile: function(item) {\n var that = this;\n var fullpath = item.fullPath;\n\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\n _traverseFileTree: function(item, skipCounter) {\n var that = this;\n if (!skipCounter) {\n that.droppedFolderCounter--;\n }\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\n _onDrop: function(e) {\n var dt = e.originalEvent.dataTransfer;\n var that = this;\n var droppedFiles = dt.files;\n var length;\n\n stopEvent(e);\n if (that.options.directoryDrop && dt.items) {\n length = dt.items.length;\n that.droppedFolderCounter = 0;\n that.droppedFolderFiles = [];\n\n for (var i = 0; i < length; i++) {\n if (dt.items[i].webkitGetAsEntry) {\n var entry = dt.items[i].webkitGetAsEntry();\n\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\n _proceedDroppedItems: function(droppedFiles) {\n var that = this;\n var files = assignGuidToFiles(getAllFileInfo(droppedFiles), that._isAsyncNonBatch());\n\n if (droppedFiles.length > 0 && !that.wrapper.hasClass(\"k-disabled\")) {\n if (!that.multiple && files.length > 1) {\n files.splice(1, files.length - 1);\n }\n\n validateFiles(files, that.options.validation);\n\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\n _filesContainValidationErrors: function(files) {\n var hasErrors = false;\n\n $(files).each(function(index, file) {\n if (file[VALIDATIONERRORS] && file[VALIDATIONERRORS].length > 0) {\n hasErrors = true;\n return false;\n }\n });\n\n return hasErrors;\n },\n\n _isAsyncNonBatch: function() {\n return (this._async && !this.options.async.batch) || false;\n },\n\n _renderInitialFiles: function(files) {\n var that = this;\n var idx = 0;\n files = assignGuidToFiles(files, true);\n\n for (idx = 0; idx < files.length; idx++) {\n var currentFile = files[idx];\n\n var fileEntry = that._enqueueFile(currentFile.name, { fileNames: [ currentFile ] });\n fileEntry.addClass(\"k-file-success\").data(\"files\", [ files[idx] ]);\n\n if (that._supportsRemove()) {\n that._fileAction(fileEntry, REMOVE);\n }\n }\n },\n\n _prepareTemplateData: function(name, data) {\n var filesData = data.fileNames,\n templateData = {},\n totalSize = 0,\n idx = 0;\n\n for (idx = 0; idx < filesData.length; idx++) {\n totalSize += filesData[idx].size;\n }\n\n templateData.name = name;\n templateData.size = totalSize;\n templateData.files = data.fileNames;\n\n return templateData;\n },\n\n _prepareDefaultSingleFileEntryTemplate: function(data) {\n var that = this;\n var file = data.fileNames[0];\n var fileSize = getTotalFilesSizeMessage(data.fileNames);\n var fileGroup = kendo.getFileGroup(file.extension, true);\n var errors = file[VALIDATIONERRORS];\n var template = \"\";\n\n if (errors && errors.length > 0) {\n template += \"
  • \" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" + file.name + \"\" +\n \"\" + that.localization[errors[0]] + \"\" +\n \"\";\n } else {\n template += \"
  • \" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" + file.name + \"\" +\n \"\" + fileSize + \"\";\n }\n\n template += \"\";\n\n return $(template);\n },\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\n if (filesHaveValidationErrors) {\n template += \"
  • \" +\n \"\" +\n \"\";\n } else {\n template += \"
  • \" +\n \"\" +\n \"\";\n }\n\n template += \"\";\n\n files.sort(function(a, b) {\n if (a[VALIDATIONERRORS]) { return -1; }\n\n if (b[VALIDATIONERRORS]) { return 1; }\n\n return 0;\n });\n\n template += \"\";\n for (i = 0; i < files.length; i++) {\n currentFile = files[i];\n var fileSize = getTotalFilesSizeMessage([currentFile]);\n\n template += \"\";\n if (currentFile[VALIDATIONERRORS] && currentFile[VALIDATIONERRORS].length > 0) {\n template += \"\" + currentFile.name + \"\";\n } else {\n template += \"\" + currentFile.name + \"\";\n }\n template += \"\" + fileSize + \"\";\n }\n\n if (filesHaveValidationErrors) {\n template += \"\" + that.localization.invalidFiles + \"\";\n } else {\n template += \"Total: \" + files.length + \" files, \" + totalFileSize + \"\";\n }\n\n template += \"\";\n\n return $(template);\n },\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\n if (fileList.length === 0) {\n fileList = $(\"\").appendTo(that.wrapper);\n if (!that.options.showFileList) {\n fileList.hide();\n }\n\n that.wrapper.removeClass(\"k-upload-empty\");\n }\n\n existingFileEntries = $(\".k-file\", fileList);\n\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\n fileEntry = $(\"
  • \" + template(templateData) + \"
  • \");\n fileEntry.find(\".k-upload-action\").addClass(\"k-button k-icon-button k-button-md k-rounded-md k-button-flat k-button-flat-base\");\n\n that.angular(\"compile\", function() {\n return {\n elements: fileEntry,\n data: [ templateData ]\n };\n });\n }\n\n fileEntry\n .attr(kendo.attr(\"uid\"), fileUid)\n .appendTo(fileList)\n .data(data);\n\n if (!that._async) {\n $(\".k-progress\", fileEntry).width('100%');\n }\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\n return fileEntry;\n },\n\n _removeFileEntry: function(fileEntry) {\n var that = this;\n var fileList = fileEntry.closest(\".k-upload-files\");\n var allFiles, allCompletedFiles, allInvalidFiles;\n\n fileEntry.remove();\n allFiles = $(\".k-file\", fileList);\n allCompletedFiles = $(\".k-file-success, .k-file-error\", fileList);\n allInvalidFiles = $(\".k-file-invalid\", fileList);\n\n if (allCompletedFiles.length === allFiles.length || allInvalidFiles.length === allFiles.length) {\n this._hideActionButtons();\n }\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\n _fileAction: function(fileElement, actionKey, skipClear) {\n var classDictionary = { remove: \"k-i-x\", cancel: \"k-i-cancel\", retry: \"k-i-retry\", pause: \"k-i-pause-sm\" };\n var iconsClassDictionary = { remove: \"k-i-close\", cancel: \"k-i-cancel\", retry: \"k-i-reload-sm\", pause: \"k-i-pause-sm\" };\n var firstActionButton;\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(\n this._renderAction(classDictionary[actionKey], this.localization[actionKey], iconsClassDictionary[actionKey])\n );\n } else {\n firstActionButton = fileElement.find(\".k-upload-action\").first();\n if (!firstActionButton.find(\".k-icon\").length) {\n firstActionButton\n .addClass(\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button\")\n .append(\"\")\n .show();\n } else if (firstActionButton.next(\".k-upload-action\").length) {\n firstActionButton.next(\".k-upload-action\")\n .addClass(\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button\")\n .append(\"\")\n .show();\n }\n }\n },\n\n _fileState: function(fileEntry, stateKey) {\n var localization = this.localization,\n states = {\n uploading: {\n text: localization.statusUploading\n },\n uploaded: {\n text: localization.statusUploaded\n },\n failed: {\n text: localization.statusFailed\n }\n },\n currentState = states[stateKey];\n\n if (currentState) {\n $(\"span.k-file-state\", fileEntry).text(currentState.text);\n }\n },\n\n _renderAction: function(actionClass, actionText, iconClass) {\n if (actionClass !== \"\") {\n return $(\n \"\"\n ).on(\"focus\", function() { $(this).addClass(FOCUS_STATE); })\n .on(\"blur\", function() { $(this).removeClass(FOCUS_STATE); });\n }\n else {\n return $(\n \"\"\n );\n }\n },\n\n _clearFileAction: function(fileElement) {\n $(\".k-upload-action\", fileElement).empty().hide();\n },\n\n _onFileAction: function(e) {\n var that = this;\n if (!that.wrapper.hasClass(\"k-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\n that._retryClicked = false;\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 that.element.trigger(\"focus\");\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 that.element.trigger(\"focus\");\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-progressbar\", fileEntry).finish().show();\n that._module.onRetry({ target: $(fileEntry, that.wrapper) });\n that._retryClicked = true;\n }\n\n fileEntry.addClass(FOCUS_STATE);\n }\n\n return false;\n },\n\n _onUploadSelected: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n if (!wrapper.hasClass(\"k-disabled\")) {\n this._module.onSaveSelected();\n }\n\n return false;\n },\n\n _onClearSelected: function() {\n var that = this;\n var wrapper = that.wrapper;\n\n var clearEventArgs = { };\n if (!wrapper.hasClass(\"k-disabled\") && !that.trigger(CLEAR, clearEventArgs)) {\n that.clearAllFiles();\n }\n\n return false;\n },\n\n _onFileProgress: function(e, percentComplete) {\n var progressPct;\n\n if (percentComplete > 100) {\n percentComplete = 100;\n }\n\n $(\".k-progressbar\", e.target).removeClass('k-hidden');\n\n if (!this.options.template) {\n progressPct = $(\".k-upload-pct\", e.target);\n\n if (progressPct.length === 0) {\n $(\".k-upload-status\", e.target).prepend(\"\");\n }\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\n this.trigger(PROGRESS, {\n files: getFileEntry(e).data(\"fileNames\"),\n percentComplete: percentComplete\n });\n },\n\n _onUploadSuccess: function(e, response, xhr) {\n var that = this;\n var fileEntry = getFileEntry(e);\n var files = fileEntry.data(\"fileNames\");\n var fileInfo = fileEntry.find('.k-file-information');\n var fileSize = fileEntry.find('.k-file-size');\n\n var prevented = that.trigger(SUCCESS, {\n files: fileEntry.data(\"fileNames\"),\n response: response,\n operation: \"upload\",\n XMLHttpRequest: xhr\n });\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\n if (fileInfo.length > 0) {\n fileInfo.addClass('k-hidden')\n .after('' + files.length + ' ' + that.localization.uploadSuccess + '');\n } else if (fileSize.length > 0) {\n fileSize.addClass('k-hidden')\n .after('' + that.localization.uploadSuccess + '');\n }\n\n that._updateHeaderUploadStatus();\n\n if (that._supportsRemove()) {\n that._fileAction(fileEntry, REMOVE);\n } else {\n that._clearFileAction(fileEntry);\n }\n }\n\n that._hideUploadProgress(fileEntry);\n\n that._checkAllComplete();\n },\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\n that._setUploadErrorState(fileEntry);\n\n that.trigger(ERROR, {\n operation: \"upload\",\n files: fileEntry.data(\"fileNames\"),\n XMLHttpRequest: xhr\n });\n\n logToConsole(\"Server response: \" + xhr.responseText);\n\n if (!that.options.async.chunkSize) {\n that._hideUploadProgress(fileEntry);\n } else {\n if (module._decreasePosition) {\n module._decreasePosition(fileUid);\n }\n }\n\n that._checkAllComplete();\n\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\n if (!retries) {\n return;\n }\n\n if (!retries[fileEntry.data(\"uid\")]) {\n retries[fileEntry.data(\"uid\")] = 1;\n }\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 uploadPercentage,\n files = fileEntry.data(\"fileNames\"),\n fileInfo = fileEntry.find('.k-file-information'),\n fileSize = fileEntry.find('.k-file-size');\n\n that._fileState(fileEntry, \"failed\");\n fileEntry.removeClass('k-file-progress').addClass('k-file-error');\n\n if (fileInfo.length > 0) {\n fileInfo.addClass('k-hidden')\n .after('' + files.length + ' ' + that.localization.uploadFail + '');\n } else if (fileSize.length > 0) {\n fileSize.addClass('k-hidden')\n .after('' + that.localization.uploadFail + '');\n }\n\n that._updateUploadProgress(fileEntry);\n\n uploadPercentage = $('.k-upload-pct', fileEntry);\n\n if (uploadPercentage.length > 0) {\n uploadPercentage.remove();\n }\n\n this._updateHeaderUploadStatus();\n this._fileAction(fileEntry, \"retry\");\n this._fileAction(fileEntry, REMOVE, true);\n\n if (that._retryClicked) {\n fileEntry.trigger(\"focus\");\n }\n },\n\n _updateUploadProgress: function(fileEntry) {\n var that = this;\n\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\n if (fileMetaData) {\n var percentComplete = fileMetaData.totalChunks ? Math.round(((fileMetaData.chunkIndex) / fileMetaData.totalChunks) * 100) : 100;\n\n that._onFileProgress({ target: $(fileEntry, that.wrapper) }, percentComplete);\n }\n }\n }\n },\n\n _hideUploadProgress: function(fileEntry) {\n $(\".k-progressbar\", fileEntry)\n .delay(PROGRESSHIDEDELAY)\n .fadeOut(PROGRESSHIDEDURATION, function() {\n $(this).find('.k-progress').css(\"width\", \"0%\");\n });\n },\n\n _showActionButtons: function() {\n var that = this;\n var actionsWrapper = $(\".k-action-buttons\", that.wrapper);\n var uploadButton = $(\".k-upload-selected\", that.wrapper);\n var clearButton = $(\".k-clear-selected\", that.wrapper);\n\n if (uploadButton.length === 0) {\n uploadButton = that._renderAction(\"\", this.localization.uploadSelectedFiles)\n .addClass(\"k-upload-selected\")\n .addClass(\"k-button-solid-primary\")\n .removeClass(\"k-button-solid-base\");\n\n clearButton = that._renderAction(\"\", this.localization.clearSelectedFiles)\n .addClass(\"k-clear-selected\");\n }\n\n if (!actionsWrapper.length) {\n actionsWrapper = $(\"
    \")\n .addClass(\"k-action-buttons\")\n .append(clearButton, uploadButton);\n }\n\n\n this.wrapper.append(actionsWrapper);\n },\n\n _hideActionButtons: function() {\n $(\".k-action-buttons\", this.wrapper).remove();\n },\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\n if (headerUploadStatus.length !== 0) {\n headerUploadStatus.remove();\n }\n\n $('.k-dropzone-hint', that.wrapper).addClass('k-hidden');\n\n headerUploadStatus = '';\n\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\n if (dropZone.length > 0) {\n dropZone.append(headerUploadStatus);\n } else {\n $('.k-upload-button', that.wrapper).after(headerUploadStatus);\n }\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\n if (currentlyPaused.length &&\n (currentlyPaused.length === currentlyUploading.length || !that.options.async.concurrent)) {\n headerUploadStatusIcon = $('.k-icon', headerUploadStatus)\n .removeClass()\n .addClass(\"k-icon\")\n .addClass(\"k-i-pause-sm\");\n\n headerUploadStatus.html(headerUploadStatusIcon)\n .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\n headerUploadStatus = $('.k-upload-status-total', that.wrapper);\n headerUploadStatusIcon = $('.k-icon', headerUploadStatus).removeClass().addClass(\"k-icon\")\n .addClass(failedUploads.length !== 0 ? headerStatusIcon.warning : headerStatusIcon.success);\n\n headerUploadStatus.html(headerUploadStatusIcon)\n .append(that.localization.headerStatusUploaded);\n }\n },\n\n _hideHeaderUploadstatus: function() {\n var that = this,\n dropZone = that.options.dropZone;\n\n $('.k-upload-status-total', this.wrapper).remove();\n\n if (dropZone === \"\") {\n $('.k-dropzone-hint', that.wrapper).removeClass('k-hidden');\n }\n },\n\n _onParentFormSubmit: function() {\n var upload = this,\n element = upload.element;\n\n if (typeof this._module.onAbort !== 'undefined') {\n this._module.onAbort();\n }\n\n if (!element.value) {\n var input = $(element);\n\n // Prevent submitting an empty input\n input.attr(\"disabled\", \"disabled\");\n\n window.setTimeout(function() {\n // Restore the input so the Upload remains functional\n // in case the user cancels the form submit\n input.prop(\"disabled\", false);\n }, 0);\n }\n },\n\n _onParentFormReset: function() {\n $(\".k-upload-files\", this.wrapper).remove();\n },\n\n _supportsFormData: function() {\n return typeof(FormData) != \"undefined\";\n },\n\n _supportsMultiple: function() {\n var windows = this._userAgent().indexOf(\"Windows\") > -1;\n\n return !kendo.support.browser.opera &&\n !(kendo.support.browser.safari && windows);\n },\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\n return !isWindowsSafari && this._supportsFormData() && (this.options.async.saveUrl);\n },\n\n _userAgent: function() {\n return navigator.userAgent;\n },\n\n _setupDropZone: function() {\n var that = this;\n\n var ns = that._ns;\n var dropZone = $(\".k-dropzone\", that.wrapper)\n\n .on(\"dragenter\" + ns, stopEvent)\n .on(\"dragover\" + ns, function(e) {\n if (e.originalEvent) {\n e.originalEvent.dataTransfer.dropEffect = \"copy\";\n }\n e.preventDefault();\n })\n .on(\"drop\" + ns, that._onDrop.bind(that));\n\n if (!dropZone.find(\".k-dropzone-hint\").length) {\n dropZone.append($(\"\" + that.localization.dropFilesHere + \"\"));\n }\n\n bindDragEventWrappers(dropZone, ns,\n function() {\n if (!dropZone.closest('.k-upload').hasClass(\"k-disabled\")) {\n dropZone.addClass(\"k-dropzone-hovered\");\n }\n },\n function() { dropZone.removeClass(\"k-dropzone-hovered\"); });\n\n that._bindDocumentDragEventWrappers(dropZone);\n },\n\n _setupCustomDropZone: function() {\n var that = this;\n var dropZone = $(that.options.dropZone);\n\n if (!that.wrapper.find(\".k-dropzone-hint\").length) {\n $(\".k-dropzone\", that.wrapper)\n .append($(\"\" + that.localization.dropFilesHere + \"\"));\n } else {\n // Dropzone hint in upload should be hidden if customDropZone is used\n $('.k-dropzone-hint', that.wrapper).addClass('k-hidden');\n }\n\n var ns = that._ns;\n dropZone.on(\"dragenter\" + ns, stopEvent)\n .on(\"dragover\" + ns, function(e) {\n if (e.originalEvent) {\n e.originalEvent.dataTransfer.dropEffect = \"copy\";\n }\n e.preventDefault();\n })\n .on(\"drop\" + ns, that._onDrop.bind(that));\n\n bindDragEventWrappers(dropZone, ns,\n function(e) {\n if (!that.wrapper.hasClass(\"k-disabled\")) {\n dropZone.removeClass(\"k-dropzone-hovered\");\n dropZone.addClass(\"k-dropzone-hovered\");\n $(e.target).addClass(\"k-dropzone-hovered\");\n }\n },\n function() {\n dropZone.removeClass(\"k-dropzone-hovered\");\n dropZone.find('.k-dropzone-hovered').removeClass(\"k-dropzone-hovered\");\n }\n );\n\n that._bindDocumentDragEventWrappers(dropZone);\n },\n\n _bindDocumentDragEventWrappers: function(dropZone) {\n var that = this;\n var ns = that._ns;\n\n bindDragEventWrappers($(document), ns,\n function() {\n if (!that.wrapper.hasClass(\"k-disabled\")) {\n dropZone.addClass(\"k-dropzone-active\");\n dropZone.closest('.k-upload').removeClass('k-upload-empty');\n dropZone.find('.k-dropzone-hint').removeClass('k-hidden');\n }\n },\n function() {\n dropZone.removeClass(\"k-dropzone-active\");\n dropZone.find('.k-dropzone-hint').addClass('k-hidden');\n if ($('li.k-file', dropZone.closest('.k-upload')).length === 0) {\n dropZone.closest('.k-upload').addClass('k-upload-empty');\n }\n }\n );\n },\n\n _toggleDropZone: function() {\n var that = this,\n dropZone = that.options.dropZone;\n\n if (!that._supportsDrop()) {\n return;\n }\n\n $(dropZone).off(that._ns);\n $(\".k-dropzone\", that.wrapper).off(that._ns);\n\n if (dropZone !== \"\") {\n that._setupCustomDropZone();\n } else {\n that._setupDropZone();\n }\n },\n\n _supportsRemove: function() {\n return !!this.options.async.removeUrl;\n },\n\n _submitRemove: function(fileNames, eventArgs, onSuccess, onError) {\n var upload = this,\n removeField = upload.options.async.removeField || \"fileNames\",\n params = $.extend(eventArgs.data, antiForgeryTokens());\n\n params[removeField] = fileNames;\n\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: {\n withCredentials: this.options.async.withCredentials\n }\n });\n },\n\n _wrapInput: function(input) {\n var that = this;\n var options = that.options;\n var hasLabel = !!input.attr(\"id\") && $(\"[for='\" + input.attr(\"id\") + \"']\").length > 0;\n\n input.wrap(\"
    \");\n\n if (!options.async.saveUrl) {\n input.closest(\".k-upload\").addClass(\"k-upload-sync\");\n } else {\n input.closest(\".k-upload\").addClass(\"k-upload-async\");\n }\n\n input.closest(\".k-upload\").addClass(\"k-upload-empty\");\n\n input.closest(\".k-button\")\n .append(\"\" + that.localization.select + \"\");\n\n if (!hasLabel && !input.attr(\"aria-label\")) {\n input.attr(\"aria-label\", that.localization.select);\n }\n\n return input.closest(\".k-upload\");\n },\n\n _checkAllComplete: function() {\n if ($(\".k-file.k-file-progress\", this.wrapper).length === 0) {\n this.trigger(COMPLETE);\n }\n },\n\n _inputFiles: function(sourceInput) {\n return inputFiles(sourceInput);\n }\n });\n\n // Synchronous upload module\n var syncUploadModule = function(upload) {\n this.name = \"syncUploadModule\";\n this.element = upload.wrapper;\n this.upload = upload;\n this.element\n .closest(\"form\")\n .attr(\"enctype\", \"multipart/form-data\")\n .attr(\"encoding\", \"multipart/form-data\");\n };\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\n upload._addInput(sourceInput);\n\n var fileData = { \"fileNames\": files };\n\n if (filesContainErrors) {\n sourceInput.remove();\n } else {\n fileData.relatedInput = sourceInput;\n }\n\n var file = upload._enqueueFile(getFileName(sourceInput), fileData);\n\n if (filesContainErrors) {\n upload._hideUploadProgress(file);\n }\n\n upload._fileAction(file, REMOVE);\n },\n\n onRemove: function(e) {\n var fileEntry = getFileEntry(e);\n var relatedInput = fileEntry.data(\"relatedInput\");\n\n if (relatedInput) {\n relatedInput.remove();\n }\n\n this.upload._removeFileEntry(fileEntry);\n }\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\n Upload._frameId = 0;\n\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\n var fileEntry = this.prepareUpload(sourceInput, files, hasValidationErrors);\n\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\n if (!hasValidationErrors) {\n upload._showActionButtons();\n } else {\n upload._updateHeaderUploadStatus();\n }\n }\n\n if (hasValidationErrors) {\n upload._hideUploadProgress(fileEntry);\n }\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\n upload._addInput(sourceInput);\n sourceInput.attr(\"name\", name);\n\n if (!hasValidationErrors) {\n iframe = this.createFrame(upload.name + \"_\" + Upload._frameId++);\n this.registerFrame(iframe);\n\n form = this.createForm(upload.options.async.saveUrl, iframe.attr(\"name\"))\n .append(activeInput);\n\n fileData = { \"frame\": iframe, \"relatedInput\": activeInput, \"fileNames\": files };\n } else {\n sourceInput.remove();\n\n fileData = { \"fileNames\": files };\n }\n\n fileEntry = upload._enqueueFile(getFileName(sourceInput), fileData);\n\n if (iframe) {\n iframe.data({ \"form\": form, \"file\": fileEntry });\n }\n\n return fileEntry;\n },\n\n performUpload: function(fileEntry) {\n var e = { files: fileEntry.data(\"fileNames\") };\n var iframe = fileEntry.data(\"frame\");\n var upload = this.upload;\n var fileValidation = fileEntry.find('.k-file-validation-message');\n var fileInfo = fileEntry.find('.k-file-information');\n var fileSize = fileEntry.find('.k-file-size');\n\n if (!upload.trigger(UPLOAD, e)) {\n upload._hideActionButtons();\n upload._showHeaderUploadStatus(true);\n\n iframe.appendTo(document.body);\n\n var form = iframe.data(\"form\")\n .attr(\"action\", upload.options.async.saveUrl)\n .appendTo(document.body);\n\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 = $(\"\", { type: \"hidden\", name: key })\n .prependTo(form);\n }\n dataInput.val(e.data[key]);\n }\n\n upload._fileAction(fileEntry, CANCEL);\n upload._fileState(fileEntry, \"uploading\");\n $(fileEntry).removeClass(\"k-file-error\").addClass(\"k-file-progress\");\n\n if (fileValidation.length > 0) {\n fileValidation.remove();\n }\n\n if (fileInfo.length > 0) {\n fileInfo.removeClass('k-hidden');\n } else if (fileSize.length > 0) {\n fileSize.removeClass('k-hidden');\n }\n\n iframe\n .one(\"load\", this.onIframeLoad.bind(this));\n\n form[0].submit();\n } else {\n upload._removeFileEntry(iframe.data(\"file\"));\n this.cleanupFrame(iframe);\n this.unregisterFrame(iframe);\n }\n },\n\n onSaveSelected: function() {\n var module = this;\n var upload = module.upload;\n\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\n if (!started && !hasValidationErrors) {\n module.performUpload(fileEntry);\n }\n });\n },\n\n onIframeLoad: function(e) {\n var iframe = $(e.target),\n responseText;\n\n try {\n responseText = iframe.contents().text();\n } catch (ex) {\n responseText = \"Error trying to get server response: \" + ex;\n }\n\n this.processResponse(iframe, responseText);\n },\n\n processResponse: function(iframe, responseText) {\n var fileEntry = iframe.data(\"file\"),\n module = this,\n fakeXHR = {\n responseText: responseText\n };\n tryParseJSON(responseText,\n function(jsonResult) {\n $.extend(fakeXHR, { statusText: \"OK\", status: \"200\" });\n module.upload._onFileProgress({ target: $(fileEntry, module.upload.wrapper) }, 100);\n module.upload._onUploadSuccess({ target: $(fileEntry, module.upload.wrapper) }, jsonResult, fakeXHR);\n\n module.cleanupFrame(iframe);\n module.unregisterFrame(iframe);\n },\n function() {\n $.extend(fakeXHR, { statusText: \"error\", status: \"500\" });\n module.upload._onUploadError({ target: $(fileEntry, module.upload.wrapper) }, fakeXHR);\n }\n );\n },\n\n onCancel: function(e) {\n var iframe = $(e.target).data(\"frame\");\n\n this.stopFrameSubmit(iframe);\n this.cleanupFrame(iframe);\n this.unregisterFrame(iframe);\n this.upload._removeFileEntry(iframe.data(\"file\"));\n },\n\n onRetry: function(e) {\n var fileEntry = getFileEntry(e);\n this.performUpload(fileEntry);\n },\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\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\n onAbort: function() {\n var element = this.element,\n module = this;\n\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\n this.iframes = [];\n },\n\n createFrame: function(id) {\n return $(\n \"