Class: Jekyll::LividTag

Inherits:
Liquid::Tag
  • Object
show all
Defined in:
lib/jekyll/livid_tag.rb

Constant Summary collapse

EMBED_BASE =
"https://livid.com/embed/".freeze
HASH_PARAMS =

Parameters appended as URL hash fragments rather than query params

%w[t].freeze
VALID_PARAMS =
%w[
  airplay autoplay background cc chromecast color colors controls
  custom_logo dnt fullscreen keyboard livid_logo loop max_quality
  min_quality muted pip play_button_position playsinline preload
  progress_bar quality_selector share speed t title transparent volume
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(tag_name, markup, tokens) ⇒ LividTag

Returns a new instance of LividTag.



19
20
21
22
23
24
# File 'lib/jekyll/livid_tag.rb', line 19

def initialize(tag_name, markup, tokens)
  super
  parts = markup.strip.split(/\s+/, 2)
  @video_id = parts[0]
  @params = parse_params(parts[1] || "")
end

Instance Method Details

#render(_context) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/jekyll/livid_tag.rb', line 26

def render(_context)
  raise "Livid tag requires a video ID" if @video_id.nil? || @video_id.empty?

  query_params = @params.reject { |k, _| HASH_PARAMS.include?(k) }
  hash_params  = @params.select { |k, _| HASH_PARAMS.include?(k) }

  src = EMBED_BASE + @video_id
  src += "?" + query_params.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join("&") unless query_params.empty?
  src += "#t=#{hash_params['t']}" if hash_params['t']

  <<~HTML.strip
    <div class="livid-embed" style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;">
      <iframe
        src="#{src}"
        frameborder="0"
        allow="autoplay; fullscreen; picture-in-picture"
        allowfullscreen
        style="position:absolute;top:0;left:0;width:100%;height:100%;"
        loading="lazy">
      </iframe>
    </div>
  HTML
end