From fd7202a75653570693c6fe423faad96019fe0ea1 Mon Sep 17 00:00:00 2001 From: Xavier Noria Date: Thu, 8 Apr 2010 18:11:08 -0700 Subject: adds #favicon_link_tag back, rdoc explains why it is useful, and how to get a link for Mobile Safari with it --- .../lib/action_view/helpers/asset_tag_helper.rb | 34 ++++++++++++++++++++++ actionpack/test/template/asset_tag_helper_test.rb | 12 ++++++++ 2 files changed, 46 insertions(+) (limited to 'actionpack') diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb index e4ec17467e..85401ad561 100644 --- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb +++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb @@ -501,6 +501,40 @@ module ActionView end end + # Web browsers cache favicons. If you just throw a favicon.ico into the document + # root of your application and it changes later, clients that have it in their cache + # won't see the update. Using this helper prevents that because it appends an asset ID: + # + # <%= favicon_link_tag %> + # + # generates + # + # + # + # You may specify a different file in the first argument: + # + # <%= favicon_link_tag 'favicon.ico' %> + # + # That's passed to +image_path+ as is, so it gives + # + # + # + # The helper accepts an additional options hash where you can override "rel" and "type". + # + # For example, Mobile Safari looks for a different LINK tag, pointing to an image that + # will be used if you add the page to the home screen of an iPod Touch, iPhone, or iPad. + # The following call would generate such a tag: + # + # <%= favicon_link_tag 'mb-icon.png', :rel => 'apple-touch-icon', :type => 'image/png' %> + # + def favicon_link_tag(source='/favicon.ico', options={}) + tag('link', { + :rel => 'shortcut icon', + :type => 'image/vnd.microsoft.icon', + :href => image_path(source) + }.merge(options.symbolize_keys)) + end + # Computes the path to an image asset in the public images directory. # Full paths from the document root will be passed through. # Used internally by +image_tag+ to build the image path. diff --git a/actionpack/test/template/asset_tag_helper_test.rb b/actionpack/test/template/asset_tag_helper_test.rb index 223a430f92..124bf734ac 100644 --- a/actionpack/test/template/asset_tag_helper_test.rb +++ b/actionpack/test/template/asset_tag_helper_test.rb @@ -157,6 +157,14 @@ class AssetTagHelperTest < ActionView::TestCase %(image_tag("mouse.png", :mouseover => image_path("mouse_over.png"))) => %(Mouse) } + FaviconLinkToTag = { + %(favicon_link_tag) => %(), + %(favicon_link_tag 'favicon.ico') => %(), + %(favicon_link_tag 'favicon.ico', :rel => 'foo') => %(), + %(favicon_link_tag 'favicon.ico', :rel => 'foo', :type => 'bar') => %(), + %(favicon_link_tag 'mb-icon.png', :rel => 'apple-touch-icon', :type => 'image/png') => %() + } + VideoPathToTag = { %(video_path("xml")) => %(/videos/xml), %(video_path("xml.ogg")) => %(/videos/xml.ogg), @@ -331,6 +339,10 @@ class AssetTagHelperTest < ActionView::TestCase ImageLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } end + def test_favicon_link_tag + FaviconLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } + end + def test_image_tag_windows_behaviour old_asset_id, ENV["RAILS_ASSET_ID"] = ENV["RAILS_ASSET_ID"], "1" # This simulates the behaviour of File#exist? on windows when testing a file ending in "." -- cgit v1.2.3