diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index 27a0cdb6b..089a43451 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -76,25 +76,7 @@ } } - Danbooru.Post.nav_scroll_down = function() { - var scroll_top = $(window).scrollTop() + ($(window).height() * 0.85); - Danbooru.scroll_to(scroll_top); - } - - Danbooru.Post.nav_scroll_up = function() { - var scroll_top = $(window).scrollTop() - ($(window).height() * 0.85); - if (scroll_top < 0) { - scroll_top = 0; - } - Danbooru.scroll_to(scroll_top); - } - Danbooru.Post.initialize_shortcuts = function() { - $(document).bind("keydown.q", function(e) { - $("#tags").trigger("focus").selectEnd(); - e.preventDefault(); - }); - if ($("#a-show").length) { $(document).bind("keydown.e", function(e) { $("#post-edit-link").trigger("click"); @@ -113,18 +95,10 @@ }); $(document).bind("keydown.f", function(e) { - $("#add-to-favorites").filter(":visible").trigger("click"); + $("#add-to-favorites:visible").trigger("click"); e.preventDefault(); }); } - - $(document).bind("keydown.s", function(e) { - Danbooru.Post.nav_scroll_down(); - }) - - $(document).bind("keydown.w", function(e) { - Danbooru.Post.nav_scroll_up(); - }) } Danbooru.Post.initialize_links = function() { diff --git a/app/assets/javascripts/shortcuts.js b/app/assets/javascripts/shortcuts.js new file mode 100644 index 000000000..3fb7abbae --- /dev/null +++ b/app/assets/javascripts/shortcuts.js @@ -0,0 +1,36 @@ +(function() { + Danbooru.Shortcuts = {}; + + Danbooru.Shortcuts.initialize = function() { + $(document).bind("keydown.s", function(e) { + Danbooru.Shortcuts.nav_scroll_down(); + }) + + $(document).bind("keydown.w", function(e) { + Danbooru.Shortcuts.nav_scroll_up(); + }) + + $(document).bind("keydown.q", function(e) { + $("#tags, #search_name, #search_name_matches, #query").trigger("focus").selectEnd(); + e.preventDefault(); + }); + } + + Danbooru.Shortcuts.nav_scroll_down = function() { + var scroll_top = $(window).scrollTop() + ($(window).height() * 0.85); + Danbooru.scroll_to(scroll_top); + } + + Danbooru.Shortcuts.nav_scroll_up = function() { + var scroll_top = $(window).scrollTop() - ($(window).height() * 0.85); + if (scroll_top < 0) { + scroll_top = 0; + } + Danbooru.scroll_to(scroll_top); + } +})(); + + +$(document).ready(function() { + Danbooru.Shortcuts.initialize(); +}); diff --git a/app/controllers/artists_controller.rb b/app/controllers/artists_controller.rb index 3ae607380..2512ef962 100644 --- a/app/controllers/artists_controller.rb +++ b/app/controllers/artists_controller.rb @@ -1,8 +1,8 @@ class ArtistsController < ApplicationController respond_to :html, :xml, :json before_filter :member_only, :except => [:index, :show, :banned] + before_filter :builder_only, :only => [:edit_name, :update_name, :destroy] before_filter :admin_only, :only => [:ban] - before_filter :builder_only, :only => [:edit_name, :update_name] def new @artist = Artist.new_with_defaults(params) @@ -82,6 +82,24 @@ class ArtistsController < ApplicationController respond_with(@artist) end + def destroy + @artist = Artist.find(params[:id]) + if !@artist.deletable_by?(CurrentUser.user) + raise User::PrivilegeError + end + @artist.update_attribute(:is_active, false) + redirect_to(artist_path(@artist), :notice => "Artist deleted") + end + + def undelete + @artist = Artist.find(params[:id]) + if !@artist.deletable_by?(CurrentUser.user) + raise User::PrivilegeError + end + @artist.update_attribute(:is_active, true) + redirect_to(artist_path(@artist), :notice => "Artist undeleted") + end + def revert @artist = Artist.find(params[:id]) @version = ArtistVersion.find(params[:version_id]) diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index 9f577300c..55c832ac9 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -270,8 +270,12 @@ class PostQueryBuilder relation = add_tag_string_search_relation(q[:tags], relation) - if q[:order] == "rank" || q[:order] == "rank2" + if q[:order] == "rank" relation = relation.where("posts.score > 0 and posts.created_at >= ?", 2.days.ago) + elsif q[:order] == "rank2" + relation = relation.where("posts.fav_count > 0 and posts.created_at >= ?", 2.days.ago) + elsif q[:order] == "landscape" || q[:order] == "portrait" + relation = relation.where("posts.image_width IS NOT NULL and posts.image_height IS NOT NULL") end case q[:order] diff --git a/app/models/artist.rb b/app/models/artist.rb index ab1925531..a0c07d0dc 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -84,7 +84,7 @@ class Artist < ActiveRecord::Base if new_wiki_page # Merge the old wiki page into the new one new_wiki_page.update_attributes(:body => new_wiki_page.body + "\n\n" + notes) - else + elsif wiki_page wiki_page.update_attribute(:title, new_name) end reload @@ -317,8 +317,10 @@ class Artist < ActiveRecord::Base extend SearchMethods def status - if is_banned? + if is_banned? && is_active? "Banned" + elsif is_banned? + "Banned Deleted" elsif is_active? "Active" else @@ -341,4 +343,8 @@ class Artist < ActiveRecord::Base def initialize_creator self.creator_id = CurrentUser.user.id end + + def deletable_by?(user) + user.is_builder? + end end diff --git a/app/models/upload.rb b/app/models/upload.rb index cac56aca2..41a61011b 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -182,6 +182,11 @@ class Upload < ActiveRecord::Base def add_dimension_tags! return if !Danbooru.config.enable_dimension_autotagging + %w(incredibly_absurdres absurdres highres lowres).each do |tag| + escaped_tag = Regexp.escape(tag) + self.tag_string = tag_string.gsub(/(?:\A| )#{escaped_tag}(?:\Z| )/, " ").strip + end + if image_width >= 10_000 || image_height >= 10_000 self.tag_string = "#{tag_string} incredibly_absurdres".strip elsif image_width >= 3200 || image_height >= 2400 diff --git a/app/views/artists/_form.html.erb b/app/views/artists/_form.html.erb index 040a7db26..a96ebd89b 100644 --- a/app/views/artists/_form.html.erb +++ b/app/views/artists/_form.html.erb @@ -12,9 +12,6 @@ <%= f.input :other_names_comma, :hint => "Separate with commas", :as => :text, :label => "Other names" %> <%= f.input :group_name %> <%= f.input :url_string, :label => "URLs", :as => :text, :input_html => {:size => "50x5"} %> - <% if CurrentUser.is_builder? %> - <%= f.input :is_active %> - <% end %> <%= dtext_field "artist", "notes" %> <%= f.button :submit, "Submit" %> diff --git a/app/views/artists/_secondary_links.html.erb b/app/views/artists/_secondary_links.html.erb index 069f9307d..7b4c4ede8 100644 --- a/app/views/artists/_secondary_links.html.erb +++ b/app/views/artists/_secondary_links.html.erb @@ -16,8 +16,15 @@
  • <%= link_to "Edit name", edit_name_artist_path(@artist) %>
  • <% end %>
  • <%= link_to "History", artist_versions_path(:search => {:artist_id => @artist.id}) %>
  • + <% if @artist.deletable_by?(CurrentUser.user) %> + <% if @artist.is_active? %> +
  • <%= link_to "Delete", artist_path(@artist), :method => :delete, :confirm => "Are you sure you want to delete this artist?" %>
  • + <% else %> +
  • <%= link_to "Undelete", undelete_artist_path(@artist), :method => :post, :confirm => "Are you sure you want to undelete this artist?" %>
  • + <% end %> + <% end %> <% if CurrentUser.is_admin? %> - <%= link_to "Ban", ban_artist_path(@artist), :method => :put, :confirm => "Are you sure you want to ban this artist?" %> +
  • <%= link_to "Ban", ban_artist_path(@artist), :method => :put, :confirm => "Are you sure you want to ban this artist?" %>
  • <% end %> <% end %> diff --git a/app/views/static/keyboard_shortcuts.html.erb b/app/views/static/keyboard_shortcuts.html.erb index cad92851d..35327c174 100644 --- a/app/views/static/keyboard_shortcuts.html.erb +++ b/app/views/static/keyboard_shortcuts.html.erb @@ -8,6 +8,8 @@
  • a Previous page
  • d Next page
  • q Search
  • +
  • w Scroll up
  • +
  • s Scroll down
  • diff --git a/app/views/wiki_pages/_excerpt.html.erb b/app/views/wiki_pages/_excerpt.html.erb index c18ab7126..55a8486b2 100644 --- a/app/views/wiki_pages/_excerpt.html.erb +++ b/app/views/wiki_pages/_excerpt.html.erb @@ -7,6 +7,8 @@
    <%= format_text(post_set.wiki_page.presenter.excerpt) %> + <%= wiki_page_alias_and_implication_list(post_set.wiki_page) %> +

    Read the <%= link_to "full article", wiki_page_path(post_set.wiki_page.id) %>.

    <% else %> diff --git a/app/views/wiki_pages/_form.html.erb b/app/views/wiki_pages/_form.html.erb index f7a0c41f8..53dcd1bb1 100644 --- a/app/views/wiki_pages/_form.html.erb +++ b/app/views/wiki_pages/_form.html.erb @@ -2,7 +2,7 @@ <%= error_messages_for("wiki_page") %> <%= simple_form_for(@wiki_page) do |f| %> - <% if !@wiki_page.new_record? && CurrentUser.user.is_builder? %> + <% if @wiki_page.new_record? || CurrentUser.user.is_builder? %> <%= f.input :title, :as => :string %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 76bdeb900..6d43b60b6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -61,6 +61,7 @@ Danbooru::Application.routes.draw do put :ban get :edit_name put :update_name + post :undelete end collection do get :show_or_new