use super::footnote_definition::RenderRealFootnoteDefinition; use super::macros::render; use super::render_context::RenderContext; use super::GlobalSettings; use super::PageHeader; use super::RenderDocumentElement; use crate::error::CustomError; use crate::intermediate::get_web_path; use crate::intermediate::IPage; use serde::Serialize; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "page")] pub(crate) struct RenderPage { global_settings: GlobalSettings, page_header: Option, /// The title that will be shown visibly on the page. title: Option, self_link: Option, children: Vec, footnotes: Vec, } render!(RenderPage, IPage, original, render_context, { 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, "blog_post.js", )?]; let global_settings = GlobalSettings::new(original.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 mut children = Vec::new(); for child in original.children.iter() { children.push(RenderDocumentElement::new(render_context.clone(), child)?); } children }; let footnotes = { let mut ret = Vec::new(); for footnote in original.footnotes.iter() { ret.push(RenderRealFootnoteDefinition::new( render_context.clone(), footnote, )?); } ret }; let ret = RenderPage { global_settings, page_header: Some(page_header), title: original.title.clone(), self_link: Some(link_to_blog_post), children, footnotes, }; Ok(ret) });