Only set hardcoded class on direct ?style requests; otherwise apply
client-side so cached pages are updated correctly.
} or warn "Unable to create style cookie: $@";
}
} or warn "Unable to create style cookie: $@";
}
- $style ||= $styles{$_} for $cookie{style} || ();
+ $style ||= $styles{$_} for $cookie{style} || ();
$style ||= $avail[0];
return $setstyle;
}
$style ||= $avail[0];
return $setstyle;
}
+function setstyle(name, state = true) {
+ document.documentElement.classList.toggle('s-'+name, state);
+}
+
- docroot = document.documentElement;
- if (docroot.className) {
+ const cookies = new Map(
+ document.cookie.split(';').map(v => v.trim().split('=', 2))
+ );
+ if ((pref = cookies.get('style'))) {
+ setstyle(pref);
- ['s-mono', '(monochrome)'],
- ['s-dark', '(prefers-color-scheme: dark)'],
- ['s-circus', '(prefers-contrast: more)'],
+ ['mono', '(monochrome)'],
+ ['dark', '(prefers-color-scheme: dark)'],
+ ['circus', '(prefers-contrast: more)'],
]).forEach((q,c) => {
if (m = window.matchMedia(q))
]).forEach((q,c) => {
if (m = window.matchMedia(q))
- (m.onchange = e => docroot.classList.toggle(c, e.matches))(m);
+ (m.onchange = e => setstyle(c, e.matches))(m);