Skip to content

Commit d354cb4

Browse files
committed
feat(comparison): ✨ store the previous view state for future vists
1 parent 84b4f31 commit d354cb4

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

static/js/compare.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,37 @@ const mobileCurrentImageInfoSpan = document.getElementById('mobileCurrentImageIn
99
const mobileCurrentRowSpan = document.getElementById('mobileCurrentRow');
1010
const mobileCurrentColumnSpan = document.getElementById('mobileCurrentColumn');
1111
const mobileTotalRowsSpan = document.getElementById('mobileTotalRows');
12+
13+
/**
14+
* Sets a cookie with the given name, value, and expiration days
15+
* @param {string} name - The name of the cookie
16+
* @param {string} value - The value to store in the cookie
17+
* @param {number} days - Number of days until the cookie expires
18+
*/
19+
function setCookie(name, value, days) {
20+
const date = new Date();
21+
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
22+
const expires = "expires=" + date.toUTCString();
23+
document.cookie = name + "=" + value + ";" + expires + ";path=/";
24+
}
25+
26+
/**
27+
* Gets a cookie value by name
28+
* @param {string} name - The name of the cookie to retrieve
29+
* @returns {string} The cookie value or empty string if not found
30+
*/
31+
function getCookie(name) {
32+
const cookieName = name + "=";
33+
const cookies = document.cookie.split(';');
34+
for (let i = 0; i < cookies.length; i++) {
35+
let cookie = cookies[i].trim();
36+
if (cookie.indexOf(cookieName) === 0) {
37+
return cookie.substring(cookieName.length, cookie.length);
38+
}
39+
}
40+
return "";
41+
}
42+
1243
let currentRowIndex = 0;
1344
let navbarVisible = true;
1445

@@ -19,9 +50,17 @@ const toggleBorderSwitch = document.getElementById('toggleBorder') || { addEvent
1950
toggleFitSwitch.checked = false;
2051
toggleBorderSwitch.checked = false;
2152

53+
// Check for saved view preference in cookie
54+
const savedViewMode = getCookie('imageViewMode');
55+
if (savedViewMode === 'original') {
56+
toggleFitSwitch.checked = true;
57+
// We'll apply this setting after the image is loaded
58+
}
59+
2260
// Mobile controls
2361
const mobileToggleFitSwitch = document.querySelector('#mobileToggleFit') || { addEventListener: () => {}};
2462
const mobileToggleBorderSwitch = document.getElementById('mobileToggleBorder') || { addEventListener: () => {} };
63+
mobileToggleFitSwitch.checked = toggleFitSwitch.checked; // Sync with desktop toggle
2564

2665
// Initialize scroll behavior with proper overflow handling
2766
const imageViewer = document.querySelector('.image-viewer');
@@ -327,6 +366,10 @@ toggleFitSwitch.addEventListener('change', (event) => {
327366
// Initially hide navbar in original size mode
328367
toggleNavbarVisibility(false);
329368
}
369+
370+
// Save preference to cookie (30 day expiration)
371+
const viewMode = isImageFit ? 'fit' : 'original';
372+
setCookie('imageViewMode', viewMode, 30);
330373

331374
// Handle cursor and scroll behavior
332375
if (isImageFit) {
@@ -380,6 +423,10 @@ mobileToggleFitSwitch.addEventListener('change', (event) => {
380423
// Initially hide navbar in original size mode
381424
toggleNavbarVisibility(false);
382425
}
426+
427+
// Save preference to cookie (30 day expiration)
428+
const viewMode = isImageFit ? 'fit' : 'original';
429+
setCookie('imageViewMode', viewMode, 30);
383430

384431
// Handle cursor and scroll behavior
385432
if (isImageFit) {
@@ -482,3 +529,16 @@ function generateBBCode() {
482529
// Initialize display
483530
updateDisplay();
484531
updateNavigation();
532+
533+
// Apply saved view mode preference after initialization
534+
document.addEventListener('DOMContentLoaded', () => {
535+
const savedViewMode = getCookie('imageViewMode');
536+
if (savedViewMode === 'original') {
537+
// Apply original size mode
538+
currentImage.classList.remove('fit');
539+
imageViewer.classList.remove('fit-mode');
540+
toggleFitSwitch.checked = true;
541+
mobileToggleFitSwitch.checked = true;
542+
currentImage.style.cursor = 'move';
543+
}
544+
});

0 commit comments

Comments
 (0)