Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AssetTagHelper improvements #4679

Merged
merged 2 commits into from
Jan 26, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 23 additions & 27 deletions actionpack/lib/action_view/helpers/asset_tag_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -355,8 +355,8 @@ def font_path(source)
# <img src="/images/mouse.png" onmouseover="this.src='/images/mouse_over.png'" onmouseout="this.src='/images/mouse.png'" alt="Mouse" />
# image_tag("mouse.png", :mouseover => image_path("mouse_over.png")) # =>
# <img src="/images/mouse.png" onmouseover="this.src='/images/mouse_over.png'" onmouseout="this.src='/images/mouse.png'" alt="Mouse" />
def image_tag(source, options = {})
options.symbolize_keys!
def image_tag(source, options={})
options = options.dup.symbolize_keys!

src = options[:src] = path_to_image(source)

Expand Down Expand Up @@ -416,22 +416,12 @@ def image_alt(src)
# video_tag(["trailer.ogg", "trailer.flv"] :size => "160x120") # =>
# <video height="120" width="160"><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
def video_tag(*sources)
options = sources.extract_options!.symbolize_keys!
sources.flatten!
multiple_sources_tag('video', sources) do |options|
options[:poster] = path_to_image(options[:poster]) if options[:poster]

options[:poster] = path_to_image(options[:poster]) if options[:poster]

if size = options.delete(:size)
options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}
end

if sources.size > 1
content_tag("video", options) do
safe_join sources.map { |source| tag("source", :src => path_to_video(source)) }
if size = options.delete(:size)
options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}
end
else
options[:src] = path_to_video(sources.first)
tag("video", options)
end
end

Expand All @@ -449,24 +439,30 @@ def video_tag(*sources)
# audio_tag("sound.wav", "sound.mid") # =>
# <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio>
def audio_tag(*sources)
options = sources.extract_options!.symbolize_keys!
sources.flatten!

if sources.size > 1
content_tag("audio", options) do
safe_join sources.collect { |source| tag("source", :src => path_to_audio(source)) }
end
else
options[:src] = path_to_audio(sources.first)
tag("audio", options)
end
multiple_sources_tag('audio', sources)
end

private

def asset_paths
@asset_paths ||= AssetTagHelper::AssetPaths.new(config, controller)
end

def multiple_sources_tag(type, sources)
options = sources.extract_options!.dup.symbolize_keys!
sources.flatten!

yield options if block_given?

if sources.size > 1
content_tag(type, options) do
safe_join sources.map { |source| tag("source", :src => send("path_to_#{type}", source)) }
end
else
options[:src] = send("path_to_#{type}", sources.first)
tag(type, options)
end
end
end
end
end
14 changes: 14 additions & 0 deletions actionpack/test/template/asset_tag_helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,12 @@ def test_image_tag
ImageLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
end

def test_image_tag_does_not_modify_options
options = {:size => '16x10'}
image_tag('icon', options)
assert_equal({:size => '16x10'}, options)
end

def test_favicon_link_tag
FaviconLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
end
Expand Down Expand Up @@ -488,6 +494,14 @@ def test_audio_tag
AudioLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
end

def test_video_audio_tag_does_not_modify_options
options = {:autoplay => true}
video_tag('video', options)
assert_equal({:autoplay => true}, options)
audio_tag('audio', options)
assert_equal({:autoplay => true}, options)
end

def test_timebased_asset_id
expected_time = File.mtime(File.expand_path(File.dirname(__FILE__) + "/../fixtures/public/images/rails.png")).to_i.to_s
assert_equal %(<img alt="Rails" src="/images/rails.png?#{expected_time}" />), image_tag("rails.png")
Expand Down