class HTML::Pipeline::TrixVideoFilter

HTML Filter for Trix-compliant video preview filters

Public Instance Methods

call() click to toggle source
# File lib/html/pipeline/trix_video/trix_video_filter.rb, line 8
def call
  text_fragment.css("figure").each do |figure|
    service, id = video_information(figure)

    case service
    when "youtube"
      figure.replace "https://youtube.com/watch?v=#{id}"
    when "vimeo"
      figure.replace "https://vimeo.com/#{id}"
    end
  end

  text_fragment.to_s
end
text_fragment() click to toggle source
# File lib/html/pipeline/trix_video/trix_video_filter.rb, line 38
def text_fragment
  @fragment ||= Nokogiri::HTML::DocumentFragment.parse(@text)
end
valid_id(url, regex) click to toggle source
# File lib/html/pipeline/trix_video/trix_video_filter.rb, line 33
def valid_id(url, regex)
  return unless url
  url.match(regex)
end
video_information(figure) click to toggle source
# File lib/html/pipeline/trix_video/trix_video_filter.rb, line 23
def video_information(figure)
  url = figure.css("img").first ? figure.css("img").first["src"] : nil

  if match = valid_id(url, youtube_regex)
    [ "youtube", match[1] ]
  elsif match = valid_id(url, vimeo_regex)
    [ "vimeo",   match[1] ]
  end
end
vimeo_regex() click to toggle source
# File lib/html/pipeline/trix_video/trix_video_filter.rb, line 46
def vimeo_regex
  /i.vimeocdn.com\/video\/[0-9]*_[0-9]{3}x[0-9]{3}.jpg\?r=pad\?id=([0-9]*)/
end
youtube_regex() click to toggle source
# File lib/html/pipeline/trix_video/trix_video_filter.rb, line 42
def youtube_regex
  /img.youtube.com\/vi\/(\S*)\/\d.jpg/
end