Class: Jekyll::TwitchTag

Inherits:
Liquid::Tag
  • Object
show all
Defined in:
lib/jekyll-twitch/twitch_tag.rb

Overview

This is a liquid tag that embed Twitch Clips input is a url

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_tag_name, content, _tokens) ⇒ TwitchTag

Returns a new instance of TwitchTag.



10
11
12
13
# File 'lib/jekyll-twitch/twitch_tag.rb', line 10

def initialize(_tag_name, content, _tokens)
  super
  @parsed_url = Jekyll::TwitchTag.parse_twitch_url content.strip
end

Class Method Details

.channel_url(url) ⇒ Object

Class Methods



26
27
28
29
# File 'lib/jekyll-twitch/twitch_tag.rb', line 26

def self.channel_url(url)
  slug = url.match %r{(?<no>twitch.tv/)(?<channel>.+)/?\??}
  "https://player.twitch.tv/?channel=#{slug[:channel]}&autoplay=false"
end

.clip_url(url) ⇒ Object



31
32
33
34
# File 'lib/jekyll-twitch/twitch_tag.rb', line 31

def self.clip_url(url)
  slug = url.match %r{(?<no>/clip/)(?<clip>.+)/?\??}
  "https://clips.twitch.tv/embed?autoplay=false&clip=#{slug[:clip]}"
end

.collection_url(url) ⇒ Object



36
37
38
39
# File 'lib/jekyll-twitch/twitch_tag.rb', line 36

def self.collection_url(url)
  slug = url.match %r{(?<no>/collections/)(?<collection>.+)/?\??}
  "https://player.twitch.tv/?collection=#{slug[:collection]}&autoplay=false"
end

.hostname(url) ⇒ Object



41
42
43
44
# File 'lib/jekyll-twitch/twitch_tag.rb', line 41

def self.hostname(url)
  matches = url.match %r{\A(?<safe>https?://)?(?<host>[A-z.]+)(?<port>:\d+)?}
  matches[:host]
end

.parse_twitch_url(url) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/jekyll-twitch/twitch_tag.rb', line 46

def self.parse_twitch_url(url)
  case url
  when %r{/clip/}
    clip_url url
  when %r{/videos/}
    video_url url
  when %r{/collections/}
    collection_url url
  else
    channel_url url
  end
end

.site_url(context) ⇒ Object



59
60
61
# File 'lib/jekyll-twitch/twitch_tag.rb', line 59

def self.site_url(context)
  hostname(context.registers[:site].config['url'])
end

.video_url(url) ⇒ Object



63
64
65
66
# File 'lib/jekyll-twitch/twitch_tag.rb', line 63

def self.video_url(url)
  slug = url.match %r{(?<no>/videos/)(?<vod>\d+)}
  "https://player.twitch.tv/?video=#{slug[:vod]}&autoplay=false"
end

Instance Method Details

#render(context) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'lib/jekyll-twitch/twitch_tag.rb', line 15

def render(context)
  host = Jekyll::TwitchTag.site_url context
  %(<iframe
    src="#{@parsed_url}&parent=#{host}"
    height="100%"
    width="100%"
    allowfullscreen="true">
  </iframe>)
end