/** * Cookie Consent Block * Управляет отображением и сохранением согласия пользователя на использование cookies */ (function() { 'use strict'; const CookieConsent = { // Конфигурация config: { storageKey: 'rifey_cookie_consent', expirationDays: 14, // 2 недели consentElementId: 'cookie-consent', acceptBtnId: 'cookie-accept', declineBtnId: 'cookie-decline' }, /** * Инициализация модуля */ init: function() { // Проверяем, дал ли пользователь согласие ранее if (!this.hasConsent()) { this.show(); this.attachEventListeners(); } }, /** * Проверка, дано ли согласие пользователя * @returns {boolean} */ hasConsent: function() { const consent = localStorage.getItem(this.config.storageKey); if (!consent) { return false; } // Проверяем, не истекла ли дата согласия const consentData = JSON.parse(consent); const expirationDate = new Date(consentData.expirationDate); const now = new Date(); if (now > expirationDate) { // Удаляем истекшее согласие localStorage.removeItem(this.config.storageKey); return false; } return consentData.accepted; }, /** * Сохранение согласия пользователя * @param {boolean} accepted - согласие принято или отклонено */ saveConsent: function(accepted) { const expirationDate = new Date(); expirationDate.setDate(expirationDate.getDate() + this.config.expirationDays); const consentData = { accepted: accepted, timestamp: new Date().toISOString(), expirationDate: expirationDate.toISOString() }; localStorage.setItem(this.config.storageKey, JSON.stringify(consentData)); }, /** * Показать блок согласия */ show: function() { const element = document.getElementById(this.config.consentElementId); if (element) { element.classList.add('active'); } }, /** * Скрыть блок согласия */ hide: function() { const element = document.getElementById(this.config.consentElementId); if (element) { element.classList.remove('active'); // Удаляем элемент после анимации setTimeout(function() { if (element.parentNode) { element.parentNode.removeChild(element); } }, 300); } }, /** * Обработчик клика на кнопку "Принять" */ onAccept: function() { this.saveConsent(true); this.hide(); // Здесь можно добавить код для инициализации аналитики или других сервисов // например: window.dataLayer = window.dataLayer || []; и т.д. }, /** * Обработчик клика на кнопку "Отклонить" */ onDecline: function() { this.saveConsent(false); // Закрываем страницу window.close(); // Если close() не сработает (из-за ограничений браузера), // перенаправляем пользователя setTimeout(function() { window.location.href = 'about:blank'; }, 100); }, /** * Присоединение обработчиков событий */ attachEventListeners: function() { const self = this; const acceptBtn = document.getElementById(this.config.acceptBtnId); const declineBtn = document.getElementById(this.config.declineBtnId); if (acceptBtn) { acceptBtn.addEventListener('click', function() { self.onAccept(); }); } if (declineBtn) { declineBtn.addEventListener('click', function() { self.onDecline(); }); } } }; /** * Инициализация при загрузке DOM */ if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { CookieConsent.init(); }); } else { CookieConsent.init(); } // Экспортируем глобально для доступа из других скриптов window.CookieConsent = CookieConsent; })();