Update the dependency manager file stack when rendering blog post pages.

This commit is contained in:
Tom Alexander 2025-02-08 18:01:59 -05:00
parent 3867f965d2
commit 4e0f66401d
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
2 changed files with 89 additions and 58 deletions

View File

@ -49,76 +49,90 @@ render!(
original, original,
render_context, render_context,
{ {
let css_files = vec![ render_context
get_web_path( .dependency_manager
.lock()
.unwrap()
.push_file(&original.page.src)?;
let ret = (|| {
let css_files = vec![
get_web_path(
render_context.config,
render_context.output_root_directory,
render_context.output_file,
"stylesheet/reset.css",
)?,
get_web_path(
render_context.config,
render_context.output_root_directory,
render_context.output_file,
"stylesheet/main.css",
)?,
];
let js_files = vec![get_web_path(
render_context.config, render_context.config,
render_context.output_root_directory, render_context.output_root_directory,
render_context.output_file, render_context.output_file,
"stylesheet/reset.css", "blog_post.js",
)?, )?];
get_web_path( let global_settings =
GlobalSettings::new(original.page.title.clone(), css_files, js_files);
let page_header = PageHeader::new(
render_context.config.get_site_title().map(str::to_string),
Some(get_web_path(
render_context.config,
render_context.output_root_directory,
render_context.output_file,
"",
)?),
);
let link_to_blog_post = get_web_path(
render_context.config, render_context.config,
render_context.output_root_directory, render_context.output_root_directory,
render_context.output_file, render_context.output_file,
"stylesheet/main.css", render_context
)?, .output_file
]; .strip_prefix(render_context.output_root_directory)?,
let js_files = vec![get_web_path( )?;
render_context.config,
render_context.output_root_directory,
render_context.output_file,
"blog_post.js",
)?];
let global_settings = GlobalSettings::new(original.page.title.clone(), css_files, js_files);
let page_header = PageHeader::new(
render_context.config.get_site_title().map(str::to_string),
Some(get_web_path(
render_context.config,
render_context.output_root_directory,
render_context.output_file,
"",
)?),
);
let link_to_blog_post = get_web_path(
render_context.config,
render_context.output_root_directory,
render_context.output_file,
render_context
.output_file
.strip_prefix(render_context.output_root_directory)?,
)?;
let children = { let children = {
let mut children = Vec::new(); let mut children = Vec::new();
for child in original.page.children.iter() { for child in original.page.children.iter() {
children.push(RenderDocumentElement::new(render_context.clone(), child)?); children.push(RenderDocumentElement::new(render_context.clone(), child)?);
} }
children children
}; };
let footnotes = { let footnotes = {
let mut ret = Vec::new(); let mut ret = Vec::new();
for footnote in original.page.footnotes.iter() { for footnote in original.page.footnotes.iter() {
ret.push(RenderRealFootnoteDefinition::new( ret.push(RenderRealFootnoteDefinition::new(
render_context.clone(), render_context.clone(),
footnote, footnote,
)?); )?);
} }
ret ret
}; };
let ret = RenderBlogPostPage { let ret = RenderBlogPostPage {
global_settings, global_settings,
page_header: Some(page_header), page_header: Some(page_header),
title: original.page.title.clone(), title: original.page.title.clone(),
self_link: Some(link_to_blog_post), self_link: Some(link_to_blog_post),
children, children,
footnotes, footnotes,
}; };
Ok(ret) Ok(ret)
})();
render_context
.dependency_manager
.lock()
.unwrap()
.pop_file()?;
ret
} }
); );

View File

@ -1,5 +1,7 @@
use std::path::PathBuf; use std::path::PathBuf;
use crate::error::CustomError;
pub(crate) type RefDependencyManager = std::sync::Arc<std::sync::Mutex<DependencyManager>>; pub(crate) type RefDependencyManager = std::sync::Arc<std::sync::Mutex<DependencyManager>>;
#[derive(Debug)] #[derive(Debug)]
@ -16,4 +18,19 @@ impl DependencyManager {
file_stack: Vec::new(), file_stack: Vec::new(),
} }
} }
pub(crate) fn push_file<P>(&mut self, path: P) -> Result<(), CustomError>
where
P: Into<PathBuf>,
{
self.file_stack.push(path.into());
Ok(())
}
pub(crate) fn pop_file(&mut self) -> Result<(), CustomError> {
self.file_stack
.pop()
.expect("Popped more files off the dependency manager file stack than exist.");
Ok(())
}
} }