From 054b0b4d0accd10b4a7e338001ef67960f0d601e Mon Sep 17 00:00:00 2001 From: evazion Date: Wed, 2 Feb 2022 01:35:20 -0600 Subject: [PATCH] uploads: add thumbnail view to /uploads listing. Add a thumbnail view to the /uploads listing. You can click on images to resume the upload, or go to the post if it's already been posted. --- app/controllers/uploads_controller.rb | 15 +++- app/views/uploads/_gallery.html.erb | 33 ++++++++ app/views/uploads/_secondary_links.html.erb | 2 +- app/views/uploads/_table.html.erb | 83 +++++++++++++++++++++ app/views/uploads/index.html.erb | 70 +---------------- 5 files changed, 133 insertions(+), 70 deletions(-) create mode 100644 app/views/uploads/_gallery.html.erb create mode 100644 app/views/uploads/_table.html.erb diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 6c70e247b..dac508746 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -29,10 +29,19 @@ class UploadsController < ApplicationController end def index - @uploads = authorize Upload.visible(CurrentUser.user).paginated_search(params, count_pages: true) - @uploads = @uploads.includes(:uploader, :media_assets) if request.format.html? + @mode = params.fetch(:mode, "table") - respond_with(@uploads) + case @mode + when "table" + @uploads = authorize Upload.visible(CurrentUser.user).paginated_search(params, count_pages: true) + @uploads = @uploads.includes(:uploader, media_assets: [:post]) if request.format.html? + respond_with(@uploads) + when "gallery" + @media_assets = authorize MediaAsset.distinct.visible(CurrentUser.user).joins(:uploads).where(uploads: { uploader: CurrentUser.user }).paginated_search(params, count_pages: true) + respond_with(@media_assets) + else + raise "Invalid mode '#{mode}'" + end end def show diff --git a/app/views/uploads/_gallery.html.erb b/app/views/uploads/_gallery.html.erb new file mode 100644 index 000000000..afdc86c04 --- /dev/null +++ b/app/views/uploads/_gallery.html.erb @@ -0,0 +1,33 @@ +
+

My Uploads

+ + + Gallery | + <%= link_to "Table", uploads_path(mode: "table") %> + +
+ +<%= render(MediaAssetGalleryComponent.new) do |gallery| %> + <% @media_assets.each do |media_asset| %> + <% gallery.media_asset(media_asset: media_asset, size: gallery.size, link_target: media_asset.post || media_asset.uploads.first) do |preview| %> + <% preview.footer do %> +
+ <% if media_asset.post.present? %> +
+ <%= link_to "post ##{media_asset.post.id}", media_asset.post, class: "leading-none" %> +
+ <% end %> + + <% if media_asset.uploads.first.source.present? %> + <%= external_link_to media_asset.uploads.first.source, Addressable::URI.parse(media_asset.uploads.first.source).domain %> + <% else %> + No source + <% end %> + +
+ <% end %> + <% end %> + <% end %> +<% end %> + +<%= numbered_paginator(@media_assets) %> diff --git a/app/views/uploads/_secondary_links.html.erb b/app/views/uploads/_secondary_links.html.erb index f20f86e4e..83a72e864 100644 --- a/app/views/uploads/_secondary_links.html.erb +++ b/app/views/uploads/_secondary_links.html.erb @@ -1,7 +1,7 @@ <% content_for(:secondary_links) do %> <%= subnav_link_to "New Upload", new_upload_path %> <%= subnav_link_to "Batch Upload", batch_uploads_path %> | - <%= subnav_link_to "My Uploads", uploads_path %> + <%= subnav_link_to "My Uploads", uploads_path(mode: "gallery") %> <%= subnav_link_to "All Uploads", media_assets_path %> <%= subnav_link_to "Reverse Image Search", iqdb_queries_path %> | <%= subnav_link_to "Help", wiki_page_path("help:upload") %> diff --git a/app/views/uploads/_table.html.erb b/app/views/uploads/_table.html.erb new file mode 100644 index 000000000..856755125 --- /dev/null +++ b/app/views/uploads/_table.html.erb @@ -0,0 +1,83 @@ +
+

My Uploads

+ + + <%= link_to "Gallery", uploads_path(mode: "gallery") %> | + Table + +
+ +<%= table_for @uploads, class: "striped autofit", width: "100%" do |t| %> + <% t.column "Upload", td: { class: "text-center" } do |upload| %> + <% upload.media_assets.first.tap do |media_asset| %> + <% if media_asset.present? %> + <% if media_asset.post.present? %> + <%= render MediaAssetPreviewComponent.new(media_asset: media_asset, link_target: media_asset.post, save_data: CurrentUser.save_data, shrink_to_fit: false) %> + <% else %> + <%= render MediaAssetPreviewComponent.new(media_asset: media_asset, link_target: upload, save_data: CurrentUser.save_data, shrink_to_fit: false) %> + <% end %> + <% end %> + <% end %> + <% end %> + + <% t.column "Info", td: { class: "col-expand" } do |upload| %> +
+ <% upload.media_assets.first.tap do |media_asset| %> + <% if media_asset&.post.present? %> + Post + <%= link_to "##{media_asset.post.id}", media_asset.post %> + <% else %> + Upload + <%= link_to "##{upload.id}", upload %> + <% end %> + <% end %> +
+ +
+ Source + + <% if upload.source.present? %> + <%= external_link_to upload.source %> + <%= link_to "»", uploads_path(mode: "table", search: params[:search].merge(source_like: upload.source)) %> + <% else %> + none + <% end %> + +
+ + <% if upload.referer_url.present? %> +
+ Referrer + + <%= external_link_to upload.referer_url %> + <%= link_to "»", uploads_path(mode: "table", search: params[:search].merge(referer_url: upload.referer_url)) %> + +
+ <% end %> + + <% if upload.is_errored? %> +
+ Error + + <%= upload.status.delete_prefix("error: ") %> + +
+ <% end %> + <% end %> + + <% t.column "Uploader" do |upload| %> + <%= link_to_user upload.uploader %> + <%= link_to "»", uploads_path(mode: "table", search: params[:search].merge(uploader_name: upload.uploader.name)) %> +
<%= time_ago_in_words_tagged upload.created_at %>
+ <% end %> + + <% t.column :status do |upload| %> + <% if upload.is_errored? %> + error + <% elsif !upload.is_completed? %> + <%= upload.status %> + <% end %> + <% end %> +<% end %> + +<%= numbered_paginator(@uploads) %> diff --git a/app/views/uploads/index.html.erb b/app/views/uploads/index.html.erb index b4174f828..dcb766611 100644 --- a/app/views/uploads/index.html.erb +++ b/app/views/uploads/index.html.erb @@ -1,72 +1,10 @@
- <%= search_form_for(uploads_path) do |f| %> - <%= f.input :uploader_name, label: "Uploader", input_html: { value: params[:search][:uploader_name], data: { autocomplete: "user" } } %> - <%= f.input :source_like, label: "Source", input_html: { value: params[:search][:source_like] } %> - <%= f.input :status_like, label: "Status", collection: [%w[Completed completed], %w[Processing processing], %w[Pending pending], %w[Error error*]], include_blank: true, selected: params[:search][:status_like] %> - - <%= f.submit "Search" %> + <% if @mode == "gallery" %> + <%= render "uploads/gallery" %> + <% elsif @mode == "table" %> + <%= render "uploads/table" %> <% end %> - - <%= table_for @uploads, class: "striped autofit" do |t| %> - <% t.column "File", td: { class: "text-center" } do |upload| %> - <% upload.media_assets.first.tap do |media_asset| %> - <% if media_asset.present? %> - <%= render MediaAssetPreviewComponent.new(media_asset: media_asset, link_target: upload, save_data: CurrentUser.save_data, shrink_to_fit: false) %> - <% end %> - <% end %> - <% end %> - - <% t.column "Info", td: {class: "upload-info"} do |upload| %> -
- Upload - <%= link_to "##{upload.id}", upload %> -
- -
- Source - - <% if upload.source.present? %> - <%= external_link_to upload.source %> - <%= link_to "»", uploads_path(search: params[:search].merge(source_like: upload.source)) %> - <% else %> - none - <% end %> - -
- - <% if upload.referer_url.present? %> -
- Referrer - - <%= external_link_to upload.referer_url %> - <%= link_to "»", uploads_path(search: params[:search].merge(referer_url: upload.referer_url)) %> - -
- <% end %> - - <% if upload.is_errored? %> -
- Error - - <%= upload.status.delete_prefix("error: ") %> - -
- <% end %> - <% end %> - - <% t.column "Uploader" do |upload| %> - <%= link_to_user upload.uploader %> - <%= link_to "»", uploads_path(search: params[:search].merge(uploader_name: upload.uploader.name)) %> -
<%= time_ago_in_words_tagged upload.created_at %>
- <% end %> - - <% t.column :status do |upload| %> - <%= upload.is_errored? ? "error" : upload.status %> - <% end %> - <% end %> - - <%= numbered_paginator(@uploads) %>