mirror of
https://codeberg.org/rimu/pyfedi
synced 2025-01-23 19:36:56 -08:00
smarter theme engine - derive list of themes from directory structure, not hard coded list
This commit is contained in:
parent
9874727eea
commit
0594dddcac
6 changed files with 22 additions and 11 deletions
|
@ -29,9 +29,7 @@ class SiteMiscForm(FlaskForm):
|
|||
registration_mode = SelectField(_l('Registration mode'), choices=types, default=1, coerce=str)
|
||||
application_question = TextAreaField(_l('Question to ask people applying for an account'))
|
||||
log_activitypub_json = BooleanField(_l('Log ActivityPub JSON for debugging'))
|
||||
themes = [('', _l('PieFed')),
|
||||
('high_contrast', _l('High contrast'))]
|
||||
default_theme = SelectField(_l('Default theme'), choices=themes, coerce=str)
|
||||
default_theme = SelectField(_l('Default theme'), coerce=str)
|
||||
submit = SubmitField(_l('Save'))
|
||||
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ from app.community.util import save_icon_file, save_banner_file
|
|||
from app.models import AllowedInstances, BannedInstances, ActivityPubLog, utcnow, Site, Community, CommunityMember, \
|
||||
User, Instance, File, Report, Topic, UserRegistration
|
||||
from app.utils import render_template, permission_required, set_setting, get_setting, gibberish, markdown_to_html, \
|
||||
moderating_communities, joined_communities, finalize_user_setup
|
||||
moderating_communities, joined_communities, finalize_user_setup, theme_list
|
||||
from app.admin import bp
|
||||
|
||||
|
||||
|
@ -68,6 +68,7 @@ def admin_misc():
|
|||
site = Site.query.get(1)
|
||||
if site is None:
|
||||
site = Site()
|
||||
form.default_theme.choices = theme_list()
|
||||
if form.validate_on_submit():
|
||||
site.enable_downvotes = form.enable_downvotes.data
|
||||
site.allow_local_image_posts = form.allow_local_image_posts.data
|
||||
|
|
|
@ -18,7 +18,7 @@ from sqlalchemy import select, desc, text
|
|||
from sqlalchemy_searchable import search
|
||||
from app.utils import render_template, get_setting, gibberish, request_etag_matches, return_304, blocked_domains, \
|
||||
ap_datetime, ip_address, retrieve_block_list, shorten_string, markdown_to_text, user_filters_home, \
|
||||
joined_communities, moderating_communities, parse_page
|
||||
joined_communities, moderating_communities, parse_page, theme_list
|
||||
from app.models import Community, CommunityMember, Post, Site, User, utcnow, Domain, Topic
|
||||
from PIL import Image
|
||||
import pytesseract
|
||||
|
@ -249,8 +249,9 @@ def keyboard_shortcuts():
|
|||
@bp.route('/test')
|
||||
def test():
|
||||
|
||||
x = parse_page('https://slate.com/technology/2024/02/quora-what-happened-ai-decline.html')
|
||||
return str(x)
|
||||
themes = theme_list()
|
||||
|
||||
return str(themes)
|
||||
|
||||
return current_app.config['SERVER_NAME']
|
||||
|
||||
|
|
|
@ -45,9 +45,7 @@ class SettingsForm(FlaskForm):
|
|||
('active', _l('Active')),
|
||||
]
|
||||
default_sort = SelectField(_l('By default, sort posts by'), choices=sorts, validators=[DataRequired()], coerce=str)
|
||||
themes = [('', _l('PieFed')),
|
||||
('high_contrast', _l('High contrast'))]
|
||||
theme = SelectField(_l('Theme'), choices=themes, coerce=str)
|
||||
theme = SelectField(_l('Theme'), coerce=str)
|
||||
submit = SubmitField(_l('Save settings'))
|
||||
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ from app.user.forms import ProfileForm, SettingsForm, DeleteAccountForm, ReportU
|
|||
from app.user.utils import purge_user_then_delete
|
||||
from app.utils import get_setting, render_template, markdown_to_html, user_access, markdown_to_text, shorten_string, \
|
||||
is_image_url, ensure_directory_exists, gibberish, file_get_contents, community_membership, user_filters_home, \
|
||||
user_filters_posts, user_filters_replies, moderating_communities, joined_communities
|
||||
user_filters_posts, user_filters_replies, moderating_communities, joined_communities, theme_list
|
||||
from sqlalchemy import desc, or_, text
|
||||
import os
|
||||
|
||||
|
@ -152,6 +152,7 @@ def change_settings():
|
|||
if user is None:
|
||||
abort(404)
|
||||
form = SettingsForm()
|
||||
form.theme.choices = theme_list()
|
||||
if form.validate_on_submit():
|
||||
current_user.newsletter = form.newsletter.data
|
||||
current_user.ignore_bots = form.ignore_bots.data
|
||||
|
|
12
app/utils.py
12
app/utils.py
|
@ -675,6 +675,7 @@ def parse_page(page_url, tags_to_search = KNOWN_OPENGRAPH_TAGS, fallback_tags =
|
|||
|
||||
|
||||
def current_theme():
|
||||
""" The theme the current user has set, falling back to the site default if none specified or user is not logged in """
|
||||
if current_user.is_authenticated:
|
||||
if current_user.theme is not None and current_user.theme != '':
|
||||
return current_user.theme
|
||||
|
@ -682,3 +683,14 @@ def current_theme():
|
|||
return g.site.default_theme if g.site.default_theme is not None else ''
|
||||
else:
|
||||
return g.site.default_theme if g.site.default_theme is not None else ''
|
||||
|
||||
|
||||
def theme_list():
|
||||
""" All the themes available, by looking in the templates/themes directory """
|
||||
result = [('', 'PieFed')]
|
||||
for root, dirs, files in os.walk('app/templates/themes'):
|
||||
for dir in dirs:
|
||||
if os.path.exists(f'app/templates/themes/{dir}/{dir}.json'):
|
||||
theme_settings = json.loads(file_get_contents(f'app/templates/themes/{dir}/{dir}.json'))
|
||||
result.append((dir, theme_settings['name']))
|
||||
return result
|
||||
|
|
Loading…
Reference in a new issue