/media_assets: add basic index and show pages.

* Add a basic index page at https://danbooru.donmai.us/media_assets.
* Add a basic show page at https://danbooru.donmai.us/media_assets/1.
* Add ability to search /media_assets.json by metadata. Example:
** https://danbooru.donmai.us/media_assets.json?search[metadata][File:ColorComponents]=3
* Add a "»" link next to the filesize on posts linking to the metadata page.

Known issues:

* Sometimes the MD5 links on the /media_assets page return "That record
  was not found" errors. These are unfinished uploads that haven't been
  made into posts yet.
* No good way to search for custom metadata fields in the search form.
* Design is ugly.
This commit is contained in:
evazion
2021-09-29 07:35:30 -05:00
parent 95fc3a207c
commit c99d0523bb
8 changed files with 94 additions and 6 deletions

View File

@@ -0,0 +1,39 @@
<div id="c-media-assets">
<div id="a-index">
<%= search_form_for(media_assets_path) do |f| %>
<%= f.input :md5, input_html: { value: params[:search][:md5] } %>
<%= f.input :image_width, input_html: { value: params[:search][:image_width] } %>
<%= f.input :image_height, input_html: { value: params[:search][:image_height] } %>
<%= f.input :file_size, input_html: { value: params[:search][:file_size] } %>
<%= f.input :file_ext, input_html: { value: params[:search][:file_ext] } %>
<%= f.simple_fields_for :metadata do |meta| %>
<% params.dig(:search, :metadata).to_h.each do |key, value| %>
<%= meta.input key, label: key, input_html: { value: value } %>
<% end %>
<% end %>
<%= f.submit "Search" %>
<% end %>
<%= table_for @media_assets, class: "striped autofit" do |t| %>
<% t.column "MD5", td: { class: "font-monospace" } do |media_asset| %>
<%= link_to media_asset.md5, posts_path(md5: media_asset.md5) %>
<% end %>
<% t.column :image_width %>
<% t.column :image_height %>
<% t.column :file_size %>
<% t.column :file_ext %>
<% t.column "Metadata" do |media_asset| %>
<%= link_to pluralize(media_asset.metadata.size, "tags"), media_asset %>
<% end %>
<% t.column "Created" do |media_asset| %>
<%= time_ago_in_words_tagged(media_asset.created_at) %>
<% end %>
<% end %>
<%= numbered_paginator(@media_assets) %>
</div>
</div>

View File

@@ -0,0 +1,20 @@
<div id="c-media-assets">
<div id="a-show" class="fixed-width-container">
<h1 class="mb-4">Media Asset</h1>
<% if @post.present? %>
<%= post_preview(@post, show_deleted: true) %>
<% else %>
<p>MD5: <%= link_to @media_asset.md5, posts_path(md5: @media_asset.md5) %></p>
<% end %>
<table class="striped aligned-vertical">
<% @media_asset.metadata.sort.each do |key, value| %>
<tr>
<th><%= key %></th>
<td><%= link_to value, media_assets_path(search: { metadata: { key => value }}) %></td>
</tr>
<% end %>
</table>
</div>
</div>

View File

@@ -16,6 +16,7 @@
<li id="post-info-size">
Size: <%= link_to_if policy(post).visible?, "#{number_to_human_size(post.file_size)} .#{post.file_ext}", post.tagged_file_url %>
(<%= post.image_width %>x<%= post.image_height %>)
<%= link_to "»", @post.media_asset %>
</li>
<li id="post-info-source">Source: <%= post_source_tag(post.source, post.normalized_source) %></li>
<li id="post-info-rating">Rating: <%= post.pretty_rating %></li>