{"version":3,"sources":["mcpao-upload-filescan.js"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","_regeneratorRuntime","e","t","r","Object","n","hasOwnProperty","defineProperty","value","i","a","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","this","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","reject","return","throw","allowPreviewThumbnail","uploadApiEndpoint","upload_domain","dropArea","document","getElementById","fileInput","fileList","browseLink","statusMessage","errorMessageDiv","ALLOWED_MIME_TYPES","NO_SCAN_MIME_TYPES","MAX_FILE_SIZE","falconUploadTimeMultiplier","totalFileSize","bandwidthDetected","detectedBandwidthMbps","uncUploadedPaths","uploadedFiles","selectedFiles","UNABLE_TO_UPLOAD_MESSAGE","negative_verdicts","positive_verdicts","delay","ms","setTimeout","pruneFilesToUploadAboveMaxSize","input","files","Array","from","sort","b","size","totalSize","newDataTransfer","DataTransfer","_i","_files","_file","items","add","handleFilesAsync","_x","_handleFilesAsync","_callee","fileSizeErrorLabel","newLabel","unsafe_files","fileArray","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_loop","_ret","_iterator","_step","badfileList","msg","unsafeDiv","_context2","showScanningIndicator","showStatusMessage","file","createElement","id","style","color","textContent","appendChild","remove","result","file_scan_result","fileItem","previewElement","fileReader","_previewElement","_fileReader","fileName","fileSize","deleteBtn","_context","includes","processFileAsync","quotaReached","disableDamageFormFileUpload","error","statusCode","scanVerdict","verdict","toUpperCase","file_clean","webUploadUNC","concat","JobId","file_jobid","classList","startsWith","renderTiffPreview","FileReader","onload","src","target","insertBefore","querySelector","readAsDataURL","renderPdfPreview","innerText","substring","readAsText","formatBytes","onclick","updateFileInputAfterDeleted","displayTotalFileSize","t0","t1","innerHTML","hideScanningIndicator","map","fn","join","message","alert_type","_x2","_processFileAsync","_callee2","fileSizeMB","_bandwidthMbps","_context3","detectBandwidthAsync","uploadFileAsync","scanFileAsync","console","_detectBandwidthAsync","_callee3","testUrl","_context4","image","Image","startTime","Date","now","fetch","response","fileSizeBytes","parseInt","headers","get","endTime","onerror","getTime","doUploadEstimate","_doUploadEstimate","_callee4","uploadTime","falconUploadTime","totalUploadTimeWithFalcon","adjustedMinutes","adjustedSeconds","formattedFileSize","estimated_upload_time","fileEstimatedUploadTime","_context5","estimateUploadTime","bandwidthMbps","minutes","seconds","Math","floor","round","formatFileSize","formatEstimatedUploadTimeMessage","log","toFixed","file_estimated_upload_time","className","_x3","_x4","_x5","_scanFileAsync","_callee5","_context6","quotaReachedAsync","isFileScanApiAvailableAsync","_isFileScanApiAvailableAsync","_callee6","data","_dropArea","_context7","Accept","json","status","display","_quotaReachedAsync","_callee7","_context8","uploadButton","disabled","submsg","reduce","total","_x6","_uploadFileAsync","_callee8","route_action","fileFormData","_args9","_context9","undefined","FormData","append","pao_parcel_id","body","uploadTimeSeconds","canvas","reader","arrayBuffer","tiff","Tiff","buffer","width","height","ctx","getContext","toCanvas","drawImage","readAsArrayBuffer","pdfData","Uint8Array","pdfjsLib","getDocument","promise","pdf","getPage","page","viewport","getViewport","scale","context","render","canvasContext","bytes","units","notifyInvalidFileType","_lbl","errorMessage","_file2","fileType","dv","setAttribute","fontSize","prepend","formattedSize","unitIndex","sizeToDisplay","removeFile","index","splice","updateFileInput","dataTransfer","fileNameToRemove","trim","filter","_i2","_files2","_file3","totalBytes","totalFormatted","container","loadingIndicator","parentNode","addEventListener","preventDefault","click"],"mappings":"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","sourcesContent":["const uploadApiEndpoint = \"https://drop.manateepao.gov/api/falcon\";\r\n\r\nconst upload_domain = \"\\\\\\\\demeter.manateepao.com\\\\Website_Uploads\";\r\nconst dropArea = document.getElementById('pao-drop-area');\r\nconst fileInput = document.getElementById('pao-file-input');\r\nconst fileList = document.getElementById('pao-file-list');\r\nconst browseLink = document.getElementById('pao-browse-link');\r\nconst statusMessage = document.getElementById(\"status-message\");\r\nconst errorMessageDiv = document.getElementById('error-message');\r\n\r\n\r\nconst ALLOWED_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/bmp', 'image/tiff', 'image/webp'];\r\nconst NO_SCAN_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/bmp', 'image/tiff', 'image/webp'];\r\n\r\nconst MAX_FILE_SIZE = 65 * 1024 * 1024;\r\nconst falconUploadTimeMultiplier = 4.5;\r\n\r\nlet totalFileSize = 0;\r\nlet bandwidthDetected = false;\r\nlet detectedBandwidthMbps = 0;\r\nlet allowPreviewThumbnail;\r\n\r\nlet uncUploadedPaths = [];\r\nlet uploadedFiles = [];\r\nlet selectedFiles = []; \r\n\r\nconst UNABLE_TO_UPLOAD_MESSAGE = \"We were unable to upload your file(s) at this time. You can still submit your Property Damage Survey and Email your files directly. We apologize for the inconvenience.\";\r\n\r\nvar negative_verdicts = ['SUSPICIOUS', 'MALICIOUS', 'UNKNOWN'];\r\nvar positive_verdicts = ['CLEAN', 'NEUTRAL', 'EXEMPT'];\r\n\r\nconst delay = (ms) => {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n};\r\n\r\nfunction pruneFilesToUploadAboveMaxSize() {\r\n\r\n let input = document.getElementById('pao-file-input');\r\n\r\n let files = Array.from(input.files);\r\n\r\n files.sort((a, b) => a.size - b.size);\r\n\r\n let totalSize = 0;\r\n\r\n const newDataTransfer = new DataTransfer();\r\n\r\n for (let file of files) {\r\n if (totalSize + file.size <= MAX_FILE_SIZE) { \r\n totalSize += file.size; \r\n newDataTransfer.items.add(file); \r\n } else {\r\n break;\r\n }\r\n }\r\n return newDataTransfer;\r\n}\r\n\r\nasync function handleFilesAsync(files) {\r\n\r\n showScanningIndicator();\r\n\r\n let message = \"Your files are being checked for safety. This may take up to 1 minute. Please wait.\";\r\n showStatusMessage(message, \"alert-primary\");\r\n\r\n totalFileSize = 0;\r\n\r\n Array.from(files).forEach(file => {\r\n totalFileSize += file.size;\r\n });\r\n\r\n let input = document.getElementById('pao-file-input');\r\n\r\n const fileSizeErrorLabel = document.getElementById('fileSizeErrorLabel');\r\n if (totalFileSize > MAX_FILE_SIZE) {\r\n if (!fileSizeErrorLabel) {\r\n const newLabel = document.createElement('div');\r\n newLabel.id = 'fileSizeErrorLabel';\r\n newLabel.style.color = 'red';\r\n newLabel.textContent = \"The combined size of all selected files exceeds the 65 MB upload limit. Some files were not included.\";\r\n document.getElementById('file_size_error_container').appendChild(newLabel);\r\n }\r\n input.files = pruneFilesToUploadAboveMaxSize().files;\r\n } else {\r\n input.files = files;\r\n }\r\n\r\n if (fileSizeErrorLabel) {\r\n fileSizeErrorLabel.remove();\r\n }\r\n\r\n let newDataTransfer = new DataTransfer();\r\n\r\n let unsafe_files = [];\r\n\r\n const fileArray = Array.from(input.files);\r\n\r\n for await (const file of fileArray) { \r\n\r\n\r\n if (!ALLOWED_MIME_TYPES.includes(file.type)) {\r\n continue; \r\n }\r\n\r\n newDataTransfer.items.add(file);\r\n\r\n allowPreviewThumbnail = false;\r\n\r\n\r\n let result = await processFileAsync(file);\r\n\r\n if (result === null || result === undefined || result?.quotaReached === \"CLOSED\") {\r\n disableDamageFormFileUpload(error, UNABLE_TO_UPLOAD_MESSAGE);\r\n return;\r\n }\r\n\r\n let file_scan_result = {};\r\n\r\n if (result?.statusCode) {\r\n file_scan_result.statusCode = result.statusCode;\r\n }\r\n\r\n if (result?.scanVerdict) {\r\n\r\n file_scan_result.verdict = result.scanVerdict;\r\n\r\n if (negative_verdicts.includes(result.scanVerdict.toUpperCase())) {\r\n file_scan_result.file_clean = false;\r\n }\r\n\r\n if (positive_verdicts.includes(result.scanVerdict.toUpperCase())) {\r\n if (result?.webUploadUNC) {\r\n uncUploadedPaths.push(`${upload_domain}\\\\${result.webUploadUNC}`);\r\n file_scan_result.file_clean = true;\r\n }\r\n if (result?.JobId) {\r\n file_scan_result.file_jobid = result?.JobId;\r\n }\r\n allowPreviewThumbnail = true;\r\n }\r\n }\r\n\r\n const fileItem = document.createElement('div');\r\n fileItem.classList.add('file-item');\r\n\r\n let previewElement;\r\n\r\n if (file.type.startsWith('image/')) {\r\n\r\n if (allowPreviewThumbnail) {\r\n if (file.type === 'image/tiff') {\r\n previewElement = document.createElement('canvas');\r\n fileItem.appendChild(previewElement);\r\n renderTiffPreview(file, previewElement);\r\n } else {\r\n\r\n previewElement = document.createElement('img');\r\n\r\n const fileReader = new FileReader();\r\n fileReader.onload = function (e) {\r\n previewElement.src = e.target.result;\r\n fileItem.insertBefore(previewElement, fileItem.querySelector('p'));\r\n };\r\n fileReader.readAsDataURL(file);\r\n }\r\n } else {\r\n previewElement = document.createElement('span');\r\n previewElement?.classList.add('bi-x-circle');\r\n fileItem.classList.add('unsafe');\r\n fileItem.insertBefore(previewElement, fileItem.querySelector('p'));\r\n }\r\n }\r\n\r\n else if (file.type === 'application/pdf') {\r\n\r\n if (allowPreviewThumbnail) {\r\n previewElement = document.createElement('canvas');\r\n fileItem.appendChild(previewElement);\r\n renderPdfPreview(file, previewElement);\r\n\r\n } else {\r\n previewElement = document.createElement('span');\r\n fileItem.classList.add('unsafe');\r\n fileItem.insertBefore(previewElement, fileItem.querySelector('p'));\r\n }\r\n }\r\n else if (file.type === 'text/plain') {\r\n previewElement = document.createElement('p');\r\n const fileReader = new FileReader();\r\n fileReader.onload = function (e) {\r\n previewElement.innerText = e.target.result.substring(0, 50);\r\n fileItem.insertBefore(previewElement, fileItem.querySelector('p'));\r\n };\r\n fileReader.readAsText(file);\r\n }\r\n else if (file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {\r\n previewElement = document.createElement('i');\r\n previewElement.classList.add('fas', 'fa-file-word'); \r\n fileItem.appendChild(previewElement);\r\n }\r\n else {\r\n previewElement = document.createElement('i');\r\n previewElement.classList.add('fas', 'fa-file'); \r\n fileItem.appendChild(previewElement);\r\n }\r\n\r\n const fileName = document.createElement('p');\r\n fileName.classList.add('file-name');\r\n fileName.innerText = file.name;\r\n fileItem.appendChild(fileName);\r\n\r\n const fileSize = document.createElement('p');\r\n fileSize.classList.add('file-size');\r\n fileSize.innerText = formatBytes(file.size);\r\n\r\n fileItem.appendChild(fileSize);\r\n if (allowPreviewThumbnail) {\r\n\r\n const deleteBtn = document.createElement('button');\r\n deleteBtn.classList.add('trash');\r\n deleteBtn.onclick = function () {\r\n fileItem.remove();\r\n updateFileInputAfterDeleted(fileItem);\r\n };\r\n fileItem.appendChild(deleteBtn);\r\n\r\n\r\n }\r\n fileList.appendChild(fileItem);\r\n\r\n if (!allowPreviewThumbnail) {\r\n unsafe_files.push(file.name);\r\n updateFileInputAfterDeleted(fileItem);\r\n }\r\n\r\n if (allowPreviewThumbnail) {\r\n selectedFiles.push(file);\r\n displayTotalFileSize();\r\n }\r\n\r\n await delay(300); \r\n }\r\n\r\n input.files = newDataTransfer.files;\r\n\r\n\r\n statusMessage.innerHTML = \"\";\r\n statusMessage.classList.add(\"d-none\");\r\n\r\n hideScanningIndicator();\r\n\r\n\r\n if (unsafe_files.length > 0) {\r\n\r\n let badfileList = `
    ` + unsafe_files.map(fn => `
  1. ${fn}
  2. `).join('') + `
`;\r\n\r\n let msg = `We detected that the file(s) you attempted to upload may pose a security \r\n risk and were therefore blocked. If you believe this is an error, please double-check the file format and \r\n ensure it's free from any malicious content.
` + badfileList;\r\n\r\n\r\n const unsafeDiv = document.getElementById('pao-unsafe-file-list');\r\n unsafeDiv.innerHTML = msg;\r\n\r\n unsafeDiv.classList.add('alert-danger');\r\n unsafeDiv.classList.remove('d-none');\r\n }\r\n}\r\n\r\nfunction showStatusMessage(message, alert_type) {\r\n statusMessage.innerHTML = message;\r\n statusMessage.classList.add(alert_type)\r\n statusMessage.classList.remove(\"d-none\");\r\n}\r\n\r\nasync function processFileAsync(file) {\r\n\r\n const fileSizeMB = file.size / (1024 * 1024); \r\n\r\n try {\r\n if (!bandwidthDetected) {\r\n const bandwidthMbps = await detectBandwidthAsync();\r\n if (bandwidthMbps > 0) {\r\n bandwidthDetected = true;\r\n detectedBandwidthMbps = bandwidthMbps; \r\n }\r\n }\r\n\r\n\r\n if (NO_SCAN_MIME_TYPES.includes(file.type)) {\r\n\r\n return await uploadFileAsync(file, \"drop\");\r\n\r\n } else {\r\n\r\n return await scanFileAsync(file, fileSizeMB, detectedBandwidthMbps);\r\n }\r\n\r\n } catch (error) {\r\n console.error(\"Error during file scan:\", error);\r\n return false; \r\n }\r\n}\r\n\r\nasync function detectBandwidthAsync() {\r\n const testUrl = '/wp-content/themes/frontier-child/images/bandwidth-test-image.png';\r\n\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n const startTime = Date.now(); \r\n\r\n fetch(testUrl, { method: 'HEAD' })\r\n .then(response => {\r\n const fileSizeBytes = parseInt(response.headers.get('Content-Length'), 10);\r\n\r\n if (isNaN(fileSizeBytes)) {\r\n throw new Error(\"Could not determine file size from headers.\");\r\n }\r\n image.onload = () => {\r\n const endTime = Date.now(); \r\n const duration = (endTime - startTime) / 1000; \r\n\r\n const bandwidthMbps = (fileSizeBytes * 8) / (duration * 1024 * 1024); \r\n resolve(bandwidthMbps);\r\n };\r\n image.onerror = () => {\r\n reject(new Error(\"Error loading the test image.\"));\r\n };\r\n image.src = testUrl + '?' + new Date().getTime(); \r\n })\r\n .catch(error => {\r\n reject(error); \r\n });\r\n });\r\n}\r\n\r\nasync function doUploadEstimate() {\r\n const uploadTime = estimateUploadTime(fileSizeMB, bandwidthMbps);\r\n\r\n const falconUploadTime = uploadTime.minutes * 60 + uploadTime.seconds; \r\n const totalUploadTimeWithFalcon = falconUploadTime + (fileSizeMB * falconUploadTimeMultiplier); \r\n\r\n const adjustedMinutes = Math.floor(totalUploadTimeWithFalcon / 60);\r\n const adjustedSeconds = Math.round(totalUploadTimeWithFalcon % 60);\r\n\r\n const formattedFileSize = formatFileSize(file.size);\r\n\r\n uploadedFiles.push({\r\n name: file.name,\r\n size: formattedFileSize,\r\n uploadTime: `${adjustedMinutes} minute(s) and ${adjustedSeconds} second(s)`\r\n });\r\n\r\n let estimated_upload_time = formatEstimatedUploadTimeMessage({ minutes: adjustedMinutes, seconds: adjustedSeconds });\r\n\r\n console.log(`Detected bandwidth: ${bandwidthMbps.toFixed(2)} Mbps`);\r\n console.log(estimated_upload_time);\r\n\r\n const fileEstimatedUploadTime = document.getElementById(\"file_estimated_upload_time\");\r\n file_estimated_upload_time.className = \"file-info-estimate file-info-estimate-icon\";\r\n fileEstimatedUploadTime.textContent = estimated_upload_time;\r\n}\r\n\r\nasync function scanFileAsync(file, fileSizeMB, bandwidthMbps) {\r\n try {\r\n let quotaReached = await quotaReachedAsync();\r\n\r\n if (quotaReached === 'CLOSED') {\r\n const result = {\r\n \"quotaReached\": \"true\"\r\n };\r\n return result; \r\n }\r\n\r\n if (isFileScanApiAvailableAsync()) {\r\n return await uploadFileAsync(file, \"scan\");\r\n\r\n } else {\r\n return false;\r\n }\r\n\r\n } catch (error) {\r\n console.error(error.message);\r\n return false;\r\n }\r\n}\r\n\r\nasync function isFileScanApiAvailableAsync() {\r\n try {\r\n\r\n const response = await fetch(`${uploadApiEndpoint}/health`, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n }\r\n });\r\n\r\n let data = await response.json();\r\n\r\n if (data?.status) {\r\n if (data.status !== \"success\") {\r\n const dropArea = document.getElementById('pao-drop-area');\r\n if (dropArea)\r\n dropArea.style.display = 'none';\r\n disableDamageFormFileUpload(data);\r\n return false;\r\n }\r\n }\r\n return true;\r\n\r\n } catch (error) {\r\n disableDamageFormFileUpload(error);\r\n return false;\r\n }\r\n}\r\n\r\nasync function quotaReachedAsync() {\r\n try {\r\n const response = await fetch(`${uploadApiEndpoint}/quota`, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n }\r\n });\r\n\r\n const data = await response.json();\r\n\r\n if (data?.status && data.status !== \"success\") {\r\n disableDamageFormFileUpload(data);\r\n return 'CLOSED'; \r\n }\r\n\r\n if (data?.quotaReached) {\r\n disableDamageFormFileUpload(null);\r\n return 'CLOSED'; \r\n }\r\n\r\n return 'OPEN'; \r\n\r\n } catch (error) {\r\n disableDamageFormFileUpload(error);\r\n return 'CLOSED'; \r\n }\r\n}\r\n\r\nfunction disableDamageFormFileUpload(data, message) {\r\n if (data)\r\n console.error(data?.message);\r\n\r\n let uploadButton = document.getElementById('pao-file-input');\r\n if (uploadButton) {\r\n uploadButton.disabled = true;\r\n if (!message) {\r\n let submsg = \"\";\r\n let totalBytes = selectedFiles.reduce((total, file) => total + file.size, 0);\r\n if (totalBytes > 0)\r\n submsg = \"However, any files you've already uploaded will be received successfully. \"\r\n\r\n message = `We are currently unable to upload files through the survey. ${submsg}Please submit your survey and then send supporting documentation, including your Parcel ID, to damagereport@manateepao.gov`;\r\n }\r\n hideScanningIndicator();\r\n showStatusMessage(message, \"alert-warning\");\r\n }\r\n}\r\n\r\n\r\n\r\nasync function uploadFileAsync(file, route_action = \"scan\") {\r\n\r\n const fileFormData = new FormData();\r\n fileFormData.append(\"file\", file);\r\n fileFormData.append(\"parid\", pao_parcel_id.value);\r\n\r\n try {\r\n\r\n const response = await fetch(`${uploadApiEndpoint}/${route_action}`, {\r\n method: \"POST\",\r\n body: fileFormData\r\n });\r\n\r\n return await response.json();\r\n\r\n } catch (error) {\r\n disableDamageFormFileUpload(error, UNABLE_TO_UPLOAD_MESSAGE);\r\n }\r\n return null;\r\n}\r\n\r\nfunction estimateUploadTime(fileSizeMB, bandwidthMbps) {\r\n const bandwidthMBps = bandwidthMbps / 8; \r\n\r\n const fileSizeBytes = fileSizeMB * 1024 * 1024; \r\n\r\n const uploadTimeSeconds = fileSizeBytes / (bandwidthMBps * 1024 * 1024);\r\n\r\n const minutes = Math.floor(uploadTimeSeconds / 60);\r\n const seconds = Math.floor(uploadTimeSeconds % 60);\r\n return { minutes, seconds };\r\n}\r\n\r\nfunction renderTiffPreview(file, canvas) {\r\n const reader = new FileReader();\r\n reader.onload = function (e) {\r\n const arrayBuffer = e.target.result;\r\n\r\n const tiff = new Tiff({ buffer: arrayBuffer });\r\n\r\n canvas.width = tiff.width();\r\n canvas.height = tiff.height();\r\n\r\n const ctx = canvas.getContext('2d');\r\n\r\n const image = tiff.toCanvas();\r\n ctx.drawImage(image, 0, 0);\r\n };\r\n reader.readAsArrayBuffer(file); \r\n}\r\n\r\nfunction renderPdfPreview(file, canvas) {\r\n const reader = new FileReader();\r\n reader.onload = function (e) {\r\n const pdfData = new Uint8Array(e.target.result);\r\n pdfjsLib.getDocument(pdfData).promise.then(function (pdf) {\r\n pdf.getPage(1).then(function (page) {\r\n const scale = 0.5;\r\n const viewport = page.getViewport({ scale: scale });\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n const context = canvas.getContext('2d');\r\n page.render({ canvasContext: context, viewport: viewport });\r\n });\r\n });\r\n };\r\n reader.readAsArrayBuffer(file);\r\n}\r\n\r\nfunction formatBytes(bytes) {\r\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\r\n let i = 0;\r\n while (bytes >= 1024 && i < units.length - 1) {\r\n bytes /= 1024;\r\n i++;\r\n }\r\n return bytes.toFixed(2) + ' ' + units[i];\r\n}\r\n\r\nfunction formatEstimatedUploadTimeMessage(uploadTime) {\r\n let estimated_upload_time = \"Estimated upload time: \";\r\n\r\n if (uploadTime.minutes > 0) {\r\n estimated_upload_time += `${uploadTime.minutes} minute(s)`;\r\n }\r\n\r\n if (uploadTime.minutes > 0 && uploadTime.seconds > 0) {\r\n estimated_upload_time += \" and \";\r\n }\r\n\r\n if (uploadTime.seconds > 0) {\r\n estimated_upload_time += `${uploadTime.seconds} second(s)`;\r\n }\r\n\r\n if (uploadTime.minutes === 0 && uploadTime.seconds === 0) {\r\n estimated_upload_time += \"less than a second\";\r\n }\r\n\r\n return estimated_upload_time;\r\n}\r\n\r\nfunction notifyInvalidFileType(files) {\r\n\r\n const _lbl = document.getElementById('file-not-supported-label');\r\n if (_lbl)\r\n _lbl.remove();\r\n\r\n let errorMessage = document.getElementById('error-message');\r\n\r\n errorMessage.classList.add('d-none');\r\n\r\n for (let i = 0; i < files.length; i++) {\r\n let file = files[i];\r\n let fileType = file.type;\r\n\r\n if (!ALLOWED_MIME_TYPES.includes(fileType)) {\r\n\r\n statusMessage.innerHTML = \"\";\r\n statusMessage.classList.add(\"d-none\");\r\n\r\n const dv = document.createElement('div');\r\n dv.id = 'file-not-supported-label';\r\n dv.setAttribute('aria-labelledby', 'file-not-supported-label');\r\n dv.setAttribute('aria-describedby', 'file-not-supported-label');\r\n dv.style.color = '#063438';\r\n dv.style.fontSize = \"17px\";\r\n dv.innerHTML = `The file ${file.name} is not supported.`;\r\n errorMessage.prepend(dv);\r\n errorMessage.classList.add('alert-warning');\r\n errorMessage.classList.remove('d-none');\r\n }\r\n }\r\n}\r\n\r\nfunction formatFileSize(size) {\r\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB'];\r\n let formattedSize = size;\r\n let unitIndex = 0;\r\n\r\n while (formattedSize >= 1024 && unitIndex < units.length - 1) {\r\n formattedSize /= 1024;\r\n unitIndex++;\r\n }\r\n\r\n let sizeToDisplay = formattedSize < 0.01 ? 0 : formattedSize.toFixed(2);\r\n let result = `${sizeToDisplay} ${units[unitIndex]}`;\r\n return result;\r\n}\r\n\r\nfunction removeFile(index) {\r\n selectedFiles.splice(index, 1); \r\n updateFileInput();\r\n}\r\n\r\nfunction updateFileInput() {\r\n const dataTransfer = new DataTransfer();\r\n selectedFiles.forEach((file) => dataTransfer.items.add(file));\r\n document.getElementById('pao-file-input').files = dataTransfer.files; \r\n displayTotalFileSize();\r\n}\r\n\r\nfunction updateFileInputAfterDeleted(fileItem) {\r\n const dataTransfer = new DataTransfer();\r\n let input = document.getElementById('pao-file-input');\r\n let files = Array.from(input.files);\r\n\r\n const fileNameToRemove = fileItem.querySelector('.file-name').textContent.trim();\r\n\r\n selectedFiles = selectedFiles.filter(file => file.name !== fileNameToRemove);\r\n\r\n for (let file of files) {\r\n if (file.name !== fileNameToRemove) { \r\n dataTransfer.items.add(file); \r\n }\r\n }\r\n input.files = dataTransfer.files;\r\n displayTotalFileSize();\r\n}\r\n\r\nfunction displayTotalFileSize() {\r\n let totalBytes = selectedFiles.reduce((total, file) => total + file.size, 0); \r\n let totalFormatted = formatFileSize(totalBytes); \r\n\r\n let totalFileSizeLabel = document.getElementById('total_file_size');\r\n\r\n totalFileSizeLabel.textContent = `Total combined size: ${totalFormatted}`;\r\n\r\n let uploadButton = document.getElementById('pao-file-input');\r\n if (totalBytes > MAX_FILE_SIZE) {\r\n uploadButton.disabled = true; \r\n } else {\r\n uploadButton.disabled = false; \r\n }\r\n}\r\n\r\nfunction showScanningIndicator() {\r\n let container = document.getElementById('scanning-indicator-container');\r\n let loadingIndicator = document.getElementById('scanning-indicator');\r\n\r\n if (!container) {\r\n container = document.createElement('div');\r\n container.id = 'scanning-indicator-container';\r\n\r\n loadingIndicator = document.createElement('div');\r\n loadingIndicator.id = 'scanning-indicator';\r\n loadingIndicator.textContent = 'Scanning file. Please wait...';\r\n loadingIndicator.classList.add('scanning-indicator');\r\n\r\n container.appendChild(loadingIndicator);\r\n\r\n fileList.parentNode.insertBefore(container, fileList); \r\n }\r\n\r\n container.style.display = 'flex'; \r\n loadingIndicator.style.display = 'block'; \r\n}\r\n\r\nfunction hideScanningIndicator() {\r\n const loadingIndicator = document.getElementById('scanning-indicator-container');\r\n if (loadingIndicator) {\r\n loadingIndicator.style.display = 'none';\r\n }\r\n}\r\n\r\nif (dropArea) {\r\n\r\n dropArea.addEventListener('dragover', function (e) {\r\n e.preventDefault();\r\n dropArea.classList.add('hover');\r\n });\r\n\r\n dropArea.addEventListener('dragleave', function () {\r\n dropArea.classList.remove('hover');\r\n });\r\n\r\n dropArea.addEventListener('drop', function (e) { \r\n e.preventDefault();\r\n dropArea.classList.remove('hover');\r\n const files = e.dataTransfer.files;\r\n notifyInvalidFileType(files);\r\n handleFilesAsync(files);\r\n });\r\n}\r\n\r\nbrowseLink.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n fileInput.click();\r\n});\r\n\r\nfileInput.addEventListener('change', function () {\r\n\r\n\r\n let input = document.getElementById('pao-file-input');\r\n let files = input.files;\r\n notifyInvalidFileType(files);\r\n handleFilesAsync(files);\r\n});"],"file":"mcpao-upload-filescan.min.js"}