Help for web.nav.style_selector_form
Sample CLI
gway web.nav style-selector-form
Full Code
def style_selector_form(all_styles, selected_style, cookies_enabled, cookies_accepted, project):
options = []
for src, fname in all_styles:
label = fname[:-4].upper()
label = f"GLOBAL: {label}" if src == "global" else f"{src.upper()}: {label}"
selected = " selected" if fname == selected_style else ""
options.append(f'<option value="{fname}"{selected}>{label}</option>')
info = ""
if cookies_enabled and not cookies_accepted:
info = "<p><b><a href='/cookies/cookie-jar'>Accept cookies to save your style preference.</a></b></p>"
# No JS redirect actually needed.
if cookies_enabled and cookies_accepted:
return f"""
{info}
<form method="post" action="/nav/style-switcher" class="style-form" style="margin-bottom: 0.5em">
<select id="css-style" name="css" class="style-selector" style="width:100%" onchange="this.form.submit()">
{''.join(options)}
</select>
<noscript><button type="submit">Set</button></noscript>
</form>
"""
else:
# Preview-only (no saving)
return f"""
{info}
<select id="css-style" name="css" class="style-selector" style="width:100%" onchange="styleSelectChanged(this)">
{''.join(options)}
</select>
<script>
function styleSelectChanged(sel) {{
var val = sel.value;
var url = new URL(window.location.href);
url.searchParams.set('css', val);
window.location.href = url.toString();
}}
</script>
"""