Merge branch 'danbooru:master' into master

This commit is contained in:
Jay
2022-01-26 20:16:47 -07:00
committed by GitHub
26 changed files with 291 additions and 69 deletions

View File

@@ -43,18 +43,20 @@
<% end %>
<% end %>
<% end %>
<% end %>
<% if policy(forum_post).destroy? && !forum_post.is_original_post?(original_forum_post_id) %>
<% menu.item do %>
<% if forum_post.is_deleted? %>
<%= link_to undelete_forum_post_path(forum_post.id), method: :post, remote: true do %>
<%= undelete_icon %> Undelete
<% end %>
<% else %>
<%= link_to forum_post_path(forum_post.id), "data-confirm": "Are you sure you want to delete this forum post?", method: :delete, remote: true do %>
<%= delete_icon %> Delete
<% end %>
<% end %>
<% if forum_post.is_deleted? && policy(forum_post).undelete? && !forum_post.is_original_post?(original_forum_post_id) %>
<% menu.item do %>
<%= link_to undelete_forum_post_path(forum_post.id), method: :post, remote: true do %>
<%= undelete_icon %> Undelete
<% end %>
<% end %>
<% end %>
<% if !forum_post.is_deleted? && policy(forum_post).destroy? && !forum_post.is_original_post?(original_forum_post_id) %>
<% menu.item do %>
<%= link_to forum_post_path(forum_post.id), "data-confirm": "Are you sure you want to delete this forum post?", method: :delete, remote: true do %>
<%= delete_icon %> Delete
<% end %>
<% end %>
<% end %>

View File

@@ -55,12 +55,16 @@ class ForumPostsController < ApplicationController
def destroy
@forum_post = authorize ForumPost.find(params[:id])
@forum_post.delete!
flash[:notice] = @forum_post.errors.none? ? "Post deleted" : @forum_post.errors.full_messages.join("; ")
respond_with(@forum_post)
end
def undelete
@forum_post = authorize ForumPost.find(params[:id])
@forum_post.undelete!
flash[:notice] = @forum_post.errors.none? ? "Post undeleted" : @forum_post.errors.full_messages.join("; ")
respond_with(@forum_post)
end
end

View File

@@ -30,15 +30,6 @@ class WikiPagesController < ApplicationController
end
def show
if params[:format].present?
request.format = params[:format]
elsif params[:id].ends_with?(".html", ".json", ".xml")
request.format = params[:id].split(".").last
params[:id].delete_suffix!(".#{request.format.symbol}")
else
request.format = "html"
end
@wiki_page, found_by = WikiPage.find_by_id_or_title(params[:id])
if request.format.html? && @wiki_page.blank? && found_by == :title

View File

@@ -1,8 +1,16 @@
html {
// Disable font boosting on mobile. By default, when desktop mode is enabled
// on mobile, mobile browsers will automagically increase the size of text.
// Usually they do so poorly, making things like headers smaller than body
// text, which breaks the layout.
text-size-adjust: none;
}
*, ::before, ::after {
box-sizing: border-box;
}
body, h1, h2, h3, h4, h5, h6, p, ul, ol, li, blockquote, dl, dd, menu {
body, h1, h2, h3, h4, h5, h6, p, ul, ol, li, blockquote, dl, dd, menu, input {
margin: 0;
}

View File

@@ -50,7 +50,6 @@ fieldset {
img {
border: none;
vertical-align: middle;
image-rendering: smooth;
}
input, select, textarea {

View File

@@ -83,6 +83,11 @@ form.simple_form {
line-height: 1.5em;
}
// Hide "*" in label next to required fields.
&.required abbr[title="required"] {
display: none;
}
&.radio_buttons {
span.radio label {
font-weight: normal;

View File

@@ -15,13 +15,14 @@ class ForumPost < ApplicationRecord
has_one :bulk_update_request
validates :body, presence: true, length: { maximum: 200_000 }, if: :body_changed?
validate :validate_deletion_of_original_post
validate :validate_undeletion_of_post
before_create :autoreport_spam
before_save :handle_reports_on_deletion
after_create :update_topic_updated_at_on_create
after_update :update_topic_updated_at_on_update_for_original_posts
after_destroy :update_topic_updated_at_on_destroy
after_save :delete_topic_if_original_post
after_update(:if => ->(rec) {rec.updater_id != rec.creator_id}) do |rec|
ModAction.log("#{CurrentUser.user.name} updated forum ##{rec.id}", :forum_post_update)
end
@@ -83,6 +84,18 @@ class ForumPost < ApplicationRecord
votes.exists?(creator_id: user.id, score: score)
end
def validate_deletion_of_original_post
if is_original_post? && is_deleted? && !topic.is_deleted?
errors.add(:base, "Can't delete original post without deleting the topic first")
end
end
def validate_undeletion_of_post
if topic.is_deleted? && !is_deleted?
errors.add(:base, "Can't undelete post without undeleting the topic first")
end
end
def autoreport_spam
if SpamDetector.new(self, user_ip: CurrentUser.ip_addr).spam?
moderation_reports << ModerationReport.new(creator: User.system, reason: "Spam.")
@@ -153,12 +166,6 @@ class ForumPost < ApplicationRecord
end
end
def delete_topic_if_original_post
if is_deleted? && is_original_post?
topic.update_attribute(:is_deleted, true)
end
end
def handle_reports_on_deletion
return unless moderation_reports.pending.present? && is_deleted_change == [false, true]

View File

@@ -24,12 +24,13 @@ class ForumTopic < ApplicationRecord
has_many :tag_implications
validates :title, presence: true, length: { maximum: 200 }, if: :title_changed?
validates_associated :original_post
validates :category_id, inclusion: { in: CATEGORIES.keys }
validates :min_level, inclusion: { in: MIN_LEVELS.values }
accepts_nested_attributes_for :original_post
after_update :update_orignal_post
after_update :update_posts_on_deletion_or_undeletion
after_update :update_original_post
after_save(:if => ->(rec) {rec.is_locked? && rec.saved_change_to_is_locked?}) do |rec|
ModAction.log("locked forum topic ##{id} (title: #{title})", :forum_topic_lock)
end
@@ -179,7 +180,14 @@ class ForumTopic < ApplicationRecord
(response_count / Danbooru.config.posts_per_page.to_f).ceil
end
def update_orignal_post
# Delete all posts when the topic is deleted. Undelete all posts when the topic is undeleted.
def update_posts_on_deletion_or_undeletion
if saved_change_to_is_deleted?
forum_posts.update!(is_deleted: is_deleted) # XXX depends on current user
end
end
def update_original_post
original_post&.update_columns(:updater_id => updater.id, :updated_at => Time.now)
end

View File

@@ -0,0 +1,6 @@
# frozen_string_literal: true
class UploadMediaAsset < ApplicationRecord
belongs_to :upload
belongs_to :media_asset
end

View File

@@ -18,11 +18,11 @@ class ForumPostPolicy < ApplicationPolicy
end
def destroy?
unbanned? && show? && user.is_moderator?
unbanned? && show? && !record.is_deleted? && user.is_moderator?
end
def undelete?
unbanned? && show? && user.is_moderator?
unbanned? && show? && record.is_deleted? && !record.topic.is_deleted? && user.is_moderator?
end
def reply?

View File

@@ -1 +1 @@
$("#forum_post_<%= @forum_post.id %>").replaceWith("<%= j render(ForumPostComponent.new(forum_post: @forum_post, current_user: CurrentUser.user)) %>");
location.reload();

View File

@@ -1 +1 @@
$("#forum_post_<%= @forum_post.id %>").replaceWith("<%= j render(ForumPostComponent.new(forum_post: @forum_post, current_user: CurrentUser.user)) %>");
location.reload();

View File

@@ -4,11 +4,12 @@
<%= NewRelic::Agent.browser_timing_header rescue "" %>
<meta charset="utf-8">
<title><%= page_title %></title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" sizes="16x16" type="image/x-icon">
<link rel="icon" href="/favicon.svg" sizes="any" type="image/svg+xml">
<link rel="top" title="<%= Danbooru.config.app_name %>" href="/">
<%= csrf_meta_tag %>
<%= raw Danbooru.config.custom_html_header_content %>
<%= javascript_pack_tag "application" %>
<%= javascript_pack_tag "application", defer: false %>
<%= stylesheet_pack_tag "application" %>
<%= yield :html_header %>
</head>

View File

@@ -5,7 +5,8 @@
<meta charset="utf-8">
<title><%= page_title %></title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" sizes="16x16" type="image/x-icon">
<link rel="icon" href="/favicon.svg" sizes="any" type="image/svg+xml">
<%= render_meta_links @current_item if @current_item.respond_to?(:paginate) %>
<%= tag.link rel: "canonical", href: canonical_url %>
<%= tag.link rel: "search", type: "application/opensearchdescription+xml", href: opensearch_url(format: :xml, version: 2), title: "Search posts" %>
@@ -22,9 +23,9 @@
<%# XXX hack to only load Ruffle on Flash posts %>
<% if controller_name == "posts" && action_name == "show" && @post&.is_flash? %>
<%= javascript_pack_tag "application", "flash" %>
<%= javascript_pack_tag "application", "flash", defer: false %>
<% else %>
<%= javascript_pack_tag "application" %>
<%= javascript_pack_tag "application", defer: false %>
<% end %>
<%= stylesheet_pack_tag "application" %>

View File

@@ -72,6 +72,7 @@ Allow: <%= privacy_policy_path %>
Allow: <%= not_found_path %>
Allow: /sitemap.xml
Allow: /favicon.ico
Allow: /favicon.svg
Sitemap: <%= sitemap_url(format: :xml, sitemap: "artists") %>
Sitemap: <%= sitemap_url(format: :xml, sitemap: "forum_topics") %>