@@ -58,22 +58,39 @@ def #{method_name}(content = nil, escape: true, **options, &block)
58
58
end
59
59
end
60
60
61
- def self . define_void_element ( name , code_generator :, method_name : name . to_s . underscore , self_closing : false )
61
+ def self . define_void_element ( name , code_generator :, method_name : name . to_s . underscore )
62
62
code_generator . define_cached_method ( method_name , namespace : :tag_builder ) do |batch |
63
63
batch . push ( <<~RUBY )
64
64
def #{ method_name } (content = nil, escape: true, **options, &block)
65
65
if content || block
66
- tag_string(#{ name . inspect } , content, escape: escape, **options, &block)
66
+ ActionView.deprecator.warn <<~TEXT
67
+ Putting content inside a void element (#{ name } ) is invalid
68
+ according to the HTML5 spec, and so it is being deprecated
69
+ without replacement. In Rails 7.3, passing content as a
70
+ positional argument will raise, and using a block will have
71
+ no effect.
72
+ TEXT
73
+ tag_string("#{ name } ", content, escape: escape, **options, &block)
67
74
else
68
- void_tag_string( #{ name . inspect } , options, escape, #{ self_closing } )
75
+ self_closing_tag_string(" #{ name } " , options, escape, ">" )
69
76
end
70
77
end
71
78
RUBY
72
79
end
73
80
end
74
81
75
- def self . define_self_closing_element ( name , **options )
76
- define_void_element ( name , self_closing : true , **options )
82
+ def self . define_self_closing_element ( name , code_generator :, method_name : name . to_s . underscore )
83
+ code_generator . define_cached_method ( method_name , namespace : :tag_builder ) do |batch |
84
+ batch . push ( <<~RUBY )
85
+ def #{ method_name } (content = nil, escape: true, **options, &block)
86
+ if content || block
87
+ tag_string("#{ name } ", content, escape: escape, **options, &block)
88
+ else
89
+ self_closing_tag_string("#{ name } ", options, escape)
90
+ end
91
+ end
92
+ RUBY
93
+ end
77
94
end
78
95
79
96
ActiveSupport ::CodeGenerator . batch ( self , __FILE__ , __LINE__ ) do |code_generator |
@@ -228,8 +245,8 @@ def tag_string(name, content = nil, escape: true, **options, &block)
228
245
content_tag_string ( name , content , options , escape )
229
246
end
230
247
231
- def void_tag_string ( name , options , escape = true , self_closing = false )
232
- "<#{ name } #{ tag_options ( options , escape ) } #{ self_closing ? " />" : ">" } " . html_safe
248
+ def self_closing_tag_string ( name , options , escape = true , tag_suffix = " />" )
249
+ "<#{ name } #{ tag_options ( options , escape ) } #{ tag_suffix } " . html_safe
233
250
end
234
251
235
252
def content_tag_string ( name , content , options , escape = true )
0 commit comments