Skip to content

Commit b469cba

Browse files
committed
Fix a bug where title elements were escaped in SVGs
1 parent 9ca9d3a commit b469cba

2 files changed

Lines changed: 19 additions & 5 deletions

File tree

lib/meteor/extensions/renderer.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import re
12
from string import whitespace
23
from urllib.parse import urlparse
34
from xml.etree import ElementTree
@@ -7,7 +8,8 @@
78
from tablerpy import OutlineIcon, get_icon
89
from marko import Markdown
910
from marko.ext.gfm import GFM
10-
from marko.helpers import MarkoExtension
11+
from marko.helpers import MarkoExtension, render_dispatch
12+
from marko.html_renderer import HTMLRenderer
1113

1214

1315
# SVG namespace
@@ -24,8 +26,10 @@ def icon(icon_name, a11y_title):
2426
with open(icon_path, "rt") as icon_ref:
2527
svg_string = icon_ref.read()
2628
root = ElementTree.fromstring(svg_string)
27-
root.insert(0, ElementTree.fromstring(f"<title>{a11y_title}</title>"))
28-
return ElementTree.tostring(root, encoding="unicode")
29+
title = ElementTree.fromstring(f"<title>{a11y_title}</title>")
30+
root.insert(0, title)
31+
svg = ElementTree.tostring(root, encoding="unicode")
32+
return svg
2933

3034

3135
def h2_and_rest(markdown):
@@ -81,6 +85,16 @@ def render_page(page_data, template_filename):
8185

8286
# Marko extension
8387
class MeteorRendererMixin(object):
88+
# Override the lists of escaped elements to omit `title` since it is used in inline SVGs
89+
tagfilter = re.compile(
90+
r"<(textarea|style|xmp|iframe|noembed|noframes|script|plaintext)",
91+
flags=re.I,
92+
)
93+
tagfilter_no_open = re.compile(
94+
r"(?<!^)( *)<(textarea|style|xmp|iframe|noembed|noframes|script|plaintext)",
95+
flags=re.I,
96+
)
97+
8498
def render_link(self, element):
8599
# From overwritten function
86100
title = f' title="{self.escape_html(element.title)}"' if element.title else ""
@@ -109,5 +123,5 @@ def render_link(self, element):
109123
# Marko renderer callback for Ark
110124
@ark.renderers.register("md")
111125
def render_markdown(text):
112-
markdown = Markdown(extensions=[MeteorExtension, GFM])
126+
markdown = Markdown(extensions=[GFM, MeteorExtension])
113127
return markdown(text)

lib/meteor/templates/components/rendered_link.jinja

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<span class="legible-link">{{ body }}</span>
1313
{%- else -%}
1414
<span>{{ body }}</span>
15-
{%- endif %}
15+
{%- endif -%}
1616
{%- if is_external -%}
1717
{%- if external_icon -%}
1818
{{- icon_tabler("external-link", "opens in new tab") -}}

0 commit comments

Comments
 (0)