Update homepage content

Add path router to allow URL navigation to specific pages
This commit is contained in:
Daniel McKnight 2025-02-25 21:03:16 -08:00
parent 5093166559
commit 3ac9aaed04
2 changed files with 34 additions and 9 deletions

View file

@ -1,20 +1,32 @@
# Copyright (C) 2025 Daniel McKnight - All Rights Reserved
from os.path import isfile, join, dirname
from typing import Optional
from fastapi.openapi.models import RequestBody
from nicegui import ui
from fastapi.requests import Request
# TODO: Read from configuration
_tab_to_content = {
"Home": "page_content/home.md",
"Portfolio": "page_content/portfolio.md",
"Resume": "page_content/resume.md",
"Bio": "page_content/bio.md"
"home": "page_content/home.md",
"portfolio": "page_content/portfolio.md",
"resume": "page_content/resume.md",
"bio": "page_content/bio.md"
}
_error_page = "page_content/404.md"
_footer_block = "page_content/footer.html"
@ui.page("/{name}")
def _render_path(name: str):
"""
Parse a path element to render a page
:param name: path element of the request
"""
render_site(name)
def _get_content_from_file(file_name: str) -> str:
"""
Take a file name/path and return its contents
@ -38,7 +50,7 @@ def render_tab(tab_name: str):
extras=['cuddled-lists', 'fenced-code-blocks', 'tables'])
def render_main() -> ui.tab_panels:
def render_header() -> ui.tab_panels:
"""
Render sticky page header with navigation
"""
@ -51,9 +63,17 @@ def render_main() -> ui.tab_panels:
render_tab(name)
return header
def main():
header = render_main()
header.set_value(list(_tab_to_content.keys())[0])
def render_site(page_name: Optional[str] = None):
"""
Renders the site with the requested page active
:param page_name: Page to render. If `None` or invalid, `Home` will be rendered
"""
header = render_header()
if page_name and page_name in _tab_to_content.keys():
header.set_value(page_name)
else:
header.set_value(list(_tab_to_content.keys())[0])
ui.query('.nicegui-content').classes('h-screen no-wrap')
ui.html(_get_content_from_file(_footer_block), tag="footer").classes("rounded-lg shadow-sm m-4 w-full text-center")
ui.add_css("""
@ -64,6 +84,9 @@ def main():
vertical-align: bottom;
}
""")
def main():
render_site()
ui.run(dark=None, reload=False, title="Daniel McKnight")

View file

@ -1,6 +1,8 @@
# Daniel McKnight
## Coder, Sysadmin, Manager
I work in the design and implementation of voice assistants, LLMs, infrastructure, and plenty more.
I work in the design and implementation of voice assistants, LLMs, infrastructure, and plenty more. Check out a selection
of my work [in my portfolio](https://www.mcknight.tech/portfolio) or learn some more about me and my experience
[in my bio](https://www.mcknight.tech/bio) and [resume](https://www.mcknight.tech/resume), respectively.
I built this site using [NiceGUI](https://nicegui.io/), with the source code available
[on Forgejo](https://forge.mcknight.tech/d_mcknight/website-mcknight-tech).