99 lines
3.6 KiB
JavaScript
99 lines
3.6 KiB
JavaScript
/**
|
|
* Логика записи визитов пользователя в cookies.
|
|
* Отслеживает последние посещения страниц с ценовой выдачей.
|
|
*
|
|
* Используемые данные из HTML:
|
|
* - data-current-url: текущий URL страницы
|
|
* - data-address: адрес здания
|
|
* - data-apart: тип квартиры
|
|
*
|
|
* Сохраняет в куку 'LastVisit' максимум 3 последних визита в формате JSON.
|
|
*/
|
|
|
|
function trackUserVisit(currentUrl, address, apart) {
|
|
// Функция для получения значения куки по имени
|
|
function getCookieValue(name) {
|
|
try {
|
|
if (document.cookie) {
|
|
const cookies = document.cookie.split('; ');
|
|
for (let cookie of cookies) {
|
|
const [cookieName, cookieValue] = cookie.split('=');
|
|
if (cookieName === name) {
|
|
return decodeURIComponent(cookieValue);
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.warn('Ошибка при чтении куки:', e);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Функция для установки куки с заданным сроком жизни
|
|
function setCookie(name, value, maxAge) {
|
|
try {
|
|
const cookieValue = encodeURIComponent(value);
|
|
let cookieString = `${name}=${cookieValue}; path=/`;
|
|
if (maxAge) {
|
|
cookieString += `; max-age=${maxAge}`;
|
|
}
|
|
document.cookie = cookieString;
|
|
} catch (e) {
|
|
console.warn('Ошибка при установке куки:', e);
|
|
}
|
|
}
|
|
|
|
// Получаем последние визиты из куки (если есть)
|
|
let lastVisits = [];
|
|
const cookieValue = getCookieValue('LastVisit');
|
|
if (cookieValue) {
|
|
try {
|
|
lastVisits = JSON.parse(cookieValue);
|
|
} catch (e) {
|
|
console.warn('Ошибка при разборе JSON из куки LastVisit:', e);
|
|
lastVisits = [];
|
|
}
|
|
}
|
|
|
|
// Создаём новый item посещения с текущей информацией
|
|
const newItem = {
|
|
LastURL: currentUrl,
|
|
LastAddress: address,
|
|
LastApart: apart,
|
|
Time: performance.now() // используем performance.now() как аналог time.perf_counter() в Python
|
|
};
|
|
|
|
// Добавляем новый item в начало списка
|
|
lastVisits.unshift(newItem);
|
|
|
|
// Оставляем максимум 3 последних записи
|
|
lastVisits = lastVisits.slice(0, 4);
|
|
|
|
// Упаковываем в JSON (JSON.stringify без пробелов для компактности)
|
|
const jsonData = JSON.stringify(lastVisits);
|
|
|
|
// Устанавливаем куки на 91 день (7862400 секунд)
|
|
setCookie('LastVisit', jsonData, 7862400);
|
|
}
|
|
|
|
/**
|
|
* Инициализация отслеживания при загрузке документа.
|
|
* Ищет элемент с атрибутами data-current-url, data-address, data-apart
|
|
* и вызывает trackUserVisit с полученными значениями.
|
|
*/
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Ищем элемент со встроенными данными (например, скрытый div в шаблоне)
|
|
const trackingElement = document.querySelector('[data-current-url]');
|
|
|
|
if (trackingElement) {
|
|
const currentUrl = trackingElement.getAttribute('data-current-url');
|
|
const address = trackingElement.getAttribute('data-address');
|
|
const apart = trackingElement.getAttribute('data-apart');
|
|
|
|
if (currentUrl && address && apart) {
|
|
trackUserVisit(currentUrl, address, apart);
|
|
}
|
|
}
|
|
});
|
|
|