Add math into preview

This commit is contained in:
Yusur 2022-05-29 17:44:52 +02:00
parent f50511759b
commit c4e7c65ab2
2 changed files with 40 additions and 7 deletions

42
app.py
View file

@ -139,6 +139,7 @@ class Page(BaseModel):
flags = BitField() flags = BitField()
is_redirect = flags.flag(1) is_redirect = flags.flag(1)
is_sync = flags.flag(2) is_sync = flags.flag(2)
is_math_enabled = flags.flag(4)
@property @property
def latest(self): def latest(self):
if self.revisions: if self.revisions:
@ -147,7 +148,7 @@ class Page(BaseModel):
return '/' + self.url + '/' if self.url else '/p/{}/'.format(self.id) return '/' + self.url + '/' if self.url else '/p/{}/'.format(self.id)
def short_desc(self): def short_desc(self):
full_text = self.latest.text full_text = self.latest.text
text = remove_tags(full_text, convert = not '```math' in full_text and not '$`' in full_text and not _getconf('appearance', 'simple_remove_tags', False)) text = remove_tags(full_text, convert = not self.is_math_enabled and not _getconf('appearance', 'simple_remove_tags', False))
return text[:200] + ('\u2026' if len(text) > 200 else '') return text[:200] + ('\u2026' if len(text) > 200 else '')
def change_tags(self, new_tags): def change_tags(self, new_tags):
old_tags = set(x.name for x in self.tags) old_tags = set(x.name for x in self.tags)
@ -233,7 +234,7 @@ class PageRevision(BaseModel):
def text(self): def text(self):
return self.textref.get_content() return self.textref.get_content()
def html(self): def html(self):
return md(self.text) return md(self.text, math=self.page.is_math_enabled)
def human_pub_date(self): def human_pub_date(self):
delta = datetime.datetime.now() - self.pub_date delta = datetime.datetime.now() - self.pub_date
T = partial(get_string, g.lang) T = partial(get_string, g.lang)
@ -417,7 +418,7 @@ def remove_tags(text, convert=True, headings=True):
if headings: if headings:
text = re.sub(r'\#[^\n]*', '', text) text = re.sub(r'\#[^\n]*', '', text)
if convert: if convert:
text = md(text, toc=False) text = md(text, toc=False, math=False)
return re.sub(r'<.*?>', '', text) return re.sub(r'<.*?>', '', text)
#### I18N #### #### I18N ####
@ -486,7 +487,8 @@ def _inject_variables():
'T': partial(get_string, g.lang), 'T': partial(get_string, g.lang),
'app_name': _getconf('site', 'title'), 'app_name': _getconf('site', 'title'),
'strong': lambda x:Markup('<strong>{0}</strong>').format(x), 'strong': lambda x:Markup('<strong>{0}</strong>').format(x),
'app_version': __version__ 'app_version': __version__,
'math_version': markdown_katex.__version__ if markdown_katex else None
} }
@app.template_filter() @app.template_filter()
@ -526,7 +528,7 @@ def error_400(body):
# Middle point during page editing. # Middle point during page editing.
def savepoint(form, is_preview=False, pageid=None): def savepoint(form, is_preview=False, pageid=None):
if is_preview: if is_preview:
preview = md(form['text']) preview = md(form['text'], math='enablemath' in form)
else: else:
preview = None preview = None
pl_js_info = dict() pl_js_info = dict()
@ -535,7 +537,16 @@ def savepoint(form, is_preview=False, pageid=None):
preview_text = form['text'], preview_text = form['text'],
page_id = pageid page_id = pageid
) )
return render_template('edit.html', pl_url=form['url'], pl_title=form['title'], pl_text=form['text'], pl_tags=form['tags'], preview=preview, pl_js_info=pl_js_info) return render_template(
'edit.html',
pl_url=form['url'],
pl_title=form['title'],
pl_text=form['text'],
pl_tags=form['tags'],
pl_enablemath='enablemath' in form,
preview=preview,
pl_js_info=pl_js_info
)
@app.route('/create/', methods=['GET', 'POST']) @app.route('/create/', methods=['GET', 'POST'])
def create(): def create():
@ -561,6 +572,7 @@ def create():
title=request.form['title'], title=request.form['title'],
is_redirect=False, is_redirect=False,
touched=datetime.datetime.now(), touched=datetime.datetime.now(),
is_math_enabled='enablemath' in request.form
) )
p.change_tags(p_tags) p.change_tags(p_tags)
except IntegrityError as e: except IntegrityError as e:
@ -601,6 +613,7 @@ def edit(id):
p.url = p_url p.url = p_url
p.title = request.form['title'] p.title = request.form['title']
p.touched = datetime.datetime.now() p.touched = datetime.datetime.now()
p.is_math_enabled = 'enablemath' in request.form
p.save() p.save()
p.change_tags(p_tags) p.change_tags(p_tags)
pr = PageRevision.create( pr = PageRevision.create(
@ -613,7 +626,22 @@ def edit(id):
) )
PageLink.parse_links(p, request.form['text']) PageLink.parse_links(p, request.form['text'])
return redirect(p.get_url()) return redirect(p.get_url())
return render_template('edit.html', pl_url=p.url, pl_title=p.title, pl_text=p.latest.text, pl_tags=','.join(x.name for x in p.tags)) pl_js_info = dict()
pl_js_info['editing'] = dict(
original_text = None, # TODO
preview_text = None,
page_id = id
)
return render_template(
'edit.html',
pl_url=p.url,
pl_title=p.title,
pl_text=p.latest.text,
pl_tags=','.join(x.name for x in p.tags),
pl_js_info=pl_js_info,
pl_enablemath = p.is_math_enabled
)
@app.route("/__sync_start") @app.route("/__sync_start")
def __sync_start(): def __sync_start():

View file

@ -54,6 +54,11 @@
<input type="submit" value="Save" id="save-button" class="submit-primary"> <input type="submit" value="Save" id="save-button" class="submit-primary">
<input type="submit" name="preview" value="Preview" id="preview-button" class="submit-secondary"> <input type="submit" name="preview" value="Preview" id="preview-button" class="submit-secondary">
</div> </div>
<h3>Advanced options</h3>
<div>
<input type="checkbox" id="CB__enablemath" name="enablemath" {% if math_version and pl_enablemath %}checked=""{% elif not math_version %}disabled=""{% endif %}>
<label for="CB__enablemath">Enable math expressions parsing {% if not math_version %}(disabled for this instance){% endif %}</label>
</div>
</form> </form>
{% endblock %} {% endblock %}