Skip to content
Browse files

reuse common video/audio tags code and do not modify options

  • Loading branch information...
1 parent fc54787 commit 858f4646fe72e151e1af0d217a43e299cee3fc6d @lest lest committed
View
46 actionpack/lib/action_view/helpers/asset_tag_helper.rb
@@ -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
@@ -449,17 +439,7 @@ 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
@@ -467,6 +447,22 @@ def audio_tag(*sources)
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
View
8 actionpack/test/template/asset_tag_helper_test.rb
@@ -494,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")

0 comments on commit 858f464

Please sign in to comment.
Something went wrong with that request. Please try again.