diff --git a/CHANGELOG.md b/CHANGELOG.md index 0acbf80..cd0c1c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 0.3.1 (unreleased) - Update Tera to fix regression +- Add option for inline in markdown filter ## 0.3.0 (2018-01-25) diff --git a/components/templates/src/filters.rs b/components/templates/src/filters.rs index 40f2f7c..a9a356d 100644 --- a/components/templates/src/filters.rs +++ b/components/templates/src/filters.rs @@ -5,13 +5,25 @@ use pulldown_cmark as cmark; use tera::{Value, to_value, Result as TeraResult}; -pub fn markdown(value: Value, _: HashMap) -> TeraResult { +pub fn markdown(value: Value, args: HashMap) -> TeraResult { let s = try_get_value!("markdown", "value", String, value); + let inline = match args.get("inline") { + Some(val) => try_get_value!("markdown", "inline", bool, val), + None => false, + }; let mut html = String::new(); let parser = cmark::Parser::new(&s); cmark::html::push_html(&mut html, parser); + if inline { + html = html + .trim_left_matches("

") + // pulldown_cmark finishes a paragraph with `

\n` + .trim_right_matches("

\n") + .to_string(); + } + Ok(to_value(&html).unwrap()) } @@ -50,6 +62,15 @@ mod tests { assert_eq!(result.unwrap(), to_value(&"

Hey

\n").unwrap()); } + #[test] + fn markdown_filter_inline() { + let mut args = HashMap::new(); + args.insert("inline".to_string(), to_value(true).unwrap()); + let result = markdown(to_value(&"Using `map`, `filter`, and `fold` instead of `for`").unwrap(), args); + assert!(result.is_ok()); + assert_eq!(result.unwrap(), to_value(&"Using map, filter, and fold instead of for").unwrap()); + } + #[test] fn base64_encode_filter() { // from https://tools.ietf.org/html/rfc4648#section-10 diff --git a/docs/content/documentation/templates/overview.md b/docs/content/documentation/templates/overview.md index 03f77ec..33b9c24 100644 --- a/docs/content/documentation/templates/overview.md +++ b/docs/content/documentation/templates/overview.md @@ -30,6 +30,13 @@ Gutenberg adds a few filters, in addition of the ones already present in Tera. Converts the given variable to HTML using Markdown. This doesn't apply any of the features that Gutenberg adds to Markdown: internal links, shortcodes etc won't work. +By default, the filter will wrap all text into a paragraph. To disable that, you can +pass `true` to the inline argument: + +```jinja2 +{{ some_text | markdown(inline=true) }} +``` + ### base64_encode Encode the variable to base64.