1//СобÑÑÐ¸Ñ GA4 - дополниÑелÑно к gtag-ÑобÑÑиÑм ниже (Ð¸Ñ Ð½Ðµ менÑем). 2//Ðа ÑайÑе Ð½ÐµÑ GTM: gtag.js не ÑиÑÐ°ÐµÑ Ð¾Ð±ÑекÑÑ {'event': ...} из dataLayer, поÑÑÐ¾Ð¼Ñ Ð¾ÑпÑавлÑем ÑеÑез gtag(); 3//без gtag (напÑимеÑ, еÑли его заблокиÑовали) - в dataLayer, Ð´Ð»Ñ GTM, еÑли его подклÑÑÐ°Ñ 4function pushDataLayerEvent(eventName, params){ 5 try{ 6 var data = {}; 7 params = params || {}; 8 for (var key in params) { 9 if (params.hasOwnProperty(key) && params[key] !== undefined && params[key] !== null && params[key] !== '') { 10 data[key] = params[key]; 11 } 12 } 13 if (typeof window.gtag === 'function') { 14 window.gtag('event', eventName, data); 15 return; 16 } 17 window.dataLayer = window.dataLayer || []; 18 data['event'] = eventName; 19 window.dataLayer.push(data); 20 }catch (e) { 21 console.log(e); 22 } 23} 24 25//Тип ÑоÑмÑ, кÑÑÑ Ð¸ гоÑод из ÑоÑÐ¼Ñ (еÑли еÑÑÑ). details: {form_type: 'leads', form: <form>} 26function getGoalFormParams(details, defaultFormType){ 27 var params = {'form_type': details && details.form_type ? details.form_type : defaultFormType}; 28 29 try{ 30 var form = details && details.form ? details.form : null; 31 if (form && form.querySelector) { 32 var formTypeInput = form.querySelector('[name="formType"]'); 33 if (!(details && details.form_type) && formTypeInput && formTypeInput.value) { 34 params['form_type'] = formTypeInput.value; 35 } 36 37 var courseInput = form.querySelector('[name="subjectCode"]') || form.querySelector('[name="program"]'); 38 if (courseInput && courseInput.value && courseInput.value !== '0') { 39 params['course'] = courseInput.value; 40 } 41 42 var cityInput = form.querySelector('input[name="city"]'); 43 if (cityInput && cityInput.value && cityInput.value !== '0') { 44 var cityOption = form.querySelector('[data-select-name="city"] [data-value-id="' + cityInput.value + '"]'); 45 params['city'] = cityOption && cityOption.getAttribute('data-value') ? cityOption.getAttribute('data-value') : cityInput.value; 46 } 47 } 48 }catch (e) { 49 console.log(e); 50 } 51 52 return params; 53} 54 55//ÐÑкÑÑÑие лÑбой ÑоÑÐ¼Ñ Ð¿Ð¾ кнопке [data-open-form] (кÑоме вÑбоÑа гоÑода - ÑÑо не ÑоÑма заÑвки) 56document.addEventListener('click', function (e) { 57 var opener = e.target && e.target.closest ? e.target.closest('[data-open-form]') : null; 58 if (opener && opener.getAttribute('data-open-form') !== 'cities') { 59 pushDataLayerEvent('form_open', {'form_type': opener.getAttribute('data-open-form')}); 60 } 61}, true); 62 63function toGoal(goal, action, details){ 64 try{ 65 switch(goal) { 66 case 'addLead': 67 switch (action){ 68 case 'send': 69 pushDataLayerEvent('generate_lead', getGoalFormParams(details, 'leads')); 70 71 try { 72 fbq('track', 'Lead'); 73 }catch (e) {} 74 75 gtag('event', 'лид_ÑÑел_на_плаÑÑоÑмÑ__actually_', { 'event_category': 'conversion', 'event_action': 'request_form_send', }); 76 break; 77 case 'open': 78 gtag('event', 'нажаÑие__запиÑаÑÑ_Ñебенка_на_обÑÑение', { 'event_category': 'conversion', 'event_action': 'open_lead_form', }); 79 break; 80 } 81 break; 82 case 'addLeadTimePopup': 83 switch (action){ 84 case 'send': 85 pushDataLayerEvent('generate_lead', getGoalFormParams(details, 'consult')); 86 87 try { 88 fbq('track', 'Lead'); 89 }catch (e) {} 90 91 gtag('event', 'оÑпÑавка_ÑоÑмÑ_конÑÑлÑÑаÑии_по_пÑогÑамма', { 'event_category': 'conversion', 'event_action': 'send_form_consult_programm', }); 92 break; 93 } 94 break; 95 case 'director': 96 switch (action){ 97 case 'send': 98 gtag('event', 'задаÑÑ_вопÑоÑ_диÑекÑоÑÑ__actually_', { 'event_category': 'director_mess', 'event_action': 'send_form_director', }); 99 break; 100 } 101 break; 102 case 'franchise': 103 switch (action){ 104 case 'send': 105 pushDataLayerEvent('generate_lead', getGoalFormParams(detail
105s, 'franchise')); 106 gtag('event', 'оÑпÑавка_заÑвки_на_ÑÑанÑизÑ__actually_', { 'event_category': 'callbackFormFranchise', 'event_action': 'send_form', }); 107 break; 108 } 109 break; 110 } 111 }catch (e) { 112 console.log(e); 113 } 114}
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.