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