Make writing and rendering proper
This commit is contained in:
parent
a21e689a6f
commit
510d744ccb
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
/target/
|
/target/
|
||||||
|
/public/
|
@ -6,7 +6,7 @@ use error::Error;
|
|||||||
|
|
||||||
use std::fs::{create_dir_all, File};
|
use std::fs::{create_dir_all, File};
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::path::Path;
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
const DEFAULT_CSS: &'static str = include_str!("templates/default-css.css");
|
const DEFAULT_CSS: &'static str = include_str!("templates/default-css.css");
|
||||||
const PAGE_TEMPLATE: &'static str = include_str!("templates/page-template.html");
|
const PAGE_TEMPLATE: &'static str = include_str!("templates/page-template.html");
|
||||||
@ -24,13 +24,15 @@ fn write_file<T: Into<String>, U: Into<String>>(path_str: T, content: U) -> Resu
|
|||||||
let path_str = path_str.into();
|
let path_str = path_str.into();
|
||||||
let content = content.into();
|
let content = content.into();
|
||||||
|
|
||||||
let path = Path::new(&path_str);
|
let mut path = PathBuf::from(&path_str);
|
||||||
if let Some(parent) = path.parent() {
|
if let (Some(parent), Some(file_name)) = (path.clone().parent(), path.clone().file_name()) {
|
||||||
create_dir_all(parent)?;
|
let parent = Path::new("public").join(parent);
|
||||||
|
create_dir_all(parent.clone())?;
|
||||||
|
path = parent.join(file_name);
|
||||||
} else {
|
} else {
|
||||||
return Err(Error::new(
|
return Err(Error::new(
|
||||||
LogLevel::SEVERE,
|
LogLevel::SEVERE,
|
||||||
format!("Could not find parent folder for {}", path_str),
|
format!("Could not find parent folder or file name for {}", path_str),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if path.exists() {
|
if path.exists() {
|
||||||
@ -54,8 +56,9 @@ pub fn build(logger: &Logger) -> Result<(), Error> {
|
|||||||
let config = fetch_config()?;
|
let config = fetch_config()?;
|
||||||
|
|
||||||
if config.global_config.website.use_default_css {
|
if config.global_config.website.use_default_css {
|
||||||
logger.log(LogLevel::DETAIL, "Adding public/css/default.css");
|
let css_path = "css/default.css";
|
||||||
write_file("public/css/default.css", DEFAULT_CSS)?;
|
logger.log(LogLevel::DETAIL, format!("Adding public/{}", css_path));
|
||||||
|
write_file(css_path, DEFAULT_CSS)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.log(LogLevel::INFO, "Generating page templates");
|
logger.log(LogLevel::INFO, "Generating page templates");
|
||||||
@ -71,19 +74,32 @@ pub fn build(logger: &Logger) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.log(LogLevel::INFO, "Rendering");
|
logger.log(LogLevel::INFO, "Rendering");
|
||||||
logger.log(LogLevel::DETAILER, "Rendering public/test.html");
|
let configs = config.get_configs()?;
|
||||||
let rendered = match config.get_configs_for(0) {
|
let mut renders = Vec::new();
|
||||||
Ok(page_config) => page_template.render(&Template::page_data_from(
|
for config in configs.clone() {
|
||||||
page_config.clone(),
|
logger.log(
|
||||||
navbar_content,
|
LogLevel::DETAILER,
|
||||||
renderer::render_markdown_content(&page_config).unwrap(),
|
format!("Rendering {}", config.page_config.page.html_path),
|
||||||
)),
|
);
|
||||||
Err(err) => panic!(err),
|
let markdown = renderer::render_markdown_content(&config)?;
|
||||||
};
|
let data = Template::page_data_from(config.clone(), navbar_content.clone(), markdown);
|
||||||
|
let rendered = page_template.render(&data);
|
||||||
|
renders.push(rendered);
|
||||||
|
}
|
||||||
|
|
||||||
logger.log(LogLevel::INFO, "Writing");
|
logger.log(LogLevel::INFO, "Writing");
|
||||||
logger.log(LogLevel::DETAILER, "Writing public/test.html");
|
for (idx, config) in configs.clone().iter().enumerate() {
|
||||||
write_file("public/test.html", rendered)?;
|
let html_path = config.clone().page_config.page.html_path;
|
||||||
|
logger.log(LogLevel::DETAILER, format!("Writing public/{}", html_path));
|
||||||
|
if let Some(render) = renders.get(idx) {
|
||||||
|
write_file(html_path, render.clone())?;
|
||||||
|
} else {
|
||||||
|
return Err(Error::new(
|
||||||
|
LogLevel::SEVERE,
|
||||||
|
format!("Internal error; Render not found for file: {}", html_path),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
logger.log(LogLevel::INFO, "Done!");
|
logger.log(LogLevel::INFO, "Done!");
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use config_toml::{GlobalConfigToml, PageConfigToml};
|
use config_toml::{GlobalConfigToml, PageConfigToml};
|
||||||
use std::io::Error;
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use error::Error;
|
||||||
|
use logger::LogLevel;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct SinglePageConfigs {
|
pub struct SinglePageConfigs {
|
||||||
@ -34,7 +35,7 @@ impl Config {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_configs_for(&self, idx: u32) -> Result<SinglePageConfigs, String> {
|
pub fn get_configs_for(&self, idx: u32) -> Result<SinglePageConfigs, Error> {
|
||||||
if let (Some(page_config), Some(page_path)) = (
|
if let (Some(page_config), Some(page_path)) = (
|
||||||
self.page_configs.get(idx as usize),
|
self.page_configs.get(idx as usize),
|
||||||
self.page_config_paths.get(idx as usize),
|
self.page_config_paths.get(idx as usize),
|
||||||
@ -45,7 +46,19 @@ impl Config {
|
|||||||
page_config_path: page_path.clone(),
|
page_config_path: page_path.clone(),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
Err(format!("Failed to get page config, idx: {}", idx))
|
Err(Error::new(
|
||||||
|
LogLevel::SEVERE,
|
||||||
|
format!("Failed to get page config, idx: {}", idx),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_configs(&self) -> Result<Vec<SinglePageConfigs>, Error> {
|
||||||
|
let mut configs = Vec::new();
|
||||||
|
for idx in 0..self.page_configs.len() {
|
||||||
|
let config = self.get_configs_for(idx as u32)?;
|
||||||
|
configs.push(config);
|
||||||
|
}
|
||||||
|
Ok(configs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ use template::Template;
|
|||||||
use error::Error;
|
use error::Error;
|
||||||
use logger::LogLevel;
|
use logger::LogLevel;
|
||||||
|
|
||||||
pub fn render_markdown_content(config: &SinglePageConfigs) -> Result<String, String> {
|
pub fn render_markdown_content(config: &SinglePageConfigs) -> Result<String, Error> {
|
||||||
if let Some(parent) = config.page_config_path.parent() {
|
if let Some(parent) = config.page_config_path.parent() {
|
||||||
let path = parent.with_file_name(&config.page_config.page.content_path);
|
let path = parent.with_file_name(&config.page_config.page.content_path);
|
||||||
match File::open(&path) {
|
match File::open(&path) {
|
||||||
@ -21,12 +21,18 @@ pub fn render_markdown_content(config: &SinglePageConfigs) -> Result<String, Str
|
|||||||
html::push_html(&mut markdown, parser);
|
html::push_html(&mut markdown, parser);
|
||||||
Ok(markdown)
|
Ok(markdown)
|
||||||
}
|
}
|
||||||
Err(_) => Err(format!("Failed to open file: {}", path.to_str().unwrap())),
|
Err(_) => Err(Error::new(
|
||||||
|
LogLevel::SEVERE,
|
||||||
|
format!("Failed to open file: {}", path.to_str().unwrap()),
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Err(format!(
|
Err(Error::new(
|
||||||
"Failed to get page config parent: {}",
|
LogLevel::SEVERE,
|
||||||
config.page_config_path.to_str().unwrap()
|
format!(
|
||||||
|
"Failed to get page config parent: {}",
|
||||||
|
config.page_config_path.to_str().unwrap()
|
||||||
|
),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user