diff --git a/src/context/blog_post_page.rs b/src/context/blog_post_page.rs index 794b11d..2a764b3 100644 --- a/src/context/blog_post_page.rs +++ b/src/context/blog_post_page.rs @@ -49,76 +49,90 @@ render!( original, render_context, { - let css_files = vec![ - get_web_path( + render_context + .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.output_root_directory, render_context.output_file, - "stylesheet/reset.css", - )?, - get_web_path( + "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, - "stylesheet/main.css", - )?, - ]; - 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)?, - )?; + render_context + .output_file + .strip_prefix(render_context.output_root_directory)?, + )?; - let children = { - let mut children = Vec::new(); + let children = { + let mut children = Vec::new(); - for child in original.page.children.iter() { - children.push(RenderDocumentElement::new(render_context.clone(), child)?); - } + for child in original.page.children.iter() { + children.push(RenderDocumentElement::new(render_context.clone(), child)?); + } - children - }; + children + }; - let footnotes = { - let mut ret = Vec::new(); + let footnotes = { + let mut ret = Vec::new(); - for footnote in original.page.footnotes.iter() { - ret.push(RenderRealFootnoteDefinition::new( - render_context.clone(), - footnote, - )?); - } + for footnote in original.page.footnotes.iter() { + ret.push(RenderRealFootnoteDefinition::new( + render_context.clone(), + footnote, + )?); + } - ret - }; + ret + }; - let ret = RenderBlogPostPage { - global_settings, - page_header: Some(page_header), - title: original.page.title.clone(), - self_link: Some(link_to_blog_post), - children, - footnotes, - }; - Ok(ret) + let ret = RenderBlogPostPage { + global_settings, + page_header: Some(page_header), + title: original.page.title.clone(), + self_link: Some(link_to_blog_post), + children, + footnotes, + }; + Ok(ret) + })(); + render_context + .dependency_manager + .lock() + .unwrap() + .pop_file()?; + ret } ); diff --git a/src/context/dependency_manager.rs b/src/context/dependency_manager.rs index 0e32026..b685668 100644 --- a/src/context/dependency_manager.rs +++ b/src/context/dependency_manager.rs @@ -1,5 +1,7 @@ use std::path::PathBuf; +use crate::error::CustomError; + pub(crate) type RefDependencyManager = std::sync::Arc>; #[derive(Debug)] @@ -16,4 +18,19 @@ impl DependencyManager { file_stack: Vec::new(), } } + + pub(crate) fn push_file

(&mut self, path: P) -> Result<(), CustomError> + where + P: Into, + { + 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(()) + } }