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 .models import Avatars, Users, PostHistory, Posts
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 .constants import (
PermissionLevel, permission_level_string,
@ -140,6 +140,7 @@ def create_app():
def inject_funcs():
return {
'get_post_url': get_post_url,
'get_prefers_theme': get_prefers_theme,
}
@app.template_filter("ts_datetime")

View File

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

View File

@ -8,7 +8,7 @@
{% else %}
<title>{{config.SITE_NAME}}</title>
{% 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">
</head>
<body>

View File

@ -15,6 +15,11 @@
</div>
</form>
<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>
<select id='topic_sort_by' name='topic_sort_by'>
<option value='activity' {{ 'selected' if session['sort_by'] == 'activity' else '' }}>Latest activity</option>