Skip to content

Commit

Permalink
Added TagHelper#image_tag and deprecated UrlHelper#link_image_to (rec…
Browse files Browse the repository at this point in the history
…ommended approach is to combine image_tag and link_to instead)

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@879 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
dhh committed Mar 9, 2005
1 parent 6526adc commit 5a4846a
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 15 deletions.
2 changes: 2 additions & 0 deletions actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*

* Added TagHelper#image_tag and deprecated UrlHelper#link_image_to (recommended approach is to combine image_tag and link_to instead)

* Fixed textilize to be resilient to getting nil parsed (by using Object#blank? instead of String#empty?)

* Fixed that the :multipart option in FormTagHelper#form_tag would be ignored [Yonatan Feldman]
Expand Down
29 changes: 28 additions & 1 deletion actionpack/lib/action_view/helpers/tag_helper.rb
Expand Up @@ -22,14 +22,41 @@ def content_tag(name, content, options = {})
"<#{name}#{tag_options(options)}>#{content}</#{name}>"
end


# Returns an image tag converting the +options+ instead html options on the tag, but with these special cases:
#
# * <tt>:alt</tt> - If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension)
# * <tt>:size</tt> - Supplied as "XxY", so "30x45" becomes width="30" and height="45"
#
# The +src+ can be supplied as a...
# * full path, like "/my_images/image.gif"
# * file name, like "rss.gif", that gets expanded to "/images/rss.gif"
# * file name without extension, like "logo", that gets expanded to "/images/logo.png"
def image_tag(src, options = {})
options.symbolize_keys

options.update({ :src => src.include?("/") ? src : "/images/#{src}" })
options[:src] += ".png" unless options[:src].include?(".")

options[:alt] ||= src.split("/").last.split(".").first.capitalize

if options[:size]
options[:width], options[:height] = options[:size].split("x")
options.delete :size
end

tag("img", options)
end

private
def tag_options(options)
unless options.empty?
options.symbolize_keys
" " + options.map { |key, value|
%(#{key}="#{html_escape(value.to_s)}")
}.sort.join(" ")
end
end
end
end
end
end
3 changes: 3 additions & 0 deletions actionpack/lib/action_view/helpers/url_helper.rb
Expand Up @@ -52,6 +52,9 @@ def link_to(name, options = {}, html_options = nil, *parameters_for_method_refer
# Examples:
# link_image_to "logo", { :controller => "home" }, :alt => "Homepage", :size => "45x80"
# link_image_to "delete", { :action => "destroy" }, :size => "10x10", :confirm => "Are you sure?", "class" => "admin"
#
# NOTE: This tag is deprecated. Combine the link_to and image_tag yourself instead, like:
# link_to(image_tag("rss", :size => "30x45", :border => 0), "http://www.example.com")
def link_image_to(src, options = {}, html_options = {}, *parameters_for_method_reference)
image_options = { "src" => src.include?("/") ? src : "/images/#{src}" }
image_options["src"] += ".png" unless image_options["src"].include?(".")
Expand Down
17 changes: 4 additions & 13 deletions actionpack/test/template/tag_helper_test.rb
@@ -1,4 +1,5 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../abstract_unit'

require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper'
require File.dirname(__FILE__) + '/../../lib/action_view/helpers/url_helper'

Expand All @@ -17,17 +18,7 @@ def test_content_tag
content_tag("a", "Create", :href => "create")
end

def test_mail_to_with_javascript
assert_equal "<script type=\"text/javascript\" language=\"javascript\">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", "My email", :encode => "javascript")
end

def test_mail_to_with_hex
assert_equal "<a href=\"mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">My email</a>", mail_to("me@domain.com", "My email", :encode => "hex")
def test_image_tag
assert_equal %(<img alt="Gold" height="70" src="/images/gold.png" width="45" />), image_tag("gold", :size => "45x70")
end

def test_mail_to
assert_equal "<a href=\"mailto:me@domain.com\">My email</a>", mail_to("me@domain.com", "My email")
end

# FIXME: Test form tag
end
17 changes: 16 additions & 1 deletion actionpack/test/template/url_helper_test.rb
@@ -1,4 +1,5 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../abstract_unit'

require File.dirname(__FILE__) + '/../../lib/action_view/helpers/url_helper'
require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper'

Expand Down Expand Up @@ -39,6 +40,11 @@ def test_link_image_to
link_image_to("rss", "http://www.example.com", "size" => "30x45", "border" => "0")
)

assert_equal(
"<a href=\"http://www.example.com\"><img alt=\"Rss\" border=\"0\" height=\"45\" src=\"/images/rss.png\" width=\"30\" /></a>",
link_to(image_tag("rss", :size => "30x45", :border => 0), "http://www.example.com")
)

assert_equal(
"<a class=\"admin\" href=\"http://www.example.com\"><img alt=\"Feed\" height=\"45\" src=\"/images/rss.gif\" width=\"30\" /></a>",
link_image_to("rss.gif", "http://www.example.com", "size" => "30x45", "alt" => "Feed", "class" => "admin")
Expand Down Expand Up @@ -93,6 +99,15 @@ def test_mail_to
mail_to("david@loudthinking.com", "David Heinemeier Hansson", :class => "admin")
end


def test_mail_to_with_javascript
assert_equal "<script type=\"text/javascript\" language=\"javascript\">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", "My email", :encode => "javascript")
end

def test_mail_to_with_hex
assert_equal "<a href=\"mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">My email</a>", mail_to("me@domain.com", "My email", :encode => "hex")
end

def test_link_with_nil_html_options
assert_equal "<a href=\"http://www.example.com\">Hello</a>", link_to("Hello", {:action => 'myaction'}, nil)
end
Expand Down

0 comments on commit 5a4846a

Please sign in to comment.