posts: refactor post previews to use ViewComponent.

Refactor the post preview html to use the ViewComponent framework. This
lets us encapsulate all the HTML, CSS, and helper methods for a UI
component in a single place.

See https://viewcomponent.org.
This commit is contained in:
evazion
2021-01-12 02:04:38 -06:00
parent 097220fd88
commit 1b30b71a07
40 changed files with 449 additions and 364 deletions

View File

@@ -6,7 +6,7 @@
<%= table_for @commentaries, width: "100%" do |t| %>
<% t.column "Post", width: "1%" do |commentary| %>
<%= PostPresenter.preview(commentary.post, show_deleted: true) %>
<%= post_preview(commentary.post, show_deleted: true) %>
<% end %>
<% t.column "Original" do |commentary| %>
<%= format_commentary_title(commentary.original_title) %>

View File

@@ -1,13 +1,13 @@
<div id="p-<%= listing_type(:post_id) %>-listing">
<% if listing_type(:post_id) == :revert && @commentary_versions.present? %>
<%= PostPresenter.preview(@commentary_versions.first.post, show_deleted: true) %>
<%= post_preview(@commentary_versions.first.post, show_deleted: true) %>
<% end %>
<%= table_for @commentary_versions, class: "striped" do |t| %>
<% if listing_type(:post_id) == :standard %>
<% t.column "Post", width: "1%" do |commentary_version| %>
<%= PostPresenter.preview(commentary_version.post, show_deleted: true) %>
<%= post_preview(commentary_version.post, show_deleted: true) %>
<% end %>
<% end %>
<% if listing_type(:post_id) == :standard %>

View File

@@ -14,7 +14,7 @@
<%= table_for @comment_votes, class: "striped autofit" do |t| %>
<% t.column "Post" do |vote| %>
<%= PostPresenter.preview(vote.comment.post, show_deleted: true) %>
<%= post_preview(vote.comment.post, show_deleted: true) %>
<% end %>
<% t.column "Comment", td: {class: "col-expand"} do |vote| %>
<div class="prose">

View File

@@ -2,7 +2,7 @@
<div class="list-of-comments list-of-messages">
<% @comments.each do |comment| %>
<% if CurrentUser.is_moderator? || (params[:search] && params[:search][:is_deleted] =~ /t/) || !comment.is_deleted? %>
<%= content_tag(:div, { id: "post_#{comment.post.id}", class: ["post", *PostPresenter.preview_class(comment.post)].join(" ") }.merge(PostPresenter.data_attributes(comment.post))) do %>
<%= tag.div id: "post_#{comment.post.id}", **PostPreviewComponent.new(post: comment.post).article_attrs("post") do %>
<div class="preview">
<% if policy(comment.post).visible? %>
<%= link_to(image_tag(comment.post.preview_file_url), post_path(comment.post)) %>

View File

@@ -5,7 +5,7 @@
<% @posts.select(&:visible?).each do |post| %>
<% if post.comments.unhidden(CurrentUser.user).any? || post.comments.hidden(CurrentUser.user).any? %>
<%= content_tag(:div, { id: "post_#{post.id}", class: ["post", *PostPresenter.preview_class(post)].join(" ") }.merge(PostPresenter.data_attributes(post))) do %>
<%= tag.div id: "post_#{post.id}", **PostPreviewComponent.new(post: post).article_attrs("post") do %>
<div class="preview">
<%= link_to(image_tag(post.preview_file_url), post_path(post)) %>
</div>

View File

@@ -8,7 +8,7 @@
<ul id="sortable">
<% @favorite_group.posts.limit(1_000).each do |post| %>
<li class="ui-state-default" id="favorite_group[post_ids]_<%= post.id %>">
<%= PostPresenter.preview(post, show_deleted: true).presence || "Hidden: Post ##{post.id}" %>
<%= post_preview(post, show_deleted: true).presence || "Hidden: Post ##{post.id}" %>
</li>
<% end %>
</ul>

View File

@@ -14,13 +14,13 @@
<span class="iqdb-posts-high-similarity">
<% @high_similarity_matches.each do |match| %>
<%= PostPresenter.preview(match["post"], show_deleted: true, similarity: match["score"], size: true) %>
<%= post_preview(match["post"], show_deleted: true, similarity: match["score"], size: true) %>
<% end %>
</span>
<span class="iqdb-posts-low-similarity" style="display: none">
<% @low_similarity_matches.each do |match| %>
<%= PostPresenter.preview(match["post"], show_deleted: true, similarity: match["score"], size: true) %>
<%= post_preview(match["post"], show_deleted: true, similarity: match["score"], size: true) %>
<% end %>
</span>
</div>

View File

@@ -1,7 +1,7 @@
<h1>Move Favorites to Parent</h1>
<div>
<%= PostPresenter.preview(@post, show_deleted: true) %>
<%= post_preview(@post, show_deleted: true) %>
</div>
<p style="clear: both;">This will move all the post's favorites to its parent post. Are you sure?</p>

View File

@@ -1,6 +1,6 @@
<%= content_tag(:div, { id: "post-#{post.id}", class: ["post", "mod-queue-preview", "column-container", *PostPresenter.preview_class(post)].join(" ") }.merge(PostPresenter.data_attributes(post))) do %>
<%= tag.div id: "post-#{post.id}", **PostPreviewComponent.new(post: post).article_attrs("post mod-queue-preview column-container") do %>
<aside class="column column-shrink">
<%= PostPresenter.preview(post, size: true, show_deleted: true) %>
<%= post_preview(post, size: true, show_deleted: true) %>
</aside>
<section class="column column-expand">

View File

@@ -14,7 +14,7 @@
<ul id="sortable">
<% @pool.posts.each do |post| %>
<li class="ui-state-default" id="pool[post_ids]_<%= post.id %>">
<%= PostPresenter.preview(post, show_deleted: true).presence || "Hidden: Post ##{post.id}" %>
<%= post_preview(post, show_deleted: true).presence || "Hidden: Post ##{post.id}" %>
</li>
<% end %>
</ul>

View File

@@ -11,7 +11,7 @@
<section>
<% @pools.each do |pool| %>
<%= PostPresenter.preview(pool.cover_post, link_target: pool, pool: pool, show_deleted: true) %>
<%= post_preview(pool.cover_post, link_target: pool, pool: pool, show_deleted: true) %>
<% end %>
<%= numbered_paginator(@pools) %>

View File

@@ -6,7 +6,7 @@
<%= table_for @post_appeals, width: "100%" do |t| %>
<% t.column "Post", width: "1%" do |post_appeal| %>
<%= PostPresenter.preview(post_appeal.post, show_deleted: true) %>
<%= post_preview(post_appeal.post, show_deleted: true) %>
<% end %>
<% t.column "Reason" do |post_appeal| %>
<span class="prose">

View File

@@ -11,7 +11,7 @@
<%= table_for @post_approvals, width: "100%" do |t| %>
<% t.column "Post", width: "1%" do |post_approval| %>
<%= PostPresenter.preview(post_approval.post, show_deleted: true) %>
<%= post_preview(post_approval.post, show_deleted: true) %>
<% end %>
<% t.column "Approver", width: "15%" do |post_approval| %>
<%= link_to_user post_approval.user %>

View File

@@ -6,7 +6,7 @@
<%= table_for @post_flags, width: "100%" do |t| %>
<% t.column "Post", width: "1%" do |post_flag| %>
<%= PostPresenter.preview(post_flag.post, show_deleted: true) %>
<%= post_preview(post_flag.post, show_deleted: true) %>
<% end %>
<% t.column "Reason" do |post_flag| %>
<span class="prose">

View File

@@ -12,7 +12,7 @@
<%= table_for @post_replacements, class: "striped autofit", width: "100%" do |t| %>
<% t.column "Post", width: "1%" do |post_replacement| %>
<%= PostPresenter.preview(post_replacement.post, show_deleted: true) %>
<%= post_preview(post_replacement.post, show_deleted: true) %>
<% end %>
<% t.column "Source" do |post_replacement| %>
<dl>

View File

@@ -1,6 +1,6 @@
<div id="p-<%= listing_type(:post_id) %>-listing">
<% if listing_type(:post_id) == :revert %>
<%= PostPresenter.preview(@post_versions.first.post, show_deleted: true) %>
<%= post_preview(@post_versions.first.post, show_deleted: true) %>
<% end %>
<%= table_for @post_versions, id: "post-versions-table", class: "striped autofit", width: "100%" do |t| %>
@@ -11,7 +11,7 @@
<% end %>
<% if listing_type(:post_id) == :standard %>
<% t.column "Post", width: "1%" do |post_version| %>
<%= PostPresenter.preview(post_version.post, show_deleted: true) %>
<%= post_preview(post_version.post, show_deleted: true) %>
<% end %>
<% end %>
<% t.column "Version", width: "1%" do |post_version| %>

View File

@@ -10,7 +10,7 @@
<%= table_for @post_votes, class: "striped autofit" do |t| %>
<% t.column "Post" do |vote| %>
<%= PostPresenter.preview(vote.post, show_deleted: true) %>
<%= post_preview(vote.post, show_deleted: true) %>
<% end %>
<% t.column "Tags", td: {class: "col-expand"} do |vote| %>
<%= TagSetPresenter.new(vote.post.tag_array).inline_tag_list_html %>

View File

@@ -1,6 +1,10 @@
<div id="posts" class="user-disable-cropped-<%= CurrentUser.user.disable_cropped_thumbnails? %>">
<div id="posts-container">
<%= post_set.post_previews_html(self) %>
<% if post_set.shown_posts.empty? %>
<%= render "post_sets/blank" %>
<% else %>
<%= post_previews_html(post_set.posts, show_deleted: post_set.show_deleted?, show_cropped: true, tags: post_set.tag_string) %>
<% end %>
</div>
<% if post_set.hidden_posts.present? %>

View File

@@ -1,47 +0,0 @@
<%= content_tag(:article, article_attrs) do -%>
<%= link_to polymorphic_path(link_target, link_params) do -%>
<%= content_tag(:picture) do -%>
<%= tag.source media: "(max-width: 660px)", srcset: cropped_url -%>
<%= tag.source media: "(min-width: 660px)", srcset: preview_url -%>
<%= tag.img class: "has-cropped-#{has_cropped}", src: preview_url, style: "min-width: #{preview_width}px; min-height: #{preview_height}px;", title: tooltip, alt: alt_text -%>
<% end -%>
<% end -%>
<% if pool -%>
<p class="desc">
<%= link_to pool.pretty_name.truncate(80), pool %>
</p>
<% end -%>
<% if similarity -%>
<p class="desc">
<% if post.source =~ %r!\Ahttps?://!i %>
<%= external_link_to post.normalized_source, post.source_domain %>
(<%= time_ago_in_words_tagged(post.created_at, compact: true) %>)
<% else %>
<%= time_ago_in_words_tagged(post.created_at, compact: true) %>
<% end %>
</p>
<% end %>
<% if size -%>
<p class="desc">
<%= link_to number_to_human_size(size), post.file_url %>
(<%= width %>x<%= height %>)
</p>
<% end -%>
<% if similarity -%>
<p class="desc">
<%= link_to "#{similarity}%", iqdb_queries_path(post_id: post.id) %> similarity
</p>
<% end -%>
<% if recommended -%>
<p class="desc recommended">
<%= link_to recommended_posts_path(search: { post_id: post.id }), class: "more-recommended-posts", "data-post-id": post.id do %>
<%= post.fav_count %>
<i class="far fa-heart fa-xs"></i>
<br>more »
<% end %>
</p>
<% end -%>
<% end -%>

View File

@@ -39,7 +39,7 @@
<div class="post-tooltip-body <%= "has-preview" if params[:preview].truthy? %>">
<div class="post-tooltip-body-left">
<% if params[:preview].truthy? %>
<%= PostPresenter.preview(@post, show_deleted: true, compact: true) %>
<%= post_preview(@post, show_deleted: true, compact: true) %>
<% end %>
</div>

View File

@@ -44,7 +44,7 @@
<%= render "posts/partials/show/notices", :post => @post %>
<%= content_tag(:section, class: "image-container note-container", **PostPresenter.data_attributes(@post)) do -%>
<%= content_tag(:section, class: "image-container note-container", **PostPreviewComponent.new(post: @post).data_attributes) do -%>
<%= render "posts/partials/show/embedded", post: @post %>
<div id="note-preview"></div>
<% end -%>

View File

@@ -1,6 +1,6 @@
<% if @post.valid? %>
var $post = $("#post_<%= @post.id %>");
var $new_post = $("<%= j PostPresenter.preview(@post, show_deleted: true) %>");
var $new_post = $("<%= j post_preview(@post, show_deleted: true) %>");
Danbooru.Blacklist.apply_post($new_post.get(0));
$("#post_<%= @post.id %>").replaceWith($new_post);
<% if params[:mode] == "quick-edit" %>

View File

@@ -4,6 +4,6 @@
<% end %>
<% @recs.each do |rec| %>
<%= PostPresenter.preview(rec[:post], recommended: 100*rec[:score]) %>
<%= post_preview(rec[:post], recommended: 100*rec[:score]) %>
<% end %>
</section>

View File

@@ -8,7 +8,7 @@
<%= table_for @upload_reports do |t| %>
<% t.column "Post ID", width: "10%" do |upload_report| %>
<%= PostPresenter.preview(upload_report.becomes(Post), show_deleted: true, tags: "user:#{upload_report.uploader.name}") %>
<%= post_preview(upload_report.becomes(Post), show_deleted: true, tags: "user:#{upload_report.uploader.name}") %>
<% end %>
<% t.column "Tags added by uploader", width: "45%" do |upload_report| %>
<%= TagSetPresenter.new(upload_report.uploader_tags_array).inline_tag_list_html %>

View File

@@ -10,7 +10,7 @@
<div>
<% source.related_posts.each do |post| %>
<%= PostPresenter.preview(post, show_deleted: true, size: true) %>
<%= post_preview(post, show_deleted: true, size: true) %>
<% end %>
</div>
</div>

View File

@@ -5,7 +5,7 @@
<%= table_for @uploads, class: "striped autofit", width: "100%" do |t| %>
<% t.column "Upload" do |upload| %>
<%= PostPresenter.preview(upload.post, tags: "user:#{upload.uploader.name}", show_deleted: true) %>
<%= post_preview(upload.post, tags: "user:#{upload.uploader.name}", show_deleted: true) %>
<% end %>
<% t.column "Info", td: {class: "col-expand upload-info"} do |upload| %>
<span class="info">

View File

@@ -4,9 +4,7 @@
<%= link_to "Uploads", posts_path(:tags => "user:#{user.name}") %>
</h2>
<div>
<% presenter.uploads.each do |post| %>
<%= PostPresenter.preview(post, :tags => "user:#{user.name}") %>
<% end %>
<%= post_previews_html(presenter.uploads, tags: "user:#{user.name}") %>
</div>
</div>
<% end %>
@@ -17,9 +15,7 @@
<%= link_to "Favorites", posts_path(tags: "ordfav:#{user.name}") %>
</h2>
<div>
<% presenter.favorites.each do |post| %>
<%= PostPresenter.preview(post, tags: "ordfav:#{user.name}") %>
<% end %>
<%= post_previews_html(presenter.favorites, tags: "ordfav:#{user.name}") %>
</div>
</div>
<% end %>
@@ -33,9 +29,7 @@
</h2>
<div class="box">
<% presenter.posts_for_saved_search_category(label).each do |post| %>
<%= PostPresenter.preview(post, :tags => "search:#{label}") %>
<% end %>
<%= post_previews_html(presenter.posts_for_saved_search_category, tags: "search:#{label}") %>
</div>
</div>
<% end %>