2024-04-13 15:26:52 +02:00
|
|
|
use hypertext::{html_elements, maud_move, GlobalAttributes, Renderable};
|
|
|
|
use crate::md::Post;
|
|
|
|
use crate::html::page;
|
2024-04-21 11:45:19 +02:00
|
|
|
use crate::text::md::Outline;
|
2024-04-13 15:26:52 +02:00
|
|
|
|
|
|
|
|
2024-04-21 23:02:30 +02:00
|
|
|
pub fn tree(outline: Outline) -> impl Renderable {
|
|
|
|
maud_move!(
|
|
|
|
section .link-tree {
|
|
|
|
h2 .link-tree__heading {
|
|
|
|
a .link-tree__heading-text href="#top" { "Content" }
|
|
|
|
}
|
|
|
|
nav #table-of-contents .link-tree__nav {
|
|
|
|
ul .link-tree__nav-list {
|
|
|
|
@for (title, id) in outline.0 {
|
|
|
|
li .link-tree__nav-list-item {
|
|
|
|
a .link-tree__nav-list-text.link href=(format!("#{id}")) {
|
|
|
|
(title)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-04-21 11:45:19 +02:00
|
|
|
pub fn post<'fm, 'md, 'post, T>(
|
|
|
|
fm: &'fm Post,
|
|
|
|
content: T,
|
|
|
|
outline: Outline,
|
|
|
|
) -> impl Renderable + 'post
|
2024-04-13 15:26:52 +02:00
|
|
|
where
|
|
|
|
'fm: 'post,
|
|
|
|
'md: 'post,
|
|
|
|
T: Renderable + 'md
|
|
|
|
{
|
|
|
|
let main = maud_move!(
|
|
|
|
main .wiki-main {
|
|
|
|
|
|
|
|
// Slide in/out for mobile
|
|
|
|
input #wiki-aside-shown type="checkbox" hidden;
|
|
|
|
|
|
|
|
aside .wiki-aside {
|
|
|
|
// Slide button
|
|
|
|
label .wiki-aside__slider for="wiki-aside-shown" {
|
|
|
|
img .wiki-icon src="/static/svg/double-arrow.svg" width="24" height="24";
|
|
|
|
}
|
2024-04-21 23:02:30 +02:00
|
|
|
(tree(outline))
|
2024-04-13 15:26:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
article .wiki-article /*class:list={classlist)*/ {
|
|
|
|
header class="markdown" {
|
|
|
|
h1 #top { (fm.title.clone()) }
|
|
|
|
}
|
|
|
|
section .wiki-article__markdown.markdown {
|
|
|
|
(content)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
page(&fm.title, main)
|
|
|
|
}
|