1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #37445 from jhawthorn/optimize_content_tag

Make content_tag a bit faster
This commit is contained in:
John Hawthorn 2019-10-25 13:13:03 -07:00 committed by GitHub
commit 82f9d7c8b6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -24,8 +24,14 @@ module ActionView
visible).to_set
BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES.map(&:to_sym))
BOOLEAN_ATTRIBUTES.freeze
TAG_PREFIXES = ["aria", "data", :aria, :data].to_set
TAG_PREFIXES = ["aria", "data", :aria, :data].to_set.freeze
TAG_TYPES = {}
TAG_TYPES.merge! BOOLEAN_ATTRIBUTES.index_with(:boolean)
TAG_TYPES.merge! TAG_PREFIXES.index_with(:prefix)
TAG_TYPES.freeze
PRE_CONTENT_STRINGS = Hash.new { "" }
PRE_CONTENT_STRINGS[:textarea] = "\n"
@ -61,13 +67,14 @@ module ActionView
output = +""
sep = " "
options.each_pair do |key, value|
if TAG_PREFIXES.include?(key) && value.is_a?(Hash)
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 BOOLEAN_ATTRIBUTES.include?(key)
elsif type == :boolean
if value
output << sep
output << boolean_tag_option(key)
@ -88,9 +95,9 @@ module ActionView
if value.is_a?(Array)
value = escape ? safe_join(value, " ") : value.join(" ")
else
value = escape ? ERB::Util.unwrapped_html_escape(value).dup : value.to_s.dup
value = escape ? ERB::Util.unwrapped_html_escape(value) : value.to_s
end
value.gsub!('"', "&quot;")
value = value.gsub('"', "&quot;") if value.include?('"')
%(#{key}="#{value}")
end