(function () { 'use strict'; var config = window.BREW_ANALYTICS_CONFIG || {}; var storageKey = config.consentStorageKey || 'brew_analytics_consent'; var enabled = config.enabled !== false && config.enabled !== 'false'; var metrikaId = String(config.yandexMetrikaId || '').trim(); var appName = String(config.appName || 'site'); var loaded = false; function readConsent() { try { return window.localStorage.getItem(storageKey); } catch (_) { return null; } } function writeConsent(value) { try { window.localStorage.setItem(storageKey, value); } catch (_) {} } function loadMetrika() { if (!enabled || !metrikaId || loaded || readConsent() !== 'granted') { return; } loaded = true; window.ym = window.ym || function () { (window.ym.a = window.ym.a || []).push(arguments); }; window.ym.l = Date.now(); window.ym(Number(metrikaId), 'init', { clickmap: true, trackLinks: true, accurateTrackBounce: true, webvisor: false, }); var script = document.createElement('script'); script.async = true; script.src = 'https://mc.yandex.ru/metrika/tag.js'; document.head.appendChild(script); } function reachGoal(goal, params) { if (!enabled || !metrikaId || readConsent() !== 'granted') { return; } loadMetrika(); if (typeof window.ym === 'function') { window.ym(Number(metrikaId), 'reachGoal', goal, Object.assign({ app: appName, }, params || {})); } } function hit(url, title) { if (!enabled || !metrikaId || readConsent() !== 'granted') { return; } loadMetrika(); if (typeof window.ym === 'function') { window.ym(Number(metrikaId), 'hit', url || window.location.href, { title: title || document.title, params: { app: appName }, }); } } function consentBanner() { if (!enabled || !metrikaId || readConsent()) { return; } var banner = document.createElement('div'); banner.id = 'brew-cookie-consent'; banner.style.cssText = [ 'position:fixed', 'left:16px', 'right:16px', 'bottom:16px', 'z-index:2147483647', 'max-width:760px', 'margin:auto', 'padding:16px', 'border-radius:16px', 'background:#0f172a', 'color:#e2e8f0', 'box-shadow:0 16px 48px rgba(15,23,42,.28)', 'font:14px/1.45 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif', ].join(';'); banner.innerHTML = [ '
Аналитика и cookies
', '
Мы используем Яндекс.Метрику, чтобы понимать, какие разделы BrewMasters.team помогают пользователям. Аналитика включится только после согласия.
', '
', '', '', 'Политика и cookies', '
', ].join(''); banner.addEventListener('click', function (event) { var target = event.target; if (!target || !target.getAttribute) return; var value = target.getAttribute('data-brew-consent'); if (!value) return; writeConsent(value); banner.remove(); if (value === 'granted') { loadMetrika(); hit(window.location.href, document.title); } }); document.body.appendChild(banner); } function captureUtm() { try { var params = new URLSearchParams(window.location.search); var payload = {}; ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'].forEach(function (key) { var value = params.get(key); if (value) payload[key] = value.substring(0, 160); }); if (Object.keys(payload).length > 0) { payload.landing_url = window.location.href.substring(0, 500); payload.captured_at = new Date().toISOString(); window.localStorage.setItem('brew_attribution', JSON.stringify(payload)); } } catch (_) {} } document.addEventListener('click', function (event) { var node = event.target; while (node && node !== document) { if (node.getAttribute && node.getAttribute('data-analytics-goal')) { reachGoal(node.getAttribute('data-analytics-goal'), { href: node.href || undefined, text: (node.textContent || '').trim().substring(0, 80), }); return; } node = node.parentNode; } }); window.BrewAnalytics = { consent: readConsent, grantConsent: function () { writeConsent('granted'); loadMetrika(); }, denyConsent: function () { writeConsent('denied'); }, hit: hit, reachGoal: reachGoal, setUser: function (userId) { if (typeof window.ym === 'function' && metrikaId && userId) { window.ym(Number(metrikaId), 'userParams', { UserID: String(userId) }); } }, clearUser: function () {}, attribution: function () { try { return window.localStorage.getItem('brew_attribution') || ''; } catch (_) { return ''; } }, }; captureUtm(); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { consentBanner(); loadMetrika(); }); } else { consentBanner(); loadMetrika(); } })();