63 lines
1.8 KiB
Ruby
63 lines
1.8 KiB
Ruby
module ArticlesHelper
|
|
DASHBOARD_POSTS_SORT_OPTIONS = [
|
|
["Recently Created", "creation-desc"],
|
|
["Recently Published", "published-desc"],
|
|
["Most Views", "views-desc"],
|
|
["Most Reactions", "reactions-desc"],
|
|
["Most Comments", "comments-desc"],
|
|
].freeze
|
|
|
|
def sort_options
|
|
DASHBOARD_POSTS_SORT_OPTIONS
|
|
end
|
|
|
|
def has_vid?(article)
|
|
return if article.processed_html.blank?
|
|
|
|
article.processed_html.include?("youtube.com/embed/") ||
|
|
article.processed_html.include?("player.vimeo.com") ||
|
|
article.processed_html.include?("clips.twitch.tv/embed") ||
|
|
article.comments_blob.include?("youtube")
|
|
end
|
|
|
|
def image_tag_or_inline_svg_tag(service_name, width: nil, height: nil)
|
|
name = "#{service_name}-logo.svg"
|
|
|
|
if internal_navigation?
|
|
image_tag(name, class: "icon-img", alt: "#{service_name} logo", width: width, height: height)
|
|
else
|
|
inline_svg_tag(name, class: "icon-img", aria: true, title: "#{service_name} logo", width: width, height: height)
|
|
end
|
|
end
|
|
|
|
def should_show_updated_on?(article)
|
|
article.edited_at &&
|
|
article.published &&
|
|
!article.published_from_feed &&
|
|
article.published_at.next_day < article.edited_at
|
|
end
|
|
|
|
def should_show_crossposted_on?(article)
|
|
article.canonical_url ||
|
|
(article.crossposted_at &&
|
|
article.published_from_feed &&
|
|
article.published &&
|
|
article.published_at &&
|
|
article.feed_source_url.present?)
|
|
end
|
|
|
|
def get_host_without_www(url)
|
|
url = "http://#{url}" if URI.parse(url).scheme.nil?
|
|
host = URI.parse(url).host.downcase
|
|
host.gsub!("medium.com", "Medium")
|
|
host.delete_prefix("www.")
|
|
end
|
|
|
|
def utc_iso_timestamp(timestamp)
|
|
timestamp&.utc&.iso8601
|
|
end
|
|
|
|
def active_threads(**options)
|
|
Articles::ActiveThreadsQuery.call(**options)
|
|
end
|
|
end
|