pub struct HtmlRenderer;Expand description
High level API to render a note providing its content and some context.
Implementations§
Source§impl HtmlRenderer
impl HtmlRenderer
Sourcepub fn viewer_page<T: Content>(
context: Context,
content: T,
) -> Result<String, NoteError>
pub fn viewer_page<T: Content>( context: Context, content: T, ) -> Result<String, NoteError>
Returns the HTML rendition of a ContentString. The markup
rendition engine is determined, by the file extension of the variable
context.path. The resulting HTML and other HTML template variables
originating from context are inserted into the TMPL_HTML_VIEWER
template (which can be replaced at runtime) before being returned. This
function is stateless.
use tpnote_lib::config::TMPL_HTML_VAR_VIEWER_DOC_JS;
use tpnote_lib::content::Content;
use tpnote_lib::content::ContentString;
use tpnote_lib::context::Context;
use tpnote_lib::workflow::HtmlRenderer;
use std::env::temp_dir;
use std::fs;
use std::path::Path;
// Prepare test: create existing note file.
let raw = String::from(r#"---
title: "My day"
subtitle: "Note"
---
Body text
"#);
// Start test
let mut context = Context::from(Path::new("/path/to/note.md"));
// We do not inject any JavaScript.
context.insert(TMPL_HTML_VAR_VIEWER_DOC_JS, &"".to_string());
// Render.
let html = HtmlRenderer::viewer_page::<ContentString>(context, raw.into())
.unwrap();
// Check the HTML rendition.
assert!(html.starts_with("<!DOCTYPE html>\n<html"))A more elaborated example that reads from disk:
use tpnote_lib::config::LIB_CFG;
use tpnote_lib::config::TMPL_HTML_VAR_VIEWER_DOC_JS;
use tpnote_lib::content::Content;
use tpnote_lib::content::ContentString;
use tpnote_lib::context::Context;
use tpnote_lib::workflow::HtmlRenderer;
use std::env::temp_dir;
use std::fs;
// Prepare test: create existing note file.
let raw = r#"---
title: "My day2"
subtitle: "Note"
---
Body text
"#;
let notefile = temp_dir().join("20221030-My day2--Note.md");
fs::write(¬efile, raw.as_bytes()).unwrap();
// Start test
let mut context = Context::from(¬efile);
// We do not inject any JavaScript.
context.insert(TMPL_HTML_VAR_VIEWER_DOC_JS, &"".to_string());
// Render.
let content = ContentString::open(&context.path).unwrap();
// You can plug in your own type (must impl. `Content`).
let html = HtmlRenderer::viewer_page(context, content).unwrap();
// Check the HTML rendition.
assert!(html.starts_with("<!DOCTYPE html>\n<html"))Sourcepub fn exporter_page<T: Content>(
context: Context,
content: T,
) -> Result<String, NoteError>
pub fn exporter_page<T: Content>( context: Context, content: T, ) -> Result<String, NoteError>
Returns the HTML rendition of a ContentString. The markup rendition
engine is determined, by the file extension of the variable context.path.
The resulting HTML and other HTML template variables originating from
context are inserted into the TMPL_HTML_EXPORTER template (which can be
replaced at runtime) before being returned. This function is stateless.
use tpnote_lib::config::TMPL_HTML_VAR_VIEWER_DOC_JS;
use tpnote_lib::content::Content;
use tpnote_lib::content::ContentString;
use tpnote_lib::context::Context;
use tpnote_lib::workflow::HtmlRenderer;
use std::env::temp_dir;
use std::fs;
use std::path::Path;
// Prepare test: create existing note file.
let raw = String::from(r#"---
title: "My day"
subtitle: "Note"
---
Body text
"#);
// Start test
let mut context = Context::from(Path::new("/path/to/note.md"));
// The exporter template does not insert any JavaScript.
// Render.
let html = HtmlRenderer::exporter_page::<ContentString>(context, raw.into())
.unwrap();
// Check the HTML rendition.
assert!(html.starts_with("<!DOCTYPE html>\n<html"))Sourcepub fn error_page<T: Content>(
context: Context,
note_erroneous_content: T,
error_message: &str,
) -> Result<String, NoteError>
pub fn error_page<T: Content>( context: Context, note_erroneous_content: T, error_message: &str, ) -> Result<String, NoteError>
When the header can not be deserialized, the file located in
context.path is rendered as “Error HTML page”.
The erroneous content is rendered to html with
parse_hyperlinks::renderer::text_rawlinks2html and inserted in
the TMPL_HTML_VIEWER_ERROR template (can be replace at runtime).
This template expects the template variables TMPL_VAR_PATH
and TMPL_HTML_VAR_VIEWER_DOC_JS in context to be set.
NB: The value of TMPL_VAR_PATH equals context.path.
use tpnote_lib::config::LIB_CFG;
use tpnote_lib::config::TMPL_HTML_VAR_DOC_ERROR;
use tpnote_lib::config::TMPL_HTML_VAR_VIEWER_DOC_JS;
use tpnote_lib::content::Content;
use tpnote_lib::content::ContentString;
use tpnote_lib::context::Context;
use tpnote_lib::error::NoteError;
use tpnote_lib::workflow::HtmlRenderer;
use std::env::temp_dir;
use std::fs;
// Prepare test: create existing erroneous note file.
let raw_error = r#"---
title: "My day3"
subtitle: "Note"
--
Body text
"#;
let notefile = temp_dir().join("20221030-My day3--Note.md");
fs::write(¬efile, raw_error.as_bytes()).unwrap();
let mut context = Context::from(¬efile);
let e = NoteError::FrontMatterFieldMissing { field_name: "title".to_string() };
// Start test
let mut context = Context::from(¬efile);
// We do not inject any JavaScript.
context.insert(TMPL_HTML_VAR_VIEWER_DOC_JS, "");
// Render.
// Read from file.
// You can plug in your own type (must impl. `Content`).
let content = ContentString::open(&context.path).unwrap();
let html = HtmlRenderer::error_page(
context, content, &e.to_string()).unwrap();
// Check the HTML rendition.
assert!(html.starts_with("<!DOCTYPE html>\n<html"))Auto Trait Implementations§
impl Freeze for HtmlRenderer
impl RefUnwindSafe for HtmlRenderer
impl Send for HtmlRenderer
impl Sync for HtmlRenderer
impl Unpin for HtmlRenderer
impl UnwindSafe for HtmlRenderer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more