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>
|
<h1>{{ title }}</h1>
|
||||||
<div class="link-list">
|
<div class="link-list">
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -6,3 +8,4 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
{% extends "base.tera" %}
|
||||||
|
{% block content %}
|
||||||
{% if tag %}
|
{% if tag %}
|
||||||
<h1>blog posts tagged {{tag}}</h1>
|
<h1>blog posts tagged {{tag}}</h1>
|
||||||
<p><a href="/blog/">View all blog posts</a></p>
|
<p><a href="/blog/">View all blog posts</a></p>
|
||||||
|
@ -22,3 +24,4 @@
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
{% extends "base.tera" %}
|
||||||
|
{% block content %}
|
||||||
<div class="blog-post">
|
<div class="blog-post">
|
||||||
<h1 class="title">{{title}}</h1>
|
<h1 class="title">{{title}}</h1>
|
||||||
<span class="timestamp">published {{timestamp}}</span>
|
<span class="timestamp">published {{timestamp}}</span>
|
||||||
|
@ -20,3 +22,4 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
|
@ -246,16 +246,8 @@ impl SiteBuilder {
|
||||||
Ok(String::from_utf8(output)?)
|
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.
|
/// 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,
|
&self,
|
||||||
mut page_metadata: PageMetadata,
|
mut page_metadata: PageMetadata,
|
||||||
page_html: &str,
|
page_html: &str,
|
||||||
|
@ -318,7 +310,7 @@ impl SiteBuilder {
|
||||||
let mut page_html = String::new();
|
let mut page_html = String::new();
|
||||||
pulldown_cmark::html::push_html(&mut page_html, parser);
|
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");
|
let out_path = self.build_path.join(page_name).with_extension("html");
|
||||||
std::fs::create_dir_all(out_path.parent().unwrap())
|
std::fs::create_dir_all(out_path.parent().unwrap())
|
||||||
|
|
|
@ -29,18 +29,15 @@ pub fn render_basic_link_list(
|
||||||
links: Vec<Link>,
|
links: Vec<Link>,
|
||||||
title: &str,
|
title: &str,
|
||||||
) -> eyre::Result<String> {
|
) -> eyre::Result<String> {
|
||||||
let data = LinkTemplateData { links, title };
|
builder.build_page_raw(
|
||||||
let out = builder
|
|
||||||
.tera
|
|
||||||
.render(template, &tera::Context::from_serialize(data)?)?;
|
|
||||||
let out = builder.build_page_raw(
|
|
||||||
PageMetadata {
|
PageMetadata {
|
||||||
|
template: Some(template.to_owned()),
|
||||||
title: Some(title.to_owned()),
|
title: Some(title.to_owned()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&out,
|
"",
|
||||||
)?;
|
LinkTemplateData { links, title },
|
||||||
Ok(out)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Template data for a list of links.
|
/// Template data for a list of links.
|
||||||
|
|
|
@ -128,11 +128,6 @@ struct ResourceListTemplateData<'r> {
|
||||||
next: Option<usize>,
|
next: Option<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
|
||||||
struct ExtraResourceRenderData {
|
|
||||||
head: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Config for the resource builder.
|
/// Config for the resource builder.
|
||||||
#[derive(Debug, Clone, Default, Deserialize)]
|
#[derive(Debug, Clone, Default, Deserialize)]
|
||||||
pub struct ResourceBuilderConfig {
|
pub struct ResourceBuilderConfig {
|
||||||
|
@ -254,26 +249,12 @@ impl ResourceBuilder {
|
||||||
resource: &ResourceMetadata,
|
resource: &ResourceMetadata,
|
||||||
) -> eyre::Result<()> {
|
) -> eyre::Result<()> {
|
||||||
let out_path = self.build_path(&builder.build_path, &id);
|
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 {
|
PageMetadata {
|
||||||
|
template: Some(self.config.resource_template.clone()),
|
||||||
title: Some(resource.title.clone()),
|
title: Some(resource.title.clone()),
|
||||||
..Default::default()
|
embed: Some(EmbedMetadata {
|
||||||
},
|
|
||||||
&out,
|
|
||||||
ExtraResourceRenderData {
|
|
||||||
head: EmbedMetadata {
|
|
||||||
title: resource.title.clone(),
|
title: resource.title.clone(),
|
||||||
site_name: builder.site.config.title.clone(),
|
site_name: builder.site.config.title.clone(),
|
||||||
description: resource.desc.clone(),
|
description: resource.desc.clone(),
|
||||||
|
@ -285,8 +266,14 @@ impl ResourceBuilder {
|
||||||
url: None,
|
url: None,
|
||||||
theme_color: EmbedMetadata::default_theme_color(),
|
theme_color: EmbedMetadata::default_theme_color(),
|
||||||
large_image: true,
|
large_image: true,
|
||||||
}
|
}),
|
||||||
.build(),
|
..Default::default()
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
ResourceTemplateData {
|
||||||
|
resource,
|
||||||
|
id,
|
||||||
|
timestamp: resource.timestamp,
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
std::fs::write(out_path, out)?;
|
std::fs::write(out_path, out)?;
|
||||||
|
@ -338,24 +325,21 @@ impl ResourceBuilder {
|
||||||
let mut next;
|
let mut next;
|
||||||
for (page, iter) in list.iter().chunks(items_per_page).into_iter().enumerate() {
|
for (page, iter) in list.iter().chunks(items_per_page).into_iter().enumerate() {
|
||||||
next = (page + 1 != page_max).then_some(page + 2);
|
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(
|
let out = builder.build_page_raw(
|
||||||
PageMetadata {
|
PageMetadata {
|
||||||
|
template: Some(config.resource_list_template.clone()),
|
||||||
title: Some(title.to_owned()),
|
title: Some(title.to_owned()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&out,
|
"",
|
||||||
|
ResourceListTemplateData {
|
||||||
|
resources: iter.copied().collect(),
|
||||||
|
tag,
|
||||||
|
page: page + 1,
|
||||||
|
page_max,
|
||||||
|
previous,
|
||||||
|
next,
|
||||||
|
},
|
||||||
)?;
|
)?;
|
||||||
if page == 0 {
|
if page == 0 {
|
||||||
std::fs::write(out_path.join("index.html"), &out)?;
|
std::fs::write(out_path.join("index.html"), &out)?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue