Sha256: 70203058f5e19a5e484085b9a4e93bceabfe928e333c6a2f397a749b666d9a37
Contents?: true
Size: 1.47 KB
Versions: 1
Compression:
Stored size: 1.47 KB
Contents
module Jekyll class Avatar < Liquid::Tag SERVERS = 4 DEFAULT_SIZE = 40 VERSION = 3 def initialize(_tag_name, text, _tokens) super @text = text end def render(context) @context = context @text = Liquid::Template.parse(@text).render(@context) attrs = attributes.map { |k, v| "#{k}=\"#{v}\"" }.join(' ') "<img #{attrs} />" end private def attributes { class: classes, src: url, alt: username, srcset: srcset, width: size, height: size } end def username matches = @text.match(/\buser=(\w+)\b/) if matches && @context.has_key?(matches[1]) @context[matches[1]] else @text.split(' ').first.sub('@', '') end end def size matches = @text.match(/\bsize=(\d+)\b/i) matches ? matches[1].to_i : DEFAULT_SIZE end def path(scale = 1) "#{username}?v=#{VERSION}&s=#{size * scale}" end def server_number Zlib.crc32(path) % SERVERS end def host "avatars#{server_number}.githubusercontent.com" end def url(scale = 1) "https://#{host}/#{path(scale)}" end def srcset (1..4).map { |scale| "#{url(scale)} #{scale}x" }.join(', ') end # See http://primercss.io/avatars/#small-avatars def classes size < 48 ? 'avatar avatar-small' : 'avatar' end end end Liquid::Template.register_tag('avatar', Jekyll::Avatar)
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jekyll-avatar-0.3.0 | lib/jekyll-avatar.rb |