Merge pull request #43232 from le0pard/fix_use_tag

Support svg unpaired tags in tag helper
This commit is contained in:
Rafael França 2021-09-20 17:34:28 -04:00 committed by GitHub
commit 6e2247e976
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 3 deletions

View File

@ -1,6 +1,11 @@
## Rails 7.0.0.alpha2 (September 15, 2021) ##
* No changes.
* Support svg unpaired tags for `tag` helper.
tag.svg { tag.use('href' => "#cool-icon") }
# => <svg><use href="#cool-icon"></svg>
*Oleksii Vasyliev*
## Rails 7.0.0.alpha1 (September 15, 2021) ##

View File

@ -45,7 +45,8 @@ module ActionView
include CaptureHelper
include OutputSafetyHelper
VOID_ELEMENTS = %i(area base br col embed hr img input keygen link meta param source track wbr).to_set
HTML_VOID_ELEMENTS = %i(area base br col circle embed hr img input keygen link meta param source track wbr).to_set
SVG_VOID_ELEMENTS = %i(animate animateMotion animateTransform circle ellipse line path polygon polyline rect set stop use view).to_set
def initialize(view_context)
@view_context = view_context
@ -66,7 +67,7 @@ module ActionView
def tag_string(name, content = nil, escape_attributes: true, **options, &block)
content = @view_context.capture(self, &block) if block_given?
if VOID_ELEMENTS.include?(name) && content.nil?
if (HTML_VOID_ELEMENTS.include?(name) || SVG_VOID_ELEMENTS.include?(name)) && content.nil?
"<#{name.to_s.dasherize}#{tag_options(options, escape_attributes)}>".html_safe
else
content_tag_string(name.to_s.dasherize, content || "", options, escape_attributes)

View File

@ -21,6 +21,7 @@ class TagHelperTest < ActionView::TestCase
def test_tag_builder_void_tag
assert_equal "<br>", tag.br
assert_equal "<br class=\"some_class\">", tag.br(class: "some_class")
assert_equal "<svg><use href=\"#cool-icon\"></svg>", tag.svg { tag.use("href" => "#cool-icon") }
end
def test_tag_builder_void_tag_with_forced_content