diff --git a/content/wiki/aoc/2021/index.md b/content/wiki/aoc/2021/index.md new file mode 100644 index 0000000..a0ede1e --- /dev/null +++ b/content/wiki/aoc/2021/index.md @@ -0,0 +1,3 @@ +--- +title: Advent of Code 2021 +--- diff --git a/content/wiki/aoc/index.md b/content/wiki/aoc/index.md new file mode 100644 index 0000000..251a893 --- /dev/null +++ b/content/wiki/aoc/index.md @@ -0,0 +1,3 @@ +--- +title: Advent of Code +--- diff --git a/content/wiki/typescript/type-challenges.md b/content/wiki/typescript/type-challenges.md deleted file mode 100644 index 432c17e..0000000 --- a/content/wiki/typescript/type-challenges.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Type Challenges" ---- - -## 4・Pick - -Implement the built-in `Pick` generic without using it. Constructs a type by picking the set of properties `K` from `T`. - -```ts -type MyPick = { - [key in K]: k extends keyof T ? T[key] : never; -} -``` - - -## 7・Readonly - -Implement the built-in `Readonly` 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 = { - 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 = { - [val in T[number]]: val; -} -``` diff --git a/src/html/misc.rs b/src/html/misc.rs index dbc6bf0..62e46bb 100644 --- a/src/html/misc.rs +++ b/src/html/misc.rs @@ -78,18 +78,24 @@ impl TreePage { } /// 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 = TreePage::from_iter( sack.get_meta::(glob) .into_iter() .map(|(path, meta)| Link { - path: Utf8Path::new("/").join(path), + path: Utf8Path::new("/").join(path.parent().unwrap()), name: meta.title.clone(), desc: None, }), ); + let parts = { + let mut parts = sack.path.iter().skip(1).collect::>(); + parts.insert(0, "wiki"); + parts + }; + maud_move!( h2 .link-tree__heading { // {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 { - (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 mut subs: Vec<_> = tree.subs.iter().collect(); 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() { - (show_page_tree_level(next)) + @if key == parts[0] && !next.subs.is_empty() { + (show_page_tree_level(next, &parts[1..])) } } }