Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion assets/js/litespeed-cache-admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,18 @@ function litespeed_init_dark_mode() {
// Only add toggle on LiteSpeed pages
if (window.location.search.indexOf('page=litespeed') === -1) return;

// Mirror the saved preference into a cookie so PHP can stamp the body class
// on first paint (prevents the dark flash when localStorage says "light").
function litespeed_set_dark_cookie(value) {
var base = 'litespeed-dark-preference=' + (value || '') + '; path=/; SameSite=Lax';
document.cookie = base + '; max-age=' + (value ? 31536000 : 0);
}
// Back-fill the cookie for existing users whose preference is still localStorage-only.
var _savedPref = localStorage.getItem('litespeed-dark-preference');
if (_savedPref && document.cookie.indexOf('litespeed-dark-preference=') === -1) {
litespeed_set_dark_cookie(_savedPref);
}

// Create toggle button
var toggleBtn = document.createElement('button');
toggleBtn.className = 'litespeed-dark-mode-toggle';
Expand Down Expand Up @@ -351,8 +363,11 @@ function litespeed_init_dark_mode() {
// Toggle and store only if different from browser preference
if (!currentlyDark === prefersDark) {
localStorage.removeItem('litespeed-dark-preference');
litespeed_set_dark_cookie('');
} else {
localStorage.setItem('litespeed-dark-preference', currentlyDark ? 'light' : 'dark');
var newPref = currentlyDark ? 'light' : 'dark';
localStorage.setItem('litespeed-dark-preference', newPref);
litespeed_set_dark_cookie(newPref);
}

applyDarkMode();
Expand Down
8 changes: 8 additions & 0 deletions src/admin-display.cls.php
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,14 @@ function ( $footer_text ) {
if ( $screen && in_array( $screen->id, [ 'settings_page_litespeed-cache-options', 'toplevel_page_litespeed' ], true ) ) {
$classes .= ' litespeed-cache_page_litespeed';
}
// Stamp the dark/light override server-side from the cookie set by admin JS,
// so the stylesheet picks the right mode on first paint (no FOUC).
if ( ! empty( $_COOKIE['litespeed-dark-preference'] ) ) {
$pref = sanitize_key( wp_unslash( $_COOKIE['litespeed-dark-preference'] ) );
if ( 'dark' === $pref || 'light' === $pref ) {
$classes .= ' litespeed-' . $pref . 'mode';
}
}
return $classes;
} );
} );
Expand Down