From 66881bd6e3d52f05364b6014be38ff2da5a20345 Mon Sep 17 00:00:00 2001 From: Joshua Laymon Date: Sat, 6 Sep 2025 04:17:43 +0000 Subject: [PATCH] Update web/core/context_processors.py --- web/core/context_processors.py | 49 +++++++++++----------------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/web/core/context_processors.py b/web/core/context_processors.py index 2ae93e9..d2121d8 100644 --- a/web/core/context_processors.py +++ b/web/core/context_processors.py @@ -4,9 +4,6 @@ from .models_ann import Announcement, AnnouncementDismissal import os def app_version(request): - """ - Expose APP_VERSION (read from /version.txt). Used in base.html. - """ version_file = Path(__file__).resolve().parent.parent / "version.txt" try: return {"APP_VERSION": version_file.read_text(encoding="utf-8").strip()} @@ -15,49 +12,33 @@ def app_version(request): def available_themes(request): """ - Return clean theme names by scanning /static/themes/*.css. - Handles both 'themes/foo.css' and '/.../themes/foo.css' paths and - collapses fingerprinted files (e.g., 'midnight.400a2f.css' -> 'midnight'). + Return clean theme names by scanning ONLY /static/themes/*.css. + Ignore admin css and fingerprinted variants. """ bases = set() - # Try listing the 'themes' directory directly. for finder in finders.get_finders(): try: - for path, storage in finder.list(['themes']): - if path.endswith('.css'): - filename = os.path.basename(path)[:-4] # drop .css - base = filename.split('.', 1)[0] # drop fingerprint - if base: - bases.add(base) + for path, storage in finder.list(['themes']): # only look under themes/ + if not path.startswith('themes/'): + continue + if not path.endswith('.css'): + continue + filename = os.path.basename(path)[:-4] # drop .css + base = filename.split('.', 1)[0] # drop fingerprint + if base: + bases.add(base) except Exception: pass - # Fallback: scan all and filter anything under themes/ - try: - for path, storage in finder.list([]): - if path.endswith('.css') and ('/themes/' in path or path.startswith('themes/')): - filename = os.path.basename(path)[:-4] - base = filename.split('.', 1)[0] - if base: - bases.add(base) - except Exception: - pass - - # If nothing found, fall back to common names that actually exist. - if not bases: - for name in ["classic", "dawn", "forest", "midnight", "mint", "sandstone", "original"]: - if finders.find(f"themes/{name}.css"): - bases.add(name) - preferred = ["classic", "dawn", "forest", "midnight", "mint", "sandstone", "original"] - names = sorted(bases, key=lambda n: (preferred.index(n) if n in preferred else len(preferred) + 1, n)) + names = sorted( + bases, + key=lambda n: (preferred.index(n) if n in preferred else len(preferred) + 1, n) + ) return {"available_themes": names} def pending_announcement(request): - """ - Latest active announcement the user has not dismissed (for Search page). - """ user = getattr(request, "user", None) if not (user and user.is_authenticated): return {"pending_announcement": None}