From af8a0aaa76243829cd764414aa6997fcaee2729f Mon Sep 17 00:00:00 2001 From: albert Date: Fri, 30 Sep 2011 18:20:29 -0400 Subject: [PATCH] work on related tag js --- app/assets/javascripts/related_tag.js | 96 +++++++++++++++++++ app/controllers/related_tags_controller.rb | 12 +++ app/helpers/related_tags_helper.rb | 2 + app/logical/related_tag_query.rb | 8 ++ app/views/uploads/new.html.erb | 13 ++- config/routes.rb | 1 + .../related_tags_controller_test.rb | 7 ++ test/unit/related_tag_query_test.rb | 4 + 8 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/related_tag.js create mode 100644 app/controllers/related_tags_controller.rb create mode 100644 app/helpers/related_tags_helper.rb create mode 100644 test/functional/related_tags_controller_test.rb diff --git a/app/assets/javascripts/related_tag.js b/app/assets/javascripts/related_tag.js new file mode 100644 index 000000000..ff552bada --- /dev/null +++ b/app/assets/javascripts/related_tag.js @@ -0,0 +1,96 @@ +(function() { + Danbooru.RelatedTag = {}; + + Danbooru.RelatedTag.initialize_all = function() { + this.initialize_buttons(); + } + + Danbooru.RelatedTag.initialize_buttons = function() { + this.common_bind("#related-tags-button", ""); + this.common_bind("#related-artists-button", "artist"); + this.common_bind("#related-characters-button", "character"); + this.common_bind("#related-copyrights-button", "copyright"); + } + + Danbooru.RelatedTag.common_bind = function(button_name, category) { + $(button_name).click(function(e) { + $.get("/related_tag.json", { + "query": Danbooru.RelatedTag.current_tag(), + "category": category + }).success(Danbooru.RelatedTag.process_response); + e.preventDefault(); + }); + } + + Danbooru.RelatedTag.current_tag = function() { + var $field = $("#upload_tag_string,#post_tag_string"); + var string = $field.val(); + var text_length = string.length; + var a = $field[0].selectionStart; + var b = $field[0].selectionStart; + + while ((a > 0) && string[a] != " ") { + a -= 1; + } + + if (string[a] == " ") { + a += 1; + } + + while ((b < text_length) && string[b] != " ") { + b += 1; + } + + return string.slice(a, b); + } + + Danbooru.RelatedTag.process_response = function(data) { + var query = data.query; + var related_tags = data.tags; + var wiki_page_tags = data.wiki_page_tags; + var $dest = $("#related-tags"); + + $dest.append(Danbooru.RelatedTag.build_html(query, related_tags)); + if (wiki_page_tags.length > 0) { + $dest.append(Danbooru.RelatedTag.build_html("wiki:" + query), wiki_page_tags); + } + } + + Danbooru.RelatedTag.build_html = function(query, related_tags) { + if (query === null || query === "") { + return ""; + } + + var current = $("#upload_tag_string,#post_tag_string").val().match(/\S+/g) || []; + var $div = $("
").addClass("tag-column"); + var $ul = $("
- <%= f.label :tag_string, "Tags" %> - <%= f.text_area :tag_string, :size => "60x4" %> +
+ <%= f.label :tag_string, "Tags" %> + <%= f.text_area :tag_string, :size => "60x4" %> +
+ + <%= button_tag "Related tags", :id => "related-tags-button" %> + <%= button_tag "Artists", :id => "related-artists-button" %> + <%= button_tag "Characters", :id => "related-characters-button" %> + <%= button_tag "Copyrights", :id => "related-copyrights-button" %>
+ +
<%= submit_tag "Submit" %> diff --git a/config/routes.rb b/config/routes.rb index 8bf5bd0e2..b87bed740 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -33,6 +33,7 @@ Danbooru::Application.routes.draw do resources :hits, :controller => "advertisement_hits", :only => [:create] end resource :source, :only => [:show] + resource :related_tag, :only => [:show] resources :artists do member do put :revert diff --git a/test/functional/related_tags_controller_test.rb b/test/functional/related_tags_controller_test.rb new file mode 100644 index 000000000..9f2bbe128 --- /dev/null +++ b/test/functional/related_tags_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class RelatedTagsControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/unit/related_tag_query_test.rb b/test/unit/related_tag_query_test.rb index 81b1b983d..0f6d4ff58 100644 --- a/test/unit/related_tag_query_test.rb +++ b/test/unit/related_tag_query_test.rb @@ -24,6 +24,10 @@ class RelatedTagQueryTest < ActiveSupport::TestCase should "work" do assert_equal(["aaa", "bbb", "ccc"], @query.tags) end + + should "render the json" do + assert_equal("{\"query\":\"aaa\",\"category\":\"\",\"tags\":[[\"aaa\",0],[\"bbb\",0],[\"ccc\",0]],\"wiki_page_tags\":[]}", @query.to_json) + end end context "for a tag that doesn't exist" do