mirror of
https://github.com/zyllian/webdog.git
synced 2025-05-10 02:26:42 -07:00
rewrite html to remove previously required html templating, resolves #4
This commit is contained in:
parent
4c6064a5a1
commit
6c31ccb9d5
4 changed files with 34 additions and 80 deletions
|
@ -19,55 +19,7 @@ all templates are given the following variables:
|
||||||
|
|
||||||
### `title`
|
### `title`
|
||||||
|
|
||||||
the page's title. this should be rendered in the `<head>` html element like so:
|
the page's full title, as shown in the browser tab.
|
||||||
|
|
||||||
```html
|
|
||||||
<head>
|
|
||||||
<title>{{ title }}</title>
|
|
||||||
</head>
|
|
||||||
```
|
|
||||||
|
|
||||||
this variable will no longer be required to set the page title before the first crates.io release.
|
|
||||||
|
|
||||||
### `head`
|
|
||||||
|
|
||||||
the page's extra head data. this should be rendered in the `<head>` html element like so:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<head>
|
|
||||||
{{ head | safe }}
|
|
||||||
</head>
|
|
||||||
```
|
|
||||||
|
|
||||||
this variable will be removed before the first crates.io release.
|
|
||||||
|
|
||||||
### `scripts`
|
|
||||||
|
|
||||||
the page's extra scripts. this should be rendered in the `<head>` html element like so:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<head>
|
|
||||||
{% for script in scripts %}
|
|
||||||
<script type="text/javascript" src="{{script}}" defer></script>
|
|
||||||
{% endfor %}
|
|
||||||
</head>
|
|
||||||
```
|
|
||||||
|
|
||||||
this variable will be removed before the first crates.io release.
|
|
||||||
|
|
||||||
### `styles`
|
|
||||||
|
|
||||||
the page's extra stylesheets. this should be rendered in the `<head>` html element like so:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<head>
|
|
||||||
{% for style in styles %}
|
|
||||||
<link rel="stylesheet" href="/styles/{{style}}" />
|
|
||||||
{% endfor %}
|
|
||||||
</head>
|
|
||||||
```
|
|
||||||
|
|
||||||
this variable will be removed before the first crates.io release.
|
|
||||||
|
|
||||||
### `page`
|
### `page`
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="referrer" content="no-referrer">
|
<meta name="referrer" content="no-referrer">
|
||||||
<link rel="stylesheet" href="/styles/index.css">
|
<link rel="stylesheet" href="/styles/index.css">
|
||||||
<title>{{ title }}</title>
|
|
||||||
{{ head | safe }}
|
|
||||||
{% for script in scripts %}
|
|
||||||
<script type="text/javascript" src="{{script}}" defer></script>
|
|
||||||
{% endfor %}
|
|
||||||
{% for style in styles %}
|
|
||||||
<link rel="stylesheet" href="/styles/{{style}}">
|
|
||||||
{% endfor %}
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -22,12 +22,6 @@ struct TemplateData<'a, T> {
|
||||||
pub page: &'a str,
|
pub page: &'a str,
|
||||||
/// The page's title.
|
/// The page's title.
|
||||||
pub title: &'a str,
|
pub title: &'a str,
|
||||||
/// Custom head data for the page.
|
|
||||||
pub head: Option<String>,
|
|
||||||
/// The page's custom scripts.
|
|
||||||
pub scripts: &'a [String],
|
|
||||||
/// the page's custom styles.
|
|
||||||
pub styles: &'a [String],
|
|
||||||
/// Custom template data.
|
/// Custom template data.
|
||||||
pub data: T,
|
pub data: T,
|
||||||
}
|
}
|
||||||
|
@ -159,7 +153,14 @@ impl SiteBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Function to rewrite HTML wow.
|
/// Function to rewrite HTML wow.
|
||||||
pub fn rewrite_html(&self, html: String) -> eyre::Result<String> {
|
pub fn rewrite_html(
|
||||||
|
&self,
|
||||||
|
html: String,
|
||||||
|
title: &str,
|
||||||
|
head: &Option<String>,
|
||||||
|
scripts: &[String],
|
||||||
|
styles: &[String],
|
||||||
|
) -> eyre::Result<String> {
|
||||||
let mut output = Vec::new();
|
let mut output = Vec::new();
|
||||||
let mut rewriter = HtmlRewriter::new(
|
let mut rewriter = HtmlRewriter::new(
|
||||||
Settings {
|
Settings {
|
||||||
|
@ -172,6 +173,24 @@ impl SiteBuilder {
|
||||||
}),
|
}),
|
||||||
element!("head", |el| {
|
element!("head", |el| {
|
||||||
el.prepend(r#"<meta charset="utf-8">"#, ContentType::Html);
|
el.prepend(r#"<meta charset="utf-8">"#, ContentType::Html);
|
||||||
|
el.append(&format!("<title>{title}</title>"), ContentType::Html);
|
||||||
|
if let Some(head) = head {
|
||||||
|
el.append(head, ContentType::Html);
|
||||||
|
}
|
||||||
|
for script in scripts {
|
||||||
|
el.append(
|
||||||
|
&format!(
|
||||||
|
r#"<script type="text/javascript" src="{script}" defer></script>"#
|
||||||
|
),
|
||||||
|
ContentType::Html,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
for style in styles {
|
||||||
|
el.append(
|
||||||
|
&format!(r#"<link rel="stylesheet" href="/styles/{style}">"#),
|
||||||
|
ContentType::Html,
|
||||||
|
);
|
||||||
|
}
|
||||||
el.append(
|
el.append(
|
||||||
r#"<script type="text/javascript" src="/webdog/webdog.js" defer></script>"#,
|
r#"<script type="text/javascript" src="/webdog/webdog.js" defer></script>"#,
|
||||||
ContentType::Html,
|
ContentType::Html,
|
||||||
|
@ -300,15 +319,18 @@ impl SiteBuilder {
|
||||||
&tera::Context::from_serialize(TemplateData {
|
&tera::Context::from_serialize(TemplateData {
|
||||||
page: page_html,
|
page: page_html,
|
||||||
title: &title,
|
title: &title,
|
||||||
head,
|
|
||||||
scripts: &page_metadata.scripts,
|
|
||||||
styles: &page_metadata.styles,
|
|
||||||
data: extra_data,
|
data: extra_data,
|
||||||
})?,
|
})?,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Modify HTML output
|
// Modify HTML output
|
||||||
let mut out = self.rewrite_html(out)?;
|
let mut out = self.rewrite_html(
|
||||||
|
out,
|
||||||
|
&title,
|
||||||
|
&head,
|
||||||
|
&page_metadata.scripts,
|
||||||
|
&page_metadata.styles,
|
||||||
|
)?;
|
||||||
|
|
||||||
if let Some(data) = extra {
|
if let Some(data) = extra {
|
||||||
if let Some(extra) = crate::extras::get_extra(&data.name) {
|
if let Some(extra) = crate::extras::get_extra(&data.name) {
|
||||||
|
|
|
@ -5,18 +5,6 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="referrer" content="no-referrer">
|
<meta name="referrer" content="no-referrer">
|
||||||
<link rel="stylesheet" href="/styles/index.css">
|
<link rel="stylesheet" href="/styles/index.css">
|
||||||
|
|
||||||
<title>{{ title }}</title>
|
|
||||||
{# header information from webdog #}
|
|
||||||
{{ head | safe }}
|
|
||||||
{# include scripts defined in the page frontmatter #}
|
|
||||||
{% for script in scripts %}
|
|
||||||
<script type="text/javascript" src="{{script}}" defer></script>
|
|
||||||
{% endfor %}
|
|
||||||
{# include styles defined in the page frontmatter #}
|
|
||||||
{% for style in styles %}
|
|
||||||
<link rel="stylesheet" href="/styles/{{style}}">
|
|
||||||
{% endfor %}
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue