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 # Copyright (C) 2025 Daniel McKnight - All Rights Reserved
from os.path import isfile, join, dirname from os.path import isfile, join, dirname
from typing import Optional
from fastapi.openapi.models import RequestBody
from nicegui import ui from nicegui import ui
from fastapi.requests import Request
# TODO: Read from configuration # TODO: Read from configuration
_tab_to_content = { _tab_to_content = {
"Home": "page_content/home.md", "home": "page_content/home.md",
"Portfolio": "page_content/portfolio.md", "portfolio": "page_content/portfolio.md",
"Resume": "page_content/resume.md", "resume": "page_content/resume.md",
"Bio": "page_content/bio.md" "bio": "page_content/bio.md"
} }
_error_page = "page_content/404.md" _error_page = "page_content/404.md"
_footer_block = "page_content/footer.html" _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: def _get_content_from_file(file_name: str) -> str:
""" """
Take a file name/path and return its contents 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']) 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 Render sticky page header with navigation
""" """
@ -51,9 +63,17 @@ def render_main() -> ui.tab_panels:
render_tab(name) render_tab(name)
return header return header
def main():
header = render_main() def render_site(page_name: Optional[str] = None):
header.set_value(list(_tab_to_content.keys())[0]) """
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.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.html(_get_content_from_file(_footer_block), tag="footer").classes("rounded-lg shadow-sm m-4 w-full text-center")
ui.add_css(""" ui.add_css("""
@ -64,6 +84,9 @@ def main():
vertical-align: bottom; vertical-align: bottom;
} }
""") """)
def main():
render_site()
ui.run(dark=None, reload=False, title="Daniel McKnight") ui.run(dark=None, reload=False, title="Daniel McKnight")

View file

@ -1,6 +1,8 @@
# Daniel McKnight # Daniel McKnight
## Coder, Sysadmin, Manager ## 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 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). [on Forgejo](https://forge.mcknight.tech/d_mcknight/website-mcknight-tech).