2024-04-13 15:26:52 +02:00
|
|
|
use chrono::{DateTime, Utc};
|
|
|
|
use hypertext::{html_elements, maud_move, GlobalAttributes, Renderable};
|
|
|
|
use crate::html::page;
|
|
|
|
|
|
|
|
|
2024-04-21 23:02:30 +02:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct Link {
|
2024-04-13 15:26:52 +02:00
|
|
|
pub path: String,
|
|
|
|
pub name: String,
|
|
|
|
pub desc: Option<String>,
|
|
|
|
}
|
|
|
|
|
2024-04-21 23:02:30 +02:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct LinkDate {
|
|
|
|
pub link: Link,
|
|
|
|
pub date: DateTime<Utc>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub enum Linkable {
|
|
|
|
Link(Link),
|
|
|
|
Date(LinkDate),
|
|
|
|
}
|
|
|
|
|
2024-04-13 15:26:52 +02:00
|
|
|
|
|
|
|
pub fn list<'data, 'list>(
|
|
|
|
title: &'data str,
|
2024-04-21 23:02:30 +02:00
|
|
|
groups: &'data [(i32, Vec<LinkDate>)]
|
2024-04-13 15:26:52 +02:00
|
|
|
) -> impl Renderable + 'list
|
|
|
|
where
|
|
|
|
'data: 'list
|
|
|
|
{
|
|
|
|
let list = maud_move!(
|
|
|
|
main .page-list-main {
|
|
|
|
article .page-list {
|
|
|
|
header .markdown {
|
|
|
|
h1 { (title) }
|
|
|
|
}
|
|
|
|
|
|
|
|
@for (year, group) in groups {
|
|
|
|
(section(*year, group))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
page(title, list)
|
|
|
|
}
|
|
|
|
|
2024-04-21 23:02:30 +02:00
|
|
|
fn section(year: i32, group: &[LinkDate]) -> impl Renderable + '_ {
|
2024-04-13 15:26:52 +02:00
|
|
|
maud_move!(
|
|
|
|
section .page-list-year {
|
|
|
|
header .page-list-year__header {
|
|
|
|
h2 { (year) }
|
|
|
|
}
|
|
|
|
@for item in group.iter() {
|
|
|
|
(link(item))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2024-04-21 23:02:30 +02:00
|
|
|
fn link(data: &LinkDate) -> impl Renderable + '_ {
|
2024-04-13 15:26:52 +02:00
|
|
|
let time = data.date.format("%m/%d");
|
|
|
|
maud_move!(
|
2024-04-21 23:02:30 +02:00
|
|
|
a .page-item href=(&data.link.path) {
|
2024-04-13 15:26:52 +02:00
|
|
|
div .page-item__header {
|
|
|
|
h3 {
|
2024-04-21 23:02:30 +02:00
|
|
|
(&data.link.name)
|
2024-04-13 15:26:52 +02:00
|
|
|
}
|
|
|
|
time datetime=(data.date.to_rfc3339()) {
|
|
|
|
(time.to_string())
|
|
|
|
}
|
|
|
|
}
|
2024-04-21 23:02:30 +02:00
|
|
|
@if let Some(ref desc) = data.link.desc {
|
2024-04-13 15:26:52 +02:00
|
|
|
div .page-item__desc {
|
|
|
|
(desc)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|