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()