NDOJ/judge/jinja2/markdown/__init__.py

64 lines
1.2 KiB
Python
Raw Normal View History

2020-01-21 06:35:58 +00:00
from .. import registry
2022-10-25 04:59:04 +00:00
import markdown as _markdown
import bleach
from django.utils.html import escape
2020-01-21 06:35:58 +00:00
2022-10-25 04:59:04 +00:00
EXTENSIONS = [
"pymdownx.magiclink",
2022-10-25 23:07:45 +00:00
"pymdownx.betterem",
2022-10-25 04:59:04 +00:00
"pymdownx.details",
"pymdownx.emoji",
"pymdownx.inlinehilite",
"pymdownx.superfences",
"pymdownx.tasklist",
"markdown.extensions.footnotes",
"markdown.extensions.attr_list",
"markdown.extensions.def_list",
"markdown.extensions.tables",
"markdown.extensions.admonition",
]
2020-01-21 06:35:58 +00:00
2022-10-25 23:07:45 +00:00
ALLOWED_TAGS = bleach.sanitizer.ALLOWED_TAGS + [
"img",
"center",
"iframe",
"div",
"span",
"table",
"tr",
"td",
"th",
"tr",
"pre",
"code",
"p",
"hr",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"thead",
"tbody",
"sup",
"dl",
"dt",
"dd",
]
2020-01-21 06:35:58 +00:00
2022-10-25 23:07:45 +00:00
ALLOWED_ATTRS = ["src", "width", "height", "href", "class"]
2022-07-30 10:21:08 +00:00
2020-01-21 06:35:58 +00:00
@registry.filter
2022-10-25 04:59:04 +00:00
def markdown(value, hard_wrap=False):
extensions = EXTENSIONS
if hard_wrap:
extensions = EXTENSIONS + ["nl2br"]
2022-10-25 23:07:45 +00:00
html = _markdown.markdown(value, extensions=extensions)
html = bleach.clean(html, tags=ALLOWED_TAGS, attributes=ALLOWED_ATTRS)
2022-10-25 04:59:04 +00:00
if not html:
html = escape(value)
return '<div class="md-typeset">%s</div>' % html