Improve sidebar embed look and feel

This commit is contained in:
2022-11-21 03:45:43 +01:00
parent 05f985d611
commit cba66c794e
10 changed files with 156 additions and 73 deletions

View File

@@ -1,4 +1,31 @@
import re
from jinja2 import pass_eval_context
from markupsafe import Markup, escape
from starlette.templating import Jinja2Templates
templates = Jinja2Templates(directory="templates")
@pass_eval_context
def nl2br(eval_ctx, value):
br = "<br>\n"
if eval_ctx.autoescape:
value = escape(value)
br = Markup(br)
result = "\n\n".join(
# need to convert p to Markup again after applying re.split(...)
f"<p>{br.join(Markup(p).splitlines())}</p>"
for p in re.split(r"(?:\r\n|\r(?!\n)|\n){2,}", value)
)
if eval_ctx.autoescape:
result = Markup(result)
return result
templates.env.filters["nl2br"] = nl2br

View File

@@ -8,7 +8,7 @@ router = APIRouter()
@router.get("/events.ics")
async def events():
async def events_ics():
return Response(
await get_data(),
headers={

View File

@@ -15,8 +15,7 @@ from fabcal.routers import templates
router = APIRouter()
@router.get("/embed-sidebar.html", response_class=HTMLResponse)
async def embed(request: Request, max_width: str = None):
async def generate_response(request: Request, template_name: str, **additional_context):
events = await get_future_events()
grouped_events = list(group_by_date(events).items())
@@ -32,8 +31,19 @@ async def embed(request: Request, max_width: str = None):
def base64_encode(s: str):
return base64.b64encode(s.encode()).decode()
context = {
"request": request,
"grouped_events": grouped_events,
"dir": dir,
"localized_abbreviated_month": localized_abbreviated_month,
"localized_abbreviated_weekday": localized_abbreviated_weekday,
"base64_encode": base64_encode,
}
context.update(additional_context)
return templates.TemplateResponse(
"embed-sidebar.html",
template_name,
context={
"request": request,
"grouped_events": grouped_events,
@@ -43,3 +53,8 @@ async def embed(request: Request, max_width: str = None):
"base64_encode": base64_encode,
},
)
@router.get("/sidebar/embed.html", response_class=HTMLResponse)
async def embed_sidebar(request: Request):
return await generate_response(request, "sidebar/embed.html")