diff options
Diffstat (limited to 'lib/banzai/filter/video_link_filter.rb')
-rw-r--r-- | lib/banzai/filter/video_link_filter.rb | 22 |
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) |