Generate render link based on path to file.
This commit is contained in:
parent
3e952ef0f4
commit
ff478253c3
@ -2,6 +2,7 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use super::macros::render;
|
use super::macros::render;
|
||||||
use super::render_context::RenderContext;
|
use super::render_context::RenderContext;
|
||||||
|
use crate::context::macros::push_file;
|
||||||
use crate::context::RenderDocumentElement;
|
use crate::context::RenderDocumentElement;
|
||||||
use crate::context::RenderRealFootnoteDefinition;
|
use crate::context::RenderRealFootnoteDefinition;
|
||||||
use crate::error::CustomError;
|
use crate::error::CustomError;
|
||||||
@ -164,32 +165,34 @@ render!(
|
|||||||
.get_index_page()
|
.get_index_page()
|
||||||
.ok_or_else(|| format!("Blog post {} needs an index page.", original.original.id))?;
|
.ok_or_else(|| format!("Blog post {} needs an index page.", original.original.id))?;
|
||||||
|
|
||||||
let title = index_page.title.clone();
|
push_file!(render_context, &index_page.src, {
|
||||||
|
let title = index_page.title.clone();
|
||||||
|
|
||||||
let children = index_page
|
let children = index_page
|
||||||
.children
|
.children
|
||||||
.iter()
|
.iter()
|
||||||
.map(|child| RenderDocumentElement::new(render_context.clone(), child))
|
.map(|child| RenderDocumentElement::new(render_context.clone(), child))
|
||||||
.collect::<Result<Vec<_>, _>>()?;
|
.collect::<Result<Vec<_>, _>>()?;
|
||||||
|
|
||||||
let footnotes = {
|
let footnotes = {
|
||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
|
|
||||||
for footnote in index_page.footnotes.iter() {
|
for footnote in index_page.footnotes.iter() {
|
||||||
ret.push(RenderRealFootnoteDefinition::new(
|
ret.push(RenderRealFootnoteDefinition::new(
|
||||||
render_context.clone(),
|
render_context.clone(),
|
||||||
footnote,
|
footnote,
|
||||||
)?);
|
)?);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret
|
ret
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(RenderBlogStreamEntry {
|
Ok(RenderBlogStreamEntry {
|
||||||
title,
|
title,
|
||||||
self_link: Some(link_to_blog_post),
|
self_link: Some(link_to_blog_post),
|
||||||
children,
|
children,
|
||||||
footnotes,
|
footnotes,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use crate::error::CustomError;
|
use crate::error::CustomError;
|
||||||
@ -33,4 +34,13 @@ impl DependencyManager {
|
|||||||
.expect("Popped more files off the dependency manager file stack than exist.");
|
.expect("Popped more files off the dependency manager file stack than exist.");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_current_folder(&self) -> Result<&Path, CustomError> {
|
||||||
|
Ok(self
|
||||||
|
.file_stack
|
||||||
|
.last()
|
||||||
|
.ok_or("No current file")?
|
||||||
|
.parent()
|
||||||
|
.ok_or("Current file was not in a directory")?)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ use super::render_context::RenderContext;
|
|||||||
use super::GlobalSettings;
|
use super::GlobalSettings;
|
||||||
use super::PageHeader;
|
use super::PageHeader;
|
||||||
use super::RenderDocumentElement;
|
use super::RenderDocumentElement;
|
||||||
|
use crate::context::macros::push_file;
|
||||||
use crate::error::CustomError;
|
use crate::error::CustomError;
|
||||||
use crate::intermediate::get_web_path;
|
use crate::intermediate::get_web_path;
|
||||||
use crate::intermediate::IPage;
|
use crate::intermediate::IPage;
|
||||||
@ -28,75 +29,77 @@ pub(crate) struct RenderPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render!(RenderPage, IPage, original, render_context, {
|
render!(RenderPage, IPage, original, render_context, {
|
||||||
let css_files = vec![
|
push_file!(render_context, &original.src, {
|
||||||
get_web_path(
|
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.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.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.children.iter() {
|
for child in original.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.footnotes.iter() {
|
for footnote in original.footnotes.iter() {
|
||||||
ret.push(RenderRealFootnoteDefinition::new(
|
ret.push(RenderRealFootnoteDefinition::new(
|
||||||
render_context.clone(),
|
render_context.clone(),
|
||||||
footnote,
|
footnote,
|
||||||
)?);
|
)?);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret
|
ret
|
||||||
};
|
};
|
||||||
|
|
||||||
let ret = RenderPage {
|
let ret = RenderPage {
|
||||||
global_settings,
|
global_settings,
|
||||||
page_header: Some(page_header),
|
page_header: Some(page_header),
|
||||||
title: original.title.clone(),
|
title: original.title.clone(),
|
||||||
self_link: Some(link_to_blog_post),
|
self_link: Some(link_to_blog_post),
|
||||||
children,
|
children,
|
||||||
footnotes,
|
footnotes,
|
||||||
};
|
};
|
||||||
Ok(ret)
|
Ok(ret)
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
@ -143,7 +143,29 @@ impl LinkTarget {
|
|||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
target_id
|
target_id
|
||||||
))),
|
))),
|
||||||
LinkTarget::Image { src, .. } => Ok(Some(src.clone())),
|
LinkTarget::Image { src, .. } => {
|
||||||
|
let path_to_file = render_context
|
||||||
|
.dependency_manager
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.get_current_folder()?
|
||||||
|
.join(src)
|
||||||
|
.canonicalize()?;
|
||||||
|
let input_root_directory = render_context.config.get_root_directory();
|
||||||
|
let relative_path_to_file = path_to_file.strip_prefix(input_root_directory)?;
|
||||||
|
dbg!(input_root_directory);
|
||||||
|
dbg!(&path_to_file);
|
||||||
|
dbg!(relative_path_to_file);
|
||||||
|
let web_path = get_web_path(
|
||||||
|
render_context.config,
|
||||||
|
render_context.output_root_directory,
|
||||||
|
render_context.output_file,
|
||||||
|
relative_path_to_file,
|
||||||
|
)?;
|
||||||
|
dbg!(&web_path);
|
||||||
|
// TODO: Record interest in copying the file to output.
|
||||||
|
Ok(Some(web_path))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user