Create a page header struct.
This commit is contained in:
parent
1ff41940a5
commit
35dbab0ceb
@ -67,4 +67,8 @@ impl Config {
|
||||
pub(crate) fn get_web_root(&self) -> Option<&str> {
|
||||
self.raw.web_root.as_deref()
|
||||
}
|
||||
|
||||
pub(crate) fn get_site_title(&self) -> Option<&str> {
|
||||
self.raw.site_title.as_deref()
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ use serde::Serialize;
|
||||
/// This is the struct for the writer.toml config file that ends up in each site's root directory.
|
||||
#[derive(Deserialize, Serialize)]
|
||||
pub(crate) struct RawConfig {
|
||||
site_title: String,
|
||||
pub(super) site_title: Option<String>,
|
||||
author: Option<String>,
|
||||
email: Option<String>,
|
||||
pub(super) use_relative_paths: Option<bool>,
|
||||
@ -14,7 +14,7 @@ pub(crate) struct RawConfig {
|
||||
impl Default for RawConfig {
|
||||
fn default() -> Self {
|
||||
RawConfig {
|
||||
site_title: "My super awesome website".to_owned(),
|
||||
site_title: None,
|
||||
author: None,
|
||||
email: None,
|
||||
use_relative_paths: None,
|
||||
|
@ -35,6 +35,7 @@ mod line_break;
|
||||
mod macros;
|
||||
mod object;
|
||||
mod org_macro;
|
||||
mod page_header;
|
||||
mod paragraph;
|
||||
mod plain_link;
|
||||
mod plain_list;
|
||||
@ -69,4 +70,5 @@ pub(crate) use footnote_definition::RenderRealFootnoteDefinition;
|
||||
pub(crate) use global_settings::GlobalSettings;
|
||||
pub(crate) use heading::RenderHeading;
|
||||
pub(crate) use object::RenderObject;
|
||||
pub(crate) use page_header::PageHeader;
|
||||
pub(crate) use section::RenderSection;
|
||||
|
19
src/context/page_header.rs
Normal file
19
src/context/page_header.rs
Normal file
@ -0,0 +1,19 @@
|
||||
use serde::Serialize;
|
||||
|
||||
/// The header that goes above the content of the page.
|
||||
///
|
||||
/// This header will be mostly the same on every page.
|
||||
#[derive(Debug, Serialize)]
|
||||
pub(crate) struct PageHeader {
|
||||
website_title: Option<String>,
|
||||
home_link: Option<String>,
|
||||
}
|
||||
|
||||
impl PageHeader {
|
||||
pub(crate) fn new(website_title: Option<String>, home_link: Option<String>) -> PageHeader {
|
||||
PageHeader {
|
||||
website_title,
|
||||
home_link,
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ use std::path::PathBuf;
|
||||
|
||||
use crate::config::Config;
|
||||
use crate::context::GlobalSettings;
|
||||
use crate::context::PageHeader;
|
||||
use crate::context::RenderBlogPostPage;
|
||||
use crate::context::RenderDocumentElement;
|
||||
use crate::context::RenderRealFootnoteDefinition;
|
||||
@ -37,6 +38,10 @@ pub(crate) fn convert_blog_post_page_to_render_context<D: AsRef<Path>, F: AsRef<
|
||||
"blog_post.js",
|
||||
)?];
|
||||
let global_settings = GlobalSettings::new(page.title.clone(), css_files, js_files);
|
||||
let page_header = PageHeader::new(
|
||||
config.get_site_title().map(str::to_string),
|
||||
Some(get_web_path(config, output_directory, output_file, "")?),
|
||||
);
|
||||
let link_to_blog_post = get_web_path(
|
||||
config,
|
||||
output_directory,
|
||||
@ -100,9 +105,7 @@ fn get_web_path<D: AsRef<Path>, F: AsRef<Path>, P: AsRef<Path>>(
|
||||
containing_file_relative_to_output_directory
|
||||
.parent()
|
||||
.ok_or("File should exist in a folder.")?,
|
||||
path_from_web_root
|
||||
.parent()
|
||||
.ok_or("File should exist in a folder.")?,
|
||||
path_from_web_root.parent().unwrap_or(&Path::new("")),
|
||||
)
|
||||
.collect::<PathBuf>();
|
||||
// Subtracting 1 from the depth to "remove" the file name.
|
||||
|
@ -34,7 +34,7 @@ impl<'a> RendererIntegration<'a> for DusterRenderer<'a> {
|
||||
}
|
||||
// TODO: This is horribly inefficient. I am converting from a serialize type to json and back again so I can use the existing implementation of IntoContextElement. Honestly, I probably need to rework a lot of duster now that I've improved in rust over the years.
|
||||
let json_context = serde_json::to_string(&context)?;
|
||||
println!("{}", json_context);
|
||||
// println!("{}", json_context);
|
||||
let parsed_context: serde_json::Value = serde_json::from_str(json_context.as_str())?;
|
||||
let rendered_output = dust_renderer.render("main", Some(&parsed_context))?;
|
||||
Ok(rendered_output)
|
||||
|
Loading…
x
Reference in New Issue
Block a user