Artist urls can be prepended with a '-' to mark is inactive (#3388)

This commit is contained in:
Albert Yi
2018-05-16 15:33:32 -07:00
parent 6acaf999a1
commit fcd80b6043
7 changed files with 52 additions and 6 deletions

View File

@@ -142,7 +142,11 @@
tags.push(["BANNED_ARTIST", "banned"]); tags.push(["BANNED_ARTIST", "banned"]);
} }
$.each(Danbooru.RelatedTag.recent_artists[0].sorted_urls, function(i, url) { $.each(Danbooru.RelatedTag.recent_artists[0].sorted_urls, function(i, url) {
tags.push([" " + url.url, 0]); var x = url.url;
if (!url.is_active) {
x = "-" + x;
}
tags.push([" " + x, 0]);
}); });
} else if (Danbooru.RelatedTag.recent_artists.length >= 10) { } else if (Danbooru.RelatedTag.recent_artists.length >= 10) {
tags.push([" none", 0]); tags.push([" none", 0]);
@@ -226,7 +230,15 @@
); );
} else { } else {
var text = tag[0]; var text = tag[0];
if (text.match(/^ http/)) { if (text.match(/^ -http/)) {
text = text.substring(1, 1000);
var desc = text.replace(/^-https?:\/\//, "");
if (desc.length > 30) {
desc = desc.substring(0, 30) + "...";
}
var $del = $("<del/>").html(desc);
$ul.append($("<li/>").html($del));
} else if (text.match(/^ http/)) {
text = text.substring(1, 1000); text = text.substring(1, 1000);
var $url = $("<a/>"); var $url = $("<a/>");
var desc = text.replace(/^https?:\/\//, ""); var desc = text.replace(/^https?:\/\//, "");

View File

@@ -1,4 +1,5 @@
class ArtistUrl < ApplicationRecord class ArtistUrl < ApplicationRecord
before_validation :parse_prefix
before_save :initialize_normalized_url, on: [ :create ] before_save :initialize_normalized_url, on: [ :create ]
before_save :normalize before_save :normalize
validates_presence_of :url validates_presence_of :url
@@ -58,6 +59,13 @@ class ArtistUrl < ApplicationRecord
url = url.gsub(/^http:\/\/i\d+\.pixiv\.net\/img\d+/, "http://*.pixiv.net/img*") url = url.gsub(/^http:\/\/i\d+\.pixiv\.net\/img\d+/, "http://*.pixiv.net/img*")
end end
def parse_prefix
if url && url[0] == "-"
self.url = url[1..-1]
self.is_active = false
end
end
def priority def priority
if normalized_url =~ /pixiv\.net\/member\.php/ if normalized_url =~ /pixiv\.net\/member\.php/
10 10
@@ -89,7 +97,11 @@ class ArtistUrl < ApplicationRecord
end end
def to_s def to_s
url if is_active?
url
else
"-#{url}"
end
end end
def validate_url_format def validate_url_format

View File

@@ -30,7 +30,7 @@
<ul> <ul>
<% artist.urls.each do |url| %> <% artist.urls.each do |url| %>
<li> <li>
<%= link_to h(url.to_s), h(url.to_s) %> <%= link_to h(url.to_s), h(url) %>
<% if CurrentUser.user.is_moderator? %> <% if CurrentUser.user.is_moderator? %>
[<%= link_to("mass edit", edit_moderator_tag_path(:antecedent => "-#{artist.name} source:#{ArtistUrl.normalize_for_search(url.to_s)}", :consequent => artist.name)) %>] [<%= link_to("mass edit", edit_moderator_tag_path(:antecedent => "-#{artist.name} source:#{ArtistUrl.normalize_for_search(url.to_s)}", :consequent => artist.name)) %>]
<% end %> <% end %>

View File

@@ -0,0 +1,7 @@
class AddIsActiveToArtistUrls < ActiveRecord::Migration[5.2]
def change
ApplicationRecord.without_timeout do
add_column :artist_urls, :is_active, :boolean, null: false, default: true
end
end
end

View File

@@ -683,7 +683,8 @@ CREATE TABLE public.artist_urls (
url text NOT NULL, url text NOT NULL,
normalized_url text NOT NULL, normalized_url text NOT NULL,
created_at timestamp without time zone, created_at timestamp without time zone,
updated_at timestamp without time zone updated_at timestamp without time zone,
is_active boolean DEFAULT true NOT NULL
); );
@@ -7494,6 +7495,7 @@ INSERT INTO "schema_migrations" (version) VALUES
('20180116001101'), ('20180116001101'),
('20180403231351'), ('20180403231351'),
('20180413224239'), ('20180413224239'),
('20180425194016'); ('20180425194016'),
('20180516222413');

View File

@@ -29,6 +29,12 @@ class ArtistTest < ActiveSupport::TestCase
CurrentUser.ip_addr = nil CurrentUser.ip_addr = nil
end end
should "parse inactive urls" do
@artist = Artist.create(name: "blah", url_string: "-http://monet.com")
assert_equal(["-http://monet.com"], @artist.urls.map(&:to_s))
refute(@artist.urls[0].is_active?)
end
should "should have a valid name" do should "should have a valid name" do
@artist = Artist.new(:name => "-blah") @artist = Artist.new(:name => "-blah")
@artist.save @artist.save

View File

@@ -12,6 +12,13 @@ class ArtistUrlTest < ActiveSupport::TestCase
CurrentUser.ip_addr = nil CurrentUser.ip_addr = nil
end end
should "allow urls to be marked as inactive" do
url = FactoryBot.create(:artist_url, :url => "-http://monet.com")
assert_equal("http://monet.com", url.url)
assert_equal("http://monet.com/", url.normalized_url)
refute(url.is_active?)
end
should "always add a trailing slash when normalized" do should "always add a trailing slash when normalized" do
url = FactoryBot.create(:artist_url, :url => "http://monet.com") url = FactoryBot.create(:artist_url, :url => "http://monet.com")
assert_equal("http://monet.com", url.url) assert_equal("http://monet.com", url.url)