diff --git a/.last-branch b/.last-branch index 5b4656c..be781d7 100644 --- a/.last-branch +++ b/.last-branch @@ -1 +1 @@ -v20260112-18-changelog-from-gitea +v20260113-01-changelog-markdown-render diff --git a/containers/backupchecks/requirements.txt b/containers/backupchecks/requirements.txt index 5db362e..dee004d 100644 --- a/containers/backupchecks/requirements.txt +++ b/containers/backupchecks/requirements.txt @@ -7,3 +7,4 @@ python-dateutil==2.9.0.post0 gunicorn==23.0.0 requests==2.32.3 reportlab==4.2.5 +Markdown==3.6 diff --git a/containers/backupchecks/src/backend/app/main/routes_changelog.py b/containers/backupchecks/src/backend/app/main/routes_changelog.py index 01b51f9..094d997 100644 --- a/containers/backupchecks/src/backend/app/main/routes_changelog.py +++ b/containers/backupchecks/src/backend/app/main/routes_changelog.py @@ -1,5 +1,7 @@ from .routes_shared import * # noqa: F401,F403 +import markdown + GITEA_CHANGELOG_RAW_URL = ( "https://gitea.oskamp.info/ivooskamp/backupchecks/raw/branch/main/docs/changelog.md" @@ -11,6 +13,7 @@ GITEA_CHANGELOG_RAW_URL = ( @roles_required("admin", "operator", "reporter", "viewer") def changelog_page(): changelog_md = "" + changelog_html = "" error = None try: @@ -22,12 +25,24 @@ def changelog_page(): if resp.status_code != 200: raise RuntimeError(f"HTTP {resp.status_code}") changelog_md = resp.text or "" + + changelog_html = markdown.markdown( + changelog_md, + extensions=[ + "fenced_code", + "tables", + "sane_lists", + "toc", + ], + output_format="html5", + ) except Exception as exc: # pragma: no cover error = f"Unable to load changelog from Gitea ({GITEA_CHANGELOG_RAW_URL}): {exc}" return render_template( "main/changelog.html", changelog_md=changelog_md, + changelog_html=changelog_html, changelog_error=error, changelog_source_url=GITEA_CHANGELOG_RAW_URL, ) diff --git a/containers/backupchecks/src/static/css/layout.css b/containers/backupchecks/src/static/css/layout.css index dfe6a98..e1afe54 100644 --- a/containers/backupchecks/src/static/css/layout.css +++ b/containers/backupchecks/src/static/css/layout.css @@ -34,3 +34,56 @@ main.dashboard-container { white-space: normal; cursor: text; } + +/* Markdown rendering (e.g., changelog page) */ +.markdown-content { + overflow-wrap: anywhere; +} + +.markdown-content h1, +.markdown-content h2, +.markdown-content h3, +.markdown-content h4, +.markdown-content h5, +.markdown-content h6 { + margin-top: 1.25rem; + margin-bottom: 0.75rem; +} + +.markdown-content p { + margin-bottom: 0.75rem; +} + +.markdown-content ul, +.markdown-content ol { + margin-bottom: 0.75rem; +} + +.markdown-content pre { + padding: 0.75rem; + border-radius: 0.5rem; + background: rgba(0, 0, 0, 0.05); + overflow: auto; +} + +.markdown-content code { + font-size: 0.95em; +} + +.markdown-content table { + width: 100%; + margin-bottom: 1rem; +} + +.markdown-content table th, +.markdown-content table td { + padding: 0.5rem; + border-top: 1px solid rgba(0, 0, 0, 0.15); +} + +.markdown-content blockquote { + border-left: 0.25rem solid rgba(0, 0, 0, 0.15); + padding-left: 0.75rem; + margin-left: 0; + color: rgba(0, 0, 0, 0.7); +} diff --git a/containers/backupchecks/src/templates/main/changelog.html b/containers/backupchecks/src/templates/main/changelog.html index 812bb7d..ffbf3e1 100644 --- a/containers/backupchecks/src/templates/main/changelog.html +++ b/containers/backupchecks/src/templates/main/changelog.html @@ -23,8 +23,8 @@
{{ changelog_md }}
+ {% if changelog_html %}
+