Commit 9c783032d683b773b3bb5086b2a636fc126f0ee1
1 parent
5346dbc8
Exists in
master
and in
39 other branches
Finding and interpreting links inside email msgs
Showing
2 changed files
with
16 additions
and
5 deletions
Show diff stats
src/super_archives/templates/superarchives/tags/display_message.html
| @@ -4,6 +4,6 @@ | @@ -4,6 +4,6 @@ | ||
| 4 | {% for message, class in messages %} | 4 | {% for message, class in messages %} |
| 5 | {% if class == 'reply' %} | 5 | {% if class == 'reply' %} |
| 6 | <button class="btn btn-info btn-xs" onclick="$(this).next().toggle();">...</button> | 6 | <button class="btn btn-info btn-xs" onclick="$(this).next().toggle();">...</button> |
| 7 | - <pre style="display: none; color: #707";>{% else %}<pre>{% endif %}{{ message }}</pre> | 7 | + <div style="display: none; color: #707";>{% else %}<div>{% endif %}{{ message|safe|linebreaksbr }}</div> |
| 8 | {% endfor %} | 8 | {% endfor %} |
| 9 | {% endcache %} | 9 | {% endcache %} |
src/super_archives/templatetags/superarchives.py
| @@ -14,15 +14,27 @@ TEMPLATE_PATH = 'superarchives/tags/' | @@ -14,15 +14,27 @@ TEMPLATE_PATH = 'superarchives/tags/' | ||
| 14 | EXTENDED_PUNCTUATION = '!"#$%&\'()*+,-./:;=?@[\\]^_`{|}~ \t\n\r\x0b\x0c' | 14 | EXTENDED_PUNCTUATION = '!"#$%&\'()*+,-./:;=?@[\\]^_`{|}~ \t\n\r\x0b\x0c' |
| 15 | RE_WRAPPED_BY_HTML = re.compile(r'^<[a-z]+[^>]*>.*</[a-z]+[^>]*>$', | 15 | RE_WRAPPED_BY_HTML = re.compile(r'^<[a-z]+[^>]*>.*</[a-z]+[^>]*>$', |
| 16 | re.MULTILINE|re.IGNORECASE|re.DOTALL) | 16 | re.MULTILINE|re.IGNORECASE|re.DOTALL) |
| 17 | +RE_LINKS = re.compile(r'(?P<link>https?://[^ \t\r\n\<]+)') | ||
| 18 | + | ||
| 19 | + | ||
| 20 | +def find_links(block): | ||
| 21 | + links = RE_LINKS.finditer(block) | ||
| 22 | + | ||
| 23 | + block, n = RE_LINKS.subn(r'<a target="_blank" href="\g<link>">\g<link></a>', | ||
| 24 | + block) | ||
| 25 | + | ||
| 26 | + return block | ||
| 17 | 27 | ||
| 18 | 28 | ||
| 19 | def join(block): | 29 | def join(block): |
| 20 | block_txt = u''.join(block) | 30 | block_txt = u''.join(block) |
| 21 | 31 | ||
| 22 | if RE_WRAPPED_BY_HTML.match(block_txt.strip()): | 32 | if RE_WRAPPED_BY_HTML.match(block_txt.strip()): |
| 23 | - return html2text(block_txt) | 33 | + block = html2text(block_txt) |
| 34 | + else: | ||
| 35 | + block = block_txt | ||
| 24 | 36 | ||
| 25 | - return block_txt | 37 | + return find_links(block) |
| 26 | 38 | ||
| 27 | def is_reply(line, message, thread): | 39 | def is_reply(line, message, thread): |
| 28 | clean_line = line.strip() | 40 | clean_line = line.strip() |
| @@ -41,8 +53,7 @@ def is_reply(line, message, thread): | @@ -41,8 +53,7 @@ def is_reply(line, message, thread): | ||
| 41 | return False | 53 | return False |
| 42 | 54 | ||
| 43 | 55 | ||
| 44 | -@register.inclusion_tag(TEMPLATE_PATH + 'display_message.html', | ||
| 45 | - takes_context=False) | 56 | +@register.inclusion_tag(TEMPLATE_PATH + 'display_message.html') |
| 46 | def display_message(email, thread): | 57 | def display_message(email, thread): |
| 47 | message = email.body | 58 | message = email.body |
| 48 | messages = [] | 59 | messages = [] |