{"mappings":"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","sources":["","src/partials/js/demoModal.js"],"sourcesContent":["(function(window1) {\n const showDemoButtons = document.querySelectorAll(\".showDemo\");\n const demoModal = document.getElementById(\"demoModal\");\n const content = demoModal.querySelector(\".content\");\n const closeIcon = content.querySelector(\".text svg\");\n const form = content.querySelector(\"form\");\n const okButton = content.querySelector(\".ok\");\n const button = form.getElementsByTagName(\"button\")[0];\n const inputs = form.querySelectorAll(\"input:not([type=hidden]\");\n const api = form.action;\n const validationRules = {\n name: /.{2,}/g,\n email: /.*@.*\\..*/g,\n phone: /.{2,}/g,\n project: /.{2,}/g,\n comment: /.?/g\n };\n showDemoButtons.forEach((item)=>{\n item.onclick = (e)=>{\n e.preventDefault();\n demoModal.style.display = \"flex\";\n window1?.dataLayer?.push({\n event: \"request_demo_form_view\"\n });\n };\n });\n content.onmousedown = (e)=>{\n e.stopPropagation();\n };\n [\n okButton,\n demoModal,\n closeIcon\n ].forEach((item)=>{\n item.onmousedown = ()=>{\n content.classList.remove(\"success\");\n demoModal.style.display = \"none\";\n };\n });\n Array.prototype.last = function() {\n return this[this.length - 1];\n };\n const isEmailValid = (email, rule)=>{\n const notCorporateDomains = [\n \"yandex.ru\",\n \"yandex.kz\",\n \"yandex.by\",\n \"yandex.com\",\n \"ya.ru\",\n \"narod.ru\",\n \"mail.ru\",\n \"mail.com\",\n \"inbox.ru\",\n \"list.ru\",\n \"bk.ru\",\n \"internet.ru\",\n \"rambler.ru\",\n \"rambler.ua\",\n \"lenta.ru\",\n \"autorambler.ru\",\n \"myrambler.ru\",\n \"ro.ru\",\n \"gmail.com\",\n \"gmail.ru\",\n \"googlemail,com\",\n \"yahoo.com\",\n \"aol.com\",\n \"comcast.net\",\n \"hotmail.com\",\n \"outlook.com\",\n \"icloud.com\"\n ];\n return !!email.match(rule) && !notCorporateDomains.includes(email.split(\"@\").last().replaceAll(\" \", \"\"));\n };\n const isInputValid = (input, isEmail)=>{\n const rule = validationRules[input.name];\n return isEmail ? isEmailValid(input.value, rule) : input.value.match(rule);\n };\n const validateForm = ()=>{\n let isFormValid = [];\n inputs.forEach((item)=>{\n const isValid = isInputValid(item, item.name === \"email\");\n if (isValid) isFormValid.push(true);\n else isFormValid.push(false);\n });\n return isFormValid;\n };\n const updateInputsClasses = ()=>{\n let isFormValid = [];\n inputs.forEach((item)=>{\n const isEmail = item.name === \"email\";\n const isValid = isInputValid(item, isEmail);\n const isEmailFilled = isEmail && item.value.length > 0;\n const inputWrapper = item.parentElement.parentElement;\n if (isValid) {\n inputWrapper.classList.remove(\"invalid\");\n isFormValid.push(true);\n } else {\n button.classList.add(\"invalid\");\n inputWrapper.classList.add(\"invalid\");\n isFormValid.push(false);\n }\n if (isEmailFilled) inputWrapper.classList.add(\"filled\");\n else inputWrapper.classList.remove(\"filled\");\n });\n const isAllInputsFilled = isFormValid.filter((status)=>!status).length === 1 && form.querySelector(\".email.invalid.filled\");\n if (!isAllInputsFilled) form.classList.add(\"invalid\");\n };\n button.onclick = (e)=>{\n e.preventDefault();\n const formData = [\n ...new FormData(form).entries()\n ];\n const dataObject = formData.reduce((acc, [key, val])=>({\n ...acc,\n [key]: val\n }), {\n urlUtm: document.location.href\n });\n if (validateForm().includes(false)) {\n updateInputsClasses();\n return;\n }\n inputs.forEach((input)=>{\n if (input) input.value = \"\";\n });\n content.classList.add(\"success\");\n window1?.dataLayer?.push({\n event: \"request_demo_form_send\"\n });\n Object.keys(dataObject).forEach((key)=>{\n dataObject[key] = dataObject[key].toLowerCase().replaceAll(\">\", \">\").replaceAll(\"<\", \"<\").replaceAll(\"&\", \"&\").replaceAll(\"eval\", \"eval\");\n });\n fetch(api, {\n method: \"post\",\n body: JSON.stringify(dataObject),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(()=>{\n setTimeout(()=>{\n content.classList.remove(\"success\");\n demoModal.style.display = \"none\";\n }, 5000);\n });\n };\n inputs.forEach((input)=>{\n const inputWrapper = input.parentElement.parentElement;\n input.onkeyup = ()=>{\n if (!button.classList.contains(\"invalid\")) return;\n const inputsValidationStatus = validateForm();\n const isAllInputsValid = !inputsValidationStatus.includes(false);\n const isAllInputsFilled = isAllInputsValid || inputsValidationStatus.filter((status)=>!status).length === 1 && form.querySelector(\".email.invalid.filled\");\n inputWrapper.classList.remove(\"invalid\", \"filled\");\n form.classList.remove(\"invalid\");\n form.classList.add(\"half\");\n if (isAllInputsFilled) form.classList.remove(\"half\");\n if (isAllInputsValid) button.classList.remove(\"invalid\");\n else updateInputsClasses();\n };\n });\n})(window);\n\n//# sourceMappingURL=index.b765d6fc.js.map\n","(function (window) {\n const showDemoButtons = document.querySelectorAll('.showDemo');\n const demoModal = document.getElementById('demoModal');\n const content = demoModal.querySelector('.content');\n const closeIcon = content.querySelector('.text svg');\n const form = content.querySelector('form');\n const okButton = content.querySelector('.ok');\n const button = form.getElementsByTagName('button')[0];\n const inputs = form.querySelectorAll('input:not([type=hidden]');\n const api = form.action;\n const validationRules = {\n name: /.{2,}/g,\n email: /.*@.*\\..*/g,\n phone: /.{2,}/g,\n project: /.{2,}/g,\n comment: /.?/g,\n };\n\n showDemoButtons.forEach((item) => {\n item.onclick = (e) => {\n e.preventDefault();\n demoModal.style.display = 'flex';\n window?.dataLayer?.push ({ event: 'request_demo_form_view' });\n }\n });\n\n content.onmousedown = (e) => {\n e.stopPropagation();\n };\n\n [okButton, demoModal, closeIcon].forEach((item) => {\n item.onmousedown = () => {\n content.classList.remove('success');\n demoModal.style.display = 'none';\n };\n })\n\n Array.prototype.last = function() {\n return this[this.length - 1];\n };\n\n const isEmailValid = (email, rule) => {\n const notCorporateDomains = [\n 'yandex.ru',\n 'yandex.kz',\n 'yandex.by',\n 'yandex.com',\n 'ya.ru',\n 'narod.ru',\n 'mail.ru',\n 'mail.com',\n 'inbox.ru',\n 'list.ru',\n 'bk.ru',\n 'internet.ru',\n 'rambler.ru',\n 'rambler.ua',\n 'lenta.ru',\n 'autorambler.ru',\n 'myrambler.ru',\n 'ro.ru',\n 'gmail.com',\n 'gmail.ru',\n 'googlemail,com',\n 'yahoo.com',\n 'aol.com',\n 'comcast.net',\n 'hotmail.com',\n 'outlook.com',\n 'icloud.com',\n ];\n\n return !!email.match(rule) && !notCorporateDomains.includes(email.split('@').last().replaceAll(' ', ''));\n };\n\n const isInputValid = (input, isEmail) => {\n const rule = validationRules[input.name];\n\n return isEmail ? isEmailValid(input.value, rule) : input.value.match(rule);\n };\n\n const validateForm = () => {\n let isFormValid = [];\n\n inputs.forEach((item) => {\n const isValid = isInputValid(item, item.name === 'email');\n\n if(isValid) {\n isFormValid.push(true);\n } else {\n isFormValid.push(false);\n }\n });\n\n return isFormValid;\n };\n\n const updateInputsClasses = () => {\n let isFormValid = [];\n\n inputs.forEach((item) => {\n const isEmail = item.name === 'email';\n const isValid = isInputValid(item, isEmail);\n const isEmailFilled = isEmail && item.value.length > 0;\n const inputWrapper = item.parentElement.parentElement;\n\n if (isValid) {\n inputWrapper.classList.remove('invalid');\n isFormValid.push(true);\n } else {\n button.classList.add('invalid');\n inputWrapper.classList.add('invalid');\n isFormValid.push(false);\n }\n \n if (isEmailFilled) {\n inputWrapper.classList.add('filled');\n } else {\n inputWrapper.classList.remove('filled');\n }\n });\n\n const isAllInputsFilled = isFormValid.filter((status) => !status).length === 1 && form.querySelector('.email.invalid.filled');\n\n if (!isAllInputsFilled) {\n form.classList.add('invalid');\n }\n };\n\n button.onclick = (e) => {\n e.preventDefault();\n\n const formData = [...(new FormData(form).entries())];\n const dataObject = formData.reduce((acc, [key, val]) => ({ ...acc, [key]: val }), { urlUtm: document.location.href });\n\n if (validateForm().includes(false)) {\n updateInputsClasses();\n\n return;\n }\n\n inputs.forEach((input) => {\n if (input) {\n input.value = '';\n }\n });\n\n content.classList.add('success');\n window?.dataLayer?.push ({ event:'request_demo_form_send' });\n\n Object.keys(dataObject).forEach((key) => {\n dataObject[key] = dataObject[key].toLowerCase().replaceAll('>', '>')\n .replaceAll('<', '<')\n .replaceAll('&', '&')\n .replaceAll('eval', 'eval')\n });\n\n fetch(api, {\n method: 'post',\n body: JSON.stringify(dataObject),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(() => {\n setTimeout(() => {\n content.classList.remove('success');\n demoModal.style.display = 'none';\n }, 5000);\n });\n\n };\n\n inputs.forEach((input) => {\n const inputWrapper = input.parentElement.parentElement;\n\n input.onkeyup = () => {\n if (!button.classList.contains('invalid')) {\n return;\n }\n\n const inputsValidationStatus = validateForm();\n const isAllInputsValid = !inputsValidationStatus.includes(false);\n const isAllInputsFilled = isAllInputsValid || \n (inputsValidationStatus.filter((status) => !status).length === 1 && form.querySelector('.email.invalid.filled'));\n\n inputWrapper.classList.remove('invalid', 'filled');\n form.classList.remove('invalid');\n form.classList.add('half');\n\n if (isAllInputsFilled) {\n form.classList.remove('half');\n }\n\n if (isAllInputsValid) {\n button.classList.remove('invalid');\n } else {\n updateInputsClasses();\n }\n }\n });\n})(window);"],"names":["window1","showDemoButtons","document","querySelectorAll","demoModal","getElementById","content","querySelector","closeIcon","form","okButton","button","getElementsByTagName","inputs","api","action","validationRules","name","email","phone","project","comment","forEach","item","onclick","e","preventDefault","style","display","dataLayer","push","event","onmousedown","stopPropagation","classList","remove","Array","prototype","last","length","isEmailValid","rule","match","notCorporateDomains","includes","split","replaceAll","isInputValid","input","isEmail","value","validateForm","isFormValid","isValid","updateInputsClasses","isEmailFilled","inputWrapper","parentElement","add","isAllInputsFilled","filter","status","formData","FormData","entries","dataObject","reduce","acc","key","val","urlUtm","location","href","Object","keys","toLowerCase","fetch","method","body","JSON","stringify","headers","then","setTimeout","onkeyup","contains","inputsValidationStatus","isAllInputsValid","window"],"version":3,"file":"index.b765d6fc.js.map"}