add barebones theme switcher

This commit is contained in:
2025-08-17 01:36:55 +03:00
parent fc80823713
commit 89817340c9
4 changed files with 20 additions and 2 deletions

View File

@ -2,7 +2,7 @@ from flask import Flask, session
from dotenv import load_dotenv from dotenv import load_dotenv
from .models import Avatars, Users, PostHistory, Posts from .models import Avatars, Users, PostHistory, Posts
from .auth import digest from .auth import digest
from .routes.users import is_logged_in, get_active_user from .routes.users import is_logged_in, get_active_user, get_prefers_theme
from .routes.threads import get_post_url from .routes.threads import get_post_url
from .constants import ( from .constants import (
PermissionLevel, permission_level_string, PermissionLevel, permission_level_string,
@ -140,6 +140,7 @@ def create_app():
def inject_funcs(): def inject_funcs():
return { return {
'get_post_url': get_post_url, 'get_post_url': get_post_url,
'get_prefers_theme': get_prefers_theme,
} }
@app.template_filter("ts_datetime") @app.template_filter("ts_datetime")

View File

@ -165,6 +165,12 @@ def admin_only(*args, **kwargs):
return decorator return decorator
def get_prefers_theme():
if not 'theme' in session:
return 'style'
return session['theme']
@bp.get("/log_in") @bp.get("/log_in")
@redirect_if_logged_in(".page", username = lambda: get_active_user().username) @redirect_if_logged_in(".page", username = lambda: get_active_user().username)
def log_in(): def log_in():
@ -288,6 +294,12 @@ def settings_form(username):
# we silently ignore the passed username # we silently ignore the passed username
# and grab the correct user from the session # and grab the correct user from the session
user = get_active_user() user = get_active_user()
theme = request.form.get('theme', default='default')
if theme == 'default':
if 'theme' in session:
session.pop('theme')
else:
session['theme'] = theme
topic_sort_by = request.form.get('topic_sort_by', default='activity') topic_sort_by = request.form.get('topic_sort_by', default='activity')
if topic_sort_by == 'activity' or topic_sort_by == 'thread': if topic_sort_by == 'activity' or topic_sort_by == 'thread':
sort_by = session['sort_by'] = topic_sort_by sort_by = session['sort_by'] = topic_sort_by

View File

@ -8,7 +8,7 @@
{% else %} {% else %}
<title>{{config.SITE_NAME}}</title> <title>{{config.SITE_NAME}}</title>
{% endif %} {% endif %}
<link rel="stylesheet" href="{{ "/static/css/style.css" | cachebust }}"> <link rel="stylesheet" href="{{ ("/static/css/%s.css" % get_prefers_theme()) | cachebust }}">
<link rel="icon" type="image/png" href="/static/favicon.png"> <link rel="icon" type="image/png" href="/static/favicon.png">
</head> </head>
<body> <body>

View File

@ -15,6 +15,11 @@
</div> </div>
</form> </form>
<form method='post'> <form method='post'>
<label for='theme'>Theme (beta)</label>
<select autocomplete='off' id='theme' name='theme'>
<option value='default' {{ 'selected' if get_prefers_theme() == 'style' }}>Default</option>
<option value='theme-otomotone' {{ 'selected' if get_prefers_theme() == 'theme-otomotone' }}>Otomotone (beta)</option>
</select>
<label for='topic_sort_by'>Sort threads by:</label> <label for='topic_sort_by'>Sort threads by:</label>
<select id='topic_sort_by' name='topic_sort_by'> <select id='topic_sort_by' name='topic_sort_by'>
<option value='activity' {{ 'selected' if session['sort_by'] == 'activity' else '' }}>Latest activity</option> <option value='activity' {{ 'selected' if session['sort_by'] == 'activity' else '' }}>Latest activity</option>