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