Add vapor shell preset selection flow for host apps
This commit is contained in:
@@ -8,3 +8,8 @@ Minimal starter skeleton for a Go web app using:
|
||||
|
||||
This scaffold is intended as a starting point that host repositories can adapt.
|
||||
|
||||
Vapor shell preset integration is included:
|
||||
|
||||
- default preset via `<html data-vapor-shell="miami-sunset">`
|
||||
- runtime override via `?vapor_shell=<preset-id>`
|
||||
- persisted selection via `localStorage["vapor_shell"]`
|
||||
|
||||
@@ -1,2 +1,65 @@
|
||||
document.documentElement.classList.add("js");
|
||||
(() => {
|
||||
const root = document.documentElement;
|
||||
const storageKey = "vapor_shell";
|
||||
const queryKey = "vapor_shell";
|
||||
const fallbackPreset = "miami-sunset";
|
||||
const allowed = new Set([
|
||||
"miami-sunset",
|
||||
"neon-grid",
|
||||
"laser-flamingo",
|
||||
"synth-lagoon",
|
||||
"mall-soft",
|
||||
"hologram-sky",
|
||||
"peach-drive",
|
||||
"ultraviolet-plaza",
|
||||
"cyber-mint",
|
||||
]);
|
||||
|
||||
const normalizePreset = (value) => {
|
||||
const trimmed = (value || "").trim().toLowerCase();
|
||||
if (!trimmed || !allowed.has(trimmed)) {
|
||||
return "";
|
||||
}
|
||||
return trimmed;
|
||||
};
|
||||
|
||||
const setPreset = (value) => {
|
||||
const preset = normalizePreset(value);
|
||||
if (!preset) {
|
||||
return false;
|
||||
}
|
||||
root.setAttribute("data-vapor-shell", preset);
|
||||
return true;
|
||||
};
|
||||
|
||||
root.classList.add("js");
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
const fromQuery = normalizePreset(url.searchParams.get(queryKey));
|
||||
if (fromQuery) {
|
||||
setPreset(fromQuery);
|
||||
try {
|
||||
window.localStorage.setItem(storageKey, fromQuery);
|
||||
} catch (_err) {
|
||||
// Keep behavior deterministic even when storage is blocked.
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const fromMarkup = normalizePreset(root.getAttribute("data-vapor-shell"));
|
||||
if (fromMarkup) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const fromStorage = normalizePreset(window.localStorage.getItem(storageKey));
|
||||
if (fromStorage) {
|
||||
setPreset(fromStorage);
|
||||
return;
|
||||
}
|
||||
} catch (_err) {
|
||||
// Fallback handled below.
|
||||
}
|
||||
|
||||
setPreset(fallbackPreset);
|
||||
})();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{{ define "base.html" }}
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<html lang="en" data-vapor-shell="miami-sunset">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
@@ -19,4 +19,3 @@
|
||||
</body>
|
||||
</html>
|
||||
{{ end }}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user