Skip to content

Commit 08e5104

Browse files
committed
allow to pass multiple sources to audio/video tags without using array
1 parent 73c53cd commit 08e5104

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

actionpack/lib/action_view/helpers/asset_tag_helper.rb

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'active_support/core_ext/array/extract_options'
2+
require 'active_support/core_ext/hash/keys'
13
require 'action_view/helpers/asset_tag_helpers/javascript_tag_helpers'
24
require 'action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers'
35
require 'action_view/helpers/asset_tag_helpers/asset_paths'
@@ -407,25 +409,28 @@ def image_alt(src)
407409
# <video src="/trailers/hd.avi" width="16" height="16" />
408410
# video_tag("/trailers/hd.avi", :height => '32', :width => '32') # =>
409411
# <video height="32" src="/trailers/hd.avi" width="32" />
412+
# video_tag("trailer.ogg", "trailer.flv") # =>
413+
# <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
410414
# video_tag(["trailer.ogg", "trailer.flv"]) # =>
411-
# <video><source src="http://github.com/%3Cspan%20class="x x-first x-last">trailer.ogg" /><source src="http://github.com/%3C/span%3Etrailer.ogg" /><source src="http://github.com/trailer.flv" /></video>
415+
# <video><source src="http://github.com/%3Cspan%20class="x x-first x-last">/videos/trailer.ogg" /><source src="http://github.com/%3Cspan%20class="x x-first x-last">/videos/trailer.flv" /></video>
412416
# video_tag(["trailer.ogg", "trailer.flv"] :size => "160x120") # =>
413-
# <video height="120" width="160"><source src="trailer.ogg" /><source src="trailer.flv" /></video>
414-
def video_tag(sources, options = {})
415-
options.symbolize_keys!
417+
# <video height="120" width="160"><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
418+
def video_tag(*sources)
419+
options = sources.extract_options!.symbolize_keys!
420+
sources.flatten!
416421

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

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

423-
if sources.is_a?(Array)
428+
if sources.size > 1
424429
content_tag("video", options) do
425-
sources.map { |source| tag("source", :src => path_to_video(source)) }.join.html_safe
430+
safe_join sources.map { |source| tag("source", :src => path_to_video(source)) }
426431
end
427432
else
428-
options[:src] = path_to_video(sources)
433+
options[:src] = path_to_video(sources.first)
429434
tag("video", options)
430435
end
431436
end
@@ -441,15 +446,18 @@ def video_tag(sources, options = {})
441446
# <audio src="/audios/sound.wav" />
442447
# audio_tag("sound.wav", :autoplay => true, :controls => true) # =>
443448
# <audio autoplay="autoplay" controls="controls" src="/audios/sound.wav" />
444-
def audio_tag(sources, options = {})
445-
options.symbolize_keys!
449+
# audio_tag("sound.wav", "sound.mid") # =>
450+
# <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio>
451+
def audio_tag(*sources)
452+
options = sources.extract_options!.symbolize_keys!
453+
sources.flatten!
446454

447-
if sources.is_a?(Array)
455+
if sources.size > 1
448456
content_tag("audio", options) do
449-
sources.collect { |source| tag("source", :src => path_to_audio(source)) }.join.html_safe
457+
safe_join sources.collect { |source| tag("source", :src => path_to_audio(source)) }
450458
end
451459
else
452-
options[:src] = path_to_audio(sources)
460+
options[:src] = path_to_audio(sources.first)
453461
tag("audio", options)
454462
end
455463
end

actionpack/test/template/asset_tag_helper_test.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ def teardown
201201
%(video_tag("error.avi", "size" => "x")) => %(<video src="/videos/error.avi" />),
202202
%(video_tag("http://media.rubyonrails.org/video/rails_blog_2.mov")) => %(<video src="http://media.rubyonrails.org/video/rails_blog_2.mov" />),
203203
%(video_tag("//media.rubyonrails.org/video/rails_blog_2.mov")) => %(<video src="//media.rubyonrails.org/video/rails_blog_2.mov" />),
204+
%(video_tag("multiple.ogg", "multiple.avi")) => %(<video><source src="/videos/multiple.ogg" /><source src="/videos/multiple.avi" /></video>),
204205
%(video_tag(["multiple.ogg", "multiple.avi"])) => %(<video><source src="/videos/multiple.ogg" /><source src="/videos/multiple.avi" /></video>),
205206
%(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>)
206207
}
@@ -224,6 +225,7 @@ def teardown
224225
%(audio_tag("rss.wav", :autoplay => true, :controls => true)) => %(<audio autoplay="autoplay" controls="controls" src="/audios/rss.wav" />),
225226
%(audio_tag("http://media.rubyonrails.org/audio/rails_blog_2.mov")) => %(<audio src="http://media.rubyonrails.org/audio/rails_blog_2.mov" />),
226227
%(audio_tag("//media.rubyonrails.org/audio/rails_blog_2.mov")) => %(<audio src="//media.rubyonrails.org/audio/rails_blog_2.mov" />),
228+
%(audio_tag("audio.mp3", "audio.ogg")) => %(<audio><source src="/audios/audio.mp3" /><source src="/audios/audio.ogg" /></audio>),
227229
%(audio_tag(["audio.mp3", "audio.ogg"])) => %(<audio><source src="/audios/audio.mp3" /><source src="/audios/audio.ogg" /></audio>),
228230
%(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>)
229231
}

0 commit comments

Comments
 (0)