Skip to content
Snippets Groups Projects
Commit 0037fb9f authored by HeJ's avatar HeJ
Browse files

Merge branch 'add-id-to-wiki-headings' into 'develop'

Add ID attribute to headings in wiki

Closes #713

See merge request hub/hub!1149
parents 1ead867b fc69c9fc
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment