diff --git a/packages/markdown-link-classes/lektor_markdown_link_classes.py b/packages/markdown-link-classes/lektor_markdown_link_classes.py
index ecd97d9c..1fe0f8dc 100644
--- a/packages/markdown-link-classes/lektor_markdown_link_classes.py
+++ b/packages/markdown-link-classes/lektor_markdown_link_classes.py
@@ -1,6 +1,7 @@
import re
from lektor.pluginsystem import Plugin
from markupsafe import escape
+from mistune import __version__ as mistune_version
_class_re = re.compile(r'\s+:([a-zA-Z0-9_-]+)')
@@ -15,21 +16,31 @@ def split_classes(text):
return text, classes
+def render_link(link, text, title=None):
+ text, classes = split_classes(text)
+ if link.startswith('javascript:'):
+ link = ''
+ attr = [f'href="{escape(link)}"']
+ if title:
+ attr.append(f'title="{escape(title)}"')
+ if classes:
+ attr.append(f'class="{" ".join(map(escape, classes))}"')
+ return f"{text if text else link}"
+
+
+if mistune_version.startswith("0."):
+ class LinkClassesMixin(object):
+ def link(renderer, link, title, text):
+ return render_link(link, text, title)
+else:
+ class LinkClassesMixin(object):
+ def link(renderer, link, text, title):
+ return render_link(link, text, title)
+
+
class MarkdownLinkClassesPlugin(Plugin):
name = 'Markdown Link Classes'
description = 'Adds the ability to add classes to links.'
def on_markdown_config(self, config, **extra):
- class LinkClassesMixin(object):
- def link(renderer, link, text, title):
- text, classes = split_classes(text)
- if link.startswith('javascript:'):
- link = ''
- attr = ['href="%s"' % escape(link)]
- if title:
- attr.append('title="%s"' % escape(title))
- if classes:
- attr.append('class="%s"' % ' '.join(
- escape(x) for x in classes))
- return '%s' % (' '.join(attr), text)
config.renderer_mixins.append(LinkClassesMixin)