1(function () { 2 function resolveScrollTarget(id) { 3 if (!id) { 4 return null; 5 } 6 7 return document.getElementById(id) || document.querySelector('.' + id); 8 } 9 10 function smoothScrollTo(id) { 11 var target = resolveScrollTarget(id); 12 if (!target) { 13 return; 14 } 15 16 target.scrollIntoView({ 17 behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', 18 block: 'start' 19 }); 20 } 21 22 document.addEventListener('click', function (event) { 23 var trigger = event.target.closest('[data-scroll-to]'); 24 if (!trigger) { 25 return; 26 } 27 28 event.preventDefault(); 29 smoothScrollTo(trigger.getAttribute('data-scroll-to')); 30 }); 31 32 var UTM_STORAGE_KEY = 'mrd_utm'; 33 34 // ÐеÑки беÑÑм из адÑеÑа ÑекÑÑей ÑÑÑаниÑÑ, а еÑли Ð¸Ñ Ñам Ð½ÐµÑ â из ÑÐ¾Ñ ÑанÑннÑÑ 35 // Ñанее, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ не ÑеÑÑлиÑÑ Ð¿Ñи пеÑÐµÑ Ð¾Ð´Ð°Ñ Ð²Ð½ÑÑÑи ÑайÑа 36 function collectVisitorUtm() { 37 var stored = {}; 38 try { 39 stored = JSON.parse(window.sessionStorage.getItem(UTM_STORAGE_KEY)) || {}; 40 } catch (error) { 41 stored = {}; 42 } 43 44 var current = {}; 45 new URLSearchParams(window.location.search).forEach(function (value, key) { 46 var name = key.toLowerCase(); 47 if (name.indexOf('utm_') === 0 && value) { 48 current[name] = value; 49 } 50 }); 51 52 if (!Object.keys(current).length) { 53 return stored; 54 } 55 56 try { 57 window.sessionStorage.setItem(UTM_STORAGE_KEY, JSON.stringify(current)); 58 } catch (error) { 59 // пÑиваÑнÑй Ñежим бÑаÑзеÑа â меÑки живÑÑ ÑолÑко в ÑÐ°Ð¼ÐºÐ°Ñ ÑекÑÑей ÑÑÑаниÑÑ 60 } 61 62 return current; 63 } 64 65 var visitorUtm = collectVisitorUtm(); 66 67 function withVisitorUtm(url) { 68 var target; 69 try { 70 target = new URL(url, window.location.href); 71 } catch (error) { 72 return url; 73 } 74 75 Object.keys(visitorUtm).forEach(function (name) { 76 if (!target.searchParams.has(name)) { 77 target.searchParams.set(name, visitorUtm[name]); 78 } 79 }); 80 81 return target.toString(); 82 } 83 84 // ÐаÑÑоÑка каÑалога Ñеликом обÑÑнÑÑа в <a>, поÑÑÐ¾Ð¼Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´ делаем вÑÑÑнÑÑ 85 function goToAiDesign(event) { 86 var trigger = event.target.closest('[data-ai-design-url]'); 87 if (!trigger) { 88 return; 89 } 90 91 var url = trigger.getAttribute('data-ai-design-url'); 92 if (!url) { 93 return; 94 } 95 96 event.preventDefault(); 97 event.stopPropagation(); 98 99 url = withVisitorUtm(url); 100 101 if (trigger.getAttribute('data-ai-design-target') === '_blank') { 102 window.open(url, '_blank', 'noopener,noreferrer'); 103 return; 104 } 105 106 window.location.href = url; 107 } 108 109 document.addEventListener('click', goToAiDesign); 110 111 document.addEventListener('keydown', function (event) { 112 if (event.key === 'Enter' || event.key === ' ') { 113 goToAiDesign(event); 114 } 115 }); 116})();
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.