post replacements: add "Tags" field to dialog box.

* Adds a "Tags" field to the post replacement dialog box. The given tags
  are added to the post after replacement.

* Prefills the Tags field with certain tags that usually need to be
  removed after replacement: replaceme, image_sample, jpeg_artifacts, etc.
This commit is contained in:
evazion
2017-06-26 18:17:16 -05:00
parent 8d22ab9de8
commit 9c50b24306
6 changed files with 21 additions and 11 deletions

View File

@@ -535,12 +535,8 @@ div#unapprove-dialog {
}
}
.ui-widget #form {
font-size: 1em;
input, select, textarea, button {
font-size: 0.9em;
}
textarea[data-autocomplete="tag-edit"] {
font-family: monospace;
}
#add-commentary-dialog {

View File

@@ -23,6 +23,6 @@ class PostReplacementsController < ApplicationController
private
def create_params
params.require(:post_replacement).permit(:replacement_url, :replacement_file, :final_source)
params.require(:post_replacement).permit(:replacement_url, :replacement_file, :final_source, :tags)
end
end

View File

@@ -4,11 +4,12 @@ class PostReplacement < ApplicationRecord
belongs_to :post
belongs_to :creator, class_name: "User"
before_validation :initialize_fields
attr_accessor :replacement_file, :final_source
attr_accessor :replacement_file, :final_source, :tags
def initialize_fields
self.creator = CurrentUser.user
self.original_url = post.source
self.tags = post.tag_string + " " + self.tags.to_s
end
def undo!
@@ -23,7 +24,7 @@ class PostReplacement < ApplicationRecord
end
transaction do
upload = Upload.create!(file: replacement_file, source: replacement_url, rating: post.rating, tag_string: post.tag_string)
upload = Upload.create!(file: replacement_file, source: replacement_url, rating: post.rating, tag_string: self.tags)
upload.process_upload
upload.update(status: "completed", post_id: post.id)
@@ -155,6 +156,12 @@ class PostReplacement < ApplicationRecord
truncated_source
end
end
def suggested_tags_for_removal
tags = post.tag_array.select { |tag| Danbooru.config.remove_tag_after_replacement?(tag) }
tags = tags.map { |tag| "-#{tag}" }
tags.join(" ")
end
end
include PresenterMethods

View File

@@ -4,4 +4,5 @@
<%= f.input :replacement_file, label: "File", as: :file %>
<%= f.input :replacement_url, label: "Replacement URL", hint: "The source URL to download the replacement from.", as: :string, input_html: { value: post_replacement.post.normalized_source } %>
<%= f.input :final_source, label: "Final Source", hint: "If present, the source field will be changed to this after replacement.", as: :string, input_html: { value: post_replacement.post.source } %>
<%= f.input :tags, label: "Tags", as: :text, input_html: { value: post_replacement.suggested_tags_for_removal, data: { autocomplete: "tag-edit" } } %>
<% end %>

View File

@@ -386,6 +386,11 @@ module Danbooru
true
end
# Should return true if the given tag should be suggested for removal in the post replacement dialog box.
def remove_tag_after_replacement?(tag)
tag =~ /replaceme|.*_sample|resized|upscaled|downscaled|md5_mismatch|jpeg_artifacts/i
end
def shared_dir_path
"/var/www/danbooru2/shared"
end

View File

@@ -26,7 +26,7 @@ class PostReplacementTest < ActiveSupport::TestCase
context "Replacing" do
setup do
CurrentUser.scoped(@uploader, "127.0.0.2") do
upload = FactoryGirl.create(:jpg_upload, as_pending: "0")
upload = FactoryGirl.create(:jpg_upload, as_pending: "0", tag_string: "lowres tag1")
upload.process!
@post = upload.post
end
@@ -35,7 +35,7 @@ class PostReplacementTest < ActiveSupport::TestCase
context "a post from a generic source" do
setup do
@post.update(source: "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png")
@post.replace!(replacement_url: "https://www.google.com/intl/en_ALL/images/logo.gif")
@post.replace!(replacement_url: "https://www.google.com/intl/en_ALL/images/logo.gif", tags: "-tag1 tag2")
@upload = Upload.last
@mod_action = ModAction.last
end
@@ -52,6 +52,7 @@ class PostReplacementTest < ActiveSupport::TestCase
end
should "update the attributes" do
assert_equal("lowres tag2", @post.tag_string)
assert_equal(272, @post.image_width)
assert_equal(92, @post.image_height)
assert_equal(5969, @post.file_size)