rDrama/files/helpers/markdown.py

102 lines
3.2 KiB
Python
Raw Normal View History

2021-10-15 14:08:27 +00:00
from .get import *
from mistletoe.span_token import SpanToken
from mistletoe.html_renderer import HTMLRenderer
import re
from flask import g
class UserMention(SpanToken):
pattern = re.compile("(^|\s|\n)@((\w|-){1,25})")
parse_inner = False
def __init__(self, match_obj):
self.target = (match_obj.group(1), match_obj.group(2))
2021-12-29 06:43:20 +00:00
2021-10-15 14:08:27 +00:00
class SubMention(SpanToken):
2021-12-30 15:16:33 +00:00
pattern = re.compile("(^|\s|\n)(r/|/r/)(\w{3,25})")
2021-10-15 14:08:27 +00:00
parse_inner = False
def __init__(self, match_obj):
2021-12-30 16:25:40 +00:00
self.target = (match_obj.group(1), match_obj.group(3))
2021-10-15 14:08:27 +00:00
class RedditorMention(SpanToken):
2021-12-30 15:16:33 +00:00
pattern = re.compile("(^|\s|\n)(u/|/u/)((\w|-){3,25})")
2021-10-15 14:08:27 +00:00
parse_inner = False
def __init__(self, match_obj):
2021-12-31 23:45:27 +00:00
self.target = (match_obj.group(1), match_obj.group(3))
2021-10-15 14:08:27 +00:00
class CustomRenderer(HTMLRenderer):
def __init__(self, **kwargs):
2021-12-30 15:16:33 +00:00
super().__init__(UserMention, SubMention, RedditorMention)
for i in kwargs: self.__dict__[i] = kwargs[i]
2021-10-15 14:08:27 +00:00
def render_user_mention(self, token):
space = token.target[0]
target = token.target[1]
user = get_user(target, graceful=True)
2022-01-10 22:43:00 +00:00
if not user: return f"{space}@{target}"
2022-01-04 13:18:37 +00:00
return f'''{space}<a href="/id/{user.id}"><img alt="@{user.username}'s profile picture" loading="lazy" src="/uid/{user.id}/pic" class="pp20">@{user.username}</a>'''
2021-10-15 14:08:27 +00:00
def render_sub_mention(self, token):
2021-12-30 16:25:40 +00:00
space = token.target[0]
target = token.target[1]
return f'{space}<a href="https://old.reddit.com/r/{target}" rel="nofollow noopener noreferrer" class="d-inline-block">r/{target}</a>'
2021-10-15 14:08:27 +00:00
def render_redditor_mention(self, token):
space = token.target[0]
target = token.target[1]
return f'{space}<a href="https://old.reddit.com/u/{target}" rel="nofollow noopener noreferrer" class="d-inline-block">u/{target}</a>'
class Renderer(HTMLRenderer):
def __init__(self, **kwargs):
2021-12-30 15:16:33 +00:00
super().__init__(UserMention, SubMention, RedditorMention)
for i in kwargs: self.__dict__[i] = kwargs[i]
2021-10-15 14:08:27 +00:00
def render_user_mention(self, token):
space = token.target[0]
target = token.target[1]
user = get_user(target, graceful=True)
2022-01-10 22:43:00 +00:00
if not user: return f"{space}@{target}"
2022-01-04 13:18:37 +00:00
return f'{space}<a href="/id/{user.id}">@{user.username}</a>'
2021-10-15 14:08:27 +00:00
def render_sub_mention(self, token):
space = token.target[0]
target = token.target[1]
return f'{space}<a href="https://old.reddit.com/r/{target}" rel="nofollow noopener noreferrer" class="d-inline-block">r/{target}</a>'
def render_redditor_mention(self, token):
space = token.target[0]
target = token.target[1]
2021-12-24 02:21:46 +00:00
return f'{space}<a href="https://old.reddit.com/u/{target}" rel="nofollow noopener noreferrer" class="d-inline-block">u/{target}</a>'
2021-12-24 02:25:06 +00:00
class Renderer2(HTMLRenderer):
2021-12-24 02:21:46 +00:00
def __init__(self, **kwargs):
2021-12-30 15:16:33 +00:00
super().__init__(UserMention, SubMention, RedditorMention)
2021-12-29 06:43:20 +00:00
for i in kwargs: self.__dict__[i] = kwargs[i]
2021-12-24 02:24:23 +00:00
def render_user_mention(self, token):
2021-12-30 05:27:22 +00:00
space = token.target[0]
target = token.target[1]
return f"{space}@{target}"
def render_sub_mention(self, token):
space = token.target[0]
target = token.target[1]
return f"{space}r/{target}"
def render_redditor_mention(self, token):
space = token.target[0]
target = token.target[1]
return f"{space}u/{target}"