sanic/guide/webapp/display/layouts/elements/footer.py

76 lines
2.2 KiB
Python
Raw Normal View History

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",
)