Add partial citeblock and real links
This commit is contained in:
parent
5f89baf449
commit
317fc07a45
|
@ -13,7 +13,7 @@ from amanuensis.config import prepend, json_rw, json_ro, logger
|
||||||
from amanuensis.config.loader import AttrOrderedDict
|
from amanuensis.config.loader import AttrOrderedDict
|
||||||
from amanuensis.errors import ArgumentError
|
from amanuensis.errors import ArgumentError
|
||||||
from amanuensis.lexicon import LexiconModel
|
from amanuensis.lexicon import LexiconModel
|
||||||
from amanuensis.parser import parse_raw_markdown, GetCitations, HtmlRenderer, filesafe_title
|
from amanuensis.parser import parse_raw_markdown, GetCitations, HtmlRenderer, filesafe_title, titlesort
|
||||||
from amanuensis.resources import get_stream
|
from amanuensis.resources import get_stream
|
||||||
|
|
||||||
def valid_name(name):
|
def valid_name(name):
|
||||||
|
@ -300,7 +300,7 @@ def publish_turn(lexicon, drafts):
|
||||||
# Get all citations
|
# Get all citations
|
||||||
citations_by_title = {}
|
citations_by_title = {}
|
||||||
for title, article in article_renderable_by_title.items():
|
for title, article in article_renderable_by_title.items():
|
||||||
citations_by_title[title] = article.render(GetCitations())
|
citations_by_title[title] = sorted(set(article.render(GetCitations())), key=titlesort)
|
||||||
|
|
||||||
# Get the written and phantom lists from the citation map
|
# Get the written and phantom lists from the citation map
|
||||||
written_titles = list(citations_by_title.keys())
|
written_titles = list(citations_by_title.keys())
|
||||||
|
@ -327,7 +327,7 @@ def publish_turn(lexicon, drafts):
|
||||||
# Render article HTML and save to article cache
|
# Render article HTML and save to article cache
|
||||||
rendered_html_by_title = {}
|
rendered_html_by_title = {}
|
||||||
for title, article in article_renderable_by_title.items():
|
for title, article in article_renderable_by_title.items():
|
||||||
html = article.render(HtmlRenderer(written_titles))
|
html = article.render(HtmlRenderer(lexicon.name, written_titles))
|
||||||
filename = filesafe_title(title)
|
filename = filesafe_title(title)
|
||||||
with lexicon.ctx.article.edit(filename, create=True) as f:
|
with lexicon.ctx.article.edit(filename, create=True) as f:
|
||||||
f['title'] = title
|
f['title'] = title
|
||||||
|
|
|
@ -3,12 +3,17 @@ Internal module encapsulating visitors that render articles into
|
||||||
readable formats.
|
readable formats.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from flask import url_for
|
||||||
|
|
||||||
|
from amanuensis.parser.helpers import filesafe_title
|
||||||
|
|
||||||
|
|
||||||
class HtmlRenderer():
|
class HtmlRenderer():
|
||||||
"""
|
"""
|
||||||
Renders an article token tree into published article HTML.
|
Renders an article token tree into published article HTML.
|
||||||
"""
|
"""
|
||||||
def __init__(self, written_articles):
|
def __init__(self, lexicon_name, written_articles):
|
||||||
|
self.lexicon_name = lexicon_name
|
||||||
self.written_articles = written_articles
|
self.written_articles = written_articles
|
||||||
|
|
||||||
def TextSpan(self, span):
|
def TextSpan(self, span):
|
||||||
|
@ -41,7 +46,12 @@ class HtmlRenderer():
|
||||||
link_class = ''
|
link_class = ''
|
||||||
else:
|
else:
|
||||||
link_class = ' class="phantom"'
|
link_class = ' class="phantom"'
|
||||||
return f'<a href="#"{link_class}>{"".join(span.recurse(self))}</a>'
|
# link = url_for(
|
||||||
|
# 'lexicon.article',
|
||||||
|
# name=self.lexicon_name,
|
||||||
|
# title=filesafe_title(span.cite_target))
|
||||||
|
link = f'/lexicon/{self.lexicon_name}/article/{filesafe_title(span.cite_target)}'
|
||||||
|
return f'<a href="{link}"{link_class}>{"".join(span.recurse(self))}</a>'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ from flask_login import current_user
|
||||||
|
|
||||||
# Module imports
|
# Module imports
|
||||||
from amanuensis.lexicon import LexiconModel
|
from amanuensis.lexicon import LexiconModel
|
||||||
|
from amanuensis.parser import filesafe_title
|
||||||
from amanuensis.user import UserModel
|
from amanuensis.user import UserModel
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,6 +28,10 @@ def register_custom_filters(app):
|
||||||
dt = datetime.fromtimestamp(ts)
|
dt = datetime.fromtimestamp(ts)
|
||||||
return dt.strftime(formatstr)
|
return dt.strftime(formatstr)
|
||||||
|
|
||||||
|
@app.template_filter("articlelink")
|
||||||
|
def article_link(title):
|
||||||
|
return url_for('lexicon.article', name=g.lexicon.name, title=filesafe_title(title))
|
||||||
|
|
||||||
|
|
||||||
def lexicon_param(route):
|
def lexicon_param(route):
|
||||||
"""Wrapper for loading a route's lexicon"""
|
"""Wrapper for loading a route's lexicon"""
|
||||||
|
|
|
@ -71,7 +71,9 @@ def get_bp():
|
||||||
with g.lexicon.ctx.article.read(title) as a:
|
with g.lexicon.ctx.article.read(title) as a:
|
||||||
article = dict(a)
|
article = dict(a)
|
||||||
article['html'] = Markup(a['html'] or "")
|
article['html'] = Markup(a['html'] or "")
|
||||||
return render_template('lexicon/article.html', article=article)
|
with g.lexicon.ctx.read('info') as info:
|
||||||
|
cites = info[a.title]['citations']
|
||||||
|
return render_template('lexicon/article.html', article=article, cites=cites)
|
||||||
|
|
||||||
@bp.route('/rules/', methods=['GET'])
|
@bp.route('/rules/', methods=['GET'])
|
||||||
@lexicon_param
|
@lexicon_param
|
||||||
|
@ -183,8 +185,12 @@ def get_bp():
|
||||||
return redirect(url_for('lexicon.session', name=name))
|
return redirect(url_for('lexicon.session', name=name))
|
||||||
|
|
||||||
parsed_draft = parse_raw_markdown(draft.contents)
|
parsed_draft = parse_raw_markdown(draft.contents)
|
||||||
rendered_html = parsed_draft.render(PreviewHtmlRenderer(
|
with g.lexicon.ctx.read('info') as info:
|
||||||
{'Article':'default','Phantom':None}))
|
authorship = {
|
||||||
|
title: article.character
|
||||||
|
for title, article in info.items()
|
||||||
|
}
|
||||||
|
rendered_html = parsed_draft.render(PreviewHtmlRenderer(authorship))
|
||||||
|
|
||||||
# If the article is ready and awaiting review
|
# If the article is ready and awaiting review
|
||||||
if not draft.status.approved:
|
if not draft.status.approved:
|
||||||
|
|
|
@ -8,8 +8,14 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<h1>{{ article.title }}</h1>
|
<h1>{{ article.title }}</h1>
|
||||||
|
|
||||||
{{ article.html }}
|
{{ article.html }}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% set template_content_blocks = [self.main()] %}
|
|
||||||
|
{% block citations %}
|
||||||
|
{% for cite in cites %}
|
||||||
|
<a href="{{ cite|articlelink }}">{{ cite }}</a> /
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% set template_content_blocks = [self.main(), self.citations()] %}
|
Loading…
Reference in New Issue