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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
50 changes: 23 additions & 27 deletions actionpack/lib/action_view/helpers/asset_tag_helper.rb
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" /> # <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")) # => # 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" /> # <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 = {}) def image_tag(source, options={})
options.symbolize_keys! options = options.dup.symbolize_keys!


src = options[:src] = path_to_image(source) 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_tag(["trailer.ogg", "trailer.flv"] :size => "160x120") # =>
# <video height="120" width="160"><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video> # <video height="120" width="160"><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
def video_tag(*sources) def video_tag(*sources)
options = sources.extract_options!.symbolize_keys! multiple_sources_tag('video', sources) do |options|
sources.flatten! 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+$}
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)) }
end end
else
options[:src] = path_to_video(sources.first)
tag("video", options)
end end
end end


Expand All @@ -449,24 +439,30 @@ def video_tag(*sources)
# audio_tag("sound.wav", "sound.mid") # => # audio_tag("sound.wav", "sound.mid") # =>
# <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio> # <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio>
def audio_tag(*sources) def audio_tag(*sources)
options = sources.extract_options!.symbolize_keys! multiple_sources_tag('audio', sources)
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
end end


private private


def asset_paths def asset_paths
@asset_paths ||= AssetTagHelper::AssetPaths.new(config, controller) @asset_paths ||= AssetTagHelper::AssetPaths.new(config, controller)
end 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 end
end end
14 changes: 14 additions & 0 deletions actionpack/test/template/asset_tag_helper_test.rb
Expand Up @@ -445,6 +445,12 @@ def test_image_tag
ImageLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } ImageLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
end 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 def test_favicon_link_tag
FaviconLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } FaviconLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
end end
Expand Down Expand Up @@ -488,6 +494,14 @@ def test_audio_tag
AudioLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) } AudioLinkToTag.each { |method, tag| assert_dom_equal(tag, eval(method)) }
end 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 def test_timebased_asset_id
expected_time = File.mtime(File.expand_path(File.dirname(__FILE__) + "/../fixtures/public/images/rails.png")).to_i.to_s 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") assert_equal %(<img alt="Rails" src="/images/rails.png?#{expected_time}" />), image_tag("rails.png")
Expand Down