{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","CONTROL_WRAPPER","INPUT_WRAPPER","DROP_AREA","DROP_WRAPPER","LIST_PARENT","FILE","STATUS","ACTION_BUTTONS","UPLOAD_BUTTONS","CLEAR_BUTTONS","FILE_NAME","FILE_TYPE","FILE_SIZE","REMOVE_ICON","DELETE_ICON","SPINNER_PANE","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","RTL","DISABLED","RTL_CONTAINER","ICON_FOCUSED","PROGRESS_INNER_WRAPPER","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","wrapperAttr","FORM_UPLOAD","HIDDEN_INPUT","INVALID_FILE","INFORMATION","FilesProp","_super","apply","ButtonsProps","AsyncSettings","Uploader","options","element","_this","call","initialAttr","accept","multiple","disabled","uploadedFilesData","base64String","isForm","allTypes","pausedData","uploadMetaData","tabIndex","btnTabIndex","disableKeyboardNavigation","count","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","onPropertyChanged","newProp","oldProp","_i","_a","keys","prop","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","buttons","browse","clear","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","updateHTMLAttrToElement","updateHTMLAttrToWrapper","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","l10n","setLocale","locale","setLocalizedTexts","preLocaleObj","setCSSClass","cssClass","template","browseButton","innerText","localizedTexts","setAttribute","uploadWrapper","querySelector","innerHTML","updateFileList","getKeyValue","val","keyValue","status","classList","contains","autoUpload","uploadButton","clearButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","preRender","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","abort","remove","cancel","delete","pauseUpload","pause","resume","retry","fileUploadCancel","invalidFileSelection","totalFiles","size","formRendered","ejInstance","tagName","inputElement","createElement","attrs","type","index","attributes","nodeName","nodeValue","hasAttribute","appendChild","isPureReactComponent","props","name","id","getAttribute","keyConfigs","enter","browserName","info","parentEle","document","documentElement","parentElement","formElement","getPersistData","addOnPersist","getModuleName","directoryUpload","removeAttribute","render","renderBrowseButton","initializeUpload","wireEvents","className","textContent","blur","isPreloadFiles","focus","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","add","uploadButtonClick","clearButtonClick","uploadText","clearText","inputWrapper","insertBefore","dropAreaWrapper","setDropArea","files","enablePersistence","slice","clearData","files_1","data","fileData","split","rawFile","validationMessages","minSize","maxSize","statusCode","push","allowUpload","showFileList","sequentialUpload","length_1","querySelectorAll","dropTextArea","dropArea","dropZoneElement","enableDropText","parentNode","createDropTextHint","undefined","setProperties","bindDropEvents","fileDropArea","htmlAttributes","pro","indexOf","updatedClassValues","replace","trim","uploadStyle","newAttr","createAttribute","value","setAttributeNode","checkAutoUpload","sequenceUpload","isFileListCreated","oldCSSClass","updatedCssClassValue","updatedOldCssClass","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","keyAction","keyActionHandler","bind","eventName","resetForm","unWireEvents","destroy","e","targetElement","action","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","preventDefault","stopPropagation","fileInfo","targetMetaData","activeElement","click","dropElement","dragHover","onDragLeave","onPasteFile","onDragEnter","enabled","dropEffect","dataTransfer","toLowerCase","event","item","clipboardData","items","pasteFile","kind","match","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","startIndex","j","args","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","width","uploadSequential","checkActionComplete","removeFilesData","customTemplate","splice","getLiElement","removeUploadedFile","eventArgs","removeDirectly","custom","ajax","asyncSettings","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","removingEventCallback","trigger","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","append","updateFormData","customFormData","customData","_loop_1","map","updateCustomheader","request","_loop_2","setRequestHeader","response","currentTarget","getResponse","readyState","operation","updateStatus","rootElement","statusElement","getFilesFromFolder","filesEntries","validDirectoryUpload","checkDirectoryUpload","_loop_3","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","this_1","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","_loop_4","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","result","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","checkExtension","_internalRenderSelect","fileName","substring","lastIndexOf","getFileType","webkitRelativePath","fileDetails","validatedFileSize","fileSource","concat","k","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","saveUrl","singleUpload","removedList","previousListClone","added","cloneNode","removedList_1","oldList","childNodes","createParentUL","isBlank","str","test","dropFiles","extensions","extensions_1","extension","toLocaleLowerCase","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","errorMessage","isPreLoadFile","isPreload","createCustomfileList","fileData_1","listItem","listElement","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","enableRtl","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","input","fileData_4","list","fileNames","fileData_5","join","statusForFormUpload","isValid","fileData_6","formCustomFileList","isSelectedFile","fileData_7","textContainer","textElement","fileExtension","preventActionComplete","getSlicedName","nameElement","text","dataset","tail","fileData_8","offsetWidth","scrollWidth","names","setInitialAttributes","filterfileList","li","filterFiles","updateLiStatus","createProgressBar","progressbarWrapper","progressBar","max","progressbarInnerWrapper","progressbarText","updateProgressbar","isNaN","Math","round","loaded","total","changeProgressValue","toString","parseInt","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","iconEle","name_1","removecanceledFile","renderFailureState","requestResponse","removeProgressbar","deleteIcon","pauseButton","retryElement","addEventListener","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","spinnerEle","increment","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","progressAnimation","duration","animate","setTimeout","animateProgressBar","uploadTemplate","exception","getConstant","isDynamic","attributes_1","isMutiple","isDisabled","fileIndex","start","end","min","chunkSize","blob","chunkIndex","retryCount","sendRequest","totalChunk","ceil","url","async","contentType","chunkUploadComplete","onUploadProgress","chunkUploadInProgress","currentChunkIndex","uploadingEventCallback","chunkUploadFailed","eventCancelByArgs","removeIcon","checkChunkUpload","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","nextElementSibling","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","clearIcon","progressVal","totalChunks","abortIcon","bytes","toFixed","sortedFileNames","sort","sortedFilesData","sortedFileNames_1","name_3","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","position","totalCount","reader","contents","uploadFileCount","ele","getFileRead","fileCount","getFileInfo","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","endIndex","beforeEventArgs","removingFiles","isLiRemoved","removingFiles_1","validUrl","_loop_5","fileUploadedIndex","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner"],"mappings":"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","file":"js/chunk-2d22db76.c3023ccf.js","sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n *\n * @param {UploaderModel} options - Specifies the Uploader model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.uploadedFilesData = [];\n _this.base64String = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.btnTabIndex = '0';\n _this.disableKeyboardNavigation = false;\n _this.count = -1;\n _this.actionCompleteCount = 0;\n _this.flag = true;\n _this.selectedFiles = [];\n _this.uploaderName = 'UploadFiles';\n _this.fileStreams = [];\n _this.newFileRef = 0;\n _this.isFirstFileOnSelection = false;\n _this.dragCounter = 0;\n /**\n * Get the file item(li) which are shown in file list.\n *\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\n *\n * @private\n */\n _this.filesData = [];\n _this.uploaderOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n this.clearAll();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n /* istanbul ignore next */\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled', invalidFileSelection: 'Invalid files selected', totalFiles: 'Total files',\n size: 'Size'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.formRendered();\n this.updateHTMLAttrToElement();\n this.checkHTMLAttributes(false);\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n enter: 'enter'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n this.browserName = Browser.info.name;\n this.uploaderName = this.element.getAttribute('name');\n };\n Uploader.prototype.formRendered = function () {\n var parentEle = closest(this.element, 'form');\n if (!isNullOrUndefined(parentEle)) {\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist(['filesData']);\n };\n /**\n * Return the module name of the component.\n *\n * @returns {string} Returns the component name.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.updateHTMLAttrToWrapper();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n this.setCSSClass();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n if (!this.isPreloadFiles) {\n this.uploadButton.focus();\n }\n this.wireActionButtonEvents();\n };\n /* istanbul ignore next */\n Uploader.prototype.serverActionButtonsEventBind = function (element) {\n if (element && !this.isForm) {\n this.browseButton.blur();\n this.actionButtons = element;\n this.uploadButton = this.actionButtons.querySelector('.e-file-upload-btn');\n this.clearButton = this.actionButtons.querySelector('.e-file-clear-btn');\n this.uploadButton.focus();\n this.unwireActionButtonEvents();\n this.wireActionButtonEvents();\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.textContent);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (this.files.length) {\n if (this.enablePersistence && this.filesData.length) {\n this.createFileList(this.filesData);\n return;\n }\n if (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n this.isPreloadFiles = true;\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n if (this.sequentialUpload) {\n this.count = this.filesData.length - 1;\n }\n this.isPreloadFiles = false;\n }\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n select(this.dropArea, document);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n if (!dropTextArea) {\n this.createDropTextHint();\n }\n else {\n dropTextArea.innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n }\n if (!enableDropText && dropTextArea) {\n remove(dropTextArea);\n }\n }\n else if (!isNullOrUndefined(this.uploaderOptions) && this.uploaderOptions.dropArea === undefined) {\n this.createDropTextHint();\n this.dropZoneElement = this.uploadWrapper;\n this.setProperties({ dropArea: this.uploadWrapper }, true);\n }\n this.bindDropEvents();\n };\n Uploader.prototype.updateDropArea = function () {\n if (this.dropArea) {\n this.setDropArea();\n }\n else {\n this.dropZoneElement = null;\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (dropTextArea) {\n remove(dropTextArea);\n }\n }\n };\n Uploader.prototype.createDropTextHint = function () {\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n };\n Uploader.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n Uploader.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValues = (this.htmlAttributes[pro].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.uploadWrapper], updatedClassValues.split(' '));\n }\n }\n else if (pro === 'style') {\n var uploadStyle = this.uploadWrapper.getAttribute(pro);\n uploadStyle = !isNullOrUndefined(uploadStyle) ? (uploadStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.uploadWrapper.setAttribute(pro, uploadStyle);\n }\n else {\n this.uploadWrapper.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n newAttr.value = 'multiple';\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.sequenceUpload(fileData);\n }\n else {\n this.upload(fileData);\n }\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.sequenceUpload = function (fileData) {\n if (this.filesData.length - fileData.length === 0 ||\n this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n ++this.count;\n var isFileListCreated = this.showFileList ? false : true;\n if (typeof this.filesData[this.count] === 'object') {\n this.isFirstFileOnSelection = false;\n this.upload(this.filesData[this.count], isFileListCreated);\n if (this.filesData[this.count].statusCode === '0') {\n this.sequenceUpload(fileData);\n }\n }\n else {\n --this.count;\n }\n }\n };\n Uploader.prototype.setCSSClass = function (oldCSSClass) {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(this.cssClass) && updatedCssClassValue !== '') {\n addClass([this.uploadWrapper], updatedCssClassValue.split(updatedCssClassValue.indexOf(',') > -1 ? ',' : ' '));\n }\n var updatedOldCssClass = oldCSSClass;\n if (!isNullOrUndefined(oldCSSClass)) {\n updatedOldCssClass = (oldCSSClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCSSClass) && updatedOldCssClass !== '') {\n removeClass([this.uploadWrapper], updatedOldCssClass.split(' '));\n }\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n if (!isNullOrUndefined(metaData)) {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n var target = e.target.parentElement;\n var fileData = this.filesData[this.fileList.indexOf(target)];\n this.retry(fileData);\n }\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = e.target.parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.actionCompleteCount = 0;\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n }\n };\n Uploader.prototype.onDragEnter = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n this.dragCounter = this.dragCounter + 1;\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.onDragLeave = function () {\n if (!this.enabled) {\n return;\n }\n this.dragCounter = this.dragCounter - 1;\n if (!this.dragCounter) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n }\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.dropEffect !== 'Default') {\n e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n }\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dragCounter = 0;\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.getSelectedFiles = function (index) {\n var data = [];\n var liElement = this.fileList[index];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < index; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n for (var j = startIndex; j < (startIndex + nameElements); j++) {\n data.push(allFiles[j]);\n }\n return data;\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var formUpload = this.isFormUpload();\n var fileData = formUpload ? this.getSelectedFiles(index) : this.getFilesInArray(this.filesData[index]);\n if (isNullOrUndefined(fileData)) {\n return;\n }\n if (args.target.classList.contains(ABORT_ICON) && !formUpload) {\n fileData[0].statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.uploadSequential();\n }\n if (!(liElement.classList.contains(RESTRICT_RETRY))) {\n this.checkActionComplete(true);\n }\n }\n else if (!closest(args.target, '.' + SPINNER_PANE)) {\n this.remove(fileData, false, false, true, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.count) {\n --this.count;\n }\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n e.cancel = true;\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n });\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n };\n ajax.onLoad = function (e) {\n _this.removeCompleted(e, selectedFiles, custom);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.removeFailed(e, selectedFiles, custom);\n return {};\n };\n ajax.send(formData);\n };\n Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n /* istanbul ignore next */\n var name = this.element.getAttribute('name');\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n this.updateFormData(formData, eventArgs.customFormData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n if (currentRequest.length > 0 && currentRequest[0]) {\n var _loop_2 = function (i) {\n var data = currentRequest[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n request.setRequestHeader(Object.keys(data)[0], value);\n };\n for (var i = 0; i < currentRequest.length; i++) {\n _loop_2(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n }\n else {\n this.removeFailed(e, files, customTemplate);\n }\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n rootElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n var statusElement = rootElement.querySelector('.' + STATUS);\n if (statusElement) {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items = this.multiple ?\n event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_3 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_3(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; items && i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i], event);\n }\n _this.pushFilesEntries(event);\n if (entries.length) {\n _this.readFileFromDirectory(directoryReader);\n }\n });\n };\n Uploader.prototype.pushFilesEntries = function (event) {\n var _this = this;\n var files = [];\n var _loop_4 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n if (_this.filesEntries.length) {\n var path = _this.filesEntries[i].fullPath;\n files.push({ 'path': path, 'file': fileObj });\n if (i === _this.filesEntries.length - 1) {\n _this.filesEntries = [];\n _this.renderSelectedFiles(event, files, true);\n }\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_4(i);\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = this.sortFilesList = args.dataTransfer.files;\n if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = files;\n }\n if (files.length > 0) {\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getBase64 = function (file) {\n return new Promise(function (resolve, reject) {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function () { return resolve(fileReader.result); };\n fileReader.onerror = function (error) { return reject(error); };\n });\n };\n /* istanbul ignore next */\n /* tslint:ignore */\n Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false,\n currentRequest: null,\n customFormData: null\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n this.flag = true;\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs, function (eventArgs) {\n _this._internalRenderSelect(eventArgs, fileData);\n });\n };\n Uploader.prototype.updateInitialFileDetails = function (args, \n // eslint-disable-next-line @typescript-eslint/indent\n targetFiles, file, i, fileData, directory, paste) {\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1',\n id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n };\n /* istanbul ignore next */\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n };\n Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n if (!eventArgs.cancel) {\n /* istanbul ignore next */\n this.selectedFiles = this.selectedFiles.concat(fileData);\n this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n for (var j = 0; j < eventArgs.modifiedFilesData.length; j++) {\n for (var k = 0; k < fileData.length; k++) {\n if (eventArgs.modifiedFilesData[j].id === fileData[k].id) {\n eventArgs.modifiedFilesData[j].rawFile = fileData[k].rawFile;\n }\n }\n }\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData, true);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n this.raiseActionComplete();\n this.isFirstFileOnSelection = true;\n }\n };\n Uploader.prototype.allowUpload = function () {\n var allowFormUpload = false;\n if (this.isForm && (!isNullOrUndefined(this.asyncSettings.saveUrl) && this.asyncSettings.saveUrl !== '')) {\n allowFormUpload = true;\n }\n return allowFormUpload;\n };\n Uploader.prototype.isFormUpload = function () {\n var isFormUpload = false;\n if (this.isForm && ((isNullOrUndefined(this.asyncSettings.saveUrl) || this.asyncSettings.saveUrl === '')\n && (isNullOrUndefined(this.asyncSettings.removeUrl) || this.asyncSettings.removeUrl === ''))) {\n isFormUpload = true;\n }\n return isFormUpload;\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (this.browserName !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.isPreLoadFile = function (fileData) {\n var isPreload = false;\n for (var i = 0; i < this.files.length; i++) {\n if (this.files[i].name === fileData.name.slice(0, fileData.name.lastIndexOf('.')) && this.files[i].type === fileData.type) {\n isPreload = true;\n }\n }\n return isPreload;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, listElement);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(listElement);\n this.fileList.push(listElement);\n }\n this.renderReactTemplates();\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formFileList = function (fileData, files) {\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var statusMessage;\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var fileNameEle = this.createElement('span', { className: FILE_NAME });\n fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileTypeEle.innerHTML = '.' + fileType;\n if (!fileType) {\n fileTypeEle.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n fileContainer.appendChild(fileNameEle);\n fileContainer.appendChild(fileTypeEle);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileTypeEle);\n rtlContainer.appendChild(fileNameEle);\n fileContainer.appendChild(rtlContainer);\n }\n this.truncateName(fileNameEle);\n statusMessage = this.formValidateFileInfo(listItem, fileList);\n }\n fileList.appendChild(fileContainer);\n this.setListToFileInfo(fileData, fileList);\n var index = this.listParent.querySelectorAll('li').length;\n var infoEle = this.createElement('span');\n if (fileList.classList.contains(INVALID_FILE)) {\n infoEle.classList.add(STATUS);\n infoEle.classList.add(INVALID_FILE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n this.createFormInput(fileData);\n }\n fileContainer.appendChild(infoEle);\n if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n fileList.appendChild(fileContainer);\n fileList.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n iconElement.classList.add(REMOVE_ICON);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n };\n Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n var statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n this.addInvalidClass(fileList);\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n this.addInvalidClass(fileList);\n statusMessage = typeValidationMessage;\n }\n return statusMessage;\n };\n Uploader.prototype.addInvalidClass = function (fileList) {\n fileList.classList.add(INVALID_FILE);\n };\n Uploader.prototype.createFormInput = function (fileData) {\n var inputElement = this.element.cloneNode(true);\n inputElement.classList.add(HIDDEN_INPUT);\n for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n var listItem = fileData_3[_i];\n listItem.input = inputElement;\n }\n inputElement.setAttribute('name', this.uploaderName);\n this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n this.element.value = '';\n }\n };\n Uploader.prototype.getFileSize = function (fileData) {\n var fileSize = 0;\n for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n var file = fileData_4[_i];\n fileSize += file.size;\n }\n return fileSize;\n };\n Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n var result = {\n name: '',\n rawFile: '',\n size: 0,\n status: '',\n type: '',\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '1',\n list: fileList\n };\n var fileNames = [];\n var type = '';\n for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n var listItem = fileData_5[_i];\n fileNames.push(listItem.name);\n type = listItem.type;\n }\n result.name = fileNames.join(', ');\n result.size = this.getFileSize(fileData);\n result.type = type;\n result.status = this.statusForFormUpload(fileData, fileList);\n return result;\n };\n Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n var isValid = true;\n var statusMessage;\n for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n var listItem = fileData_6[_i];\n statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n isValid = false;\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n isValid = false;\n statusMessage = typeValidationMessage;\n }\n }\n if (!isValid) {\n fileList.classList.add(INVALID_FILE);\n statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData));\n }\n return statusMessage;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n this.setListToFileInfo(fileData, fileList);\n var result = this.mergeFileInfo(fileData, fileList);\n fileList.setAttribute('data-file-name', result.name);\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(result, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, fileList);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, fileList);\n }\n var index = this.listParent.querySelectorAll('li').length;\n if (!fileList.classList.contains(INVALID_FILE)) {\n this.createFormInput(fileData);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n this.renderReactTemplates();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Create the file list for specified files data.\n *\n * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n * @returns {void}\n */\n Uploader.prototype.createFileList = function (fileData, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formCustomFileList(fileData, this.element.files);\n }\n else {\n this.createCustomfileList(fileData);\n }\n }\n else if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formFileList(fileData, this.element.files);\n }\n else {\n for (var _i = 0, fileData_7 = fileData; _i < fileData_7.length; _i++) {\n var listItem = fileData_7[_i];\n var liElement = this.createElement('li', {\n className: FILE,\n attrs: { 'data-file-name': listItem.name, 'data-files-count': '1' }\n });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileExtension.innerHTML = '.' + fileType;\n if (!fileType) {\n fileExtension.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons',\n attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n var preventActionComplete = this.flag;\n if (this.isPreLoadFile(listItem)) {\n this.flag = false;\n this.checkActionComplete(true);\n this.flag = preventActionComplete;\n }\n }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n var listItem = fileData_8[_i];\n listItem.list = fileList;\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n /* istanbul ignore next */\n }\n else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n if (updateLiStatus === void 0) { updateLiStatus = true; }\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n if (updateLiStatus) {\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (!isNullOrUndefined(files) && ((!isNullOrUndefined(this.filesData[i].id) &&\n !isNullOrUndefined(files.id)) ? (this.filesData[i].name === files.name &&\n this.filesData[i].id === files.id) : this.filesData[i].name === files.name)) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false,\n customFormData: []\n };\n this.trigger('canceling', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n }\n else {\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = _this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement, false);\n }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_RETRY);\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var _this = this;\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadSuccessMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '2', false), statusText: statusMessage\n };\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement)) {\n var spinnerEle = liElement.querySelector('.' + SPINNER_PANE);\n if (!isNullOrUndefined(spinnerEle)) {\n hideSpinner(liElement);\n detach(spinnerEle);\n }\n }\n this.trigger('success', args, function (args) {\n _this.updateStatus(file, args.statusText, '2');\n _this.uploadedFilesData.push(file);\n _this.trigger('change', { file: _this.uploadedFilesData });\n _this.checkActionButtonStatus();\n if (_this.fileList.length > 0) {\n if ((!(_this.getLiElement(file)).classList.contains(RESTRICT_RETRY))) {\n _this.uploadSequential();\n _this.checkActionComplete(true);\n }\n else {\n /* istanbul ignore next */\n (_this.getLiElement(file)).classList.remove(RESTRICT_RETRY);\n }\n }\n });\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var _this = this;\n var li = this.getLiElement(file);\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '0', false), statusText: statusMessage\n };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args, function (args) {\n _this.updateStatus(file, args.statusText, '0');\n _this.checkActionButtonStatus();\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n if (increment) {\n ++this.actionCompleteCount;\n }\n else {\n --this.actionCompleteCount;\n }\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () {\n _this.animateProgressBar(li, callType);\n }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n try {\n if (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n if (this.enableRtl) {\n addClass([this.uploadWrapper], RTL);\n }\n else {\n removeClass([this.uploadWrapper], RTL);\n }\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['accept', 'multiple', 'disabled'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'accept':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n || isDynamic) {\n this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n this.initialAttr.accept = this.allowedExtensions;\n }\n break;\n case 'multiple':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ multiple: isMutiple }, !isDynamic);\n this.initialAttr.multiple = true;\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: isDisabled }, !isDynamic);\n this.initialAttr.disabled = true;\n }\n }\n }\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom, fileIndex);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append(this.uploaderName, blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.chunkUploadComplete(e, metaData, custom);\n return {};\n };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n if (eventArgs.currentChunkIndex === 0) {\n // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n else {\n _this.trigger('chunkUploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.chunkUploadFailed(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n if (eventArgs.cancel) {\n this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n var liElement = this.getLiElement(eventArgs.fileData);\n if (liElement) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n if (removeIcon) {\n removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n }\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement);\n }, false);\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n this.trigger('canceling', eventArgs_1, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n _this.sendNextRequest(metaData);\n }\n else {\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = _this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removeChunkFile(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n }\n });\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n if (metaData.file.statusCode !== '4') {\n this.sendNextRequest(metaData);\n }\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n if (metaData.file.statusCode !== '4') {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n }\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n // To prevent triggering of failure event\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () {\n _this.retryRequest(liElement, metaData, custom);\n }, _this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n _this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file_1 = metaData.file;\n var failureMessage = _this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: _this.updateStatus(file_1, failureMessage, '0', false),\n statusText: failureMessage\n };\n _this.trigger('failure', args, function (args) {\n _this.updateStatus(file_1, args.statusText, '0');\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n }\n }\n });\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var progressVal = void 0;\n var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n if (this.asyncSettings.chunkSize && totalChunks) {\n progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n this.changeProgressValue(liElement, progressVal.toString() + '%');\n }\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) {\n _this.checkPausePlayAction(e);\n }, false);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n *\n * @param { number } bytes - Specifies the file size in bytes.\n * @returns {string}\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n *\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns {File[]}\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n filesData = filesData ? filesData : this.sortFilesList;\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n var attributes = ['aria-label', 'directory', 'webkitdirectory', 'tabindex'];\n for (var _i = 0, attributes_2 = attributes; _i < attributes_2.length; _i++) {\n var key = attributes_2[_i];\n this.element.removeAttribute(key);\n }\n if (!isNullOrUndefined(this.uploadWrapper)) {\n this.uploadWrapper.parentElement.appendChild(this.element);\n detach(this.uploadWrapper);\n }\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n *\n * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n files = files ? files : this.filesData;\n if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n this.sequenceUpload(files);\n }\n else {\n var uploadFiles_1 = this.getFilesInArray(files);\n var eventArgs = {\n customFormData: [],\n currentRequest: null,\n cancel: false\n };\n this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.uploadFiles(uploadFiles_1, custom);\n }\n });\n }\n };\n Uploader.prototype.getFilesInArray = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n /* istanbul ignore next */\n Uploader.prototype.serverReadFileBase64 = function (fileIndex, position, totalCount) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var file = _this.fileStreams[fileIndex].rawFile;\n try {\n var reader = new FileReader();\n reader.onload = (function (args) {\n return function () {\n try {\n var contents = args.result;\n var data = contents ? contents.split(';base64,')[1] : null;\n resolve(data);\n }\n catch (e) {\n reject(e);\n }\n };\n })(reader);\n reader.readAsDataURL(file.slice(position, position + totalCount));\n }\n catch (e) {\n reject(e);\n }\n });\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var result = files.length;\n return result;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var file = files[index];\n var fileCount = this.newFileRef++;\n this.fileStreams[fileCount] = file;\n return fileCount;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n for (var i = 0; i < selectedFiles.length; i++) {\n this.uploadFilesRequest(selectedFiles, i, custom);\n }\n };\n Uploader.prototype.uploadFilesRequest = function (selectedFiles, i, custom) {\n var _this = this;\n var cloneFiles = [];\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var getFileData;\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n });\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this.asyncSettings.chunkSize) {\n this.chunkUpload(selectedFiles[i], custom, i);\n }\n else {\n ajax.onLoad = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadComplete(e, selectedFiles[i], custom);\n return {};\n }\n };\n ajax.onUploadProgress = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.uploadFailed(e, selectedFiles[i]);\n return {};\n };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.spliceFiles = function (liIndex) {\n var liElement = this.fileList[liIndex];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < liIndex; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n var endIndex = (startIndex + nameElements) - 1;\n for (var j = endIndex; j >= startIndex; j--) {\n allFiles.splice(j, 1);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n * @returns {void}\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n var _this = this;\n if (isNullOrUndefined(postRawFile)) {\n postRawFile = true;\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: postRawFile,\n currentRequest: null\n };\n var beforeEventArgs = {\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n if (!beforeEventArgs.cancel) {\n if (_this.isFormUpload()) {\n eventArgs.filesData = fileData;\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n var removingFiles = _this.getFilesInArray(fileData);\n var isLiRemoved = false;\n var liIndex = void 0;\n for (var _i = 0, removingFiles_1 = removingFiles; _i < removingFiles_1.length; _i++) {\n var data = removingFiles_1[_i];\n if (!isLiRemoved) {\n liIndex = _this.fileList.indexOf(data.list);\n }\n if (liIndex > -1) {\n var inputElement = !isNullOrUndefined(data.input) ? data.input : null;\n if (inputElement) {\n detach(inputElement);\n }\n _this.spliceFiles(liIndex);\n detach(_this.fileList[liIndex]);\n _this.fileList.splice(liIndex, 1);\n isLiRemoved = true;\n liIndex = -1;\n }\n }\n }\n });\n }\n else if (_this.isForm && (isNullOrUndefined(_this.asyncSettings.removeUrl) || _this.asyncSettings.removeUrl === '')) {\n eventArgs.filesData = _this.getFilesData();\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearAll();\n }\n });\n }\n else {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : _this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = _this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n var _loop_5 = function (files) {\n var fileUploadedIndex = _this.uploadedFilesData.indexOf(files);\n if ((files.statusCode === '2' || files.statusCode === '4' || (files.statusCode === '0' &&\n fileUploadedIndex !== -1)) && validUrl) {\n _this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.removeFilesData(files, customTemplate);\n }\n });\n }\n else {\n _this.removeFilesData(files, customTemplate);\n }\n }\n if (args && !args.target.classList.contains(REMOVE_ICON)) {\n _this.checkActionComplete(false);\n }\n };\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n _loop_5(files);\n }\n }\n }\n });\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n *\n * @returns {void}\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent)) {\n if (this.browserName !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearData();\n _this.actionCompleteCount = 0;\n _this.count = -1;\n }\n });\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get the data of files which are shown in file list.\n *\n * @param { number } index - specifies the file list item(li) index.\n * @returns {FileInfo[]}\n */\n Uploader.prototype.getFilesData = function (index) {\n if (isNullOrUndefined(index)) {\n return this.filesData;\n }\n else {\n return this.getSelectedFiles(index);\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Pauses the in-progress chunked upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.pause = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.resume = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n if (this.sequentialUpload && this.isFirstFileOnSelection) {\n this.isFirstFileOnSelection = false;\n }\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns {void}\n */\n Uploader.prototype.cancel = function (fileData) {\n fileData = fileData ? fileData : this.filesData;\n var cancelingFiles = this.getFilesInArray(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property({})\n ], Uploader.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property('Default')\n ], Uploader.prototype, \"dropEffect\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"rendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"fileListRendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeRemove\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n"],"sourceRoot":""}