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| %> +