remove remaining CSS; more template properties into div

This commit is contained in:
Damien Elmes 2011-11-18 07:50:39 +09:00
parent 15e4b64162
commit 7a5cee1d20
6 changed files with 43 additions and 56 deletions

View file

@ -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 '<div class="%s %s">%s</div>' % (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()

View file

@ -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
##################################################

View file

@ -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']] = '<span style="%s">\n{{%s}}\n</span>' % (
attrs.append()
styles[f['name']] = '<span style="%s">{{%s}}</span>' % (
";".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] = '''\
<div style="text-align:%s;background-color:%s">\n\n%s\n\n</div>''' % (
("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)

View file

@ -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

View file

@ -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']

View file

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