mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added FormTagHelper that 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.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@687 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
b6854c648b
commit
967339e4d3
4 changed files with 83 additions and 26 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added FormTagHelper that 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.
|
||||
|
||||
* Added Iran and Irak to the countries list used by FormOptions#country_select and FormOptions#country_options_for_select
|
||||
|
||||
* Renamed link_to_image to link_image_to (since thats what it actually does) -- kept alias for the old method name
|
||||
|
|
62
actionpack/lib/action_view/helpers/form_tag_helper.rb
Normal file
62
actionpack/lib/action_view/helpers/form_tag_helper.rb
Normal file
|
@ -0,0 +1,62 @@
|
|||
require 'cgi'
|
||||
require File.dirname(__FILE__) + '/tag_helper'
|
||||
|
||||
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.
|
||||
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.
|
||||
#
|
||||
# Options:
|
||||
# * <tt>:multipart</tt> - If set to true, the enctype is set to "multipart/form-data".
|
||||
def form_tag(url_for_options = {}, options = {}, *parameters_for_url)
|
||||
html_options = { "method" => "post" }.merge(options)
|
||||
|
||||
if html_options[:multipart]
|
||||
html_options["enctype"] = "multipart/form-data"
|
||||
html_options.delete(:multipart)
|
||||
end
|
||||
|
||||
html_options["action"] = url_for(url_for_options, *parameters_for_url)
|
||||
|
||||
tag("form", html_options, true)
|
||||
end
|
||||
|
||||
alias_method :start_form_tag, :form_tag
|
||||
|
||||
# Outputs "</form>"
|
||||
def end_form_tag
|
||||
"</form>"
|
||||
end
|
||||
|
||||
def text_field_tag(name, value = nil, options = {})
|
||||
tag("input", {"type" => "text", "name" => name, "id" => name, "value" => value}.update(options))
|
||||
end
|
||||
|
||||
def password_field_tag(name = "password", value = nil, options = {})
|
||||
tag("input", {"type" => "password", "name" => name, "id" => name, "value" => value}.update(options))
|
||||
end
|
||||
|
||||
def text_area_tag(name, content = nil, options = {})
|
||||
if options[:size]
|
||||
options["cols"], options["rows"] = options[:size].split("x")
|
||||
options.delete(:size)
|
||||
end
|
||||
|
||||
content_tag("textarea", content, { "name" => name, "id" => name }.update(options))
|
||||
end
|
||||
|
||||
def check_box_tag(name, value = "1", checked = false, options = {})
|
||||
html_options = {"type" => "checkbox", "name" => name, "id" => name, "value" => value}.update(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))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -22,32 +22,6 @@ module ActionView
|
|||
"<#{name}#{tag_options(options)}>#{content}</#{name}>"
|
||||
end
|
||||
|
||||
# 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.
|
||||
#
|
||||
# Options:
|
||||
# * <tt>:multipart</tt> - If set to true, the enctype is set to "multipart/form-data".
|
||||
def form_tag(url_for_options = {}, options = {}, *parameters_for_url)
|
||||
html_options = { "method" => "post" }.merge(options)
|
||||
|
||||
if html_options[:multipart]
|
||||
html_options["enctype"] = "multipart/form-data"
|
||||
html_options.delete(:multipart)
|
||||
end
|
||||
|
||||
html_options["action"] = url_for(url_for_options, *parameters_for_url)
|
||||
|
||||
tag("form", html_options, true)
|
||||
end
|
||||
|
||||
alias_method :start_form_tag, :form_tag
|
||||
|
||||
# Outputs "</form>"
|
||||
def end_form_tag
|
||||
"</form>"
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
def tag_options(options)
|
||||
unless options.empty?
|
||||
|
|
19
actionpack/test/template/form_tag_helper_test.rb
Normal file
19
actionpack/test/template/form_tag_helper_test.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
require 'test/unit'
|
||||
require File.dirname(__FILE__) + '/../../lib/action_view/helpers/form_tag_helper'
|
||||
|
||||
class TagHelperTest < Test::Unit::TestCase
|
||||
include ActionView::Helpers::TagHelper
|
||||
include ActionView::Helpers::FormTagHelper
|
||||
|
||||
MethodToTag = {
|
||||
%(text_field_tag("title", "Hello!")) => %(<input id="title" name="title" type="text" value="Hello!" />),
|
||||
%(text_field_tag("title", "Hello!", "class" => "admin")) => %(<input class="admin" id="title" name="title" type="text" value="Hello!" />),
|
||||
%(password_field_tag) => %(<input id="password" name="password" type="password" value="" />),
|
||||
%(text_area_tag("body", "hello world", :size => "20x40")) => %(<textarea cols="20" id="body" name="body" rows="40">hello world</textarea>),
|
||||
%(check_box_tag("admin")) => %(<input id="admin" name="admin" type="checkbox" value="1" />),
|
||||
}
|
||||
|
||||
def test_tags
|
||||
MethodToTag.each { |method, tag| assert_equal(eval(method), tag) }
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue