2 Commits
Author SHA1 Message Date
bs 30325f4071 dark mode strategy
CI / testsuite (pgsql, 8.2, ) (push) Successful in 3m52s
CI / testsuite (mysql, 8.2, ) (push) Successful in 3m51s
CI / testsuite (sqlite, 8.2, ) (push) Successful in 3m52s
CI / testsuite (mysql, 8.4, ) (push) Successful in 10m33s
CI / testsuite (pgsql, 8.4, ) (push) Successful in 9m1s
CI / testsuite (sqlite, 8.2, prefer-lowest) (push) Successful in 3m54s
Release / build (push) Successful in 14s
CI / Coding Standard & Static Analysis (push) Successful in 3m26s
CI / testsuite (sqlite, 8.4, ) (push) Successful in 10m5s
2026-08-27 02:57:25 -07:00
bs 99e01b3de3 dark mode elements inline javascript
CI / testsuite (pgsql, 8.2, ) (push) Successful in 4m4s
CI / testsuite (mysql, 8.2, ) (push) Successful in 4m23s
CI / testsuite (mysql, 8.4, ) (push) Successful in 2m50s
CI / testsuite (pgsql, 8.4, ) (push) Successful in 2m47s
CI / testsuite (sqlite, 8.4, ) (push) Successful in 2m46s
CI / testsuite (sqlite, 8.2, ) (push) Successful in 4m43s
Release / build (push) Successful in 10s
CI / testsuite (sqlite, 8.2, prefer-lowest) (push) Successful in 4m46s
CI / Coding Standard & Static Analysis (push) Successful in 3m35s
2026-08-27 02:35:47 -07:00
2 changed files with 81 additions and 0 deletions
@@ -0,0 +1,55 @@
<?php
use Cake\Core\Configure;
/**
* @var \App\View\AppView $this
*/
$strategy = Configure::read('CheeseCake.darkMode.strategy', 'class');
?>
<script>
document.addEventListener('DOMContentLoaded', function (e) {
const toggleDarkLink = document.getElementById('toggle-dark-mode');
const toggleLightLink = document.getElementById('toggle-light-mode');
const toggleAutoLink = document.getElementById('toggle-auto-mode');
if (toggleDarkLink) {
toggleDarkLink.addEventListener('click', function (e) {
e.preventDefault();
localStorage.theme = 'dark';
<?php if ($strategy === 'class') : ?>
document.documentElement.classList.add('dark');
document.documentElement.classList.remove('auto');
<?php else : ?>
document.documentElement.dataset.theme = 'dark';
<?php endif; ?>
});
}
if (toggleLightLink) {
toggleLightLink.addEventListener('click', function (e) {
e.preventDefault();
localStorage.theme = 'light';
<?php if ($strategy === 'class') : ?>
document.documentElement.classList.remove('auto');
document.documentElement.classList.remove('dark');
<?php else : ?>
document.documentElement.dataset.theme = 'light';
<?php endif; ?>
});
}
if (toggleAutoLink) {
toggleAutoLink.addEventListener('click', function (e) {
e.preventDefault();
localStorage.theme = 'auto';
<?php if ($strategy === 'class') : ?>
document.documentElement.classList.add('auto');
document.documentElement.classList.remove('dark');
<?php else : ?>
delete document.documentElement.dataset.theme;
<?php endif; ?>
});
}
})
</script>
@@ -0,0 +1,26 @@
<?php
/**
* @var \App\View\AppView $this
*/
?>
<script>
// On page load or when changing themes, best to add inline in `head` to avoid FOUC
document.documentElement.classList.toggle(
"dark",
localStorage.theme === "dark" ||
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches),
);
document.documentElement.classList.toggle(
"auto",
localStorage.theme === "auto"
);
// Whenever the user explicitly chooses light mode
// localStorage.theme = "light";
// // Whenever the user explicitly chooses dark mode
// localStorage.theme = "dark";
// // Whenever the user explicitly chooses to respect the OS preference
// localStorage.removeItem("theme");
</script>