use dioxus::prelude::*; use bard::*; const FAVICON: Asset = asset!("/assets/favicon.ico"); const BLOG: Asset = asset!("/assets/blog.css"); const BLOG_IMAGE: Asset = asset!("/assets/runes_and_ramblings_text.png", AssetOptions::builder().with_hash_suffix(false)); const POST_IMAGE: Asset = asset!("/assets/runes_and_ramblings_logo.png", AssetOptions::builder().with_hash_suffix(false)); fn main() { #[cfg(feature = "server")] { let rt = tokio::runtime::Runtime::new().unwrap(); rt.block_on(async { let db_path = "/home/myrddin/cybermages/website/tavern.db"; let _ = bard::init_database(db_path).await; }); } LaunchBuilder::new().launch(App); } #[component] fn App() -> Element { let custom_settings = BardSettings { blog_name: Some(String::from("Blog Test")), blog_image: Some(BLOG_IMAGE), default_post_image: Some(POST_IMAGE), stylesheet: StylesheetBehavior::Extend(BLOG), }; provide_context(custom_settings); rsx! { document::Link { rel: "icon", href: FAVICON } Router:: {} } } /// Home page #[component] fn Home() -> Element { rsx! { h1 { "Blog Test" } } } /// This is the content for the About page. #[component] pub fn PageNotFound(route: Vec) -> Element { rsx! { h1 { "Page not found" } p { "We are terribly sorry, but the page you requested doesn't exist." } pre { color: "red", "log:\nattemped to navigate to: {route:?}" } } } /// Shared navbar component. #[component] fn Navbar() -> Element { rsx! { div { id: "navbar", Link { to: Page::Home {}, "Home" } Link { to: Page::Bard{ child: bard::Page::Blog { tag: String::from("all") }}, "Blog" } //a { href: "/blog/all", "Blog" } } Outlet:: {} } } #[derive(Debug, Clone, Routable, PartialEq)] #[rustfmt::skip] pub enum Page { #[layout(Navbar)] #[route("/")] Home {}, #[child("/blog")] Bard { child: bard::Page }, #[route("/:..route")] PageNotFound { route: Vec } }