Skip to content

Commit 992eb6c

Browse files
authored
Engine: Exclude SVG and MathML contexts from DebugVisitor (#1084)
This pull request adds `svg` and `math` to the excluded tags list so ERB outputs inside these elements are not wrapped in spans. The DebugVisitor wraps ERB outputs in `<span>` elements for debugging in ReActionView. However, `<span>` is not valid inside SVG or MathML, causing browsers to discard the wrappers and break rendering. Resolves #1052
1 parent 25ae024 commit 992eb6c

7 files changed

+142
-1
lines changed

β€Žlib/herb/engine/debug_visitor.rbβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ def in_script_or_style_context?
301301
end
302302

303303
def in_excluded_context?
304-
excluded_tags = ["script", "style", "head", "textarea", "pre"]
304+
excluded_tags = ["script", "style", "head", "textarea", "pre", "svg", "math"]
305305
return true if excluded_tags.any? { |tag| @element_stack.include?(tag) }
306306

307307
return true if @erb_block_stack.any? { |node| javascript_tag?(node.content.value.strip) }

β€Žtest/engine/debug_mode_test.rbβ€Ž

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,5 +402,78 @@ class DebugModeTest < Minitest::Spec
402402

403403
assert_compiled_snapshot(template, debug: true)
404404
end
405+
406+
test "svg content erb expressions do NOT get debug spans" do
407+
template = <<~ERB
408+
<svg viewBox="0 0 100 100">
409+
<circle cx="50" cy="50" r="<%= @radius %>" />
410+
<text x="50" y="50"><%= @label %></text>
411+
</svg>
412+
ERB
413+
414+
assert_compiled_snapshot(template, debug: true)
415+
end
416+
417+
test "svg with defs and style erb expressions do NOT get debug spans" do
418+
template = <<~ERB
419+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 29 29">
420+
<defs>
421+
<style>
422+
.cls-1 {fill:none;stroke:<%= @stroke_color %>}
423+
</style>
424+
</defs>
425+
<g transform="rotate(<%= @angle %> 50 50)">
426+
<line x1="50" y1="10" x2="50" y2="50" stroke="red" />
427+
</g>
428+
</svg>
429+
ERB
430+
431+
assert_compiled_snapshot(template, debug: true)
432+
end
433+
434+
test "nested svg inside div erb expressions do NOT get debug spans inside svg" do
435+
template = <<~ERB
436+
<div class="chart-container">
437+
<h2><%= @chart_title %></h2>
438+
<svg viewBox="0 0 100 100">
439+
<rect width="<%= @width %>" height="<%= @height %>" />
440+
<text><%= @value %></text>
441+
</svg>
442+
<p><%= @description %></p>
443+
</div>
444+
ERB
445+
446+
assert_compiled_snapshot(template, debug: true, filename: "test.html.erb")
447+
end
448+
449+
test "math content erb expressions do NOT get debug spans" do
450+
template = <<~ERB
451+
<math>
452+
<mrow>
453+
<mi><%= @variable %></mi>
454+
<mo>=</mo>
455+
<mn><%= @value %></mn>
456+
</mrow>
457+
</math>
458+
ERB
459+
460+
assert_compiled_snapshot(template, debug: true)
461+
end
462+
463+
test "nested math inside div erb expressions do NOT get debug spans inside math" do
464+
template = <<~ERB
465+
<div class="equation">
466+
<p><%= @equation_name %></p>
467+
<math>
468+
<msup>
469+
<mi><%= @base %></mi>
470+
<mn><%= @exponent %></mn>
471+
</msup>
472+
</math>
473+
</div>
474+
ERB
475+
476+
assert_compiled_snapshot(template, debug: true, filename: "test.html.erb")
477+
end
405478
end
406479
end

β€Žtest/snapshots/engine/debug_mode_test/test_0047_svg_content_erb_expressions_do_NOT_get_debug_spans_abd11745e9db86296002411c6c32107d.txtβ€Ž

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žtest/snapshots/engine/debug_mode_test/test_0048_svg_with_defs_and_style_erb_expressions_do_NOT_get_debug_spans_ee142cee09770f1e7abd1bba545ccfbf.txtβ€Ž

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žtest/snapshots/engine/debug_mode_test/test_0049_nested_svg_inside_div_erb_expressions_do_NOT_get_debug_spans_inside_svg_899e55a5b972596a5c3ec95a4b0bf2df.txtβ€Ž

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žtest/snapshots/engine/debug_mode_test/test_0050_math_content_erb_expressions_do_NOT_get_debug_spans_0b05aaac2761684788eb7a05f9a94a64.txtβ€Ž

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žtest/snapshots/engine/debug_mode_test/test_0051_nested_math_inside_div_erb_expressions_do_NOT_get_debug_spans_inside_math_609c20a1abc8582ebecf218e494420c6.txtβ€Ž

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
Β (0)