/* * Cookie consent (152-ФЗ, ст. 9). * Аналитические cookie (Яндекс Метрика): галочка в настройках установлена * по умолчанию. Явное согласие на обработку данных даётся пользователем при * подтверждении выбора; отключить аналитику можно в любой момент. */ (function () { 'use strict'; var STORAGE_KEY = 'cookieConsent'; var LEGACY_KEYS = ['cookieOk']; function readConsent() { try { var raw = localStorage.getItem(STORAGE_KEY); if (!raw) return null; var c = JSON.parse(raw); if (c && c.v === 1 && typeof c.analytics === 'boolean') return c; } catch (e) { /* localStorage недоступен — показываем баннер всегда */ } return null; } function saveConsent(analytics) { var c = { v: 1, necessary: true, analytics: !!analytics, ts: new Date().toISOString() }; try { localStorage.setItem(STORAGE_KEY, JSON.stringify(c)); LEGACY_KEYS.forEach(function (k) { localStorage.removeItem(k); }); } catch (e) { /* без localStorage баннер будет показываться при каждом визите */ } return c; } /* Аналитика загружается ТОЛЬКО после явного согласия пользователя. */ function loadAnalytics() { if (window.__ffAnalyticsLoaded) return; window.__ffAnalyticsLoaded = true; /* Яндекс Метрика: раскомментируйте и замените XXXXXXXX на номер счётчика. Скрипт выполнится только для пользователей, давших согласие. (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(XXXXXXXX, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true }); */ } function applyConsent(c) { if (c && c.analytics) loadAnalytics(); } var root; function show() { if (!root) build(); root.classList.remove('hidden'); } function hide() { if (root) root.classList.add('hidden'); } function build() { root = document.createElement('div'); root.className = 'cookie-consent hidden'; root.setAttribute('role', 'region'); root.setAttribute('aria-label', 'Настройки файлов cookie'); root.innerHTML = ''; document.body.appendChild(root); root.addEventListener('click', function (e) { var btn = e.target.closest('[data-cc]'); if (!btn) return; var action = btn.getAttribute('data-cc'); var panel = root.querySelector('[data-cc-panel]'); switch (action) { case 'all': applyConsent(saveConsent(true)); hide(); break; case 'necessary': case 'reject': saveConsent(false); hide(); break; case 'settings': panel.hidden = false; btn.hidden = true; break; case 'save': applyConsent(saveConsent(root.querySelector('#ccAnalytics').checked)); hide(); break; case 'close': panel.hidden = true; root.querySelector('[data-cc="settings"]').hidden = false; break; } }); } /* Повторный вызов баннера: ссылка/кнопка с data-cookie-settings (отзыв согласия). */ document.addEventListener('click', function (e) { var trigger = e.target.closest('[data-cookie-settings]'); if (!trigger) return; e.preventDefault(); show(); if (root) { var c = readConsent(); var cb = root.querySelector('#ccAnalytics'); if (cb && c) cb.checked = c.analytics; } }); var consent = readConsent(); if (consent) { applyConsent(consent); } else { /* Первый визит: галочка аналитических cookie стоит по умолчанию, но аналитика загружается только после явного подтверждения пользователя. */ if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', show); } else { show(); } } })();