yggdrasil/components/post/mod.rs
1//! 文章详情组件模块
2//!
3//! 提供文章详情页所需的各个子组件:封面、内容、页眉、元信息、页脚、面包屑、
4//! 上一篇/下一篇导航与目录。
5
6use dioxus::prelude::*;
7
8use crate::router::Route;
9
10/// 根据 `full_reload` 决定路由式导航目标。
11///
12/// `true`:整页加载(`NavigationTarget::External`,路径由 `route.to_string()`
13/// 生成——`Route` 的 `Routable` 派生自带 `Display`,与 `#[route(..)]` 匹配规则
14/// 天然一致,比手写 `format!("/xxx/{}", ..)` 更不容易漏 URL 编码或与路由表脱节)。
15/// 绕开跨 layout 分支客户端导航触发的 dioxus 0.7.10 suspense 卸载双重回收 bug
16/// (详见 `src/pages/admin/preview.rs` 模块文档)。
17/// `false`:客户端路由(`NavigationTarget::Internal`)。
18///
19/// 供 `breadcrumbs`/`post_footer`/`post_nav_links` 共用,替代此前三处独立手写
20/// 的同构 `if full_reload {...} else {...}` 分支(含三份几乎相同的说明注释)。
21pub(super) fn nav_target(route: Route, full_reload: bool) -> NavigationTarget<Route> {
22 if full_reload {
23 NavigationTarget::External(route.to_string())
24 } else {
25 NavigationTarget::Internal(route)
26 }
27}
28
29/// 面包屑导航组件。
30pub mod breadcrumbs;
31/// 文章内容组件。
32pub mod post_content;
33/// 文章封面组件。
34pub mod post_cover;
35/// 文章页脚组件。
36pub mod post_footer;
37/// 文章页眉组件。
38pub mod post_header;
39/// 文章元信息组件。
40pub mod post_meta;
41/// 上一篇/下一篇导航组件。
42pub mod post_nav_links;
43/// 文章目录组件。
44pub mod post_toc;