mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
Tolerate {{FrontSide}} on the front side
https://forums.ankiweb.net/t/display-the-template-for-the-front-has-a-problem/32035
This commit is contained in:
parent
f076fa28af
commit
a623dff0da
1 changed files with 34 additions and 22 deletions
|
@ -425,7 +425,7 @@ fn render_into(
|
||||||
append_str_to_nodes(rendered_nodes, text);
|
append_str_to_nodes(rendered_nodes, text);
|
||||||
}
|
}
|
||||||
Replacement { key, .. } if key == "FrontSide" => {
|
Replacement { key, .. } if key == "FrontSide" => {
|
||||||
if let Some(frontside) = &context.frontside {
|
let frontside = context.frontside.as_ref().copied().unwrap_or_default();
|
||||||
if context.partial_for_python {
|
if context.partial_for_python {
|
||||||
// defer FrontSide rendering to Python, as extra
|
// defer FrontSide rendering to Python, as extra
|
||||||
// filters may be required
|
// filters may be required
|
||||||
|
@ -437,13 +437,6 @@ fn render_into(
|
||||||
} else {
|
} else {
|
||||||
append_str_to_nodes(rendered_nodes, frontside);
|
append_str_to_nodes(rendered_nodes, frontside);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Not valid on the question side
|
|
||||||
return Err(TemplateError::FieldNotFound {
|
|
||||||
field: "FrontSide".into(),
|
|
||||||
filters: "".into(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Replacement { key, filters } => {
|
Replacement { key, filters } => {
|
||||||
if key.is_empty() && !filters.is_empty() {
|
if key.is_empty() && !filters.is_empty() {
|
||||||
|
@ -589,6 +582,7 @@ where
|
||||||
// Rendering both sides
|
// Rendering both sides
|
||||||
//----------------------------------------
|
//----------------------------------------
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct RenderCardRequest<'a> {
|
pub struct RenderCardRequest<'a> {
|
||||||
pub qfmt: &'a str,
|
pub qfmt: &'a str,
|
||||||
pub afmt: &'a str,
|
pub afmt: &'a str,
|
||||||
|
@ -1219,7 +1213,7 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn render_card() {
|
fn render_card() {
|
||||||
let map: HashMap<_, _> = vec![("E", "")]
|
let map: HashMap<_, _> = vec![("E", ""), ("N", "N")]
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|r| (r.0, r.1.into()))
|
.map(|r| (r.0, r.1.into()))
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -1227,7 +1221,7 @@ mod test {
|
||||||
let tr = I18n::template_only();
|
let tr = I18n::template_only();
|
||||||
use crate::template::RenderedNode as FN;
|
use crate::template::RenderedNode as FN;
|
||||||
|
|
||||||
let qnodes = super::render_card(RenderCardRequest {
|
let mut req = RenderCardRequest {
|
||||||
qfmt: "test{{E}}",
|
qfmt: "test{{E}}",
|
||||||
afmt: "",
|
afmt: "",
|
||||||
field_map: &map,
|
field_map: &map,
|
||||||
|
@ -1236,9 +1230,8 @@ mod test {
|
||||||
browser: false,
|
browser: false,
|
||||||
tr: &tr,
|
tr: &tr,
|
||||||
partial_render: true,
|
partial_render: true,
|
||||||
})
|
};
|
||||||
.unwrap()
|
let qnodes = super::render_card(req.clone()).unwrap().0;
|
||||||
.0;
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
qnodes[0],
|
qnodes[0],
|
||||||
FN::Text {
|
FN::Text {
|
||||||
|
@ -1250,5 +1243,24 @@ mod test {
|
||||||
} else {
|
} else {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// a popular card template expects {{FrontSide}} to resolve to an empty
|
||||||
|
// string on the front side :-(
|
||||||
|
req.qfmt = "{{FrontSide}}{{N}}";
|
||||||
|
let qnodes = super::render_card(req.clone()).unwrap().0;
|
||||||
|
assert_eq!(
|
||||||
|
&qnodes,
|
||||||
|
&[
|
||||||
|
FN::Replacement {
|
||||||
|
field_name: "FrontSide".into(),
|
||||||
|
current_text: "".into(),
|
||||||
|
filters: vec![]
|
||||||
|
},
|
||||||
|
FN::Text { text: "N".into() }
|
||||||
|
]
|
||||||
|
);
|
||||||
|
req.partial_render = false;
|
||||||
|
let qnodes = super::render_card(req.clone()).unwrap().0;
|
||||||
|
assert_eq!(&qnodes, &[FN::Text { text: "N".into() }]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue