Improve sidebar embed look and feel
This commit is contained in:
@@ -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
|
||||
|
@@ -8,7 +8,7 @@ router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/events.ics")
|
||||
async def events():
|
||||
async def events_ics():
|
||||
return Response(
|
||||
await get_data(),
|
||||
headers={
|
||||
|
@@ -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")
|
||||
|
Reference in New Issue
Block a user