From b1e7529efcb9fbfe777c96a2349faa9f5b063ca0 Mon Sep 17 00:00:00 2001 From: zyl Date: Tue, 5 Nov 2024 13:54:04 -0800 Subject: [PATCH] update templates to inherit themselves instead of manually doing it --- site/templates/basic-link-list.tera | 3 ++ site/templates/blog-list.tera | 3 ++ site/templates/blog-post.tera | 3 ++ src/builder.rs | 12 +----- src/link_list.rs | 13 +++---- src/resource.rs | 58 +++++++++++------------------ 6 files changed, 37 insertions(+), 55 deletions(-) diff --git a/site/templates/basic-link-list.tera b/site/templates/basic-link-list.tera index a07f12c..843eb89 100644 --- a/site/templates/basic-link-list.tera +++ b/site/templates/basic-link-list.tera @@ -1,3 +1,5 @@ +{% extends "base.tera" %} +{% block content %}

{{ title }}

+{% endblock content %} diff --git a/site/templates/blog-list.tera b/site/templates/blog-list.tera index 0836220..925eb80 100644 --- a/site/templates/blog-list.tera +++ b/site/templates/blog-list.tera @@ -1,3 +1,5 @@ +{% extends "base.tera" %} +{% block content %} {% if tag %}

blog posts tagged {{tag}}

View all blog posts

@@ -22,3 +24,4 @@ {% endfor %} +{% endblock content %} diff --git a/site/templates/blog-post.tera b/site/templates/blog-post.tera index e9a4453..32e1e62 100644 --- a/site/templates/blog-post.tera +++ b/site/templates/blog-post.tera @@ -1,3 +1,5 @@ +{% extends "base.tera" %} +{% block content %}

{{title}}

published {{timestamp}} @@ -20,3 +22,4 @@ {% endfor %}
+{% endblock content %} diff --git a/src/builder.rs b/src/builder.rs index ea1491e..e3ce38e 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -246,16 +246,8 @@ impl SiteBuilder { Ok(String::from_utf8(output)?) } - pub fn build_page_raw( - &self, - page_metadata: PageMetadata, - page_html: &str, - ) -> eyre::Result { - self.build_page_raw_with_extra_data(page_metadata, page_html, ()) - } - /// Helper to build a page without writing it to disk. - pub fn build_page_raw_with_extra_data( + pub fn build_page_raw( &self, mut page_metadata: PageMetadata, page_html: &str, @@ -318,7 +310,7 @@ impl SiteBuilder { let mut page_html = String::new(); pulldown_cmark::html::push_html(&mut page_html, parser); - let out = self.build_page_raw(page.data.unwrap_or_default(), &page_html)?; + let out = self.build_page_raw(page.data.unwrap_or_default(), &page_html, ())?; let out_path = self.build_path.join(page_name).with_extension("html"); std::fs::create_dir_all(out_path.parent().unwrap()) diff --git a/src/link_list.rs b/src/link_list.rs index 88d1f5b..5dcfaad 100644 --- a/src/link_list.rs +++ b/src/link_list.rs @@ -29,18 +29,15 @@ pub fn render_basic_link_list( links: Vec, title: &str, ) -> eyre::Result { - let data = LinkTemplateData { links, title }; - let out = builder - .tera - .render(template, &tera::Context::from_serialize(data)?)?; - let out = builder.build_page_raw( + builder.build_page_raw( PageMetadata { + template: Some(template.to_owned()), title: Some(title.to_owned()), ..Default::default() }, - &out, - )?; - Ok(out) + "", + LinkTemplateData { links, title }, + ) } /// Template data for a list of links. diff --git a/src/resource.rs b/src/resource.rs index 2165345..4ece979 100644 --- a/src/resource.rs +++ b/src/resource.rs @@ -128,11 +128,6 @@ struct ResourceListTemplateData<'r> { next: Option, } -#[derive(Debug, Serialize)] -struct ExtraResourceRenderData { - head: String, -} - /// Config for the resource builder. #[derive(Debug, Clone, Default, Deserialize)] pub struct ResourceBuilderConfig { @@ -254,26 +249,12 @@ impl ResourceBuilder { resource: &ResourceMetadata, ) -> eyre::Result<()> { let out_path = self.build_path(&builder.build_path, &id); - let out = { - let data = ResourceTemplateData { - resource, - id, - timestamp: resource.timestamp, - }; - builder.tera.render( - &self.config.resource_template, - &tera::Context::from_serialize(data)?, - )? - }; - let out = builder.build_page_raw_with_extra_data( + let out = builder.build_page_raw( PageMetadata { + template: Some(self.config.resource_template.clone()), title: Some(resource.title.clone()), - ..Default::default() - }, - &out, - ExtraResourceRenderData { - head: EmbedMetadata { + embed: Some(EmbedMetadata { title: resource.title.clone(), site_name: builder.site.config.title.clone(), description: resource.desc.clone(), @@ -285,8 +266,14 @@ impl ResourceBuilder { url: None, theme_color: EmbedMetadata::default_theme_color(), large_image: true, - } - .build(), + }), + ..Default::default() + }, + "", + ResourceTemplateData { + resource, + id, + timestamp: resource.timestamp, }, )?; std::fs::write(out_path, out)?; @@ -338,24 +325,21 @@ impl ResourceBuilder { let mut next; for (page, iter) in list.iter().chunks(items_per_page).into_iter().enumerate() { next = (page + 1 != page_max).then_some(page + 2); - let data = ResourceListTemplateData { - resources: iter.copied().collect(), - tag, - page: page + 1, - page_max, - previous, - next, - }; - let out = builder.tera.render( - &config.resource_list_template, - &tera::Context::from_serialize(data)?, - )?; let out = builder.build_page_raw( PageMetadata { + template: Some(config.resource_list_template.clone()), title: Some(title.to_owned()), ..Default::default() }, - &out, + "", + ResourceListTemplateData { + resources: iter.copied().collect(), + tag, + page: page + 1, + page_max, + previous, + next, + }, )?; if page == 0 { std::fs::write(out_path.join("index.html"), &out)?;