Files
danbooru/app/helpers/components_helper.rb

101 lines
3.4 KiB
Ruby

# frozen_string_literal: true
module ComponentsHelper
def post_preview(post, fit: :fixed, **options)
render PostPreviewComponent.new(post: post, fit: fit, **options)
end
# Render a set of posts as thumbnail gallery.
#
# @param posts [ActiveRecord::Relation<Post>, Array<Post>] A set of posts.
# @param options [Hash] A hash of options for the PostGalleryComponent and PostPreviewComponent.
def render_post_gallery(posts, **options, &block)
posts = posts.includes(:media_asset) if posts.is_a?(ActiveRecord::Relation)
render(PostGalleryComponent.new(**options)) do |gallery|
posts.each do |post|
gallery.post(post: post, size: gallery.size, **options)
end
if block_given?
yield(gallery, posts)
end
end
end
def render_comment(comment, current_user:, **options)
render CommentComponent.new(comment: comment, current_user: current_user, **options)
end
def render_comment_section(post, **options)
render CommentSectionComponent.new(post: post, **options)
end
def render_post_votes(post, **options)
render PostVotesComponent.new(post: post, **options)
end
def render_post_votes_tooltip(post, **options)
render PostVotesTooltipComponent.new(post: post, **options)
end
def render_comment_votes_tooltip(comment, **options)
render CommentVotesTooltipComponent.new(comment: comment, **options)
end
def render_favorites_tooltip(post, **options)
render FavoritesTooltipComponent.new(post: post, **options)
end
def render_post_navbar(post, **options)
render PostNavbarComponent.new(post: post, **options)
end
def render_source_data(source, **options)
render SourceDataComponent.new(source: source, **options)
end
# A simple vertical tag list with no post counts. Used in related tags.
def render_related_tag_list(tag_names, **options)
tags = RelatedTagListComponent.tags_from_names(tag_names)
render RelatedTagListComponent.new(tags: tags, **options)
end
# A horizontal tag list, with tags grouped by category. Used in post
# tooltips, on the comments index, and in the modqueue.
def render_inline_tag_list(post, **options)
render InlineTagListComponent.new(tags: post.tags, **options)
end
def render_inline_tag_list_from_names(tag_names, **options)
tags = InlineTagListComponent.tags_from_names(tag_names)
render InlineTagListComponent.new(tags: tags, **options)
end
# A vertical tag list, with tags split into categories. Used on post show pages.
def render_categorized_tag_list(post, **options)
render CategorizedTagListComponent.new(tags: post.tags, **options)
end
# A vertical tag list, used in the post index sidebar.
def render_search_tag_list(tag_names, **options)
tags = SearchTagListComponent.tags_from_names(tag_names)
render SearchTagListComponent.new(tags: tags, **options)
end
# The <link rel="next"> / <link rel="prev"> links in the <meta> element of the <head>.
def render_meta_links(records)
render MetaLinksComponent.new(records: records, params: params)
rescue ActiveRecord::StatementInvalid
# Swallow any exceptions when loading records so that the page load doesn't fail.
end
def numbered_paginator(records)
if records.paginator_mode == :numbered
render NumberedPaginatorComponent.new(records: records, params: params)
else
render SequentialPaginatorComponent.new(records: records, params: params)
end
end
end