Permalink
Browse files

Added that the html options disabled, readonly, and multiple can all …

…be treated as booleans. So specifying <tt>disabled => :true</tt> will give <tt>disabled="disabled"</tt>. #809 [mindel]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@932 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent f22b000 commit ebf66379186db094ba94914c2aed4e6a485d4708 @dhh dhh committed Mar 20, 2005
@@ -1,5 +1,7 @@
*SVN*
+* Added that the html options disabled, readonly, and multiple can all be treated as booleans. So specifying <tt>disabled => :true</tt> will give <tt>disabled="disabled"</tt>. #809 [mindel]
+
* Added path collection syntax for Routes that will gobble up the rest of the url and pass it on to the controller #830 [rayners]. Example:
map.connect 'categories/*path_info', :controller => 'categories', :action => 'show'
@@ -5,6 +5,9 @@ module ActionView
module Helpers
# Provides a number of methods for creating form tags that doesn't rely on conventions with an object assigned to the template like
# FormHelper does. With the FormTagHelper, you provide the names and values yourself.
+ #
+ # NOTE: The html options disabled, readonly, and multiple can all be treated as booleans. So specifying <tt>disabled => :true</tt>
+ # will give <tt>disabled="disabled"</tt>.
module FormTagHelper
# Starts a form tag that points the action to an url configured with <tt>url_for_options</tt> just like
# ActionController::Base#url_for. The method for the form defaults to POST.
@@ -31,23 +34,23 @@ def end_form_tag
end
def select_tag(name, option_tags = nil, options = {})
- content_tag("select", option_tags, { "name" => name, "id" => name }.update(options.stringify_keys))
+ content_tag("select", option_tags, { "name" => name, "id" => name }.update(convert_options(options)))
end
def text_field_tag(name, value = nil, options = {})
- tag("input", { "type" => "text", "name" => name, "id" => name, "value" => value }.update(options.stringify_keys))
+ tag("input", { "type" => "text", "name" => name, "id" => name, "value" => value }.update(convert_options(options)))
end
def hidden_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.stringify_keys.update("type" => "hidden"))
end
def file_field_tag(name, options = {})
- text_field_tag(name, nil, options.stringify_keys.update("type" => "file"))
+ text_field_tag(name, nil, convert_options(options).update("type" => "file"))
end
def password_field_tag(name = "password", value = nil, options = {})
- text_field_tag(name, value, options.stringify_keys.update("type" => "password"))
+ text_field_tag(name, value, convert_options(options).update("type" => "password"))
end
def text_area_tag(name, content = nil, options = {})
@@ -57,24 +60,39 @@ def text_area_tag(name, content = nil, options = {})
options.delete("size")
end
- content_tag("textarea", content, { "name" => name, "id" => name }.update(options.stringify_keys))
+ content_tag("textarea", content, { "name" => name, "id" => name }.update(convert_options(options)))
end
def check_box_tag(name, value = "1", checked = false, options = {})
- html_options = { "type" => "checkbox", "name" => name, "id" => name, "value" => value }.update(options.stringify_keys)
+ html_options = { "type" => "checkbox", "name" => name, "id" => name, "value" => value }.update(convert_options(options))
html_options["checked"] = "checked" if checked
tag("input", html_options)
end
def radio_button_tag(name, value, checked = false, options = {})
- html_options = { "type" => "radio", "name" => name, "id" => name, "value" => value }.update(options.stringify_keys)
+ html_options = { "type" => "radio", "name" => name, "id" => name, "value" => value }.update(convert_options(options))
html_options["checked"] = "checked" if checked
tag("input", html_options)
end
def submit_tag(value = "Save changes", options = {})
- tag("input", { "type" => "submit", "name" => "submit", "value" => value }.update(options.stringify_keys))
+ tag("input", { "type" => "submit", "name" => "submit", "value" => value }.update(convert_options(options)))
end
+
+ private
+ def convert_options(options)
+ options = options.stringify_keys
+ %w( disabled readonly multiple ).each { |a| boolean_attribute(options, a) }
+ options
+ end
+
+ def boolean_attribute(options, attribute)
+ if options[attribute]
+ options[attribute] = attribute
+ else
+ options.delete attribute
+ end
+ end
end
end
end
@@ -81,5 +81,11 @@ def test_text_field_tag_class_string
assert_equal expected, actual
end
+ def test_boolean_optios
+ assert_equal %(<input checked="checked" disabled="disabled" id="admin" name="admin" readonly="readonly" type="checkbox" value="1" />), check_box_tag("admin", 1, true, 'disabled' => true, :readonly => "yes")
+ assert_equal %(<input checked="checked" id="admin" name="admin" type="checkbox" value="1" />), check_box_tag("admin", 1, true, :disabled => false, :readonly => nil)
+ assert_equal %(<select id="people" multiple="multiple" name="people"><option>david</option></select>), select_tag("people", "<option>david</option>", :multiple => true)
+ assert_equal %(<select id="people" name="people"><option>david</option></select>), select_tag("people", "<option>david</option>", :multiple => nil)
+ end
end

0 comments on commit ebf6637

Please sign in to comment.