diff options
author | José Valim <jose.valim@gmail.com> | 2012-01-25 11:28:22 -0800 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2012-01-25 11:28:22 -0800 |
commit | 0920065772dc6e3094df7101e28c38a183725ac9 (patch) | |
tree | 03f1d0f1f4ac0a09ea6fbc5f5d6271e904e66cc9 /actionpack | |
parent | 73c53cd9ebd32e1e18ff7bc0b3cfe87cfb29b40a (diff) | |
parent | 08e5104a596d2dc0bb831afed6cd0b83e106067c (diff) | |
download | rails-0920065772dc6e3094df7101e28c38a183725ac9.tar.gz rails-0920065772dc6e3094df7101e28c38a183725ac9.tar.bz2 rails-0920065772dc6e3094df7101e28c38a183725ac9.zip |
Merge pull request #4676 from lest/patch-1
allow to pass multiple sources to audio/video tags without using array
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_view/helpers/asset_tag_helper.rb | 32 | ||||
-rw-r--r-- | actionpack/test/template/asset_tag_helper_test.rb | 2 |
2 files changed, 22 insertions, 12 deletions
diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb index 134eaab8bc..251b8f8005 100644 --- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb +++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb @@ -1,3 +1,5 @@ +require 'active_support/core_ext/array/extract_options' +require 'active_support/core_ext/hash/keys' require 'action_view/helpers/asset_tag_helpers/javascript_tag_helpers' require 'action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers' require 'action_view/helpers/asset_tag_helpers/asset_paths' @@ -407,12 +409,15 @@ module ActionView # <video src="/trailers/hd.avi" width="16" height="16" /> # video_tag("/trailers/hd.avi", :height => '32', :width => '32') # => # <video height="32" src="/trailers/hd.avi" width="32" /> + # video_tag("trailer.ogg", "trailer.flv") # => + # <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video> # video_tag(["trailer.ogg", "trailer.flv"]) # => - # <video><source src="trailer.ogg" /><source src="trailer.ogg" /><source src="trailer.flv" /></video> + # <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video> # video_tag(["trailer.ogg", "trailer.flv"] :size => "160x120") # => - # <video height="120" width="160"><source src="trailer.ogg" /><source src="trailer.flv" /></video> - def video_tag(sources, options = {}) - options.symbolize_keys! + # <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! options[:poster] = path_to_image(options[:poster]) if options[:poster] @@ -420,12 +425,12 @@ module ActionView options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$} end - if sources.is_a?(Array) + if sources.size > 1 content_tag("video", options) do - sources.map { |source| tag("source", :src => path_to_video(source)) }.join.html_safe + safe_join sources.map { |source| tag("source", :src => path_to_video(source)) } end else - options[:src] = path_to_video(sources) + options[:src] = path_to_video(sources.first) tag("video", options) end end @@ -441,15 +446,18 @@ module ActionView # <audio src="/audios/sound.wav" /> # audio_tag("sound.wav", :autoplay => true, :controls => true) # => # <audio autoplay="autoplay" controls="controls" src="/audios/sound.wav" /> - def audio_tag(sources, options = {}) - options.symbolize_keys! + # 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.is_a?(Array) + if sources.size > 1 content_tag("audio", options) do - sources.collect { |source| tag("source", :src => path_to_audio(source)) }.join.html_safe + safe_join sources.collect { |source| tag("source", :src => path_to_audio(source)) } end else - options[:src] = path_to_audio(sources) + options[:src] = path_to_audio(sources.first) tag("audio", options) end end diff --git a/actionpack/test/template/asset_tag_helper_test.rb b/actionpack/test/template/asset_tag_helper_test.rb index 45a8492d58..37153ee960 100644 --- a/actionpack/test/template/asset_tag_helper_test.rb +++ b/actionpack/test/template/asset_tag_helper_test.rb @@ -201,6 +201,7 @@ class AssetTagHelperTest < ActionView::TestCase %(video_tag("error.avi", "size" => "x")) => %(<video src="/videos/error.avi" />), %(video_tag("http://media.rubyonrails.org/video/rails_blog_2.mov")) => %(<video src="http://media.rubyonrails.org/video/rails_blog_2.mov" />), %(video_tag("//media.rubyonrails.org/video/rails_blog_2.mov")) => %(<video src="//media.rubyonrails.org/video/rails_blog_2.mov" />), + %(video_tag("multiple.ogg", "multiple.avi")) => %(<video><source src="/videos/multiple.ogg" /><source src="/videos/multiple.avi" /></video>), %(video_tag(["multiple.ogg", "multiple.avi"])) => %(<video><source src="/videos/multiple.ogg" /><source src="/videos/multiple.avi" /></video>), %(video_tag(["multiple.ogg", "multiple.avi"], :size => "160x120", :controls => true)) => %(<video controls="controls" height="120" width="160"><source src="/videos/multiple.ogg" /><source src="/videos/multiple.avi" /></video>) } @@ -224,6 +225,7 @@ class AssetTagHelperTest < ActionView::TestCase %(audio_tag("rss.wav", :autoplay => true, :controls => true)) => %(<audio autoplay="autoplay" controls="controls" src="/audios/rss.wav" />), %(audio_tag("http://media.rubyonrails.org/audio/rails_blog_2.mov")) => %(<audio src="http://media.rubyonrails.org/audio/rails_blog_2.mov" />), %(audio_tag("//media.rubyonrails.org/audio/rails_blog_2.mov")) => %(<audio src="//media.rubyonrails.org/audio/rails_blog_2.mov" />), + %(audio_tag("audio.mp3", "audio.ogg")) => %(<audio><source src="/audios/audio.mp3" /><source src="/audios/audio.ogg" /></audio>), %(audio_tag(["audio.mp3", "audio.ogg"])) => %(<audio><source src="/audios/audio.mp3" /><source src="/audios/audio.ogg" /></audio>), %(audio_tag(["audio.mp3", "audio.ogg"], :autobuffer => true, :controls => true)) => %(<audio autobuffer="autobuffer" controls="controls"><source src="/audios/audio.mp3" /><source src="/audios/audio.ogg" /></audio>) } |