Render mentions in ticket description

This commit is contained in:
Ivan Habunek 2019-03-30 09:27:22 +01:00 committed by Drew DeVault
parent 4fe0011f92
commit e5043148ea
3 changed files with 18 additions and 11 deletions

View File

@ -9,24 +9,23 @@ from todosrht.redis import redis
from todosrht.tickets import find_mentioned_users, find_mentioned_tickets
from todosrht.tickets import TICKET_MENTION_PATTERN, USER_MENTION_PATTERN
def cache_comment_markup(func):
def cache_rendered_markup(func):
@wraps(func)
def wrap(comment):
key = f"todo.sr.ht:render_comment:{comment.id}"
def wrap(obj):
class_name = obj.__class__.__name__
key = f"todo.sr.ht:cache_rendered_markup:{class_name}:{obj.id}"
value = redis.get(key)
if value:
return Markup(value.decode())
value = func(comment)
value = func(obj)
redis.setex(key, timedelta(days=30), value)
return value
return wrap
@cache_comment_markup
def render_comment(comment):
tracker = comment.ticket.tracker
users = find_mentioned_users(comment.text)
tickets = find_mentioned_tickets(tracker, comment.text)
def render_markup(tracker, text):
users = find_mentioned_users(text)
tickets = find_mentioned_tickets(tracker, text)
users_map = {str(u): u for u in users}
tickets_map = {t.ref(): t for t in tickets}
@ -55,12 +54,19 @@ def render_comment(comment):
return f'<a href="{url}" title="{title}">{text}</a>'
# Replace ticket and username mentions with linked version
text = comment.text
text = re.sub(USER_MENTION_PATTERN, urlize_user, text)
text = re.sub(TICKET_MENTION_PATTERN, urlize_ticket, text)
return markdown(text)
@cache_rendered_markup
def render_comment(comment):
return render_markup(comment.ticket.tracker, comment.text)
@cache_rendered_markup
def render_ticket_description(ticket):
return render_markup(ticket.tracker, ticket.description)
def label_badge(label, cls="", remove_from_ticket=None):
"""Return HTML markup rendering a label badge.

View File

@ -31,6 +31,7 @@ class TodoApp(SrhtFlask):
self.add_template_filter(filters.label_badge)
self.add_template_filter(filters.render_comment)
self.add_template_filter(filters.render_ticket_description)
self.add_template_filter(urls.label_add_url)
self.add_template_filter(urls.label_search_url)
self.add_template_filter(urls.ticket_assign_url)

View File

@ -86,7 +86,7 @@
<div class="col-md-6">
{% if ticket.description %}
<span id="description-field">
{{ ticket.description | extended_md(baselevel=4) }}
{{ ticket|render_ticket_description }}
</span>
{% endif %}
<dl class="row" style="margin-top: 1rem">