50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
|
from os.path import abspath, isfile
|
||
|
|
||
|
from nicegui import ui
|
||
|
|
||
|
_tab_to_content = {
|
||
|
"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"
|
||
|
|
||
|
def _get_content_from_file(file_name: str) -> str:
|
||
|
"""
|
||
|
Take a file name/path and return its contents
|
||
|
:param file_name: Relative or absolute path to a file
|
||
|
"""
|
||
|
if not isfile(abspath(file_name)):
|
||
|
file_name = _error_page
|
||
|
with open(abspath(file_name), 'r') as f:
|
||
|
return f.read()
|
||
|
|
||
|
def render_tab(tab_name: str):
|
||
|
file_name = _tab_to_content.get(tab_name, _error_page)
|
||
|
ui.markdown(_get_content_from_file(file_name))
|
||
|
|
||
|
|
||
|
def render_header() -> ui.tab_panels:
|
||
|
"""
|
||
|
Render sticky page header with navigation
|
||
|
"""
|
||
|
tab_names = _tab_to_content.keys()
|
||
|
with ui.tabs().classes('w-full') as tabs:
|
||
|
tab_list = [ui.tab(name) for name in tab_names]
|
||
|
with ui.tab_panels(tabs).classes('w-full') as header:
|
||
|
for t in tab_list:
|
||
|
with ui.tab_panel(t):
|
||
|
render_tab(t._props['name'])
|
||
|
return header
|
||
|
|
||
|
def main():
|
||
|
header = render_header()
|
||
|
header.set_value(list(_tab_to_content.keys())[0])
|
||
|
ui.run(dark=None)
|
||
|
|
||
|
|
||
|
if __name__ in ("__main__", "__mp_main__"):
|
||
|
main()
|