asciinema.org/app/helpers/asciicasts_helper.rb

84 lines
2.3 KiB
Ruby
Raw Normal View History

2011-11-23 21:30:09 +00:00
module AsciicastsHelper
2011-11-27 12:54:10 +00:00
def player(asciicast, options = PlaybackOptions.new, skip_titlebar = false)
2015-12-22 17:40:20 +00:00
render 'asciicasts/player',
2016-01-19 10:27:38 +00:00
asciicast: AsciicastSerializer.new(asciicast, v0: options.v0),
2015-12-22 17:40:20 +00:00
options: options,
skip_titlebar: skip_titlebar
2011-11-27 12:54:10 +00:00
end
2012-11-19 21:27:52 +00:00
def player_tag(asciicast, options, skip_titlebar)
opts = {
2016-10-01 18:09:32 +00:00
id: 'player',
src: asciicast.url,
cols: asciicast.width,
rows: asciicast.height,
poster: options.poster || base64_poster(asciicast),
speed: options.speed,
autoplay: options.autoplay,
loop: options.loop,
'start-at' => options.t,
'font-size' => options.size,
theme: options.theme,
}
2016-10-01 20:19:40 +00:00
if options.preload # because {preload: false} gets converted to "preload=preload" by Rails
opts[:preload] = true
end
unless skip_titlebar
opts.merge!(
title: asciicast.title,
author: asciicast.author_display_name,
'author-url' => asciicast.author_url,
'author-img-url' => asciicast.author_avatar_url,
)
end
content_tag('asciinema-player', '', opts)
end
def screenshot_javascript_tag
js = assets.find_asset('embed.js').to_s
content_tag(:script, js.html_safe)
end
def screenshot_stylesheet_tag
css = translate_asset_paths(assets.find_asset('screenshot.css').to_s)
content_tag(:style, css.html_safe)
end
def embed_script(asciicast)
src = asciicast_url(asciicast, format: :js)
id = "asciicast-#{asciicast.to_param}"
2015-07-18 11:22:14 +00:00
%(<script type="text/javascript" src="#{src}" id="#{id}" async></script>)
end
def embed_html_link(asciicast)
img_src = asciicast_url(asciicast, format: :png)
url = asciicast_url(asciicast)
width = %{width="#{asciicast.image_width}"} if asciicast.image_width
%(<a href="#{url}" target="_blank"><img src="#{img_src}" #{width}/></a>)
end
def embed_markdown_link(asciicast)
img_src = asciicast_url(asciicast, format: :png)
url = asciicast_url(asciicast)
"[![asciicast](#{img_src})](#{url})"
end
private
def translate_asset_paths(css)
css.gsub(/['"]\/assets\/(.+?)(-\w{64})?\.(.+?)['"]/) { |m|
path = assets.find_asset("#{$1}.#{$3}").pathname
"'#{path}'"
}
end
def base64_poster(asciicast)
'data:application/json;base64,' + Base64.encode64(JSON.generate(asciicast.snapshot, ascii_only: true))
end
2011-11-23 21:30:09 +00:00
end