From 7a5cee1d20a9aff91102c2384da6fcd12e744f0f Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 18 Nov 2011 07:50:39 +0900 Subject: [PATCH] remove remaining CSS; more template properties into div --- anki/cards.py | 15 ++++----------- anki/models.py | 30 +++++------------------------- anki/upgrade.py | 40 ++++++++++++++++++++++++++++++---------- tests/test_cards.py | 1 - tests/test_models.py | 9 --------- tests/test_upgrade.py | 4 ++++ 6 files changed, 43 insertions(+), 56 deletions(-) diff --git a/anki/cards.py b/anki/cards.py index 7eede339f..40179c493 100644 --- a/anki/cards.py +++ b/anki/cards.py @@ -100,11 +100,11 @@ lapses=?, left=?, edue=? where id = ?""", self.factor, self.reps, self.lapses, self.left, self.edue, self.id) - def q(self, classes="q", reload=False): - return self._withClass(self._getQA(reload)['q'], classes) + def q(self, reload=False): + return self._getQA(reload)['q'] - def a(self, classes="a"): - return self._withClass(self._getQA()['a'], classes) + def a(self): + return self._getQA()['a'] def _getQA(self, reload=False): if not self._qa or reload: @@ -114,9 +114,6 @@ lapses=?, left=?, edue=? where id = ?""", self._qa = self.deck._renderQA(data) return self._qa - def _withClass(self, txt, extra): - return '
%s
' % (self.cssClass(), extra, txt) - def _reviewData(self, reload=False): "Fetch the model and fact." if not self._rd or reload: @@ -137,10 +134,6 @@ lapses=?, left=?, edue=? where id = ?""", def template(self): return self._reviewData()[1]['tmpls'][self.ord] - def cssClass(self): - return "cm%s-%s" % (hexifyID(self.model()['id']), - hexifyID(self.template()['ord'])) - def startTimer(self): self.timerStarted = time.time() diff --git a/anki/models.py b/anki/models.py index 0e1d8027c..8aa1d3bb6 100644 --- a/anki/models.py +++ b/anki/models.py @@ -14,7 +14,6 @@ from anki.consts import * # - careful not to add any lists/dicts/etc here, as they aren't deep copied defaultModel = { - 'css': "", 'sortf': 0, 'gid': 1, 'clozectx': False, @@ -37,15 +36,14 @@ defaultModel = { defaultField = { 'name': "", 'ord': None, - 'rtl': False, 'req': False, 'uniq': False, - 'font': "Arial", - 'qsize': 20, - 'esize': 20, - 'qcol': "#000", - 'pre': True, 'sticky': False, + # the following alter editing, and are used as defaults for the + # template wizard + 'rtl': False, + 'font': "Arial", + 'size': 20, } defaultTemplate = { @@ -53,8 +51,6 @@ defaultTemplate = { 'ord': None, 'qfmt': "", 'afmt': "", - 'align': 0, - 'bg': "#fff", 'typeAns': None, 'gid': None, } @@ -77,7 +73,6 @@ class ModelManager(object): if m: m['mod'] = intTime() m['usn'] = self.deck.usn() - m['css'] = self._css(m) self._updateRequired(m) if gencards: self.deck.genCards(self.fids(m)) @@ -195,21 +190,6 @@ select id from cards where fid in (select id from facts where mid = ?)""", m2['name'] = _("%s copy") % m2['name'] return self._add(m2) - # CSS generation - ################################################## - - def css(self): - "CSS for all models." - return "\n".join([m['css'] for m in self.all()]) - - def _css(self, m): - # templates - css = "".join(".cm%s-%s {text-align:%s;background:%s}\n" % ( - hexifyID(m['id']), hexifyID(t['ord']), - ("center", "left", "right")[t['align']], t['bg']) - for t in m['tmpls']) - return css - # Fields ################################################## diff --git a/anki/upgrade.py b/anki/upgrade.py index b5483a052..8a57a7324 100644 --- a/anki/upgrade.py +++ b/anki/upgrade.py @@ -348,6 +348,7 @@ insert or replace into deck select id, cast(created as int), :t, db = self.db dconf = anki.models.defaultField flds = [] + # note: qsize & qcol are used in upgrade then discarded for c, row in enumerate(db.all(""" select name, features, required, "unique", quizFontFamily, quizFontSize, quizFontColour, editFontSize from fieldModels @@ -361,15 +362,14 @@ order by ordinal""", mid)): conf['font'], conf['qsize'], conf['qcol'], - conf['esize']) = row + conf['size']) = row conf['ord'] = c # ensure data is good conf['rtl'] = not not conf['rtl'] - conf['pre'] = True conf['font'] = conf['font'] or "Arial" + conf['size'] = conf['size'] or 20 conf['qcol'] = conf['qcol'] or "#000" conf['qsize'] = conf['qsize'] or 20 - conf['esize'] = conf['esize'] or 20 flds.append(conf) return flds @@ -378,6 +378,7 @@ order by ordinal""", mid)): db = self.db dconf = anki.models.defaultTemplate tmpls = [] + # align and bg are used in upgrade then discarded for c, row in enumerate(db.all(""" select name, active, qformat, aformat, questionInAnswer, questionAlign, lastFontColour, typeAnswer from cardModels @@ -421,8 +422,9 @@ order by ordinal""", mid)): # Template upgrading ###################################################################### - # {{field}} no longer inserts an implicit span, so we make the span - # explicit on upgrade. + # - {{field}} no longer inserts an implicit span, so we make the span + # explicit on upgrade. + # - likewise with alignment and background color def _upgradeTemplates(self): d = self.deck for m in d.models.all(): @@ -432,13 +434,17 @@ order by ordinal""", mid)): attrs = [ "font-family:%s" % f['font'], "font-size:%spx" % f['qsize'], - "color:%s" % f['qcol']] + "color:%s" % f['qcol'], + "white-space:pre-wrap", + ] if f['rtl']: attrs.append("direction:rtl;unicode-bidi:embed") - if f['pre']: - attrs.append("white-space:pre-wrap") - styles[f['name']] = '\n{{%s}}\n' % ( + attrs.append() + styles[f['name']] = '{{%s}}' % ( ";".join(attrs), f['name']) + # obsolete + del f['qcol'] + del f['qsize'] # then for each template for t in m['tmpls']: def repl(match): @@ -448,7 +454,21 @@ order by ordinal""", mid)): # special or non-existant field; leave alone return match.group(0) for k in 'qfmt', 'afmt': + # replace old field references t[k] = re.sub("(^|[^{]){{([^{}]+)?}}", repl, t[k]) + # then template properties. + if t['bg'].lower() == "#ffffff": + # a bit more intuitive default + bg = "white" + else: + bg = t['bg'] + t[k] = '''\ +
\n\n%s\n\n
''' % ( + ("center", "left", "right")[t['align']], + bg, t[k]) + # remove obsolete + del t['bg'] + del t['align'] # save model d.models.save(m) @@ -557,7 +577,7 @@ and ord = ? limit 1""", m['id'], t['ord']): self._rewriteMediaRefs() # template handling has changed self._upgradeTemplates() - # regenerate css, and set new card order + # set new card order for m in deck.models.all(): m['newOrder'] = deck.conf['oldNewOrder'] deck.models.save(m) diff --git a/tests/test_cards.py b/tests/test_cards.py index 4b82070f7..21d2eecc0 100644 --- a/tests/test_cards.py +++ b/tests/test_cards.py @@ -53,5 +53,4 @@ def test_misc(): d.addFact(f) c = f.cards()[0] id = d.models.current()['id'] - assert c.cssClass() == "cm%s-0" % hexifyID(id) assert c.template()['ord'] == 0 diff --git a/tests/test_models.py b/tests/test_models.py index fbbbff4c0..e62f7cd9b 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -245,12 +245,3 @@ def test_modelChange(): assert f['Notes'] == "b2" assert len(f.cards()) == 2 assert "b2" in f.cards()[0].a() - -def test_css(): - deck = getEmptyDeck() - basic = deck.models.byName("Basic") - assert "arial" in basic['css'] - assert "helvetica" not in basic['css'] - basic['flds'][0]['font'] = "helvetica" - deck.models.save(basic) - assert "helvetica" in basic['css'] diff --git a/tests/test_upgrade.py b/tests/test_upgrade.py index 6f6df08ef..e5aa89056 100644 --- a/tests/test_upgrade.py +++ b/tests/test_upgrade.py @@ -31,3 +31,7 @@ def test_upgrade(): assert deck.sched.cardCounts() == (3,2,1) # now's a good time to test the integrity check too deck.fixIntegrity() + # c = deck.sched.getCard() + # print "--q", c.q() + # print + # print "--a", c.a()