mirror of
https://github.com/zyllian/webdog.git
synced 2025-05-10 02:26:42 -07:00
refactoring and new additions wheee
This commit is contained in:
parent
94ba05daf2
commit
3a274932a8
10 changed files with 192 additions and 91 deletions
45
src/extras.rs
Normal file
45
src/extras.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
use lol_html::{element, RewriteStrSettings};
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::{blog::BlogPostMetadata, builder::SiteBuilder, resource::ResourceMetadata};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Extra {
|
||||
HtmlModification(fn(page: String, builder: &SiteBuilder) -> anyhow::Result<String>),
|
||||
}
|
||||
|
||||
/// Gets the extra for the given value.
|
||||
pub fn get_extra(extra: &str) -> Option<Extra> {
|
||||
match extra {
|
||||
"index" => Some(Extra::HtmlModification(index)),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Extra to add a sidebar to the index page with recent blog posts on it.
|
||||
fn index(page: String, builder: &SiteBuilder) -> anyhow::Result<String> {
|
||||
#[derive(Debug, Serialize)]
|
||||
struct SidebarTemplateData<'r> {
|
||||
resources: Vec<&'r ResourceMetadata<BlogPostMetadata>>,
|
||||
}
|
||||
|
||||
let lmd = builder.blog_builder.loaded_metadata.borrow();
|
||||
|
||||
let sidebar = builder.reg.render(
|
||||
"extras/index-injection",
|
||||
&SidebarTemplateData {
|
||||
resources: lmd.iter().take(3).map(|(_, v)| v).collect(),
|
||||
},
|
||||
)?;
|
||||
|
||||
Ok(lol_html::rewrite_str(
|
||||
&page,
|
||||
RewriteStrSettings {
|
||||
element_content_handlers: vec![element!("#content", |el| {
|
||||
el.append(&sidebar, lol_html::html_content::ContentType::Html);
|
||||
Ok(())
|
||||
})],
|
||||
..Default::default()
|
||||
},
|
||||
)?)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue