mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
move empty card check into template code
This commit is contained in:
parent
33367c8edf
commit
0cc1938657
4 changed files with 19 additions and 11 deletions
|
@ -34,7 +34,6 @@ from typing import Any, Dict, List, Optional, Tuple
|
||||||
import anki
|
import anki
|
||||||
from anki import hooks
|
from anki import hooks
|
||||||
from anki.cards import Card
|
from anki.cards import Card
|
||||||
from anki.lang import _
|
|
||||||
from anki.models import NoteType
|
from anki.models import NoteType
|
||||||
from anki.notes import Note
|
from anki.notes import Note
|
||||||
from anki.rsbackend import TemplateReplacementList
|
from anki.rsbackend import TemplateReplacementList
|
||||||
|
@ -128,13 +127,6 @@ def render_card(
|
||||||
answer_av_tags=[],
|
answer_av_tags=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
if not output.question_text.strip():
|
|
||||||
msg = _("The front of this card is blank.")
|
|
||||||
help = _("More info")
|
|
||||||
helplink = CARD_BLANK_HELP
|
|
||||||
msg += f"<br><a href='{helplink}'>{help}</a>"
|
|
||||||
output.question_text = msg
|
|
||||||
|
|
||||||
hooks.card_did_render(output, ctx)
|
hooks.card_did_render(output, ctx)
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
|
@ -223,7 +223,7 @@ def test_typecloze():
|
||||||
d = getEmptyCol()
|
d = getEmptyCol()
|
||||||
m = d.models.byName("Cloze")
|
m = d.models.byName("Cloze")
|
||||||
d.models.setCurrent(m)
|
d.models.setCurrent(m)
|
||||||
m["tmpls"][0]["qfmt"] = "{{type:cloze:Text}}"
|
m["tmpls"][0]["qfmt"] = "{{cloze:Text}}{{type:cloze:Text}}"
|
||||||
d.models.save(m)
|
d.models.save(m)
|
||||||
f = d.newNote()
|
f = d.newNote()
|
||||||
f["Text"] = "hello {{c1::world}}"
|
f["Text"] = "hello {{c1::world}}"
|
||||||
|
|
|
@ -13,3 +13,5 @@ no-such-field =
|
||||||
Found '{$found}', but there is no field called '{$field}'
|
Found '{$found}', but there is no field called '{$field}'
|
||||||
|
|
||||||
more-info = More information
|
more-info = More information
|
||||||
|
|
||||||
|
empty-front = The front of this card is blank.
|
||||||
|
|
|
@ -20,6 +20,8 @@ type TemplateResult<T> = std::result::Result<T, TemplateError>;
|
||||||
|
|
||||||
static TEMPLATE_ERROR_LINK: &str =
|
static TEMPLATE_ERROR_LINK: &str =
|
||||||
"https://anki.tenderapp.com/kb/problems/card-template-has-a-problem";
|
"https://anki.tenderapp.com/kb/problems/card-template-has-a-problem";
|
||||||
|
static TEMPLATE_BLANK_LINK: &str =
|
||||||
|
"https://anki.tenderapp.com/kb/card-appearance/the-front-of-this-card-is-blank";
|
||||||
|
|
||||||
// Lexing
|
// Lexing
|
||||||
//----------------------------------------
|
//----------------------------------------
|
||||||
|
@ -500,10 +502,22 @@ pub fn render_card(
|
||||||
|
|
||||||
// question side
|
// question side
|
||||||
let qnorm = without_legacy_template_directives(qfmt);
|
let qnorm = without_legacy_template_directives(qfmt);
|
||||||
let qnodes = ParsedTemplate::from_text(qnorm.as_ref())
|
let (qnodes, qtmpl) = ParsedTemplate::from_text(qnorm.as_ref())
|
||||||
.and_then(|tmpl| tmpl.render(&context))
|
.and_then(|tmpl| Ok((tmpl.render(&context)?, tmpl)))
|
||||||
.map_err(|e| template_error_to_anki_error(e, true, i18n))?;
|
.map_err(|e| template_error_to_anki_error(e, true, i18n))?;
|
||||||
|
|
||||||
|
// check if the front side was empty
|
||||||
|
if !qtmpl.renders_with_fields(context.nonempty_fields) {
|
||||||
|
let cat = i18n.get(TranslationFile::CardTemplates);
|
||||||
|
let info = format!(
|
||||||
|
"{}<br><a href='{}'>{}</a>",
|
||||||
|
cat.tr("empty-front"),
|
||||||
|
TEMPLATE_BLANK_LINK,
|
||||||
|
cat.tr("more-info")
|
||||||
|
);
|
||||||
|
return Err(AnkiError::TemplateError { info });
|
||||||
|
};
|
||||||
|
|
||||||
// answer side
|
// answer side
|
||||||
context.question_side = false;
|
context.question_side = false;
|
||||||
let anorm = without_legacy_template_directives(afmt);
|
let anorm = without_legacy_template_directives(afmt);
|
||||||
|
|
Loading…
Reference in a new issue