{"version":3,"sources":["file-selector.js"],"names":["document","addEventListener","fileChosen","getElementById","formJob","formFile","fileId","fileError","butFileSubmit","butMainSubmit","clearResume","fileWarning","uploadURL","value","ariaLive","checkOptIn","hiddenOptIn","updateAriaLive","message","textContent","clearFileAlert","setPrompt","text","innerHTML","classList","remove","add","clearFileInput","ctrl","ex","parentNode","replaceChild","cloneNode","checked","fileName","fileSize","event","target","files","name","size","split","pop","e","preventDefault","innerText","uploadId","hasChosenAFile","length","thisId","uploadFile","data","FormData","file","xhr","append","XMLHttpRequest","responseType","status","open","onerror","console","log","statusText","onload","json","response","prompt","fileStatus","errorText","success","errors","click","Value","send","window","reset"],"mappings":"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","file":"file-selector-0face285a8.js","sourcesContent":["// begin file upload\ndocument.addEventListener('DOMContentLoaded', function () {\n\n const fileChosen = document.getElementById('file');\n const formJob = document.getElementById('job-form');\n const formFile = document.getElementById('file-form');\n const fileId = document.getElementById('upload-file-id');\n const fileError = document.getElementById('upload-file-error');\n const butFileSubmit = document.getElementById('file-form-submit');\n const butMainSubmit = document.getElementById('main-form-submit');\n const clearResume = document.getElementById('clear-resume');\n const fileWarning = document.getElementById('FileUploadWarning');\n const uploadURL = document.getElementById('upload-url').value;\n const ariaLive = document.getElementById('file-selector-error');\n const checkOptIn = document.getElementById('OptInOutProxy');\n const hiddenOptIn = document.getElementById('OptInOut');\n\n function updateAriaLive(message) {\n ariaLive.textContent = message; // Set the new message\n }\n\n checkOptIn?.addEventListener('click', (event) => {\n if (checkOptIn.checked)\n hiddenOptIn.value = \"true\"\n else\n hiddenOptIn.value = \"false\"\n return true;\n });\n\n clearResume.addEventListener('click', (event) => {\n clearFileInput(fileChosen);\n clearFileAlert();\n updateAriaLive(\"File has been removed.\"); \n });\n\n fileChosen.addEventListener('cancel', (event) => {\n clearFileAlert();\n });\n\n // we have two event listeners for fileChosen below?? 10/10/24\n\n fileChosen.addEventListener('change', (event) => {\n // validate size and soft validate extension, hard validations on server side\n var fileName;\n var fileSize = 0;\n clearFileAlert();\n fileId.value = 0;\n return true;\n });\n\n fileChosen.addEventListener('change', (event) => {\n var fileName, fileSize = 0;\n try {\n fileName = event.target.files[0].name;\n fileSize = event.target.files[0].size;\n } catch {\n updateAriaLive(\"No file selected.\"); // Clear and set message if no file is selected\n return;\n }\n const extension = fileName.split('.').pop();\n if (extension !== \"pdf\") {\n updateAriaLive(\"Wrong file type. Please select a PDF file.\");\n clearFileInput(fileChosen);\n setPrompt(\"Wrong file type. Please select a PDF file.\");\n return false;\n } else if (fileSize > 1048576) { // 1 MB = 1048576 bytes\n updateAriaLive(\"File is too big. Please select a file that is no larger than 1MB.\");\n clearFileInput(fileChosen);\n setPrompt(\"File is too big. Please select a file that is no larger than 1MB.\");\n return false;\n }\n updateAriaLive(\"File selected successfully.\");\n fileId.value = 0;\n return true;\n });\n\n butFileSubmit.addEventListener(\"click\", (e) => {\n e.preventDefault();\n butFileSubmit.innerText = 'Sending...';\n trySubmit();\n butFileSubmit.innerText = 'Send';\n return false;\n });\n\n window.addEventListener('pageshow', () => { formJob.reset(); formFile.reset(); });\n function trySubmit() {\n var uploadId = fileId.value;\n fileError.value = \"\";\n if (hasFileToUpload(uploadId)) {\n uploadFile();\n }\n else {\n butMainSubmit.click();\n }\n return false;\n }\n\n function uploadFile() {\n var data = new FormData();\n var file = fileChosen.files[0];\n if (file) {\n data.append('file', file);\n }\n\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'json';\n const status = xhr.status;\n xhr.open('POST', uploadURL, true);\n xhr.onerror = () => {\n console.log('Error occurred: ', xhr.statusText);\n if (status === 401) { // Unauthorized\n fileId.value = -1;\n setPrompt('You are not authorized to access this file resource.');\n } else if (status === 500) { // Internal Server Error\n fileId.value = -1;\n setPrompt('An unexpected error occurred while uploading the file to the server. Please try again later.');\n } else {\n fileId.value = -1;\n setPrompt('An unknown file upload error occurred.');\n }\n };\n xhr.onload = () => {\n var json = xhr.response;\n var fileStatus = json.fileStatus;\n var prompt = \"success\";\n if (json.success) {\n if (json.fileStatus == \"Uploaded\") { // \"Uploaded\" || \"Invalid\"\n fileId.value = json.fileId; // send the fileID with the submission\n }\n else {\n prompt = \"There was an error uploading the file. Please check and try again.\";\n }\n }\n else {\n clearFileInput(fileChosen);\n if (json.fileStatus == \"Invalid\") {\n prompt = json.errors;\n }\n else {\n prompt = \"There was an error uploading the file. Please check and try again.\";\n }\n }\n submitMainForm(prompt);\n return false;\n };\n xhr.send(data);\n }\n\n function submitMainForm(errorText) {\n fileError.value = (errorText == \"success\") ? \"\" : errorText;\n butMainSubmit.click();\n if (errorText != \"success\") {\n updateAriaLive(errorText);\n setPrompt(errorText);\n fileId.value = 0;\n }\n fileError.Value = \"\";\n }\n\n function hasFileToUpload(uploadId) {\n var fileName = fileChosen.value;\n var hasChosenAFile = !((!fileName) || (fileName.length === 0));\n return ((hasNoFileId(uploadId)) && (hasChosenAFile));\n }\n function hasNoFileId(thisId) {\n return ((!thisId) || (thisId.length === 0) || (thisId == \"0\"));\n }\n\n function clearFileAlert() {\n setPrompt(\"\");\n updateAriaLive(\"\"); // Clears the aria-live region message\n }\n function setPrompt(text) { // you can handle prompts here however and wherever you want to put them in the DOM\n var prompt = \"ATTACH RESUME\";\n if (text) {\n prompt = prompt + \": \" + text + \"\";\n fileWarning.innerHTML = text;\n fileWarning.classList.remove('field-validation-valid');\n fileWarning.classList.remove('hidden');\n fileWarning.classList.add('field-validation-error');\n }\n else {\n fileWarning.innerHTML = \"\";\n fileWarning.classList.add('field-validation-valid');\n fileWarning.classList.remove('field-validation-error');\n }\n }\n function clearFileInput(ctrl) {\n try {\n ctrl.value = null;\n } catch (ex) { }\n if (ctrl.value) {\n ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);\n fileId.value = \"0\";\n }\n }\n});"]}