Class: ActionView::Helpers::TagHelper::TagBuilder
Overview
Constant Summary
collapse
- VOID_ELEMENTS =
%i(area base br col embed hr img input keygen link meta param source track wbr).to_set
Instance Method Summary
collapse
-
#boolean_tag_option(key) ⇒ Object
-
#content_tag_string(name, content, options, escape = true) ⇒ Object
-
#initialize(view_context) ⇒ TagBuilder
constructor
A new instance of TagBuilder.
-
#tag_option(key, value, escape) ⇒ Object
-
#tag_options(options, escape = true) ⇒ Object
-
#tag_string(name, content = nil, escape_attributes: true, **options, &block) ⇒ Object
#raw, #safe_join, #to_sentence
#capture, #content_for, #content_for?, #provide, #with_output_buffer
Constructor Details
#initialize(view_context) ⇒ TagBuilder
Returns a new instance of TagBuilder.
46
47
48
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 46
def initialize(view_context)
@view_context = view_context
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(called, *args, **options, &block) ⇒ Object
119
120
121
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 119
def method_missing(called, *args, **options, &block)
tag_string(called, *args, **options, &block)
end
|
Instance Method Details
#boolean_tag_option(key) ⇒ Object
90
91
92
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 90
def boolean_tag_option(key)
%(#{key}="#{key}")
end
|
#content_tag_string(name, content, options, escape = true) ⇒ Object
59
60
61
62
63
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 59
def content_tag_string(name, content, options, escape = true)
tag_options = tag_options(options, escape) if options
content = ERB::Util.unwrapped_html_escape(content) if escape
"<#{name}#{tag_options}>#{PRE_CONTENT_STRINGS[name]}#{content}</#{name}>".html_safe
end
|
#tag_option(key, value, escape) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 94
def tag_option(key, value, escape)
case value
when Array, Hash
value = TagHelper.build_tag_values(value) if key.to_s == "class"
value = escape ? safe_join(value, " ") : value.join(" ")
else
value = escape ? ERB::Util.unwrapped_html_escape(value) : value.to_s
end
value = value.gsub('"', """) if value.include?('"')
%(#{key}="#{value}")
end
|
#tag_options(options, escape = true) ⇒ Object
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 65
def tag_options(options, escape = true)
return if options.blank?
output = +""
sep = " "
options.each_pair do |key, value|
type = TAG_TYPES[key]
if type == :prefix && value.is_a?(Hash)
value.each_pair do |k, v|
next if v.nil?
output << sep
output << prefix_tag_option(key, k, v, escape)
end
elsif type == :boolean
if value
output << sep
output << boolean_tag_option(key)
end
elsif !value.nil?
output << sep
output << tag_option(key, value, escape)
end
end
output unless output.empty?
end
|
#tag_string(name, content = nil, escape_attributes: true, **options, &block) ⇒ Object
50
51
52
53
54
55
56
57
|
# File 'actionview/lib/action_view/helpers/tag_helper.rb', line 50
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?
"<#{name.to_s.dasherize}#{tag_options(options, escape_attributes)}>".html_safe
else
content_tag_string(name.to_s.dasherize, content || "", options, escape_attributes)
end
end
|