From e1917cab3249e7341160bce66f90b5ec52e14733 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 9 Dec 2004 23:18:25 +0000 Subject: [PATCH] Added link_to_image(src, options = {}, html_options = {}, *parameters_for_method_reference) git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@105 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 16 ++++++++ .../lib/action_view/helpers/url_helper.rb | 37 +++++++++++++++++++ actionpack/test/template/url_helper_test.rb | 12 ++++++ 3 files changed, 65 insertions(+) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index e5162a4995..ca9197ba8b 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,21 @@ *SVN* +* Added link_to_image(src, options = {}, html_options = {}, *parameters_for_method_reference). Documentation: + + Creates a link tag to the image residing at the +src+ using an URL created by the set of +options+. See the valid options in + link:classes/ActionController/Base.html#M000021. It's also possible to pass a string instead of an options hash to + get a link tag that just points without consideration. The html_options works jointly for the image and ahref tag by + letting the following special values enter the options on the image and the rest goes to the ahref: + + ::alt: If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension) + ::size: Supplied as "XxY", so "30x45" becomes width="30" and height="45" + ::align: Sets the alignment, no special features + + 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" + * Fixed to_input_field_tag so it no longer explicitly uses InstanceTag.value if value was specified in the options hash [evl] * Added the possibility of having validate be protected for assert_(in)valid_column #263 [Tobias Luetke] diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb index feda33d7c1..b36d5a4c0b 100644 --- a/actionpack/lib/action_view/helpers/url_helper.rb +++ b/actionpack/lib/action_view/helpers/url_helper.rb @@ -25,6 +25,43 @@ def link_to(name, options = {}, html_options = {}, *parameters_for_method_refere end end + # Creates a link tag to the image residing at the +src+ using an URL created by the set of +options+. See the valid options in + # link:classes/ActionController/Base.html#M000021. It's also possible to pass a string instead of an options hash to + # get a link tag that just points without consideration. The html_options works jointly for the image and ahref tag by + # letting the following special values enter the options on the image and the rest goes to the ahref: + # + # ::alt: If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension) + # ::size: Supplied as "XxY", so "30x45" becomes width="30" and height="45" + # ::align: Sets the alignment, no special features + # + # 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 link_to_image(src, options = {}, html_options = {}, *parameters_for_method_reference) + image_options = { "src" => src.include?("/") ? src : "/images/#{src}" } + image_options["src"] = image_options["src"] + ".png" unless image_options["src"].include?(".") + + if html_options["alt"] + image_options["alt"] = html_options["alt"] + html_options.delete "alt" + else + image_options["alt"] = src.split("/").last.split(".").first.capitalize + end + + if html_options["size"] + image_options["width"], image_options["height"] = html_options["size"].split("x") + html_options.delete "size" + end + + if html_options["align"] + image_options["align"] = html_options["align"] + html_options.delete "align" + end + + link_to(tag("img", image_options), options, html_options, *parameters_for_method_reference) + end + # Creates a link tag of the given +name+ using an URL created by the set of +options+, unless the current # controller, action, and id are the same as the link's, in which case only the name is returned (or the # given block is yielded, if one exists). This is useful for creating link bars where you don't want to link diff --git a/actionpack/test/template/url_helper_test.rb b/actionpack/test/template/url_helper_test.rb index 198b26b113..e624c188db 100644 --- a/actionpack/test/template/url_helper_test.rb +++ b/actionpack/test/template/url_helper_test.rb @@ -27,6 +27,18 @@ def test_link_tag_with_javascript_confirm ) end + def test_link_to_image + assert_equal( + "\"Rss\"", + link_to_image("rss", "http://www.world.com", "size" => "30x45") + ) + + assert_equal( + "\"Feed\"", + link_to_image("rss.gif", "http://www.world.com", "size" => "30x45", "alt" => "Feed", "class" => "admin") + ) + end + def test_link_unless_current @params = { "controller" => "weblog", "action" => "show"} assert_equal "Showing", link_to_unless_current("Showing", :action => "show", :controller => "weblog") -- GitLab