feat(diarization-ui): render markdown in document preview

This commit is contained in:
2026-03-21 14:32:24 +01:00
parent 3215dde312
commit 1c9953251f
2 changed files with 11 additions and 1 deletions

11
app.py
View File

@@ -4,6 +4,7 @@ import sqlite3
from datetime import datetime from datetime import datetime
from typing import Optional from typing import Optional
import markdown as md
import requests import requests
from fastapi import FastAPI, File, Form, HTTPException, UploadFile from fastapi import FastAPI, File, Form, HTTPException, UploadFile
from fastapi.responses import HTMLResponse, PlainTextResponse, Response from fastapi.responses import HTMLResponse, PlainTextResponse, Response
@@ -116,6 +117,13 @@ button{{background:linear-gradient(90deg,var(--acc),var(--acc2));color:#001018;b
button:hover{{filter:brightness(1.05)}} button:hover{{filter:brightness(1.05)}}
textarea{{width:100%;min-height:150px}} textarea{{width:100%;min-height:150px}}
pre{{white-space:pre-wrap;background:#020617;color:#86efac;padding:12px;border-radius:12px;border:1px solid #1e293b}} pre{{white-space:pre-wrap;background:#020617;color:#86efac;padding:12px;border-radius:12px;border:1px solid #1e293b}}
.mdview{{line-height:1.55}}
.mdview h1,.mdview h2,.mdview h3{{margin:16px 0 8px}}
.mdview p{{margin:10px 0}}
.mdview ul,.mdview ol{{padding-left:22px}}
.mdview code{{background:#0b1222;padding:2px 5px;border-radius:6px}}
.mdview pre code{{display:block;padding:10px}}
.mdview blockquote{{border-left:3px solid #334155;padding-left:10px;color:#cbd5e1}}
.row{{display:flex;gap:8px;flex-wrap:wrap;align-items:center}} .row{{display:flex;gap:8px;flex-wrap:wrap;align-items:center}}
small{{color:var(--muted)}} small{{color:var(--muted)}}
.hint{{color:var(--muted);font-size:13px}} .hint{{color:var(--muted);font-size:13px}}
@@ -344,11 +352,12 @@ def view_document(doc_id: int):
if not d: if not d:
raise HTTPException(404, "not found") raise HTTPException(404, "not found")
rendered = md.markdown(d["content_md"] or "", extensions=["fenced_code", "tables", "nl2br"])
body = f""" body = f"""
<h2>Dokument #{d['id']} {d['title']}</h2> <h2>Dokument #{d['id']} {d['title']}</h2>
<p><small>Projekt: {d['project']} · Typ: {d['kind']} · {d['created_at']}</small></p> <p><small>Projekt: {d['project']} · Typ: {d['kind']} · {d['created_at']}</small></p>
<p><a href='/document/{doc_id}/download.md'>Download .md</a></p> <p><a href='/document/{doc_id}/download.md'>Download .md</a></p>
<pre>{(d['content_md'] or '').replace('<','&lt;')}</pre> <div class='card mdview'>{rendered}</div>
""" """
return layout("Dokument", body) return layout("Dokument", body)

View File

@@ -2,3 +2,4 @@ fastapi==0.115.6
uvicorn[standard]==0.32.1 uvicorn[standard]==0.32.1
requests==2.32.3 requests==2.32.3
python-multipart==0.0.12 python-multipart==0.0.12
markdown==3.7