implement custom userdata, resolves #11

This commit is contained in:
zyl 2024-11-13 12:29:26 -08:00
parent 6c31ccb9d5
commit 95a0765b1e
Signed by: zyl
SSH key fingerprint: SHA256:uxxbSXbdroP/OnKBGnEDk5q7EKB2razvstC/KmzdXXs
4 changed files with 35 additions and 0 deletions

View file

@ -77,6 +77,10 @@ list of extra stylesheets to include in the page.
see <a href="extras">extras documentation</a> for more info on this field. see <a href="extras">extras documentation</a> for more info on this field.
### `userdata`
custom userdata to supply to the page's base template.
## special features ## special features
in addition to standard markdown, webdog comes with some minor additions for ease of use. in addition to standard markdown, webdog comes with some minor additions for ease of use.

View file

@ -30,3 +30,28 @@ the main html content for the page to be rendered. can be rendered anywhere you
{% block content %}{{ page | safe }}{% endblock content %} {% block content %}{{ page | safe }}{% endblock content %}
</main> </main>
``` ```
### `userdata`
custom userdata provided by the page to be rendered.
if a page defines its userdata as follows:
```yaml
userdata:
value: 5
```
you may use it like so:
```tera
{{ userdata.value }}
```
or, to only use it only if it exists:
```tera
{% if userdata is object and 'value' in userdata %}
{{ userdata.value }}
{% endif %}
```

View file

@ -24,6 +24,8 @@ struct TemplateData<'a, T> {
pub title: &'a str, pub title: &'a str,
/// Custom template data. /// Custom template data.
pub data: T, pub data: T,
/// Userdata supplied from the page.
pub userdata: serde_yml::Value,
} }
/// Struct used to build the site. /// Struct used to build the site.
@ -320,6 +322,7 @@ impl SiteBuilder {
page: page_html, page: page_html,
title: &title, title: &title,
data: extra_data, data: extra_data,
userdata: page_metadata.userdata,
})?, })?,
)?; )?;

View file

@ -128,6 +128,9 @@ pub struct PageMetadata {
/// The extra stuff to run for the page, if any. /// The extra stuff to run for the page, if any.
#[serde(default)] #[serde(default)]
pub extra: Option<ExtraData>, pub extra: Option<ExtraData>,
/// Custom values passed to the base template.
#[serde(default)]
pub userdata: serde_yml::Value,
} }
/// Struct containing information about the site. /// Struct containing information about the site.