{"version":3,"file":"entry.min.js","sources":["../../../ClientSrc/iframe-embed/application.js","../../../ClientSrc/iframe-embed/validation.js","../../../ClientSrc/iframe-embed/entry.js"],"sourcesContent":["function getBodyHeight() {\r\n var el = document.body;\r\n var height = el.offsetHeight;\r\n var style = getComputedStyle(el);\r\n\r\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\r\n return height;\r\n}\r\n\r\nfunction resizeWidget() {\r\n var actualHeight = getBodyHeight();\r\n var iframeName = window.name;\r\n\r\n if (window.parent.postMessage) {\r\n window.parent.postMessage(\r\n { action: \"resizeIframe\", height: actualHeight, name: iframeName },\r\n \"*\"\r\n );\r\n }\r\n}\r\n\r\nfunction sendMessage(action, jobId) {\r\n var iframeName = window.name;\r\n window.parent.postMessage(\r\n { action: action, jobId: jobId, name: iframeName, url: window.location.href },\r\n \"*\"\r\n );\r\n}\r\n\r\nfunction initialize() {\r\n if (window.__action == \"Index\") sendMessage(\"viewList\", null);\r\n\r\n if (window.__action == \"Job\") {\r\n var jobId = document.querySelector(\"#JobId\").value;\r\n sendMessage(\"viewJob\", jobId);\r\n }\r\n\r\n if (window.addEventListener) {\r\n window.addEventListener(\"message\", messageReceived, false);\r\n } else if (window.attachEvent) {\r\n window.attachEvent(\"onmessage\", messageReceived);\r\n }\r\n\r\n function messageReceived(e) {\r\n var action = e.data.action;\r\n\r\n if (action == \"updateListUrl\") {\r\n var newListUrl = e.data.listUrl;\r\n var backElement = document.querySelector(\".back-link\");\r\n backElement.setAttribute(\"href\", newListUrl);\r\n }\r\n }\r\n}\r\n\r\nexport { resizeWidget, initialize, sendMessage };\r\n","// https://css-tricks.com/form-validation-part-2-constraint-validation-api-javascript/\r\n// Form Validation\r\n\r\n// Validate the field\r\nvar hasError = function (field) {\r\n\r\n // Don't validate submits, buttons, file and reset inputs, and disabled fields\r\n if (field.disabled || field.type === 'reset' || field.type === 'submit' || field.type === 'button') return;\r\n\r\n if (field.type === 'checkbox') {\r\n var group = field.form.querySelectorAll('[data-group-name=\"' + field.dataset.groupName + '\"]');\r\n if (group.length > 0) {\r\n for (var i = 0; i < group.length; i++) {\r\n // Only check fields in current form\r\n if (group[i].form !== field.form) continue;\r\n if (group[i].validity.valid) return;\r\n }\r\n }\r\n }\r\n\r\n if (field.type === 'select') {\r\n console.log(field.validity.valid);\r\n }\r\n\r\n // Get validity\r\n var validity = field.validity;\r\n\r\n // If valid, return null\r\n if (validity.valid) return;\r\n\r\n return field.validationMessage;\r\n //// If field is required and empty\r\n //if (validity.valueMissing) return 'Please fill out this field.';\r\n\r\n //// If not the right type\r\n //if (validity.typeMismatch) {\r\n\r\n // // Email\r\n // if (field.type === 'email') return 'Please enter an email address.';\r\n\r\n // // URL\r\n // if (field.type === 'url') return 'Please enter a URL.';\r\n\r\n //}\r\n\r\n //// If too short\r\n //if (validity.tooShort) return 'Please lengthen this text to ' + field.getAttribute('minLength') + ' characters or more. You are currently using ' + field.value.length + ' characters.';\r\n\r\n //// If too long\r\n //if (validity.tooLong) return 'Please shorten this text to no more than ' + field.getAttribute('maxLength') + ' characters. You are currently using ' + field.value.length + ' characters.';\r\n\r\n //// If number input isn't a number\r\n //if (validity.badInput) return 'Please enter a number.';\r\n\r\n //// If a number value doesn't match the step interval\r\n //if (validity.stepMismatch) return 'Please select a valid value.';\r\n\r\n //// If a number field is over the max\r\n //if (validity.rangeOverflow) return 'Please select a value that is no more than ' + field.getAttribute('max') + '.';\r\n\r\n //// If a number field is below the min\r\n //if (validity.rangeUnderflow) return 'Please select a value that is no less than ' + field.getAttribute('min') + '.';\r\n\r\n //// If pattern doesn't match\r\n //if (validity.patternMismatch) {\r\n\r\n // // If pattern info is included, return custom error\r\n // if (field.hasAttribute('title')) return field.getAttribute('title');\r\n\r\n // // Otherwise, generic error\r\n // return 'Please match the requested format.';\r\n\r\n //}\r\n\r\n // If all else fails, return a generic catchall error\r\n return 'The value you entered for this field is invalid.';\r\n\r\n};\r\n\r\n\r\n// Show an error message\r\nvar showError = function (field, error) {\r\n\r\n // Add error class to field\r\n field.classList.add('error');\r\n\r\n // If the field is a radio button and part of a group, error all and get the last item in the group\r\n if (field.type === 'radio' && field.name) {\r\n var group = document.getElementsByName(field.name);\r\n if (group.length > 0) {\r\n for (var i = 0; i < group.length; i++) {\r\n // Only check fields in current form\r\n if (group[i].form !== field.form) continue;\r\n group[i].classList.add('error');\r\n }\r\n field = group[group.length - 1];\r\n }\r\n }\r\n\r\n if (field.type === 'checkbox') {\r\n var group = field.form.querySelectorAll('[data-group-name=\"' + field.dataset.groupName + '\"]');\r\n if (group.length > 0) {\r\n for (var i = 0; i < group.length; i++) {\r\n // Only check fields in current form\r\n if (group[i].form !== field.form) continue;\r\n }\r\n field = group[group.length - 1];\r\n }\r\n }\r\n\r\n // Get field id or name\r\n var id = field.id || field.name;\r\n if (!id) return;\r\n\r\n // Check if error message field already exists\r\n // If not, create one\r\n var message = document.getElementById('error-for-' + id);\r\n if (!message) {\r\n message = document.createElement('div');\r\n message.className = 'error-message';\r\n message.id = 'error-for-' + id;\r\n\r\n // If the field is a radio button or checkbox, insert error after the label\r\n var label;\r\n if (field.type === 'radio' || field.type === 'checkbox') {\r\n label = field.form.querySelector('label[for=\"' + id + '\"]') || field.parentNode;\r\n if (label) {\r\n label.parentNode.insertBefore(message, label.nextSibling);\r\n }\r\n }\r\n\r\n // Otherwise, insert it after the field\r\n if (!label) {\r\n field.parentNode.appendChild(message);\r\n }\r\n\r\n }\r\n\r\n // Add ARIA role to the field\r\n field.setAttribute('aria-describedby', 'error-for-' + id);\r\n\r\n // Update error message\r\n message.innerHTML = error;\r\n\r\n // Show error message\r\n message.style.display = 'block';\r\n message.style.visibility = 'visible';\r\n\r\n broadcastResize();\r\n};\r\n\r\n// Remove the error message\r\nvar removeError = function (field) {\r\n\r\n // Remove error class to field\r\n field.classList.remove('error');\r\n\r\n // Remove ARIA role from the field\r\n field.removeAttribute('aria-describedby');\r\n\r\n // If the field is a radio button and part of a group, remove error from all and get the last item in the group\r\n if (field.type === 'radio' && field.name) {\r\n var group = document.getElementsByName(field.name);\r\n if (group.length > 0) {\r\n for (var i = 0; i < group.length; i++) {\r\n // Only check fields in current form\r\n if (group[i].form !== field.form) continue;\r\n group[i].classList.remove('error');\r\n }\r\n field = group[group.length - 1];\r\n }\r\n }\r\n\r\n if (field.type === 'checkbox') {\r\n var group = field.form.querySelectorAll('[data-group-name=\"' + field.dataset.groupName + '\"]');\r\n if (group.length > 0) {\r\n for (var i = 0; i < group.length; i++) {\r\n // Only check fields in current form\r\n if (group[i].form !== field.form) continue;\r\n }\r\n field = group[group.length - 1];\r\n }\r\n }\r\n\r\n // Get field id or name\r\n var id = field.id || field.name;\r\n if (!id) return;\r\n\r\n\r\n // Check if an error message is in the DOM\r\n var message = document.getElementById('error-for-' + id);\r\n if (!message) return;\r\n\r\n // If so, hide it\r\n message.innerHTML = '';\r\n message.style.display = 'none';\r\n message.style.visibility = 'hidden';\r\n\r\n broadcastResize();\r\n};\r\n\r\nvar broadcastResize = function () {\r\n if (window.CustomEvent) {\r\n var event = new CustomEvent('hh-resize', { detail: { some: 'data' } });\r\n } else {\r\n var event = document.createEvent('CustomEvent');\r\n event.initCustomEvent('hh-resize', true, true, { some: 'data' });\r\n }\r\n\r\n window.dispatchEvent(event);\r\n};\r\n\r\nfunction initValidation() {\r\n // Add the novalidate attribute when the JS loads\r\n var forms = document.querySelectorAll('[data-validate]');\r\n var textAreas = document.querySelectorAll('textarea');\r\n\r\n for (var j = 0; j < textAreas.length; j++) {\r\n // Listen to all resize events\r\n textAreas[j].addEventListener('resize', function (event) {\r\n broadcastResize();\r\n });\r\n }\r\n\r\n for (var i = 0; i < forms.length; i++) {\r\n\r\n forms[i].setAttribute('novalidate', true);\r\n\r\n // Listen to all blur events\r\n forms[i].addEventListener('blur', function (event) {\r\n\r\n // Only run if the field is in a form to be validated\r\n if (!event.target.form || !event.target.form.hasAttribute('data-validate')) return;\r\n\r\n // Validate the field\r\n var error = hasError(event.target);\r\n\r\n // If there's an error, show it\r\n if (error) {\r\n showError(event.target, error);\r\n return;\r\n }\r\n\r\n // Otherwise, remove any existing error message\r\n removeError(event.target);\r\n\r\n }, true);\r\n\r\n\r\n var dragging = 0;\r\n forms[i].addEventListener(\"mousedown\", function () {\r\n dragging = 0;\r\n }, false);\r\n\r\n forms[i].addEventListener(\"mousemove\", function () {\r\n dragging = 1;\r\n broadcastResize();\r\n }, false);\r\n\r\n forms[i].addEventListener(\"mouseup\", function () {\r\n if (dragging === 1) {\r\n broadcastResize();\r\n }\r\n }, false);\r\n }\r\n\r\n for (var i = 0; i < forms.length; i++) {\r\n // Check all fields on submit\r\n forms[i].addEventListener('submit', function (event) {\r\n\r\n // Only run if the field is in a form to be validated\r\n if (!event.target.hasAttribute('data-validate')) return;\r\n\r\n // Get all of the form elements\r\n var fields = event.target.elements;\r\n\r\n // Validate each field\r\n // Store the first field with an error to a variable so we can bring it into focus later\r\n var error, hasErrors;\r\n for (var i = 0; i < fields.length; i++) {\r\n error = hasError(fields[i]);\r\n if (error) {\r\n showError(fields[i], error);\r\n if (!hasErrors) {\r\n hasErrors = fields[i];\r\n }\r\n }\r\n }\r\n\r\n // If there are errrors, don't submit form and focus on first element with error\r\n if (hasErrors) {\r\n event.preventDefault();\r\n hasErrors.focus();\r\n\r\n broadcastResize();\r\n }\r\n else {\r\n var submitButton = event.target.querySelector('.submit-button');\r\n submitButton.classList.add('loading');\r\n submitButton.disabled = true;\r\n }\r\n\r\n }, false);\r\n }\r\n}\r\n\r\nexport { initValidation };","import { resizeWidget, initialize, sendMessage } from \"./application\";\r\nimport { initValidation } from \"./validation\";\r\n\r\n(function handleFileComponents() {\r\n const submitBtn = document.querySelector(\"button[type='submit']\");\r\n\r\n const fileUploadComponents = document.querySelectorAll('hh-file-upload');\r\n\r\n [].forEach.call(fileUploadComponents, (element) => {\r\n element.addEventListener('fileRemoved', event => {\r\n const inputName = event.detail.inputName;\r\n\r\n const fileNodes = document.querySelectorAll(`[id^='${inputName}']`);\r\n\r\n Array.from(fileNodes).forEach(fileInput => {\r\n fileInput.value = null;\r\n });\r\n });\r\n\r\n element.addEventListener('fileUploaded', event => { \r\n const details = event.detail;\r\n\r\n // loop over keys in repsonse to set hidden inputs\r\n for (var key in details.response) {\r\n const value = details.response[key];\r\n const property = key[0].toUpperCase() + key.slice(1);\r\n let hiddenInput = document.getElementById(`${details.inputName}_${property}`);\r\n\r\n hiddenInput.value = value;\r\n }\r\n submitBtn.disabled = false;\r\n });\r\n // prevent default so we can get drop event\r\n element.addEventListener(\"dragover\", function (event) {\r\n event.preventDefault();\r\n });\r\n\r\n element.addEventListener(\"disableForm\", event => { \r\n submitBtn.disabled = event.detail.disable;\r\n })\r\n });\r\n}());\r\n\r\n\r\nfunction ready(fn) {\r\n if (\r\n document.attachEvent\r\n ? document.readyState === \"complete\"\r\n : document.readyState !== \"loading\"\r\n ) {\r\n fn();\r\n } else {\r\n document.addEventListener(\"DOMContentLoaded\", fn);\r\n }\r\n}\r\n\r\nif (window.attachEvent) {\r\n window.attachEvent(\"onload\", resizeWidget);\r\n} else {\r\n if (window.onload) {\r\n var curronload = window.onload;\r\n var newonload = function(evt) {\r\n curronload(evt);\r\n resizeWidget(evt);\r\n };\r\n window.onload = newonload;\r\n } else {\r\n window.onload = resizeWidget;\r\n }\r\n}\r\n\r\n(function() {\r\n if (typeof window.CustomEvent === \"function\") return false;\r\n\r\n function CustomEvent(event, params) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent(\"CustomEvent\");\r\n evt.initCustomEvent(\r\n event,\r\n params.bubbles,\r\n params.cancelable,\r\n params.detail\r\n );\r\n return evt;\r\n }\r\n\r\n CustomEvent.prototype = window.Event.prototype;\r\n\r\n window.CustomEvent = CustomEvent;\r\n})();\r\n\r\nObject.defineProperty(Element.prototype, \"dataset\", {\r\n get: function() {\r\n var element = this;\r\n var attributes = this.attributes;\r\n var map = {};\r\n\r\n for (var i = 0; i < attributes.length; i++) {\r\n var attribute = attributes[i];\r\n\r\n if (\r\n attribute &&\r\n attribute.name &&\r\n /^data-\\w[\\w\\-]*$/.test(attribute.name)\r\n ) {\r\n var name = attribute.name;\r\n var value = attribute.value;\r\n\r\n var propName = name.substr(5).replace(/-./g, function(prop) {\r\n return prop.charAt(1).toUpperCase();\r\n });\r\n\r\n Object.defineProperty(map, propName, {\r\n enumerable: this.enumerable,\r\n get: function() {\r\n return this.value;\r\n }.bind({ value: value || \"\" }),\r\n set: function setter(name, value) {\r\n if (typeof value !== \"undefined\") {\r\n this.setAttribute(name, value);\r\n } else {\r\n this.removeAttribute(name);\r\n }\r\n }.bind(element, name)\r\n });\r\n }\r\n }\r\n\r\n return map;\r\n }\r\n});\r\n\r\nfunction addBackListener() {\r\n var backButton = document.querySelector('.back-link');\r\n\r\n if (backButton) {\r\n backButton.addEventListener('click', function (e) {\r\n var backUrl = e.currentTarget.href;\r\n backUrl = backUrl.toLowerCase();\r\n if (!(backUrl.indexOf(\"hirehive.com\") >= 0 || backUrl.indexOf(\"localhost:44314\") >= 0)) {\r\n e.preventDefault();\r\n sendMessage(\"goBackToList\", null);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction addResizeListener() {\r\n if (window.addEventListener) {\r\n window.addEventListener(\"resize\", resizeWidget, false);\r\n } else if (window.attachEvent) {\r\n window.attachEvent(\"resize\", resizeWidget);\r\n }\r\n}\r\n\r\nready(initialize);\r\nresizeWidget();\r\nready(resizeWidget);\r\nsetTimeout(resizeWidget, 5000);\r\nready(addBackListener);\r\nready(addResizeListener);\r\n\r\ninitValidation();\r\n\r\nif (window.addEventListener) {\r\n window.addEventListener(\"hh-resize\", resizeWidget, false);\r\n} else if (window.attachEvent) {\r\n window.attachEvent(\"hh-resize\", resizeWidget);\r\n}\r\n\r\nconst resetFormIfNeeded = event => {\r\n if (window.__modelStateCount && window.__modelStateCount < 3) { \r\n const applicationForm = document.querySelector('form[name=\"ApplicationForm\"]');\r\n applicationForm.reset();\r\n }\r\n};\r\n\r\nwindow.addEventListener(\"pageshow\", resetFormIfNeeded);\r\n"],"names":["resizeWidget","el","height","style","actualHeight","document","body","offsetHeight","getComputedStyle","parseInt","marginTop","marginBottom","iframeName","window","name","parent","postMessage","action","sendMessage","jobId","url","location","href","submitBtn","fileUploadComponents","hasError","field","disabled","type","group","form","querySelectorAll","dataset","groupName","length","i","validity","valid","console","log","validationMessage","showError","error","classList","add","getElementsByName","id","label","message","getElementById","createElement","className","querySelector","parentNode","insertBefore","nextSibling","appendChild","setAttribute","innerHTML","display","visibility","broadcastResize","removeError","remove","removeAttribute","CustomEvent","event","detail","some","createEvent","initCustomEvent","dispatchEvent","ready","fn","attachEvent","readyState","addEventListener","forEach","call","element","inputName","fileNodes","concat","Array","from","fileInput","value","details","key","response","property","toUpperCase","slice","preventDefault","disable","onload","curronload","evt","params","bubbles","cancelable","undefined","prototype","Event","Object","defineProperty","Element","get","attributes","this","map","attribute","test","propName","substr","replace","prop","charAt","enumerable","bind","set","messageReceived","e","data","newListUrl","listUrl","__action","setTimeout","backButton","backUrl","currentTarget","toLowerCase","indexOf","forms","textAreas","j","target","hasAttribute","dragging","hasErrors","fields","elements","focus","submitButton","initValidation","__modelStateCount","reset"],"mappings":"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"}