diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index f78738c88..52ee3eb6d 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -10,6 +10,7 @@ class PostsController < ApplicationController def show @post = Post.find(params[:id]) + @unapproval = Unapproval.new(:post_id => @post) respond_with(@post) end diff --git a/app/controllers/unapprovals_controller.rb b/app/controllers/unapprovals_controller.rb index bfc430f50..1d701c590 100644 --- a/app/controllers/unapprovals_controller.rb +++ b/app/controllers/unapprovals_controller.rb @@ -15,7 +15,7 @@ class UnapprovalsController < ApplicationController def create @unapproval = Unapproval.create(params[:unapproval]) - respond_with(@unapproval) + respond_with(@unapproval, :location => post_path(@unapproval.post_id)) end def destroy diff --git a/app/models/post.rb b/app/models/post.rb index 77a15b021..519ba2294 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -199,9 +199,14 @@ class Post < ActiveRecord::Base end module ApprovalMethods + def is_unapprovable? + is_pending == false && is_flagged == false && unapproval.nil? + end + def unapprove!(reason) + raise Unapproval::Error.new("This post is still pending approval") if is_pending? raise Unapproval::Error.new("This post has already been flagged") if is_flagged? - raise Unapproval::Error.new("This post has already been unapproved once") unless unapproval.nil? + raise Unapproval::Error.new("This post has already been unapproved once") unless unapproval.nil? unapproval = create_unapproval( :unapprover_id => CurrentUser.user.id, diff --git a/app/views/posts/partials/show/_options.html.erb b/app/views/posts/partials/show/_options.html.erb index aa304e004..afdf68d3b 100644 --- a/app/views/posts/partials/show/_options.html.erb +++ b/app/views/posts/partials/show/_options.html.erb @@ -3,11 +3,21 @@
  • <%= link_to "Favorite", "#", :id => "add-to-favorites" %>
  • <%= link_to "Unfavorite", "#", :id => "remove-from-favorites" %>
  • <%= link_to "Translate", "#" %>
  • -
  • <%= link_to "Unapprove", "#" %>
  • - <% if CurrentUser.user.is_janitor? %> -
  • <%= link_to "Approve", "#" %>
  • -
  • <%= link_to "Undelete", "#" %>
  • -
  • <%= link_to "Delete", "#" %>
  • + <% if !post.is_flagged? %> +
  • <%= link_to "Unapprove", new_unapproval_path(:post_id => post.id), :id => "unapprove" %>
  • + <% end %> + <% if CurrentUser.is_janitor? %> + <% if post.is_pending? || post.is_flagged? %> +
  • <%= link_to "Approve", "#", :id => "approve" %>
  • +
  • <%= link_to "Disapprove", "#", :id => "disapprove" %>
  • + <% end %> + <% end %> + <% if CurrentUser.is_moderator? %> + <% if post.is_removed? %> +
  • <%= link_to "Undelete", "#" %>
  • + <% else %> +
  • <%= link_to "Delete", "#" %>
  • + <% end %> <% end %>
  • <%= link_to "Pool", "#" %>
  • \ No newline at end of file diff --git a/app/views/posts/show.html.erb b/app/views/posts/show.html.erb index b0bb669f4..6f682e9c6 100644 --- a/app/views/posts/show.html.erb +++ b/app/views/posts/show.html.erb @@ -52,6 +52,10 @@ + +
    + <%= render :template => "unapprovals/new" %> +
    <% content_for(:page_title) do %> @@ -63,6 +67,7 @@ + <% end %> <%= render :partial => "posts/partials/common/secondary_links" %> diff --git a/app/views/unapprovals/new.html.erb b/app/views/unapprovals/new.html.erb index e69de29bb..e2acdefb8 100644 --- a/app/views/unapprovals/new.html.erb +++ b/app/views/unapprovals/new.html.erb @@ -0,0 +1,4 @@ +

    You can unapprove a post if you believe it breaks the rules or doesn't belong on this site. You must provide a reason.

    +<%= form_for(@unapproval) do |f| %> + <%= f.text_area :reason, :size => "40x5" %> +<% end %> diff --git a/public/javascripts/compiled/default.js b/public/javascripts/compiled/default.js index e1e22dd2b..db99c274c 100644 --- a/public/javascripts/compiled/default.js +++ b/public/javascripts/compiled/default.js @@ -1115,14 +1115,21 @@ $(document).ready(function() { Danbooru.Favorite.initialize_all = function() { this.initialize_add_to_favorites(); this.initialize_remove_from_favorites(); - this.hide_or_remove_add_to_favorites_link(); + this.hide_or_show_add_to_favorites_link(); } - Danbooru.Favorite.hide_or_remove_add_to_favorites_link = function() { + Danbooru.Favorite.hide_or_show_add_to_favorites_link = function() { var favorites = $("meta[name=favorites]").attr("content"); - var current_user = $("meta[name=current-user-id]").attr("content"); - var regexp = new RegExp("\\bfav:" + current_user + "\\b"); - if (favorites.match(regexp)) { + var current_user_id = $("meta[name=current-user-id]").attr("content"); + + if (current_user_id == "") { + $("a#add-to-favorites").hide(); + $("a#remove-from-favorites").hide(); + return; + } + + var regexp = new RegExp("\\bfav:" + current_user_id + "\\b"); + if ((favorites != undefined) && (favorites.match(regexp))) { $("a#add-to-favorites").hide(); } else { $("a#remove-from-favorites").hide(); @@ -1178,3 +1185,35 @@ $(document).ready(function() { $(document).ready(function() { Danbooru.Favorite.initialize_all(); }); +(function() { + Danbooru.Unapproval = {}; + + Danbooru.Unapproval.initialize_all = function() { + this.initialize_unapprove(); + } + + Danbooru.Unapproval.initialize_unapprove = function() { + $("#unapprove-dialog").dialog({ + autoOpen: false, + width: 400, + modal: true, + buttons: { + "Submit": function() { + $("#unapprove-dialog form").submit(); + }, + "Cancel": function() { + $(this).dialog("close"); + } + } + }); + + $("a#unapprove").click(function() { + $("#unapprove-dialog").dialog("open"); + return false; + }); + } +})(); + +$(document).ready(function() { + Danbooru.Unapproval.initialize_all(); +}); diff --git a/public/javascripts/src/app/favorites.js b/public/javascripts/src/app/favorites.js index 06060d80f..fbdd87d94 100644 --- a/public/javascripts/src/app/favorites.js +++ b/public/javascripts/src/app/favorites.js @@ -4,14 +4,21 @@ Danbooru.Favorite.initialize_all = function() { this.initialize_add_to_favorites(); this.initialize_remove_from_favorites(); - this.hide_or_remove_add_to_favorites_link(); + this.hide_or_show_add_to_favorites_link(); } - Danbooru.Favorite.hide_or_remove_add_to_favorites_link = function() { + Danbooru.Favorite.hide_or_show_add_to_favorites_link = function() { var favorites = $("meta[name=favorites]").attr("content"); - var current_user = $("meta[name=current-user-id]").attr("content"); - var regexp = new RegExp("\\bfav:" + current_user + "\\b"); - if (favorites.match(regexp)) { + var current_user_id = $("meta[name=current-user-id]").attr("content"); + + if (current_user_id == "") { + $("a#add-to-favorites").hide(); + $("a#remove-from-favorites").hide(); + return; + } + + var regexp = new RegExp("\\bfav:" + current_user_id + "\\b"); + if ((favorites != undefined) && (favorites.match(regexp))) { $("a#add-to-favorites").hide(); } else { $("a#remove-from-favorites").hide(); diff --git a/public/javascripts/src/app/unapprovals.js b/public/javascripts/src/app/unapprovals.js new file mode 100644 index 000000000..544f6fb0d --- /dev/null +++ b/public/javascripts/src/app/unapprovals.js @@ -0,0 +1,32 @@ +(function() { + Danbooru.Unapproval = {}; + + Danbooru.Unapproval.initialize_all = function() { + this.initialize_unapprove(); + } + + Danbooru.Unapproval.initialize_unapprove = function() { + $("#unapprove-dialog").dialog({ + autoOpen: false, + width: 400, + modal: true, + buttons: { + "Submit": function() { + $("#unapprove-dialog form").submit(); + }, + "Cancel": function() { + $(this).dialog("close"); + } + } + }); + + $("a#unapprove").click(function() { + $("#unapprove-dialog").dialog("open"); + return false; + }); + } +})(); + +$(document).ready(function() { + Danbooru.Unapproval.initialize_all(); +}); diff --git a/public/stylesheets/compiled/default.css b/public/stylesheets/compiled/default.css index 508a96022..b2c3f5ea7 100644 --- a/public/stylesheets/compiled/default.css +++ b/public/stylesheets/compiled/default.css @@ -292,6 +292,10 @@ div.post_histories div.index div.post { color: red; text-decoration: line-through; } +/*** Post Unapprovals ***/ +div#unapprove-dialog p { + margin-bottom: 1em; } + /*** Comments ***/ div.comment-response > div { margin-top: 1em; } diff --git a/public/stylesheets/src/default.scss b/public/stylesheets/src/default.scss index d7b4a567c..a53583741 100644 --- a/public/stylesheets/src/default.scss +++ b/public/stylesheets/src/default.scss @@ -467,6 +467,14 @@ div.post_histories { } +/*** Post Unapprovals ***/ +div#unapprove-dialog { + p { + margin-bottom: 1em; + } +} + + /*** Comments ***/ div.comment-response { } diff --git a/script/custom/auto_compile.sh b/script/custom/auto_compile.sh new file mode 100755 index 000000000..f7f00ba17 --- /dev/null +++ b/script/custom/auto_compile.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +while true ; do + script/custom/compile_javascripts ; + sleep 1 ; +done diff --git a/script/custom/compile_javascripts b/script/custom/compile_javascripts index e66ffc628..2ac691bbe 100755 --- a/script/custom/compile_javascripts +++ b/script/custom/compile_javascripts @@ -13,3 +13,4 @@ cat public/javascripts/src/app/comments.js >> public/javascripts/compiled/defaul cat public/javascripts/src/app/uploads.js >> public/javascripts/compiled/default.js cat public/javascripts/src/app/users.js >> public/javascripts/compiled/default.js cat public/javascripts/src/app/favorites.js >> public/javascripts/compiled/default.js +cat public/javascripts/src/app/unapprovals.js >> public/javascripts/compiled/default.js