{"version":3,"sources":["file-selector.js"],"names":["document","addEventListener","fileChosen","getElementById","formJob","formFile","fileId","fileError","butFileSubmit","butMainSubmit","clearResume","fileWarning","uploadURL","value","ariaLive","updateAriaLive","message","textContent","clearFileAlert","setPrompt","text","innerHTML","classList","remove","add","clearFileInput","ctrl","ex","parentNode","replaceChild","cloneNode","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-05ff0593ad.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('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\n function updateAriaLive(message) {\n ariaLive.textContent = message; // Set the new message\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 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});"]}