Files
2022_oknardia/public/static/js/track_user_visit.js

99 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Логика записи визитов пользователя в 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);
}
}
});