46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
from contextlib import contextmanager
|
|
from typing import Generator
|
|
|
|
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 sanic import Request
|
|
|
|
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)
|