handle tags with the old `:` scope delimiter but translate those to `.`
parent
9abf1ce535
commit
dd7164aac2
|
@ -179,7 +179,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
def process_hashtag(tag)
|
def process_hashtag(tag)
|
||||||
return if tag['name'].blank?
|
return if tag['name'].blank?
|
||||||
|
|
||||||
hashtag = tag['name'].gsub(/\A#/, '').mb_chars.downcase
|
hashtag = tag['name'].gsub(/\A#/, '').gsub(':', '.').mb_chars.downcase
|
||||||
|
|
||||||
return if !@options[:imported] && hashtag.starts_with?('self.', '_self.', 'local.', '_local.')
|
return if !@options[:imported] && hashtag.starts_with?('self.', '_self.', 'local.', '_local.')
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Tag < ApplicationRecord
|
||||||
has_many :featured_tags, dependent: :destroy, inverse_of: :tag
|
has_many :featured_tags, dependent: :destroy, inverse_of: :tag
|
||||||
has_one :account_tag_stat, dependent: :destroy
|
has_one :account_tag_stat, dependent: :destroy
|
||||||
|
|
||||||
HASHTAG_NAME_RE = '[[:word:]._\-]*[[:alpha:]._·\-][[:word:]._\-]*'
|
HASHTAG_NAME_RE = '[[:word:]:._\-]*[[:alpha:]:._·\-][[:word:]:._\-]*'
|
||||||
HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i
|
HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i
|
||||||
|
|
||||||
validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i }
|
validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i }
|
||||||
|
@ -82,7 +82,7 @@ class Tag < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_normalized(name)
|
def find_normalized(name)
|
||||||
find_by(name: name.mb_chars.gsub(':', '.').downcase.to_s)
|
find_by(name: name.gsub(':', '.').mb_chars.downcase.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_normalized!(name)
|
def find_normalized!(name)
|
||||||
|
|
|
@ -8,7 +8,7 @@ class ProcessHashtagsService < BaseService
|
||||||
records = []
|
records = []
|
||||||
|
|
||||||
tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name|
|
tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name|
|
||||||
name = name.gsub(/\.\.+/, '.')
|
name = name.gsub(/[:.]+/, '.')
|
||||||
next if name.blank?
|
next if name.blank?
|
||||||
component_indices = name.size.times.select {|i| name[i] == '.'}
|
component_indices = name.size.times.select {|i| name[i] == '.'}
|
||||||
component_indices << name.size - 1
|
component_indices << name.size - 1
|
||||||
|
|
|
@ -78,7 +78,7 @@ Rails.application.routes.draw do
|
||||||
get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
|
get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
|
||||||
get '/@:username/media', to: 'accounts#show', as: :short_account_media
|
get '/@:username/media', to: 'accounts#show', as: :short_account_media
|
||||||
get '/@:username/reblogs', to: 'accounts#show', as: :short_account_reblogs
|
get '/@:username/reblogs', to: 'accounts#show', as: :short_account_reblogs
|
||||||
get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag, constraints: { tag: /[\w._·\-]+/ }
|
get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag, constraints: { tag: /[\w:._·\-]+/ }
|
||||||
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
|
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
|
||||||
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
|
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ Rails.application.routes.draw do
|
||||||
post '/interact/:id', to: 'remote_interaction#create'
|
post '/interact/:id', to: 'remote_interaction#create'
|
||||||
|
|
||||||
get '/explore', to: 'directories#index', as: :explore
|
get '/explore', to: 'directories#index', as: :explore
|
||||||
get '/explore/:id', to: 'directories#show', as: :explore_hashtag, constraints: { id: /[\w._·\-]+/ }
|
get '/explore/:id', to: 'directories#show', as: :explore_hashtag, constraints: { id: /[\w:._·\-]+/ }
|
||||||
|
|
||||||
namespace :settings do
|
namespace :settings do
|
||||||
resource :profile, only: [:show, :update]
|
resource :profile, only: [:show, :update]
|
||||||
|
@ -124,7 +124,7 @@ Rails.application.routes.draw do
|
||||||
resource :migration, only: [:show, :update]
|
resource :migration, only: [:show, :update]
|
||||||
|
|
||||||
resources :sessions, only: [:destroy]
|
resources :sessions, only: [:destroy]
|
||||||
resources :featured_tags, only: [:index, :create, :destroy], constraints: { id: /[\w._·\-]+/ }
|
resources :featured_tags, only: [:index, :create, :destroy], constraints: { id: /[\w:._·\-]+/ }
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :media, only: [:show] do
|
resources :media, only: [:show] do
|
||||||
|
@ -293,7 +293,7 @@ Rails.application.routes.draw do
|
||||||
resource :direct, only: :show, controller: :direct
|
resource :direct, only: :show, controller: :direct
|
||||||
resource :home, only: :show, controller: :home
|
resource :home, only: :show, controller: :home
|
||||||
resource :public, only: :show, controller: :public
|
resource :public, only: :show, controller: :public
|
||||||
resources :tag, only: :show, constraints: { id: /[\w._·\-]+/ }
|
resources :tag, only: :show, constraints: { id: /[\w:._·\-]+/ }
|
||||||
resources :list, only: :show
|
resources :list, only: :show
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue