* Add comment scores. * Rework voting buttons so that you can click the upvote/downvote buttons to toggle votes. * Hide the edit, delete, undelete, and report buttons behind a popup menu. * Show the upvote/downvote/reply buttons to logged out users. Redirect them to the login page instead.
29 lines
846 B
Ruby
29 lines
846 B
Ruby
# frozen_string_literal: true
|
|
|
|
class CommentSectionComponent < ApplicationComponent
|
|
attr_reader :post, :comments, :current_user, :limit, :dtext_data
|
|
|
|
def initialize(post:, current_user:, limit: nil)
|
|
@post = post
|
|
@current_user = current_user
|
|
@limit = limit
|
|
|
|
@comments = @post.comments.order(id: :asc)
|
|
@comments = @comments.includes(:creator)
|
|
@comments = @comments.includes(:votes) if !current_user.is_anonymous?
|
|
@comments = @comments.includes(:moderation_reports) if policy(ModerationReport).can_see_moderation_reports?
|
|
@comments = @comments.last(limit) if limit.present?
|
|
|
|
@dtext_data = DText.preprocess(@comments.map(&:body))
|
|
end
|
|
|
|
def has_unloaded_comments?
|
|
unloaded_comment_count > 0
|
|
end
|
|
|
|
def unloaded_comment_count
|
|
return 0 if limit.nil?
|
|
[post.comments.size - limit, 0].max
|
|
end
|
|
end
|