All checks were successful
Build and Publish Docker Image / deploy (push) Successful in 1m41s
- Implement storage backend deletion, which automatically resets default storage settings and user-specific overrides when a backend is removed. - Add unit tests covering the delete action and its cleanup side effects. - Improve admin UI responsiveness, fixing table scrolling, flex wrapping, and text truncation for long storage backend names. - Update security documentation to clarify trusted proxy configurations and explain how trusted proxies are protected from automatic bans.
54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
/*
|
|
* Theme init + toggle.
|
|
*
|
|
* Loaded in <head> WITHOUT defer so the first block runs before paint and sets
|
|
* the theme attribute, avoiding a flash of the wrong theme. The choice lives in
|
|
* localStorage (no cookie, no server round-trip) and applies site-wide.
|
|
*
|
|
* CSP note: this is an external /static file, so it is allowed under
|
|
* script-src 'self'. We only toggle an attribute / class — never inject inline
|
|
* <style> — which keeps style-src 'self' happy.
|
|
*/
|
|
(function () {
|
|
var STORAGE_KEY = "warpbox-theme";
|
|
var THEMES = ["revamp", "classic", "retro", "gruvbox", "cyberpunk"];
|
|
|
|
function stored() {
|
|
try {
|
|
return localStorage.getItem(STORAGE_KEY);
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function apply(theme) {
|
|
if (THEMES.indexOf(theme) === -1) {
|
|
theme = "revamp";
|
|
}
|
|
document.documentElement.dataset.theme = theme;
|
|
return theme;
|
|
}
|
|
|
|
// Runs immediately (before paint).
|
|
var current = apply(stored() || "revamp");
|
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
var select = document.querySelector("[data-theme-select]");
|
|
if (!select) {
|
|
return;
|
|
}
|
|
|
|
// Reflect the active theme in the dropdown.
|
|
select.value = current;
|
|
|
|
select.addEventListener("change", function () {
|
|
current = apply(select.value);
|
|
try {
|
|
localStorage.setItem(STORAGE_KEY, current);
|
|
} catch (e) {
|
|
/* ignore persistence failures (private mode, etc.) */
|
|
}
|
|
});
|
|
});
|
|
})();
|