offloaded cookie methods to cookies.js lib

This commit is contained in:
Jonas_Jones 2025-03-25 22:14:33 +01:00
parent ab73036fdb
commit 35b2781ad6
2 changed files with 106 additions and 68 deletions

94
src/lib/cookies.js Normal file
View file

@ -0,0 +1,94 @@
/**
* Functions to add the gameLock cookie
* @module cookies
*/
export function addGameLockCookie() {
document.cookie = `gameLock=;path=/;max-age=31536000`; // Cookie lasts for 1 year
}
/**
* Function to check if the gameLock cookie is present
* @returns {boolean} True if the gameLock cookie is present, false otherwise
*/
export function isGameLockCookiePresent() {
return document.cookie.split('; ').some(cookie => cookie.startsWith('gameLock='));
}
/**
* Function to delete the gameLock cookie
*/
export function deleteGameLockCookie() {
document.cookie = `gameLock=;path=/;max-age=0`;
}
/**
* @param {String} entries
* @param {String} cookieName
*/
export function saveEntriesAsCookie(entries, cookieName = 'bingoEntries') {
document.cookie = `${cookieName}=${encodeURIComponent(entries)};path=/;max-age=31536000`; // Cookie lasts for 1 year
}
/**
* Function to retrieve the entries from
* the cookie
* @param {String} cookieName
* @returns {String} The entries from the cookie
*/
export function getEntriesFromCookie(cookieName = 'bingoEntries') {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [name, value] = cookie.split('=');
if (name === cookieName) {
return decodeURIComponent(value);
}
}
return ""; // if the cookie is not found
}
/**
* Function to delete the entries cookie
* @param {String} cookieName
*/
export function deleteSavedEntriesCookie(cookieName = 'bingoEntries') {
document.cookie = `${cookieName}=;path=/;max-age=0`;
}
/**
* @param {Array<JSON>} grid
*/
export function saveGridAsCookie(grid, cookieName = 'bingoGrid') {
const jsonString = JSON.stringify(grid);
document.cookie = `${cookieName}=${encodeURIComponent(jsonString)};path=/;max-age=31536000`; // Cookie lasts for 1 year
}
/**
* Function to retrieve the grid from the cookie
* @param {String} cookieName
* @returns {Array<JSON>} the grid from the cookie
*/
export function getGridFromCookie(cookieName = 'bingoGrid') {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [name, value] = cookie.split('=');
if (name === cookieName) {
try {
console.log(JSON.parse(decodeURIComponent(value)))
return JSON.parse(decodeURIComponent(value));
} catch (error) {
console.error('Error parsing grid from cookie:', error);
}
}
}
return []; //if the cookie is not found
}
/**
* Function to delete the grid cookie
* @param {String} cookieName
*/
export function deleteSavedGridCookie(cookieName = 'bingoGrid') {
document.cookie = `${cookieName}=;path=/;max-age=0`;
deleteGameLockCookie();
}

View file

@ -4,6 +4,7 @@
import jsPDF from 'jspdf';
import { page } from '$app/stores';
import party from "party-js";
import { getGridFromCookie, saveGridAsCookie, getEntriesFromCookie, saveEntriesAsCookie, deleteSavedGridCookie, isGameLockCookiePresent, addGameLockCookie, deleteGameLockCookie } from '$lib/cookies.js';
$: queryParams = $page.url.searchParams;
$: bingocode = queryParams.get('bingo');
@ -52,72 +53,6 @@ Bingo Item 25`;
alertBackground.style.display = 'none';
}
// Function to add an empty cookie called gameLock
export function addGameLockCookie() {
document.cookie = `gameLock=;path=/;max-age=31536000`; // Cookie lasts for 1 year
}
// Function to check if the gameLock cookie is present
export function isGameLockCookiePresent() {
return document.cookie.split('; ').some(cookie => cookie.startsWith('gameLock='));
}
// Function to delete the gameLock cookie
export function deleteGameLockCookie() {
document.cookie = `gameLock=;path=/;max-age=0`;
}
// Function to save a string as a cookie
export function saveEntriesAsCookie(entries, cookieName = 'bingoEntries') {
document.cookie = `${cookieName}=${encodeURIComponent(entries)};path=/;max-age=31536000`; // Cookie lasts for 1 year
}
// Function to retrieve a string from a cookie
export function getEntriesFromCookie(cookieName = 'bingoEntries') {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [name, value] = cookie.split('=');
if (name === cookieName) {
return decodeURIComponent(value);
}
}
return null; // Return null if the cookie is not found
}
export function deleteSavedEntriesCookie(cookieName = 'bingoEntries') {
document.cookie = `${cookieName}=;path=/;max-age=0`;
}
// Function to save the nested list as a cookie
export function saveGridAsCookie(grid, cookieName = 'bingoGrid') {
const jsonString = JSON.stringify(grid);
document.cookie = `${cookieName}=${encodeURIComponent(jsonString)};path=/;max-age=31536000`; // Cookie lasts for 1 year
}
// Function to retrieve the nested list from a cookie
export function getGridFromCookie(cookieName = 'bingoGrid') {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [name, value] = cookie.split('=');
if (name === cookieName) {
try {
console.log(JSON.parse(decodeURIComponent(value)))
return JSON.parse(decodeURIComponent(value));
} catch (error) {
console.error('Error parsing grid from cookie:', error);
return null;
}
}
}
return null; // Return null if the cookie is not found
}
export function deleteSavedGridCookie(cookieName = 'bingoGrid') {
document.cookie = `${cookieName}=;path=/;max-age=0`;
deleteGameLockCookie();
}
function generateBingo() {
if (running_bingo) {
@ -238,15 +173,24 @@ Bingo Item 25`;
const gridElement = document.querySelector('.bingo-grid');
const canvas = await html2canvas(gridElement, { scale: 2 });
const imgData = canvas.toDataURL('image/png');
const padding = 40;
// Create a jsPDF instance
const pdf = new jsPDF({
orientation: 'landscape',
unit: 'pt',
format: [canvas.width, canvas.height]
format: [canvas.width + padding * 2, canvas.height + padding * 2],
});
pdf.addImage(imgData, 'PNG', 0, 0, canvas.width, canvas.height);
// Add the image to the PDF with padding
pdf.addImage(imgData, 'PNG', padding, padding, canvas.width, canvas.height);
// Save the PDF
pdf.save('bingo-grid.pdf');
}
export function deleteGridCookieOnNotPlaying() {
if (!isGameLockCookiePresent()) {
deleteSavedGridCookie();