sanic/guide/webapp/display/layouts/main.py
2023-10-25 03:02:26 +01:00

46 lines
1.4 KiB
Python

from contextlib import contextmanager
from typing import Generator
from sanic import Request
from webapp.display.layouts.elements.footer import do_footer
from webapp.display.layouts.elements.navbar import do_navbar
from webapp.display.layouts.elements.sidebar import do_sidebar
from .base import BaseLayout
class MainLayout(BaseLayout):
@contextmanager
def layout(
self, request: Request, full: bool = True
) -> Generator[None, None, None]:
if full:
with self.builder.div(class_="is-flex"):
self._sidebar(request)
with self.builder.main(class_="is-flex-grow-1"):
self._navbar(request)
with self.builder.div(class_="container", id="content"):
with self._content_wrapper():
yield
self._footer(request)
else:
with self._content_wrapper():
yield
self._footer(request)
@contextmanager
def _content_wrapper(self) -> Generator[None, None, None]:
with self.builder.section(class_="section"):
with self.builder.article():
yield
def _navbar(self, request: Request) -> None:
do_navbar(self.builder, request)
def _sidebar(self, request: Request) -> None:
do_sidebar(self.builder, request)
def _footer(self, request: Request) -> None:
do_footer(self.builder, request)