diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-03-09 13:53:47 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-03-09 13:53:47 +0000 |
commit | 5a4846a0d385b54e8ba1c974bf8c4de29fb49ea5 (patch) | |
tree | 2127f5dfca8ec3e8cf5b5546f5b15b4c12e07c0d | |
parent | 6526adcff9110419b15440139652d1192f269db5 (diff) | |
download | rails-5a4846a0d385b54e8ba1c974bf8c4de29fb49ea5.tar.gz rails-5a4846a0d385b54e8ba1c974bf8c4de29fb49ea5.tar.bz2 rails-5a4846a0d385b54e8ba1c974bf8c4de29fb49ea5.zip |
Added TagHelper#image_tag and deprecated UrlHelper#link_image_to (recommended 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
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/tag_helper.rb | 29 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/url_helper.rb | 3 | ||||
-rw-r--r-- | actionpack/test/template/tag_helper_test.rb | 17 | ||||
-rw-r--r-- | actionpack/test/template/url_helper_test.rb | 17 |
5 files changed, 53 insertions, 15 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index d963b0e680..53cd36f611 100644 --- a/actionpack/CHANGELOG +++ b/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] diff --git a/actionpack/lib/action_view/helpers/tag_helper.rb b/actionpack/lib/action_view/helpers/tag_helper.rb index fa74e3f4ee..eb8af0c098 100644 --- a/actionpack/lib/action_view/helpers/tag_helper.rb +++ b/actionpack/lib/action_view/helpers/tag_helper.rb @@ -22,9 +22,36 @@ module ActionView "<#{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(" ") @@ -32,4 +59,4 @@ module ActionView end end end -end +end
\ No newline at end of file diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb index 137cfe58ab..609de9deed 100644 --- a/actionpack/lib/action_view/helpers/url_helper.rb +++ b/actionpack/lib/action_view/helpers/url_helper.rb @@ -52,6 +52,9 @@ module ActionView # 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?(".") diff --git a/actionpack/test/template/tag_helper_test.rb b/actionpack/test/template/tag_helper_test.rb index 9d8d2644e8..cf3dabd522 100644 --- a/actionpack/test/template/tag_helper_test.rb +++ b/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' @@ -17,17 +18,7 @@ class TagHelperTest < Test::Unit::TestCase 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 diff --git a/actionpack/test/template/url_helper_test.rb b/actionpack/test/template/url_helper_test.rb index 19c8e825d6..828af7bb14 100644 --- a/actionpack/test/template/url_helper_test.rb +++ b/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' @@ -40,6 +41,11 @@ class UrlHelperTest < Test::Unit::TestCase ) 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") ) @@ -93,6 +99,15 @@ class UrlHelperTest < Test::Unit::TestCase 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 |