mirror of
https://github.com/ankitects/anki.git
synced 2025-11-09 06:07:11 -05:00
remove remaining CSS; more template properties into div
This commit is contained in:
parent
15e4b64162
commit
7a5cee1d20
6 changed files with 43 additions and 56 deletions
|
|
@ -100,11 +100,11 @@ lapses=?, left=?, edue=? where id = ?""",
|
||||||
self.factor, self.reps, self.lapses,
|
self.factor, self.reps, self.lapses,
|
||||||
self.left, self.edue, self.id)
|
self.left, self.edue, self.id)
|
||||||
|
|
||||||
def q(self, classes="q", reload=False):
|
def q(self, reload=False):
|
||||||
return self._withClass(self._getQA(reload)['q'], classes)
|
return self._getQA(reload)['q']
|
||||||
|
|
||||||
def a(self, classes="a"):
|
def a(self):
|
||||||
return self._withClass(self._getQA()['a'], classes)
|
return self._getQA()['a']
|
||||||
|
|
||||||
def _getQA(self, reload=False):
|
def _getQA(self, reload=False):
|
||||||
if not self._qa or reload:
|
if not self._qa or reload:
|
||||||
|
|
@ -114,9 +114,6 @@ lapses=?, left=?, edue=? where id = ?""",
|
||||||
self._qa = self.deck._renderQA(data)
|
self._qa = self.deck._renderQA(data)
|
||||||
return self._qa
|
return self._qa
|
||||||
|
|
||||||
def _withClass(self, txt, extra):
|
|
||||||
return '<div class="%s %s">%s</div>' % (self.cssClass(), extra, txt)
|
|
||||||
|
|
||||||
def _reviewData(self, reload=False):
|
def _reviewData(self, reload=False):
|
||||||
"Fetch the model and fact."
|
"Fetch the model and fact."
|
||||||
if not self._rd or reload:
|
if not self._rd or reload:
|
||||||
|
|
@ -137,10 +134,6 @@ lapses=?, left=?, edue=? where id = ?""",
|
||||||
def template(self):
|
def template(self):
|
||||||
return self._reviewData()[1]['tmpls'][self.ord]
|
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):
|
def startTimer(self):
|
||||||
self.timerStarted = time.time()
|
self.timerStarted = time.time()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ from anki.consts import *
|
||||||
# - careful not to add any lists/dicts/etc here, as they aren't deep copied
|
# - careful not to add any lists/dicts/etc here, as they aren't deep copied
|
||||||
|
|
||||||
defaultModel = {
|
defaultModel = {
|
||||||
'css': "",
|
|
||||||
'sortf': 0,
|
'sortf': 0,
|
||||||
'gid': 1,
|
'gid': 1,
|
||||||
'clozectx': False,
|
'clozectx': False,
|
||||||
|
|
@ -37,15 +36,14 @@ defaultModel = {
|
||||||
defaultField = {
|
defaultField = {
|
||||||
'name': "",
|
'name': "",
|
||||||
'ord': None,
|
'ord': None,
|
||||||
'rtl': False,
|
|
||||||
'req': False,
|
'req': False,
|
||||||
'uniq': False,
|
'uniq': False,
|
||||||
'font': "Arial",
|
|
||||||
'qsize': 20,
|
|
||||||
'esize': 20,
|
|
||||||
'qcol': "#000",
|
|
||||||
'pre': True,
|
|
||||||
'sticky': False,
|
'sticky': False,
|
||||||
|
# the following alter editing, and are used as defaults for the
|
||||||
|
# template wizard
|
||||||
|
'rtl': False,
|
||||||
|
'font': "Arial",
|
||||||
|
'size': 20,
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultTemplate = {
|
defaultTemplate = {
|
||||||
|
|
@ -53,8 +51,6 @@ defaultTemplate = {
|
||||||
'ord': None,
|
'ord': None,
|
||||||
'qfmt': "",
|
'qfmt': "",
|
||||||
'afmt': "",
|
'afmt': "",
|
||||||
'align': 0,
|
|
||||||
'bg': "#fff",
|
|
||||||
'typeAns': None,
|
'typeAns': None,
|
||||||
'gid': None,
|
'gid': None,
|
||||||
}
|
}
|
||||||
|
|
@ -77,7 +73,6 @@ class ModelManager(object):
|
||||||
if m:
|
if m:
|
||||||
m['mod'] = intTime()
|
m['mod'] = intTime()
|
||||||
m['usn'] = self.deck.usn()
|
m['usn'] = self.deck.usn()
|
||||||
m['css'] = self._css(m)
|
|
||||||
self._updateRequired(m)
|
self._updateRequired(m)
|
||||||
if gencards:
|
if gencards:
|
||||||
self.deck.genCards(self.fids(m))
|
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']
|
m2['name'] = _("%s copy") % m2['name']
|
||||||
return self._add(m2)
|
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
|
# Fields
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -348,6 +348,7 @@ insert or replace into deck select id, cast(created as int), :t,
|
||||||
db = self.db
|
db = self.db
|
||||||
dconf = anki.models.defaultField
|
dconf = anki.models.defaultField
|
||||||
flds = []
|
flds = []
|
||||||
|
# note: qsize & qcol are used in upgrade then discarded
|
||||||
for c, row in enumerate(db.all("""
|
for c, row in enumerate(db.all("""
|
||||||
select name, features, required, "unique",
|
select name, features, required, "unique",
|
||||||
quizFontFamily, quizFontSize, quizFontColour, editFontSize from fieldModels
|
quizFontFamily, quizFontSize, quizFontColour, editFontSize from fieldModels
|
||||||
|
|
@ -361,15 +362,14 @@ order by ordinal""", mid)):
|
||||||
conf['font'],
|
conf['font'],
|
||||||
conf['qsize'],
|
conf['qsize'],
|
||||||
conf['qcol'],
|
conf['qcol'],
|
||||||
conf['esize']) = row
|
conf['size']) = row
|
||||||
conf['ord'] = c
|
conf['ord'] = c
|
||||||
# ensure data is good
|
# ensure data is good
|
||||||
conf['rtl'] = not not conf['rtl']
|
conf['rtl'] = not not conf['rtl']
|
||||||
conf['pre'] = True
|
|
||||||
conf['font'] = conf['font'] or "Arial"
|
conf['font'] = conf['font'] or "Arial"
|
||||||
|
conf['size'] = conf['size'] or 20
|
||||||
conf['qcol'] = conf['qcol'] or "#000"
|
conf['qcol'] = conf['qcol'] or "#000"
|
||||||
conf['qsize'] = conf['qsize'] or 20
|
conf['qsize'] = conf['qsize'] or 20
|
||||||
conf['esize'] = conf['esize'] or 20
|
|
||||||
flds.append(conf)
|
flds.append(conf)
|
||||||
return flds
|
return flds
|
||||||
|
|
||||||
|
|
@ -378,6 +378,7 @@ order by ordinal""", mid)):
|
||||||
db = self.db
|
db = self.db
|
||||||
dconf = anki.models.defaultTemplate
|
dconf = anki.models.defaultTemplate
|
||||||
tmpls = []
|
tmpls = []
|
||||||
|
# align and bg are used in upgrade then discarded
|
||||||
for c, row in enumerate(db.all("""
|
for c, row in enumerate(db.all("""
|
||||||
select name, active, qformat, aformat, questionInAnswer,
|
select name, active, qformat, aformat, questionInAnswer,
|
||||||
questionAlign, lastFontColour, typeAnswer from cardModels
|
questionAlign, lastFontColour, typeAnswer from cardModels
|
||||||
|
|
@ -421,8 +422,9 @@ order by ordinal""", mid)):
|
||||||
|
|
||||||
# Template upgrading
|
# Template upgrading
|
||||||
######################################################################
|
######################################################################
|
||||||
# {{field}} no longer inserts an implicit span, so we make the span
|
# - {{field}} no longer inserts an implicit span, so we make the span
|
||||||
# explicit on upgrade.
|
# explicit on upgrade.
|
||||||
|
# - likewise with alignment and background color
|
||||||
def _upgradeTemplates(self):
|
def _upgradeTemplates(self):
|
||||||
d = self.deck
|
d = self.deck
|
||||||
for m in d.models.all():
|
for m in d.models.all():
|
||||||
|
|
@ -432,13 +434,17 @@ order by ordinal""", mid)):
|
||||||
attrs = [
|
attrs = [
|
||||||
"font-family:%s" % f['font'],
|
"font-family:%s" % f['font'],
|
||||||
"font-size:%spx" % f['qsize'],
|
"font-size:%spx" % f['qsize'],
|
||||||
"color:%s" % f['qcol']]
|
"color:%s" % f['qcol'],
|
||||||
|
"white-space:pre-wrap",
|
||||||
|
]
|
||||||
if f['rtl']:
|
if f['rtl']:
|
||||||
attrs.append("direction:rtl;unicode-bidi:embed")
|
attrs.append("direction:rtl;unicode-bidi:embed")
|
||||||
if f['pre']:
|
attrs.append()
|
||||||
attrs.append("white-space:pre-wrap")
|
styles[f['name']] = '<span style="%s">{{%s}}</span>' % (
|
||||||
styles[f['name']] = '<span style="%s">\n{{%s}}\n</span>' % (
|
|
||||||
";".join(attrs), f['name'])
|
";".join(attrs), f['name'])
|
||||||
|
# obsolete
|
||||||
|
del f['qcol']
|
||||||
|
del f['qsize']
|
||||||
# then for each template
|
# then for each template
|
||||||
for t in m['tmpls']:
|
for t in m['tmpls']:
|
||||||
def repl(match):
|
def repl(match):
|
||||||
|
|
@ -448,7 +454,21 @@ order by ordinal""", mid)):
|
||||||
# special or non-existant field; leave alone
|
# special or non-existant field; leave alone
|
||||||
return match.group(0)
|
return match.group(0)
|
||||||
for k in 'qfmt', 'afmt':
|
for k in 'qfmt', 'afmt':
|
||||||
|
# replace old field references
|
||||||
t[k] = re.sub("(^|[^{]){{([^{}]+)?}}", repl, t[k])
|
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
|
# save model
|
||||||
d.models.save(m)
|
d.models.save(m)
|
||||||
|
|
||||||
|
|
@ -557,7 +577,7 @@ and ord = ? limit 1""", m['id'], t['ord']):
|
||||||
self._rewriteMediaRefs()
|
self._rewriteMediaRefs()
|
||||||
# template handling has changed
|
# template handling has changed
|
||||||
self._upgradeTemplates()
|
self._upgradeTemplates()
|
||||||
# regenerate css, and set new card order
|
# set new card order
|
||||||
for m in deck.models.all():
|
for m in deck.models.all():
|
||||||
m['newOrder'] = deck.conf['oldNewOrder']
|
m['newOrder'] = deck.conf['oldNewOrder']
|
||||||
deck.models.save(m)
|
deck.models.save(m)
|
||||||
|
|
|
||||||
|
|
@ -53,5 +53,4 @@ def test_misc():
|
||||||
d.addFact(f)
|
d.addFact(f)
|
||||||
c = f.cards()[0]
|
c = f.cards()[0]
|
||||||
id = d.models.current()['id']
|
id = d.models.current()['id']
|
||||||
assert c.cssClass() == "cm%s-0" % hexifyID(id)
|
|
||||||
assert c.template()['ord'] == 0
|
assert c.template()['ord'] == 0
|
||||||
|
|
|
||||||
|
|
@ -245,12 +245,3 @@ def test_modelChange():
|
||||||
assert f['Notes'] == "b2"
|
assert f['Notes'] == "b2"
|
||||||
assert len(f.cards()) == 2
|
assert len(f.cards()) == 2
|
||||||
assert "b2" in f.cards()[0].a()
|
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']
|
|
||||||
|
|
|
||||||
|
|
@ -31,3 +31,7 @@ def test_upgrade():
|
||||||
assert deck.sched.cardCounts() == (3,2,1)
|
assert deck.sched.cardCounts() == (3,2,1)
|
||||||
# now's a good time to test the integrity check too
|
# now's a good time to test the integrity check too
|
||||||
deck.fixIntegrity()
|
deck.fixIntegrity()
|
||||||
|
# c = deck.sched.getCard()
|
||||||
|
# print "--q", c.q()
|
||||||
|
# print
|
||||||
|
# print "--a", c.a()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue