76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
|
from datetime import datetime
|
||
|
|
||
|
from html5tagger import Builder, E # type: ignore
|
||
|
from sanic import Request
|
||
|
|
||
|
|
||
|
def do_footer(builder: Builder, request: Request) -> None:
|
||
|
builder.footer(
|
||
|
_pagination(request),
|
||
|
_content(),
|
||
|
class_="footer",
|
||
|
)
|
||
|
|
||
|
|
||
|
def _pagination(request: Request) -> Builder:
|
||
|
return E.div(
|
||
|
_pagination_left(request), _pagination_right(request), class_="level"
|
||
|
)
|
||
|
|
||
|
|
||
|
def _pagination_left(request: Request) -> Builder:
|
||
|
item = E.div(class_="level-item")
|
||
|
if not hasattr(request.ctx, "previous_page"):
|
||
|
return E.div(item, class_="level-left")
|
||
|
with item:
|
||
|
if p := request.ctx.previous_page:
|
||
|
path = p.relative_path.with_suffix(".html")
|
||
|
item.a(
|
||
|
f"← {p.meta.title}",
|
||
|
href=f"/{path}",
|
||
|
hx_get=f"/{path}",
|
||
|
hx_target="#content",
|
||
|
hx_swap="innerHTML",
|
||
|
hx_push_url="true",
|
||
|
class_="button pagination",
|
||
|
)
|
||
|
return E.div(item, class_="level-left")
|
||
|
|
||
|
|
||
|
def _pagination_right(request: Request) -> Builder:
|
||
|
item = E.div(class_="level-item")
|
||
|
if not hasattr(request.ctx, "next_page"):
|
||
|
return E.div(item, class_="level-right")
|
||
|
with item:
|
||
|
if p := request.ctx.next_page:
|
||
|
path = p.relative_path.with_suffix(".html")
|
||
|
item.a(
|
||
|
f"{p.meta.title} →",
|
||
|
href=f"/{path}",
|
||
|
hx_get=f"/{path}",
|
||
|
hx_target="#content",
|
||
|
hx_swap="innerHTML",
|
||
|
hx_push_url="true",
|
||
|
class_="button pagination",
|
||
|
)
|
||
|
return E.div(item, class_="level-right")
|
||
|
|
||
|
|
||
|
def _content() -> Builder:
|
||
|
year = datetime.now().year
|
||
|
inner = E.p(
|
||
|
E.a(
|
||
|
"MIT Licensed",
|
||
|
href="https://github.com/sanic-org/sanic/blob/master/LICENSE",
|
||
|
target="_blank",
|
||
|
rel="nofollow noopener noreferrer",
|
||
|
).br()(
|
||
|
E.small(f"Copyright © 2018-{year} Sanic Community Organization")
|
||
|
),
|
||
|
)
|
||
|
return E.div(
|
||
|
inner,
|
||
|
E.p("~ Made with ❤️ and ☕️ ~"),
|
||
|
class_="content has-text-centered",
|
||
|
)
|