diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2007-09-18 10:55:15 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2007-09-18 10:55:15 +0000 |
commit | 8fd263cd4ec740bda56b6f4c0d3e2ddd91f05722 (patch) | |
tree | 3bf61c55c6ef2fd2f91c9032c8a3f925280e93f9 /actionpack/lib | |
parent | 7010ee361ec71ed1a37962897cebc8684d90aa35 (diff) | |
download | rails-8fd263cd4ec740bda56b6f4c0d3e2ddd91f05722.tar.gz rails-8fd263cd4ec740bda56b6f4c0d3e2ddd91f05722.tar.bz2 rails-8fd263cd4ec740bda56b6f4c0d3e2ddd91f05722.zip |
tag_options creates fewer objects
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7512 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_view/helpers/tag_helper.rb | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/actionpack/lib/action_view/helpers/tag_helper.rb b/actionpack/lib/action_view/helpers/tag_helper.rb index 8d3f6be04c..f222e43adc 100644 --- a/actionpack/lib/action_view/helpers/tag_helper.rb +++ b/actionpack/lib/action_view/helpers/tag_helper.rb @@ -8,6 +8,8 @@ module ActionView module TagHelper include ERB::Util + BOOLEAN_ATTRIBUTES = Set.new(%w(disabled readonly multiple)) + # Returns an empty HTML tag of type +name+ which by default is XHTML # compliant. Setting +open+ to true will create an open tag compatible # with HTML 4.0 and below. Add HTML attributes by passing an attributes @@ -97,29 +99,28 @@ module ActionView private def content_tag_string(name, content, options) - tag_options = options ? tag_options(options) : "" + tag_options = tag_options(options) if options "<#{name}#{tag_options}>#{content}</#{name}>" end - - def tag_options(options) - cleaned_options = convert_booleans(options.stringify_keys.reject {|key, value| value.nil?}) - ' ' + cleaned_options.map {|key, value| %(#{key}="#{escape_once(value)}")}.sort * ' ' unless cleaned_options.empty? - end - def convert_booleans(options) - %w( disabled readonly multiple ).each { |a| boolean_attribute(options, a) } - options + def tag_options(options) + unless options.blank? + attrs = [] + options.each do |key, value| + next unless value + key = key.to_s + value = BOOLEAN_ATTRIBUTES.include?(key) ? key : escape_once(value) + attrs << %(#{key}="#{value}") + end + " #{attrs.sort * ' '}" unless attrs.empty? + end end - def boolean_attribute(options, attribute) - options[attribute] ? options[attribute] = attribute : options.delete(attribute) - end - # Fix double-escaped entities, such as &amp;, &#123;, etc. def fix_double_escape(escaped) escaped.gsub(/&([a-z]+|(#\d+));/i) { "&#{$1};" } end - + def block_is_within_action_view?(block) eval("defined? _erbout", block.binding) end |