from pathlib import Path from typing import List from shiny import App, ui, Inputs, Outputs, Session from shiny.types import NavSetArg from src import mod_welcome, mod_searchable from src.util import load_html_str_from_file import os footer_html: str = load_html_str_from_file(os.path.join("www", "footer.html")) def nav_controls() -> List[NavSetArg]: return [ ui.nav(ui.h5("Intro"), mod_welcome.welcome_ui("intro"), value="intro"), ui.nav(ui.h5("Analyse"), "Analyse"), ui.nav(ui.h5("Suchmaschine"), mod_searchable.searchable_ui("search_engine"), value="search_engine"), ui.nav_control( ui.a( ui.h5("AG-Link"), href="https://ag-link.xyz", target="_blank", ), ), ] app_ui = ui.page_navbar( *nav_controls(), # create gap ---- ui.nav_spacer(), # right hand side ---- ui.nav_menu( "Mehr Infos", ui.nav_control( ui.a( "No G20 Studie", href="https://g20.protestinstitut.eu/", target="_blank", ), ), align="right", ), selected="intro", fluid=False, title=ui.div(ui.img(src="favicon.ico", width="75dpi", height="75dpi"), ui.h1("Copbird")), lang="de", window_title="Copbird", collapsible=True, bg="#ba289f", inverse=True, id="Intro", footer=ui.div(ui.HTML(footer_html), inline=False), ) def server(input: Inputs, output: Outputs, session: Session): mod_welcome.welcome_server("intro") mod_searchable.searchable_server("search_engine") static_dir = Path(__file__).parent / "www" app = App(app_ui, server, static_assets=static_dir)