diff --git a/app/controllers/related_tags_controller.rb b/app/controllers/related_tags_controller.rb index fa647ba53..b61b709ff 100644 --- a/app/controllers/related_tags_controller.rb +++ b/app/controllers/related_tags_controller.rb @@ -8,8 +8,9 @@ class RelatedTagsController < ApplicationController category = params[:category] || search_params[:category] type = params[:type] || search_params[:type] limit = params[:limit] + media_asset = MediaAsset.find(params[:media_asset_id]) if params[:media_asset_id].present? - @query = RelatedTagQuery.new(query: query, category: category, type: type, user: CurrentUser.user, limit: limit) + @query = RelatedTagQuery.new(query: query, media_asset: media_asset, category: category, type: type, user: CurrentUser.user, limit: limit) respond_with(@query) end end diff --git a/app/javascript/src/javascripts/related_tag.js b/app/javascript/src/javascripts/related_tag.js index ad3b221d3..bfd66e3a2 100644 --- a/app/javascript/src/javascripts/related_tag.js +++ b/app/javascript/src/javascripts/related_tag.js @@ -27,7 +27,8 @@ RelatedTag.initialize_all = function() { } RelatedTag.initialize_recent_and_favorite_tags = function(event) { - $.get("/related_tag.js", { user_tags: true }); + let media_asset_id = $("#related-tags-container").attr("data-media-asset-id"); + $.get("/related_tag.js", { user_tags: true, media_asset_id: media_asset_id }); } RelatedTag.on_click_related_tags_button = function (event) { diff --git a/app/logical/related_tag_query.rb b/app/logical/related_tag_query.rb index d8868faa2..c5479cb77 100644 --- a/app/logical/related_tag_query.rb +++ b/app/logical/related_tag_query.rb @@ -6,12 +6,13 @@ class RelatedTagQuery include ActiveModel::Serializers::JSON include ActiveModel::Serializers::Xml - attr_reader :query, :post_query, :category, :type, :user, :limit + attr_reader :query, :post_query, :media_asset, :category, :type, :user, :limit - def initialize(query:, user: User.anonymous, category: nil, type: nil, limit: nil) + def initialize(query:, media_asset: nil, user: User.anonymous, category: nil, type: nil, limit: nil) @user = user @post_query = PostQuery.normalize(query, current_user: user) # XXX This query does not include implicit metatags (rating:s, -status:deleted) @query = @post_query.to_s + @media_asset = media_asset @category = category @type = type @limit = (limit =~ /^\d+/ ? limit.to_i : 25) @@ -55,6 +56,11 @@ class RelatedTagQuery @similar_tags ||= RelatedTagCalculator.similar_tags_for_search(post_query, category: category_of).take(limit) end + def ai_tags + return AITag.none if media_asset.nil? + media_asset.ai_tags.joins(:tag).undeprecated.nonempty.in_order_of(:"tags.category", TagCategory.canonical_mapping.values).order("ai_tags.score DESC, tags.name ASC").take(limit) + end + # Returns the top 20 most frequently added tags within the last 20 edits made by the user in the last hour. def recent_tags(since: 1.hour.ago, max_edits: 20, max_tags: 20) return [] unless user.present? && PostVersion.enabled? diff --git a/app/models/ai_tag.rb b/app/models/ai_tag.rb index 448c701d3..c18222db8 100644 --- a/app/models/ai_tag.rb +++ b/app/models/ai_tag.rb @@ -9,6 +9,13 @@ class AITag < ApplicationRecord validates :score, inclusion: { in: (0..100) } + scope :deprecated, -> { where(tag: Tag.deprecated) } + scope :undeprecated, -> { where(tag: Tag.undeprecated) } + scope :empty, -> { where(tag: Tag.empty) } + scope :nonempty, -> { where(tag: Tag.nonempty) } + + delegate :name, :pretty_name, :post_count, :category, :category_name, to: :tag + def self.named(name) name = $1.downcase if name =~ /\A(rating:.)/i where(tag: Tag.find_by_name_or_alias(name)) diff --git a/app/views/posts/partials/show/_edit.html.erb b/app/views/posts/partials/show/_edit.html.erb index ecf8fec84..9caf57728 100644 --- a/app/views/posts/partials/show/_edit.html.erb +++ b/app/views/posts/partials/show/_edit.html.erb @@ -49,5 +49,5 @@ <%= f.submit "Submit" %> - <%= render "related_tags/container" %> + <%= render "related_tags/container", media_asset: post.media_asset %> <% end %> diff --git a/app/views/related_tags/_ai_tags_column.html.erb b/app/views/related_tags/_ai_tags_column.html.erb new file mode 100644 index 000000000..6c54eda35 --- /dev/null +++ b/app/views/related_tags/_ai_tags_column.html.erb @@ -0,0 +1,18 @@ + diff --git a/app/views/related_tags/_container.html.erb b/app/views/related_tags/_container.html.erb index 7fa07e5af..e955445db 100644 --- a/app/views/related_tags/_container.html.erb +++ b/app/views/related_tags/_container.html.erb @@ -1,4 +1,4 @@ -