class PostPresenter < Presenter attr_reader :pool, :next_post_in_pool def self.preview(post, options = {}) if post.is_deleted? && options[:tags] !~ /status:(?:all|any|deleted|banned)/ && !options[:raw] return "" end if !post.visible? return "" end path = options[:path_prefix] || "/posts" html = %{
} if options[:tags].present? tag_param = "?tags=#{CGI::escape(options[:tags])}" elsif options[:pool_id] tag_param = "?pool_id=#{options[:pool_id]}" else tag_param = nil end html << %{} html << %{#{h(post.tag_string)}} html << %{} html << %{
} html.html_safe end def self.preview_class(post) klass = "post-preview" klass << " post-status-pending" if post.is_pending? klass << " post-status-flagged" if post.is_flagged? klass << " post-status-deleted" if post.is_deleted? klass << " post-status-has-parent" if post.parent_id klass << " post-status-has-children" if post.has_children? klass end def self.data_attributes(post) %{ data-id="#{post.id}" data-tags="#{h(post.tag_string)}" data-pools="#{post.pool_string}" data-uploader="#{h(post.uploader_name)}" data-approver-id="#{post.approver_id}" data-rating="#{post.rating}" data-width="#{post.image_width}" data-height="#{post.image_height}" data-flags="#{post.status_flags}" data-parent-id="#{post.parent_id}" data-has-children="#{post.has_children?}" data-score="#{post.score}" data-fav-count="#{post.fav_count}" data-pixiv-id="#{post.pixiv_id}" }.html_safe end def initialize(post) @post = post end def preview_html PostPresenter.preview(@post) end def humanized_tag_string @post.tag_string.split(/ /).slice(0, 25).join(", ").tr("_", " ") end def humanized_essential_tag_string string = [] if @post.character_tags.any? chartags = @post.character_tags.slice(0, 5).map do |tag| tag.match(/^(.+?)(?:_\(.+\))?$/)[1] end string << chartags.to_sentence end if @post.copyright_tags.any? copytags = @post.copyright_tags.slice(0, 5).to_sentence string << (@post.character_tags.any? ? "(#{copytags})" : copytags) end if @post.artist_tags_excluding_hidden.any? string << "drawn by" string << @post.artist_tags_excluding_hidden.to_sentence end string.empty? ? "##{@post.id}" : string.join(" ").tr("_", " ") end def categorized_tag_string string = [] if @post.copyright_tags.any? string << @post.copyright_tags.join(" ") end if @post.character_tags.any? string << @post.character_tags.join(" ") end if @post.artist_tags.any? string << @post.artist_tags.join(" ") end if @post.general_tags.any? string << @post.general_tags.join(" ") end string.join(" \n") end def humanized_categorized_tag_string string = [] if @post.copyright_tags.any? string << @post.copyright_tags end if @post.character_tags.any? string << @post.character_tags end if @post.artist_tags.any? string << @post.artist_tags end if @post.general_tags.any? string << @post.general_tags end string.flatten.slice(0, 25).join(", ").tr("_", " ") end def image_html(template) return template.content_tag("p", "The artist requested removal of this image") if @post.is_banned? && !CurrentUser.user.is_gold? return template.content_tag("p", template.link_to("You need a gold account to see this image.", template.upgrade_information_users_path)) if !Danbooru.config.can_user_see_post?(CurrentUser.user, @post) return template.content_tag("p", "This image is unavailable") if !@post.visible? if @post.is_flash? template.render("posts/partials/show/flash", :post => @post) elsif !@post.is_image? template.render("posts/partials/show/download", :post => @post) elsif @post.is_image? template.render("posts/partials/show/image", :post => @post) end end def tag_list_html(template, options = {}) @tag_set_presenter ||= TagSetPresenter.new(@post.tag_array) @tag_set_presenter.tag_list_html(template, options.merge(:show_extra_links => CurrentUser.user.is_gold?)) end def split_tag_list_html(template, options = {}) @tag_set_presenter ||= TagSetPresenter.new(@post.tag_array) @tag_set_presenter.split_tag_list_html(template, options.merge(:show_extra_links => CurrentUser.user.is_gold?)) end def has_nav_links?(template) (CurrentUser.user.enable_sequential_post_navigation && template.params[:tags].present? && template.params[:tags] !~ /order:/) || @post.pools.any? end def post_footer_for_pool_html(template) if template.params[:pool_id] pool = Pool.where(:id => template.params[:pool_id]).first return if pool.nil? return if pool.neighbors(@post).next.nil? template.link_to("Next in #{pool.pretty_name}", template.post_path(pool.neighbors(@post).next)) else nil end end def pool_html(template) html = ["" html.join("\n").html_safe end def pool_link_html(template, pool, options = {}) pool_html = [%{" pool_html end end