Merge pull request #1019 from hgiesel/cardspreviewfix

Note.ephemeral_card() fix
This commit is contained in:
Damien Elmes 2021-02-12 11:19:46 +10:00 committed by GitHub
commit a6f0c60ff8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 26 deletions

View file

@ -11,7 +11,7 @@ import anki # pylint: disable=unused-import
import anki._backend.backend_pb2 as _pb import anki._backend.backend_pb2 as _pb
from anki import hooks from anki import hooks
from anki.consts import MODEL_STD from anki.consts import MODEL_STD
from anki.models import NoteType from anki.models import NoteType, Template
from anki.utils import joinFields from anki.utils import joinFields
@ -78,15 +78,23 @@ class Note:
return joinFields(self.fields) return joinFields(self.fields)
def ephemeral_card( def ephemeral_card(
self, ord: int = 0, *, fill_empty: bool = False self,
ord: int = 0,
*,
custom_note_type: NoteType = None,
custom_template: Template = None,
fill_empty: bool = False,
) -> anki.cards.Card: ) -> anki.cards.Card:
card = anki.cards.Card(self.col) card = anki.cards.Card(self.col)
card.ord = ord card.ord = ord
card.did = 1 card.did = 1
model = self.model() model = custom_note_type or self.model()
template = copy.copy( template = copy.copy(
model["tmpls"][ord] if model["type"] == MODEL_STD else model["tmpls"][0] custom_template
or (
model["tmpls"][ord] if model["type"] == MODEL_STD else model["tmpls"][0]
)
) )
# may differ in cloze case # may differ in cloze case
template["ord"] = card.ord template["ord"] = card.ord

View file

@ -1,18 +1,15 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import copy
import json import json
import re import re
from concurrent.futures import Future from concurrent.futures import Future
from typing import Any, Dict, List, Match, Optional from typing import Any, Dict, List, Match, Optional
import aqt import aqt
from anki.cards import Card
from anki.consts import * from anki.consts import *
from anki.errors import TemplateError from anki.errors import TemplateError
from anki.lang import without_unicode_isolation from anki.lang import without_unicode_isolation
from anki.notes import Note from anki.notes import Note
from anki.template import TemplateRenderContext
from aqt import AnkiQt, gui_hooks from aqt import AnkiQt, gui_hooks
from aqt.forms.browserdisp import Ui_Dialog from aqt.forms.browserdisp import Ui_Dialog
from aqt.qt import * from aqt.qt import *
@ -474,7 +471,12 @@ class CardLayout(QDialog):
def _renderPreview(self) -> None: def _renderPreview(self) -> None:
self.cancelPreviewTimer() self.cancelPreviewTimer()
c = self.rendered_card = self.ephemeral_card_for_rendering() c = self.rendered_card = self.note.ephemeral_card(
self.ord,
custom_note_type=self.model,
custom_template=self.current_template(),
fill_empty=self.fill_empty_action_toggled,
)
ti = self.maybeTextInput ti = self.maybeTextInput
@ -535,24 +537,6 @@ class CardLayout(QDialog):
repl = answerRepl repl = answerRepl
return re.sub(r"\[\[type:.+?\]\]", repl, txt) return re.sub(r"\[\[type:.+?\]\]", repl, txt)
def ephemeral_card_for_rendering(self) -> Card:
card = Card(self.col)
card.ord = self.ord
card.did = 1
template = copy.copy(self.current_template())
# may differ in cloze case
template["ord"] = card.ord
output = TemplateRenderContext.from_card_layout(
self.note,
card,
notetype=self.model,
template=template,
fill_empty=self.fill_empty_action_toggled,
).render()
card.set_render_output(output)
card._note = self.note
return card
# Card operations # Card operations
###################################################################### ######################################################################