collapse side links in wiki

This commit is contained in:
Maciej Jur 2024-09-22 22:49:31 +02:00
parent 22d8866c53
commit de976814f1
Signed by: kamov
GPG key ID: 191CBFF5F72ECAFD
4 changed files with 21 additions and 41 deletions

View file

@ -0,0 +1,3 @@
---
title: Advent of Code 2021
---

View file

@ -0,0 +1,3 @@
---
title: Advent of Code
---

View file

@ -1,35 +0,0 @@
---
title: "Type Challenges"
---
## 4・Pick
Implement the built-in `Pick<T, K>` generic without using it. Constructs a type by picking the set of properties `K` from `T`.
```ts
type MyPick<T, K extends keyof T> = {
[key in K]: k extends keyof T ? T[key] : never;
}
```
## 7・Readonly
Implement the built-in `Readonly<T>` generic without using it. Constructs a type with all properties of T set to readonly, meaning the properties of the constructed type cannot be reassigned.
```ts
type MyReadonly<T> = {
readonly [key in keyof T]: T[key];
}
```
## 11・Tuple to Object
Given an array, transform it into an object type and the key/value must be in the provided array.
```ts
type TupleToObject<T extends readonly (string | number)[]> = {
[val in T[number]]: val;
}
```

View file

@ -78,18 +78,24 @@ impl TreePage {
} }
/// Render the page tree /// Render the page tree
pub(crate) fn show_page_tree(sack: &MySack, glob: &str) -> impl Renderable { pub(crate) fn show_page_tree<'a>(sack: &'a MySack, glob: &'a str) -> impl Renderable + 'a {
let tree = let tree =
TreePage::from_iter( TreePage::from_iter(
sack.get_meta::<Wiki>(glob) sack.get_meta::<Wiki>(glob)
.into_iter() .into_iter()
.map(|(path, meta)| Link { .map(|(path, meta)| Link {
path: Utf8Path::new("/").join(path), path: Utf8Path::new("/").join(path.parent().unwrap()),
name: meta.title.clone(), name: meta.title.clone(),
desc: None, desc: None,
}), }),
); );
let parts = {
let mut parts = sack.path.iter().skip(1).collect::<Vec<_>>();
parts.insert(0, "wiki");
parts
};
maud_move!( maud_move!(
h2 .link-tree__heading { h2 .link-tree__heading {
// {pages.chain(x => x.prefix) // {pages.chain(x => x.prefix)
@ -100,12 +106,15 @@ pub(crate) fn show_page_tree(sack: &MySack, glob: &str) -> impl Renderable {
// )} // )}
} }
nav .link-tree__nav { nav .link-tree__nav {
(show_page_tree_level(&tree)) (show_page_tree_level(&tree, &parts))
} }
) )
} }
fn show_page_tree_level(tree: &TreePage) -> impl Renderable + '_ { fn show_page_tree_level<'a, 'b, 'c>(tree: &'a TreePage, parts: &'a [&str]) -> impl Renderable + 'b
where
'a: 'b,
{
let subs = { let subs = {
let mut subs: Vec<_> = tree.subs.iter().collect(); let mut subs: Vec<_> = tree.subs.iter().collect();
subs.sort_by(|a, b| a.0.cmp(b.0)); subs.sort_by(|a, b| a.0.cmp(b.0));
@ -127,8 +136,8 @@ fn show_page_tree_level(tree: &TreePage) -> impl Renderable + '_ {
} }
} }
} }
@if !next.subs.is_empty() { @if key == parts[0] && !next.subs.is_empty() {
(show_page_tree_level(next)) (show_page_tree_level(next, &parts[1..]))
} }
} }
} }