parent
49793314a0
commit
29ce510aa3
|
@ -3,6 +3,7 @@
|
||||||
## 0.3.1 (unreleased)
|
## 0.3.1 (unreleased)
|
||||||
|
|
||||||
- Update Tera to fix regression
|
- Update Tera to fix regression
|
||||||
|
- Add option for inline in markdown filter
|
||||||
|
|
||||||
## 0.3.0 (2018-01-25)
|
## 0.3.0 (2018-01-25)
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,25 @@ use pulldown_cmark as cmark;
|
||||||
use tera::{Value, to_value, Result as TeraResult};
|
use tera::{Value, to_value, Result as TeraResult};
|
||||||
|
|
||||||
|
|
||||||
pub fn markdown(value: Value, _: HashMap<String, Value>) -> TeraResult<Value> {
|
pub fn markdown(value: Value, args: HashMap<String, Value>) -> TeraResult<Value> {
|
||||||
let s = try_get_value!("markdown", "value", String, value);
|
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 mut html = String::new();
|
||||||
let parser = cmark::Parser::new(&s);
|
let parser = cmark::Parser::new(&s);
|
||||||
cmark::html::push_html(&mut html, parser);
|
cmark::html::push_html(&mut html, parser);
|
||||||
|
|
||||||
|
if inline {
|
||||||
|
html = html
|
||||||
|
.trim_left_matches("<p>")
|
||||||
|
// pulldown_cmark finishes a paragraph with `</p>\n`
|
||||||
|
.trim_right_matches("</p>\n")
|
||||||
|
.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
Ok(to_value(&html).unwrap())
|
Ok(to_value(&html).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +62,15 @@ mod tests {
|
||||||
assert_eq!(result.unwrap(), to_value(&"<h1>Hey</h1>\n").unwrap());
|
assert_eq!(result.unwrap(), to_value(&"<h1>Hey</h1>\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 <code>map</code>, <code>filter</code>, and <code>fold</code> instead of <code>for</code>").unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn base64_encode_filter() {
|
fn base64_encode_filter() {
|
||||||
// from https://tools.ietf.org/html/rfc4648#section-10
|
// from https://tools.ietf.org/html/rfc4648#section-10
|
||||||
|
|
|
@ -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
|
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.
|
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
|
### base64_encode
|
||||||
Encode the variable to base64.
|
Encode the variable to base64.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue