diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index f381ccd26..72e97be0b 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -524,23 +524,47 @@ } Danbooru.Post.initialize_saved_searches = function() { + $("#saved_search_category").autocomplete({ + minLength: 1, + source: function(req, resp) { + $.ajax({ + url: "/saved_searches/categories.json", + method: "get", + success: function(data) { + resp($.map(data, function(saved_search) { + return { + label: saved_search.category, + value: saved_search.category + }; + })); + } + }) + } + }); + + $("#save-search-dialog").dialog({ + width: 500, + modal: true, + autoOpen: false, + buttons: { + "Submit": function() { + $("#save-search-dialog form").submit(); + $(this).dialog("close"); + }, + "Cancel": function() { + $(this).dialog("close"); + } + } + }); + $("#save-search").click(function() { if (Danbooru.meta("disable-categorized-saved-searches") === "false") { - var input = window.prompt("Category for this saved search (optional):"); - if (input !== null) { - $.post( - "/saved_searches.js", - { - "tags": $("#tags").attr("value"), - "category": input - } - ); - } + $("#save-search-dialog").dialog("open"); } else { $.post( "/saved_searches.js", { - "tags": $("#tags").attr("value") + "saved_search_tags": $("#tags").attr("value") } ); } diff --git a/app/controllers/saved_searches_controller.rb b/app/controllers/saved_searches_controller.rb index 9088f140f..5a35b2b34 100644 --- a/app/controllers/saved_searches_controller.rb +++ b/app/controllers/saved_searches_controller.rb @@ -3,7 +3,9 @@ class SavedSearchesController < ApplicationController respond_to :html, :xml, :json, :js def index - SavedSearch.delay(:queue => "default").refresh_listbooru(CurrentUser.id) + if Danbooru.config.listbooru_server + SavedSearch.delay(:queue => "default").refresh_listbooru(CurrentUser.id) + end @saved_searches = saved_searches.order("tag_query") @categories = @saved_searches.group_by{|saved_search| saved_search.category.to_s} @@ -16,8 +18,18 @@ class SavedSearchesController < ApplicationController end end + def categories + @categories = saved_searches.select(:category).distinct + respond_with(@categories) + end + def create - @saved_search = saved_searches.create(:tag_query => params[:tags], :category => params[:category]) + @saved_search = saved_searches.create(:tag_query => params[:saved_search_tags], :category => params[:saved_search_category]) + + if params[:saved_search_disable_categories] + CurrentUser.disable_categorized_saved_searches = true + CurrentUser.save + end end def destroy diff --git a/app/views/saved_searches/_interface.html.erb b/app/views/saved_searches/_interface.html.erb index ae8967098..8e03c804e 100644 --- a/app/views/saved_searches/_interface.html.erb +++ b/app/views/saved_searches/_interface.html.erb @@ -1,3 +1,17 @@ <% if CurrentUser.show_saved_searches? %> <%= button_tag "Save search", :id => "save-search" %> <% end %> + + diff --git a/app/views/saved_searches/create.js.erb b/app/views/saved_searches/create.js.erb index 541a3f4af..0755c27a3 100644 --- a/app/views/saved_searches/create.js.erb +++ b/app/views/saved_searches/create.js.erb @@ -2,6 +2,4 @@ Danbooru.error("<%= j @saved_search.errors.full_messages.join(', ') %>"); <% else %> Danbooru.notice("Search '<%= j @saved_search.tag_query %>' was saved"); - $("#saved-searches-nav").html("<%= j render('saved_searches/interface', :saved_searches => CurrentUser.user.saved_searches) %>"); - Danbooru.Post.initialize_saved_searches(); <% end %> diff --git a/config/routes.rb b/config/routes.rb index f980874f7..aeede113c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -222,7 +222,11 @@ Rails.application.routes.draw do get "reports/user_promotions" => "reports#user_promotions" get "reports/janitor_trials" => "reports#janitor_trials" get "reports/contributors" => "reports#contributors" - resources :saved_searches, :only => [:index, :create, :destroy] + resources :saved_searches, :only => [:index, :create, :destroy] do + collection do + get :categories + end + end resource :session do collection do get :sign_out