diff --git a/app/assets/javascripts/favorite_groups.js b/app/assets/javascripts/favorite_groups.js new file mode 100644 index 000000000..a5d8dc12a --- /dev/null +++ b/app/assets/javascripts/favorite_groups.js @@ -0,0 +1,44 @@ +(function() { + Danbooru.FavoriteGroup = {}; + + Danbooru.FavoriteGroup.initialize_all = function() { + if ($("#c-posts").length && $("#a-show").length) { + this.initialize_add_to_favgroup_dialog(); + $(document).bind("keydown", "1 2 3 4 5 6 7 8 9 0", Danbooru.FavoriteGroup.add_to_favgroup); + } + } + + Danbooru.FavoriteGroup.initialize_add_to_favgroup_dialog = function() { + $("#add-to-favgroup-dialog").dialog({ + autoOpen: false, + width: 500, + buttons: { + "Cancel": function() { + $(this).dialog("close"); + } + } + }); + + $(document).bind("keydown", "g", function(e) { + if ($(".add-to-favgroup").length === 1) { + // If the user only has one favorite group we don't need to ask which group to add the post to. + $(".add-to-favgroup").click(); + } else if ($(".add-to-favgroup").length > 1) { + $("#add-to-favgroup-dialog").dialog("open"); + } + e.preventDefault(); + }); + } + + Danbooru.FavoriteGroup.add_to_favgroup = function(e) { + var favgroup_index = String.fromCharCode(e.which); + var link = $("#add-to-favgroup-" + favgroup_index + ":visible"); + if (link.length) { + link.click(); + } + } +})(); + +$(function() { + Danbooru.FavoriteGroup.initialize_all(); +}); diff --git a/app/controllers/favorite_groups_controller.rb b/app/controllers/favorite_groups_controller.rb index b778ea562..035bb7bbc 100644 --- a/app/controllers/favorite_groups_controller.rb +++ b/app/controllers/favorite_groups_controller.rb @@ -1,6 +1,6 @@ class FavoriteGroupsController < ApplicationController before_filter :member_only, :except => [:index, :show] - respond_to :html, :xml, :json + respond_to :html, :xml, :json, :js def index @favorite_groups = FavoriteGroup.search(params[:search]).order("updated_at desc").paginate(params[:page], :limit => params[:limit], :search_count => params[:search]) @@ -59,6 +59,13 @@ class FavoriteGroupsController < ApplicationController redirect_to favorite_groups_path end + def add_post + @favorite_group = FavoriteGroup.find(params[:id]) + check_privilege(@favorite_group) + @post = Post.find(params[:post_id]) + @favorite_group.add!(@post) + end + private def check_privilege(favgroup) raise User::PrivilegeError unless favgroup.editable_by?(CurrentUser.user) diff --git a/app/models/user.rb b/app/models/user.rb index 5143e552a..0b02ade68 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -256,7 +256,7 @@ class User < ActiveRecord::Base end def favorite_groups - FavoriteGroup.for_creator(CurrentUser.user.id) + FavoriteGroup.for_creator(CurrentUser.user.id).order("updated_at desc") end end diff --git a/app/views/favorite_groups/_add_to_favgroup_dialog.html.erb b/app/views/favorite_groups/_add_to_favgroup_dialog.html.erb new file mode 100644 index 000000000..428c9a7fe --- /dev/null +++ b/app/views/favorite_groups/_add_to_favgroup_dialog.html.erb @@ -0,0 +1,11 @@ +

Select a favorite group to add this post to:

+ +<% CurrentUser.favorite_groups.each_with_index do |favgroup, i| %> +
+ <%= i + 1 %>. + <%= link_to favgroup.name, + add_post_favorite_group_path(favgroup, :post_id => post.id, :format => :js), + :id => "add-to-favgroup-#{i + 1}", :class => "add-to-favgroup", + :method => :put, :remote => true %> +
+<% end %> diff --git a/app/views/favorite_groups/add_post.js.erb b/app/views/favorite_groups/add_post.js.erb new file mode 100644 index 000000000..27e00d02e --- /dev/null +++ b/app/views/favorite_groups/add_post.js.erb @@ -0,0 +1 @@ +Danbooru.notice("Added post to favorite group <%= escape_javascript(@favorite_group.pretty_name) %>"); \ No newline at end of file diff --git a/app/views/posts/show.html.erb b/app/views/posts/show.html.erb index 07e8b0a1b..627989c77 100644 --- a/app/views/posts/show.html.erb +++ b/app/views/posts/show.html.erb @@ -133,6 +133,10 @@ + + <% content_for(:page_title) do %> diff --git a/app/views/static/keyboard_shortcuts.html.erb b/app/views/static/keyboard_shortcuts.html.erb index 5a71a5d76..86663fffe 100644 --- a/app/views/static/keyboard_shortcuts.html.erb +++ b/app/views/static/keyboard_shortcuts.html.erb @@ -28,6 +28,7 @@
  • a Previous post
  • d Next post
  • f Favorite post
  • +
  • g Add post to favorite group
  • r Go to random post
  • v Toggle between sample and full size
  • diff --git a/config/routes.rb b/config/routes.rb index d30862cd2..09325f663 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -110,6 +110,9 @@ Rails.application.routes.draw do resource :dtext_preview, :only => [:create] resources :favorites resources :favorite_groups do + member do + put :add_post + end resource :order, :only => [:edit], :controller => "favorite_group_orders" end resources :forum_posts do