mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02: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,24 +425,17 @@ fn render_into(
|
|||
append_str_to_nodes(rendered_nodes, text);
|
||||
}
|
||||
Replacement { key, .. } if key == "FrontSide" => {
|
||||
if let Some(frontside) = &context.frontside {
|
||||
if context.partial_for_python {
|
||||
// defer FrontSide rendering to Python, as extra
|
||||
// filters may be required
|
||||
rendered_nodes.push(RenderedNode::Replacement {
|
||||
field_name: (*key).to_string(),
|
||||
filters: vec![],
|
||||
current_text: "".into(),
|
||||
});
|
||||
} else {
|
||||
append_str_to_nodes(rendered_nodes, frontside);
|
||||
}
|
||||
} else {
|
||||
// Not valid on the question side
|
||||
return Err(TemplateError::FieldNotFound {
|
||||
field: "FrontSide".into(),
|
||||
filters: "".into(),
|
||||
let frontside = context.frontside.as_ref().copied().unwrap_or_default();
|
||||
if context.partial_for_python {
|
||||
// defer FrontSide rendering to Python, as extra
|
||||
// filters may be required
|
||||
rendered_nodes.push(RenderedNode::Replacement {
|
||||
field_name: (*key).to_string(),
|
||||
filters: vec![],
|
||||
current_text: "".into(),
|
||||
});
|
||||
} else {
|
||||
append_str_to_nodes(rendered_nodes, frontside);
|
||||
}
|
||||
}
|
||||
Replacement { key, filters } => {
|
||||
|
@ -589,6 +582,7 @@ where
|
|||
// Rendering both sides
|
||||
//----------------------------------------
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct RenderCardRequest<'a> {
|
||||
pub qfmt: &'a str,
|
||||
pub afmt: &'a str,
|
||||
|
@ -1219,7 +1213,7 @@ mod test {
|
|||
|
||||
#[test]
|
||||
fn render_card() {
|
||||
let map: HashMap<_, _> = vec![("E", "")]
|
||||
let map: HashMap<_, _> = vec![("E", ""), ("N", "N")]
|
||||
.into_iter()
|
||||
.map(|r| (r.0, r.1.into()))
|
||||
.collect();
|
||||
|
@ -1227,7 +1221,7 @@ mod test {
|
|||
let tr = I18n::template_only();
|
||||
use crate::template::RenderedNode as FN;
|
||||
|
||||
let qnodes = super::render_card(RenderCardRequest {
|
||||
let mut req = RenderCardRequest {
|
||||
qfmt: "test{{E}}",
|
||||
afmt: "",
|
||||
field_map: &map,
|
||||
|
@ -1236,9 +1230,8 @@ mod test {
|
|||
browser: false,
|
||||
tr: &tr,
|
||||
partial_render: true,
|
||||
})
|
||||
.unwrap()
|
||||
.0;
|
||||
};
|
||||
let qnodes = super::render_card(req.clone()).unwrap().0;
|
||||
assert_eq!(
|
||||
qnodes[0],
|
||||
FN::Text {
|
||||
|
@ -1250,5 +1243,24 @@ mod test {
|
|||
} else {
|
||||
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