website/src/html/list.rs

66 lines
1.2 KiB
Rust
Raw Normal View History

2024-09-16 23:01:38 +02:00
use hauchiwa::Sack;
2024-04-13 15:26:52 +02:00
use hypertext::{html_elements, maud_move, GlobalAttributes, Renderable};
2024-09-16 23:01:38 +02:00
use crate::{html::page, LinkDate};
2024-07-05 13:59:07 +02:00
pub fn list<'s, 'g, 'html>(
sack: &'s Sack,
groups: &'g [(i32, Vec<LinkDate>)],
title: String,
2024-09-08 23:07:13 +02:00
) -> Result<impl Renderable + 'html, String>
2024-07-03 23:34:31 +02:00
where
2024-07-05 13:59:07 +02:00
's: 'html,
'g: 'html,
2024-04-13 15:26:52 +02:00
{
2024-07-05 13:59:07 +02:00
let heading = title.clone();
let list = maud_move!(
main .page-list-main {
article .page-list {
header .markdown {
h1 { (heading) }
}
2024-04-13 15:26:52 +02:00
2024-07-05 13:59:07 +02:00
@for (year, group) in groups {
(section(*year, group))
}
}
}
);
2024-04-13 15:26:52 +02:00
2024-09-08 19:09:25 +02:00
page(sack, list, title, None)
2024-04-13 15:26:52 +02:00
}
2024-04-21 23:02:30 +02:00
fn section(year: i32, group: &[LinkDate]) -> impl Renderable + '_ {
2024-07-05 13:59:07 +02:00
maud_move!(
section .page-list-year {
header .page-list-year__header {
h2 { (year) }
}
@for item in group.iter() {
(link(item))
}
}
)
2024-04-13 15:26:52 +02:00
}
2024-04-21 23:02:30 +02:00
fn link(data: &LinkDate) -> impl Renderable + '_ {
2024-07-05 13:59:07 +02:00
let time = data.date.format("%m/%d");
maud_move!(
a .page-item href=(data.link.path.as_str()) {
div .page-item__header {
h3 {
(&data.link.name)
}
time datetime=(data.date.to_rfc3339()) {
(time.to_string())
}
}
@if let Some(ref desc) = data.link.desc {
div .page-item__desc {
(desc)
}
}
}
)
2024-04-13 15:26:52 +02:00
}