From 0d953e24929420ab3c5464d4e8877c7d04c35770 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 2 Jul 2022 04:46:32 -0500 Subject: [PATCH] related tags: add AI tags to related tags section. Add a Suggested tags list to the Related Tags box. The suggested tags are just the AI tags for the post. Suggested tags are currently hidden in CSS for beta testing. Use custom CSS to unhide them. --- app/controllers/related_tags_controller.rb | 3 ++- app/javascript/src/javascripts/related_tag.js | 3 ++- app/logical/related_tag_query.rb | 10 ++++++++-- app/models/ai_tag.rb | 7 +++++++ app/views/posts/partials/show/_edit.html.erb | 2 +- .../related_tags/_ai_tags_column.html.erb | 18 ++++++++++++++++++ app/views/related_tags/_container.html.erb | 2 +- app/views/related_tags/_user_tags.html.erb | 1 + .../uploads/_single_asset_upload.html.erb | 2 +- 9 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 app/views/related_tags/_ai_tags_column.html.erb 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 @@ -