From fc69c9fc049bc1c1e5a33cf16034e31800e6b46f Mon Sep 17 00:00:00 2001 From: cubicroot <github@cubicroot.xyz> Date: Thu, 26 Dec 2024 11:46:06 +0100 Subject: [PATCH] Add ID attribute to headings in wiki --- src/core/markdown.py | 7 ++++++- src/core/tests/markdown.py | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/core/markdown.py b/src/core/markdown.py index 95246a86f..685481c9b 100644 --- a/src/core/markdown.py +++ b/src/core/markdown.py @@ -3,7 +3,7 @@ import re import bleach import mistletoe -from mistletoe.block_token import BlockToken +from mistletoe.block_token import BlockToken, Heading from mistletoe.html_renderer import HTMLRenderer from mistletoe.span_token import AutoLink, Link, SpanToken, tokenize_inner @@ -118,6 +118,11 @@ class MyHtmlRenderer(HTMLRenderer): inner = self.render_inner(token) return template.format(target=target, title=title, inner=inner, link_type=link_type) + def render_heading(self, token: Heading) -> str: + content = ' '.join([child.content for child in token.children]) + heading = f'<h{token.level} id="{slugify(content)}">{content}</h{token.level}>' + return heading + def render_auto_link(self, token: AutoLink) -> str: link_type, url = resolve_link(token.target) self.result.linked_urls.add(url) diff --git a/src/core/tests/markdown.py b/src/core/tests/markdown.py index de008cd8a..9b6b0be7b 100644 --- a/src/core/tests/markdown.py +++ b/src/core/tests/markdown.py @@ -135,3 +135,12 @@ class MarkdownTest(TestCase): # triple sanity check: we expected four links total (one of them not to a user) self.assertEqual(4, len(re.findall('<a ', md_rendered))) + + @override_settings(SELECTED_CONFERENCE_ID=TEST_CONF_ID) + def test_headings(self): + conf = Conference(name='foo', id=TEST_CONF_ID) + conf.save() + + self.assertEqual(render_markdown(conf, '# Heading 1'), '<h1 id="heading-1">Heading 1</h1>\n') + self.assertEqual(render_markdown(conf, '## Heading with Ü'), '<h2 id="heading-with-u">Heading with Ü</h2>\n') + self.assertEqual(render_markdown(conf, 'Multi\nline\n======'), '<h1 id="multi-line">Multi line</h1>\n') -- GitLab