/
maxxon
/
web-static-labs
Обзор
Документация
Войти
/
maxxon
/
web-static-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
html/lab6/task2/script.js
162 строки
6 KB
Dasha_10
изменения
05 ноя 2025, 10:24
05 ноя 2025, 10:24
7d88f7e
Код
Авторство
О чём код?
const btnAdd = document.querySelector("button[name=addCookie]"); const btnRemove = document.querySelector("button[name=removeCookie]"); const btnReset = document.querySelector("button[name=resetPreferences]"); const input = document.querySelector("input[name=userName]"); const cookieBanner = document.getElementById('cookieBanner'); const acceptCookies = document.getElementById('acceptCookies'); const rejectCookies = document.getElementById('rejectCookies'); const customizeCookies = document.getElementById('customizeCookies'); const cookieModal = document.getElementById('cookieModal'); const savePreferences = document.getElementById('savePreferences'); const cancelPreferences = document.getElementById('cancelPreferences'); // Функция для получения значения cookie по имени function getCookie(name) { const cookies = document.cookie.split("; "); for (const cookie of cookies) { const [key, value] = cookie.split("="); if (key == name) { return decodeURIComponent(value); } } return null; } // Функция для установки cookie function setCookie(name, value, days = 30) { const d = new Date(); d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000)); const expires = "expires=" + d.toUTCString(); document.cookie = `${name}=${encodeURIComponent(value)};${expires};path=/`; } // Функция для удаления cookie function removeCookie(name) { document.cookie = `${name}=;expires=${new Date(0).toUTCString()};path=/`; } // Проверяем, было ли уже принято решение по cookie function checkCookiePreferences() { const cookieDecision = getCookie('cookieDecision'); if (cookieDecision === 'accepted') { // Пользователь принял cookie - скрываем баннер cookieBanner.classList.add('hidden'); loadUserPreferences(); } else if (cookieDecision === 'rejected') { // Пользователь отказался от cookie - скрываем баннер и удаляем ненужные cookie cookieBanner.classList.add('hidden'); removeNonEssentialCookies(); } else { // Решение еще не принято - показываем баннер cookieBanner.classList.remove('hidden'); } } // Загрузка пользовательских предпочтений function loadUserPreferences() { const savedName = getCookie('userName'); if (savedName) { input.value = savedName; } } // Удаление необязательных cookie при отказе function removeNonEssentialCookies() { removeCookie('userName'); removeCookie('preferences'); removeCookie('analytics'); input.value = ""; // Очищаем поле ввода } // Обработчик для кнопки "Добавить имя" btnAdd.addEventListener("click", function () { const cookieDecision = getCookie('cookieDecision'); if (cookieDecision !== 'accepted') { alert("Для сохранения данных необходимо принять использование cookie"); return; } const userName = input.value.trim(); if (!userName) { alert("Введите имя!"); return; } setCookie('userName', userName, 30); alert("Имя сохранено в cookie!"); }); // Обработчик для кнопки "Удалить имя" btnRemove.addEventListener("click", function () { removeCookie('userName'); input.value = ""; alert("Имя удалено из cookie!"); }); // Обработчик для кнопки "Сбросить настройки" btnReset.addEventListener("click", function () { removeCookie('cookieDecision'); removeCookie('preferences'); removeCookie('analytics'); cookieBanner.classList.remove('hidden'); alert("Настройки cookie сброшены. Вы можете сделать новый выбор."); }); // Принятие всех cookie acceptCookies.addEventListener("click", function () { setCookie('cookieDecision', 'accepted', 365); setCookie('preferences', 'true', 365); setCookie('analytics', 'true', 365); cookieBanner.classList.add('hidden'); alert("Спасибо! Cookie приняты. Теперь вы можете сохранять данные."); }); // Полный отказ от cookie rejectCookies.addEventListener("click", function () { setCookie('cookieDecision', 'rejected', 365); removeNonEssentialCookies(); cookieBanner.classList.add('hidden'); alert("Вы отказались от использования cookie. Некоторые функции могут быть недоступны."); }); // Настройка cookie customizeCookies.addEventListener("click", function () { cookieModal.style.display = 'block'; }); // Сохранение настроек savePreferences.addEventListener("click", function () { const preferenceCookies = document.getElementById('preferenceCookies').checked; const analyticsCookies = document.getElementById('analyticsCookies').checked; setCookie('cookieDecision', 'custom', 365); if (preferenceCookies) { setCookie('preferences', 'true', 365); } else { removeCookie('preferences'); } if (analyticsCookies) { setCookie('analytics', 'true', 365); } else { removeCookie('analytics'); } cookieModal.style.display = 'none'; cookieBanner.classList.add('hidden'); alert("Настройки cookie сохранены!"); }); // Отмена настроек cancelPreferences.addEventListener("click", function () { cookieModal.style.display = 'none'; }); // При загрузке страницы проверяем настройки cookie window.addEventListener("DOMContentLoaded", () => { checkCookiePreferences(); });