diff --git a/app/controllers/pools_controller.rb b/app/controllers/pools_controller.rb
index 185cb052e..91a760331 100644
--- a/app/controllers/pools_controller.rb
+++ b/app/controllers/pools_controller.rb
@@ -16,6 +16,7 @@ class PoolsController < ApplicationController
def index
@search = Pool.search(params[:search])
@pools = @search.paginate(:page => params[:page])
+ respond_with(@pools)
end
def show
diff --git a/app/controllers/pools_posts_controller.rb b/app/controllers/pools_posts_controller.rb
index b11617bef..d5c894460 100644
--- a/app/controllers/pools_posts_controller.rb
+++ b/app/controllers/pools_posts_controller.rb
@@ -1,18 +1,27 @@
class PoolsPostsController < ApplicationController
- respond_to :html, :xml, :json
+ respond_to :html, :xml, :json, :js
before_filter :member_only
def create
- @pool = Pool.find(params[:pool_id])
- @post = Post.find(params[:id])
+ @pool = Pool.find_by_name(params[:pool_name]) || Pool.find(params[:pool_id])
+ @post = Post.find(params[:post_id])
@pool.add_post!(@post)
+ append_pool_to_session(@pool)
respond_with(@pool, :location => pool_path(@pool))
end
def destroy
@pool = Pool.find(params[:pool_id])
- @post = Post.find(params[:id])
+ @post = Post.find(params[:post_id])
@pool.remove_post!(@post)
respond_with(@pool, :location => pool_path(@pool))
end
+
+private
+ def append_pool_to_session(pool)
+ recent_pool_ids = session[:recent_pool_ids].to_s.scan(/\d+/)
+ recent_pool_ids << pool.id.to_s
+ recent_pool_ids = recent_pool_ids.slice(1, 5) if recent_pool_ids.size > 5
+ session[:recent_pool_ids] = recent_pool_ids.uniq.join(",")
+ end
end
diff --git a/app/helpers/pools_helper.rb b/app/helpers/pools_helper.rb
index 914922f98..2c2e59083 100644
--- a/app/helpers/pools_helper.rb
+++ b/app/helpers/pools_helper.rb
@@ -1,6 +1,6 @@
module PoolsHelper
- def recent_pool_list
- pool_ids = session[:recent_pool_ids].to_s.split(/,/)
- pool_ids.map {|x| content_tag("option", x, :value => x)}.join("\n").html_safe
+ def recent_updated_pools(&block)
+ pool_ids = session[:recent_pool_ids].to_s.scan(/\d+/)
+ Pool.where(["id IN (?)", pool_ids]).each(&block) if pool_ids.any?
end
end
diff --git a/app/views/pools/_form.html.erb b/app/views/pools/_form.html.erb
index 38886cf2c..78a20e8f1 100644
--- a/app/views/pools/_form.html.erb
+++ b/app/views/pools/_form.html.erb
@@ -1,6 +1,5 @@
<%= simple_form_for(pool) do |f| %>
<%= f.input :name %>
<%= f.input :description %>
- <%= f.input :is_active %>
<%= f.button :submit %>
<% end %>
diff --git a/app/views/pools_posts/new.html.erb b/app/views/pools_posts/new.html.erb
index 5b7aec111..7cb6a5bdb 100644
--- a/app/views/pools_posts/new.html.erb
+++ b/app/views/pools_posts/new.html.erb
@@ -1,4 +1,18 @@
-<%= form_for(post_pools_path(@post)) do %>
-
+
+ <%= form_tag(pool_post_path) do %>
+ <%= hidden_field_tag "post_id", @post.id %>
+ <%= text_field_tag "pool_name", "", :size => 20 %>
+ <%= submit_tag "Select" %>
+ <% end %>
+
+
+
Recent Pools
+
+ <% recent_updated_pools.each do |pool| %>
+ - <%= pool.name %>
+ <% end %>
+
+
+
+
diff --git a/config/routes.rb b/config/routes.rb
index f98835343..d26d83851 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -35,14 +35,12 @@ Danbooru::Application.routes.draw do
end
resources :note_versions, :only => [:index]
resources :pools do
- resources :posts, :controller => "pools_posts", :only => [:create, :destroy, :show]
member do
put :revert
end
end
resources :pool_versions, :only => [:index]
resources :posts do
- resources :pools, :controller => "pools_posts", :only => [:create]
resources :votes, :controller => "post_votes", :only => [:create, :destroy]
member do
put :revert
@@ -70,6 +68,8 @@ Danbooru::Application.routes.draw do
end
resources :wiki_page_versions, :only => [:index]
+ match '/pool_post' => 'pools_posts#create', :via => :post, :as => 'pool_post'
+ match '/pool_post' => 'pools_posts#destroy', :via => :delete, :as => 'pool_post'
match '/post_moderation/moderate' => 'post_moderation#moderate'
match '/post_moderation/disapprove' => 'post_moderation#disapprove', :via => :put
match '/post_moderation/approve' => 'post_moderation#approve', :via => :put
diff --git a/public/javascripts/compiled/default.js b/public/javascripts/compiled/default.js
index 9b7f411e3..35babe0d2 100644
--- a/public/javascripts/compiled/default.js
+++ b/public/javascripts/compiled/default.js
@@ -1423,10 +1423,26 @@ $(document).ready(function() {
Danbooru.Pool.initialize_add_to_pool_link = function() {
$("#add-to-pool-dialog").dialog({autoOpen: false});
+ $("#c-pools-posts #a-new input[type=text]").autocomplete({
+ source: function(req, resp) {
+ $.getJSON(
+ "/pools.json?search[name_contains]=" + req.term,
+ function(data) {
+ resp(data.map(function(x) {return x.pool.name;}));
+ }
+ );
+ },
+ minLength: 4,
+ });
+
$("a#pool").click(function() {
$("#add-to-pool-dialog").dialog("open");
return false;
});
+
+ $("ul#recent-pools li").click(function() {
+ $("#pool_name").val($(this).html());
+ });
}
Danbooru.Pool.initialize_simple_edit = function() {
diff --git a/public/javascripts/src/app/pools.js b/public/javascripts/src/app/pools.js
index 35de60019..f7d6e1e97 100644
--- a/public/javascripts/src/app/pools.js
+++ b/public/javascripts/src/app/pools.js
@@ -9,10 +9,26 @@
Danbooru.Pool.initialize_add_to_pool_link = function() {
$("#add-to-pool-dialog").dialog({autoOpen: false});
+ $("#c-pools-posts #a-new input[type=text]").autocomplete({
+ source: function(req, resp) {
+ $.getJSON(
+ "/pools.json?search[name_contains]=" + req.term,
+ function(data) {
+ resp(data.map(function(x) {return x.pool.name;}));
+ }
+ );
+ },
+ minLength: 4,
+ });
+
$("a#pool").click(function() {
$("#add-to-pool-dialog").dialog("open");
return false;
});
+
+ $("ul#recent-pools li").click(function() {
+ $("#pool_name").val($(this).html());
+ });
}
Danbooru.Pool.initialize_simple_edit = function() {
diff --git a/public/stylesheets/compiled/default.css b/public/stylesheets/compiled/default.css
index 1a9a36d42..a3edc6186 100644
--- a/public/stylesheets/compiled/default.css
+++ b/public/stylesheets/compiled/default.css
@@ -217,6 +217,16 @@ form.simple_form div.input {
div.dtext p {
margin-bottom: 1em; }
+/*** Pools Posts ***/
+div#c-pools-posts div#a-new form {
+ margin-bottom: 1em; }
+div#c-pools-posts div#a-new h1 {
+ font-size: 1.2em;
+ font-weight: bold; }
+div#c-pools-posts div#a-new li {
+ margin-left: 1em;
+ cursor: pointer; }
+
/*** Pools ***/
div#c-pools div#a-edit p {
margin-bottom: 1em;
diff --git a/public/stylesheets/src/default.scss b/public/stylesheets/src/default.scss
index 3d239d3db..5b0dbb9e3 100644
--- a/public/stylesheets/src/default.scss
+++ b/public/stylesheets/src/default.scss
@@ -309,6 +309,28 @@ div.dtext {
}
+/*** Pools Posts ***/
+
+div#c-pools-posts {
+ div#a-new {
+ form {
+ margin-bottom: 1em;
+ }
+
+ h1 {
+ font-size: 1.2em;
+ font-weight: bold;
+ }
+
+ li {
+ margin-left: 1em;
+ cursor: pointer;
+ }
+ }
+}
+
+
+
/*** Pools ***/
div#c-pools {
diff --git a/test/functional/pools_posts_controller_test.rb b/test/functional/pools_posts_controller_test.rb
index ce3a1c006..cff7a7a0f 100644
--- a/test/functional/pools_posts_controller_test.rb
+++ b/test/functional/pools_posts_controller_test.rb
@@ -17,14 +17,14 @@ class PoolsPostsControllerTest < ActionController::TestCase
context "create action" do
should "add a post to a pool" do
- post :create, {:pool_id => @pool.id, :id => @post.id, :format => "json"}, {:user_id => @user.id}
+ post :create, {:pool_id => @pool.id, :post_id => @post.id, :format => "json"}, {:user_id => @user.id}
@pool.reload
assert_equal([@post.id], @pool.post_id_array)
end
should "add a post to a pool once and only once" do
@pool.add_post!(@post)
- post :create, {:pool_id => @pool.id, :id => @post.id, :format => "json"}, {:user_id => @user.id}
+ post :create, {:pool_id => @pool.id, :post_id => @post.id, :format => "json"}, {:user_id => @user.id}
@pool.reload
assert_equal([@post.id], @pool.post_id_array)
end
@@ -36,14 +36,14 @@ class PoolsPostsControllerTest < ActionController::TestCase
end
should "remove a post from a pool" do
- post :destroy, {:pool_id => @pool.id, :id => @post.id, :format => "json"}, {:user_id => @user.id}
+ post :destroy, {:pool_id => @pool.id, :post_id => @post.id, :format => "json"}, {:user_id => @user.id}
@pool.reload
assert_equal([], @pool.post_id_array)
end
should "do nothing if the post is not a member of the pool" do
@pool.remove_post!(@post)
- post :destroy, {:pool_id => @pool.id, :id => @post.id, :format => "json"}, {:user_id => @user.id}
+ post :destroy, {:pool_id => @pool.id, :post_id => @post.id, :format => "json"}, {:user_id => @user.id}
@pool.reload
assert_equal([], @pool.post_id_array)
end