Merge pull request #972 from hgiesel/ephemeral

Move ephemeral card functionality from clayout to Note class
This commit is contained in:
Damien Elmes 2021-02-03 13:10:00 +10:00 committed by GitHub
commit 86f8cba22c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 23 deletions

View File

@ -3,12 +3,14 @@
from __future__ import annotations
import copy
import pprint
from typing import Any, List, Optional, Sequence, Tuple
import anki # pylint: disable=unused-import
import anki._backend.backend_pb2 as _pb
from anki import hooks
from anki.consts import MODEL_STD
from anki.models import NoteType
from anki.utils import joinFields
@ -75,6 +77,31 @@ class Note:
def joinedFields(self) -> str:
return joinFields(self.fields)
def ephemeral_card(
self, ord: int = 0, *, fill_empty: bool = False
) -> anki.cards.Card:
card = anki.cards.Card(self.col)
card.ord = ord
card.did = 1
model = self.model()
template = copy.copy(
model["tmpls"][ord] if model["type"] == MODEL_STD else model["tmpls"][0]
)
# may differ in cloze case
template["ord"] = card.ord
output = anki.template.TemplateRenderContext.from_card_layout(
self,
card,
notetype=model,
template=template,
fill_empty=fill_empty,
).render()
card.set_render_output(output)
card._note = self
return card
def cards(self) -> List[anki.cards.Card]:
return [self.col.getCard(id) for id in self.card_ids()]

View File

@ -1,19 +1,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import copy
import json
import re
from concurrent.futures import Future
from typing import Any, Dict, List, Match, Optional
import aqt
from anki.cards import Card
from anki.consts import *
from anki.errors import TemplateError
from anki.lang import without_unicode_isolation
from anki.notes import Note
from anki.template import TemplateRenderContext
from aqt import AnkiQt, gui_hooks
from aqt.forms.browserdisp import Ui_Dialog
from aqt.qt import *
@ -475,8 +472,9 @@ class CardLayout(QDialog):
def _renderPreview(self) -> None:
self.cancelPreviewTimer()
c = self.rendered_card = self.ephemeral_card_for_rendering()
c = self.rendered_card = self.note.ephemeral_card(
self.ord, fill_empty=self.fill_empty_action_toggled
)
ti = self.maybeTextInput
bodyclass = theme_manager.body_classes_for_card_ord(
@ -536,24 +534,6 @@ class CardLayout(QDialog):
repl = answerRepl
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
######################################################################