mirror of
https://github.com/zyllian/webdog.git
synced 2025-05-09 10:06:40 -07:00
update templates to inherit themselves instead of manually doing it
This commit is contained in:
parent
32965f0cff
commit
b1e7529efc
6 changed files with 37 additions and 55 deletions
|
@ -1,3 +1,5 @@
|
|||
{% extends "base.tera" %}
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
<div class="link-list">
|
||||
<ul>
|
||||
|
@ -6,3 +8,4 @@
|
|||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
{% extends "base.tera" %}
|
||||
{% block content %}
|
||||
{% if tag %}
|
||||
<h1>blog posts tagged {{tag}}</h1>
|
||||
<p><a href="/blog/">View all blog posts</a></p>
|
||||
|
@ -22,3 +24,4 @@
|
|||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
{% extends "base.tera" %}
|
||||
{% block content %}
|
||||
<div class="blog-post">
|
||||
<h1 class="title">{{title}}</h1>
|
||||
<span class="timestamp">published {{timestamp}}</span>
|
||||
|
@ -20,3 +22,4 @@
|
|||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -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<String> {
|
||||
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<T>(
|
||||
pub fn build_page_raw<T>(
|
||||
&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())
|
||||
|
|
|
@ -29,18 +29,15 @@ pub fn render_basic_link_list(
|
|||
links: Vec<Link>,
|
||||
title: &str,
|
||||
) -> eyre::Result<String> {
|
||||
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.
|
||||
|
|
|
@ -128,11 +128,6 @@ struct ResourceListTemplateData<'r> {
|
|||
next: Option<usize>,
|
||||
}
|
||||
|
||||
#[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)?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue