@@ -9,6 +9,37 @@ const mobileCurrentImageInfoSpan = document.getElementById('mobileCurrentImageIn
99const mobileCurrentRowSpan = document . getElementById ( 'mobileCurrentRow' ) ;
1010const mobileCurrentColumnSpan = document . getElementById ( 'mobileCurrentColumn' ) ;
1111const 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+
1243let currentRowIndex = 0 ;
1344let navbarVisible = true ;
1445
@@ -19,9 +50,17 @@ const toggleBorderSwitch = document.getElementById('toggleBorder') || { addEvent
1950toggleFitSwitch . checked = false ;
2051toggleBorderSwitch . 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
2361const mobileToggleFitSwitch = document . querySelector ( '#mobileToggleFit' ) || { addEventListener : ( ) => { } } ;
2462const mobileToggleBorderSwitch = document . getElementById ( 'mobileToggleBorder' ) || { addEventListener : ( ) => { } } ;
63+ mobileToggleFitSwitch . checked = toggleFitSwitch . checked ; // Sync with desktop toggle
2564
2665// Initialize scroll behavior with proper overflow handling
2766const 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
483530updateDisplay ( ) ;
484531updateNavigation ( ) ;
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