summaryrefslogtreecommitdiff
path: root/lib/banzai/filter/video_link_filter.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/banzai/filter/video_link_filter.rb')
-rw-r--r--lib/banzai/filter/video_link_filter.rb22
1 files changed, 5 insertions, 17 deletions
diff --git a/lib/banzai/filter/video_link_filter.rb b/lib/banzai/filter/video_link_filter.rb
index 58006cc6c13..bdd257a5e67 100644
--- a/lib/banzai/filter/video_link_filter.rb
+++ b/lib/banzai/filter/video_link_filter.rb
@@ -8,8 +8,8 @@ module Banzai
# a "Download" link in the case the video cannot be played.
class VideoLinkFilter < HTML::Pipeline::Filter
def call
- doc.xpath(query).each do |el|
- el.replace(video_node(doc, el))
+ doc.xpath('descendant-or-self::img[not(ancestor::a)]').each do |el|
+ el.replace(video_node(doc, el)) if has_video_extension?(el)
end
doc
@@ -17,22 +17,10 @@ module Banzai
private
- def query
- @query ||= begin
- src_query = UploaderHelper::SAFE_VIDEO_EXT.map do |ext|
- "'.#{ext}' = substring(@src, string-length(@src) - #{ext.size})"
- end
+ def has_video_extension?(element)
+ src_attr = context[:asset_proxy_enabled] ? 'data-canonical-src' : 'src'
- if context[:asset_proxy_enabled].present?
- src_query.concat(
- UploaderHelper::SAFE_VIDEO_EXT.map do |ext|
- "'.#{ext}' = substring(@data-canonical-src, string-length(@data-canonical-src) - #{ext.size})"
- end
- )
- end
-
- "descendant-or-self::img[not(ancestor::a) and (#{src_query.join(' or ')})]"
- end
+ element.attr(src_attr).downcase.end_with?(*UploaderHelper::SAFE_VIDEO_EXT)
end
def video_node(doc, element)