Files
Ninjaserver/public/js/cookie-utils.js
2025-09-23 14:13:24 +02:00

106 lines
3.3 KiB
JavaScript

// Cookie Utility Functions
class CookieManager {
// Set a cookie
static setCookie(name, value, days = 30) {
const expires = new Date();
expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000));
document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/;SameSite=Lax`;
}
// Get a cookie
static getCookie(name) {
const nameEQ = name + "=";
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
// Delete a cookie
static deleteCookie(name) {
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`;
}
// Check if cookies are enabled
static areCookiesEnabled() {
try {
this.setCookie('test', 'test');
const enabled = this.getCookie('test') === 'test';
this.deleteCookie('test');
return enabled;
} catch (e) {
return false;
}
}
}
// Location-specific cookie functions
class LocationCookieManager {
static COOKIE_NAME = 'ninjacross_last_location';
static COOKIE_EXPIRY_DAYS = 90; // 3 months
// Save last selected location
static saveLastLocation(locationId, locationName) {
if (!locationId || !locationName) return;
const locationData = {
id: locationId,
name: locationName,
timestamp: new Date().toISOString()
};
try {
CookieManager.setCookie(
this.COOKIE_NAME,
JSON.stringify(locationData),
this.COOKIE_EXPIRY_DAYS
);
console.log('✅ Location saved to cookie:', locationName);
} catch (error) {
console.error('❌ Failed to save location to cookie:', error);
}
}
// Get last selected location
static getLastLocation() {
try {
const cookieValue = CookieManager.getCookie(this.COOKIE_NAME);
if (!cookieValue) return null;
const locationData = JSON.parse(cookieValue);
// Check if cookie is not too old (optional: 30 days max)
const cookieDate = new Date(locationData.timestamp);
const maxAge = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds
if (Date.now() - cookieDate.getTime() > maxAge) {
this.clearLastLocation();
return null;
}
return locationData;
} catch (error) {
console.error('❌ Failed to parse location cookie:', error);
this.clearLastLocation();
return null;
}
}
// Clear last location
static clearLastLocation() {
CookieManager.deleteCookie(this.COOKIE_NAME);
console.log('🗑️ Location cookie cleared');
}
// Check if location cookie exists
static hasLastLocation() {
return this.getLastLocation() !== null;
}
}
// Export for use in other scripts
window.CookieManager = CookieManager;
window.LocationCookieManager = LocationCookieManager;