asciinema.org/app/presenters/asciicast_page_presenter.rb

131 lines
2.7 KiB
Ruby
Raw Normal View History

class AsciicastPagePresenter
include ActionView::Helpers::SanitizeHelper
include ActionView::Helpers::TextHelper
2014-01-18 10:44:13 +00:00
attr_reader :routes, :asciicast, :current_user, :policy, :playback_options
2014-01-18 10:44:13 +00:00
delegate :download_filename, :width, :height, to: :asciicast, prefix: true
2016-01-11 14:45:24 +00:00
def self.build(routes, asciicast, current_user, playback_options)
decorated_asciicast = asciicast.decorate
2014-07-05 12:59:42 +00:00
policy = Pundit.policy(current_user, asciicast)
playback_options = {
'theme' => decorated_asciicast.theme_name
}.merge(playback_options)
new(routes, decorated_asciicast, current_user, policy,
2014-07-05 12:59:42 +00:00
PlaybackOptions.new(playback_options))
end
def initialize(routes, asciicast, current_user, policy, playback_options)
@routes = routes
@asciicast = asciicast
@current_user = current_user
2014-07-05 12:59:42 +00:00
@policy = policy
@playback_options = playback_options
2014-01-18 10:44:13 +00:00
end
def title
asciicast_title
end
def asciicast_title
asciicast.title
end
def author_img_link
asciicast.author_img_link
end
def author_link
asciicast.author_link
end
def asciicast_created_at
asciicast.created_at
end
def asciicast_env_details
"#{asciicast.os} / #{asciicast.shell} / #{asciicast.terminal_type}"
end
def views_count
asciicast.views_count
end
def show_admin_dropdown?
2014-07-05 12:59:42 +00:00
[show_edit_link?,
show_delete_link?,
show_set_featured_link?,
show_unset_featured_link?].any?
end
def show_edit_link?
policy.update?
end
def show_delete_link?
policy.destroy?
end
def show_set_featured_link?
2015-04-25 18:47:52 +00:00
!asciicast.featured? && policy.change_featured?
2014-07-05 12:59:42 +00:00
end
def show_unset_featured_link?
2015-04-25 18:47:52 +00:00
asciicast.featured? && policy.change_featured?
2014-01-18 10:44:13 +00:00
end
def show_make_private_link?
2015-04-25 18:47:52 +00:00
!asciicast.private? && policy.change_visibility?
end
def show_make_public_link?
2015-04-25 18:47:52 +00:00
asciicast.private? && policy.change_visibility?
end
2014-01-18 10:44:13 +00:00
def show_description?
asciicast.description.present?
end
def description
asciicast.description
end
def short_text_description
if asciicast.description.present?
truncate(strip_tags(asciicast.description).gsub(/\n+/, ' '), length: 200)
else
"Recorded by #{asciicast.user.display_name}"
end
end
2014-01-18 10:44:13 +00:00
def other_asciicasts_by_author
@other_asciicasts_by_author ||= author.other_asciicasts(asciicast, 3).decorate
2014-01-18 10:44:13 +00:00
end
def asciicast_oembed_url(format)
routes.oembed_url(url: routes.asciicast_url(asciicast), format: format)
end
2015-05-15 17:36:12 +00:00
def show_private_label?
asciicast.private?
end
def show_featured_label?
asciicast.featured?
end
2016-01-11 14:45:24 +00:00
def can_replay_in_terminal?
asciicast.version > 0
end
2014-01-18 10:44:13 +00:00
private
def author
asciicast.user
end
end