1(function () { 2 'use strict'; 3 4 function setStatus(form, message, ok) { 5 var status = form.parentElement.querySelector('.lead-form-message'); 6 if (!status) { 7 status = document.createElement('div'); 8 status.className = 'lead-form-message'; 9 status.setAttribute('role', 'status'); 10 status.setAttribute('aria-live', 'polite'); 11 form.insertAdjacentElement('afterend', status); 12 } 13 status.textContent = message; 14 status.classList.toggle('is-success', ok); 15 status.classList.toggle('is-error', !ok); 16 } 17 18 document.querySelectorAll('form[data-lead-form]').forEach(function (form) { 19 form.addEventListener('submit', async function (event) { 20 event.preventDefault(); 21 22 var submit = form.querySelector('[type="submit"]'); 23 if (submit) submit.disabled = true; 24 setStatus(form, 'ÐÑпÑавлÑем заÑвкÑâ¦', true); 25 26 try { 27 var response = await fetch(form.action, { 28 method: 'POST', 29 body: new FormData(form), 30 headers: { 31 'Accept': 'application/json', 32 'X-Requested-With': 'XMLHttpRequest' 33 } 34 }); 35 var data = await response.json(); 36 if (!response.ok || !data.ok) throw new Error(data.message || 'Ðе ÑдалоÑÑ Ð¾ÑпÑавиÑÑ Ð·Ð°ÑвкÑ.'); 37 38 setStatus(form, data.message, true); 39 var source = form.querySelector('[name="source"]'); 40 var leadSource = source ? source.value : 'website'; 41 form.reset(); 42 43 window.dataLayer = window.dataLayer || []; 44 window.dataLayer.push({event: 'lead_form_success', lead_source: leadSource}); 45 if (typeof window.ym === 'function') { 46 window.ym(48255089, 'reachGoal', 'lead_form_success', {source: leadSource}); 47 } 48 } catch (error) { 49 setStatus(form, error.message || 'Ðе ÑдалоÑÑ Ð¾ÑпÑавиÑÑ Ð·Ð°ÑвкÑ. ÐопÑобÑйÑе еÑÑ Ñаз.', false); 50 } finally { 51 if (submit) submit.disabled = false; 52 } 53 }); 54 }); 55}());
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.