Filter on allowed user language preferences (#2361)
* Naive approached to timeline filtering * Convert allowed_languages into a db column * Allow users to choose languages to see statuses in * Style list items as two columns * Add a hint to explain language filtering preference
This commit is contained in:
parent
3988f2dade
commit
f025cc6782
10 changed files with 66 additions and 4 deletions
|
@ -326,3 +326,10 @@ code {
|
|||
flex: 0 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
.user_allowed_languages {
|
||||
li {
|
||||
float: left;
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,8 @@ class Settings::PreferencesController < ApplicationController
|
|||
|
||||
def user_params
|
||||
params.require(:user).permit(
|
||||
:locale
|
||||
:locale,
|
||||
allowed_languages: []
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -82,6 +82,8 @@ class Account < ApplicationRecord
|
|||
prefix: true,
|
||||
allow_nil: true
|
||||
|
||||
delegate :allowed_languages, to: :user, prefix: false, allow_nil: true
|
||||
|
||||
def follow!(other_account)
|
||||
active_relationships.where(target_account: other_account).first_or_create!(target_account: other_account)
|
||||
end
|
||||
|
|
|
@ -119,6 +119,10 @@ class Status < ApplicationRecord
|
|||
end
|
||||
|
||||
class << self
|
||||
def in_allowed_languages(account)
|
||||
where(language: account.allowed_languages)
|
||||
end
|
||||
|
||||
def as_home_timeline(account)
|
||||
where(account: [account] + account.following)
|
||||
end
|
||||
|
@ -198,6 +202,7 @@ class Status < ApplicationRecord
|
|||
|
||||
def filter_timeline_for_account(query, account)
|
||||
query = query.not_excluded_by_account(account)
|
||||
query = query.in_allowed_languages(account) if account.allowed_languages.present?
|
||||
query.merge(account_silencing_filter(account))
|
||||
end
|
||||
|
||||
|
|
|
@ -7,6 +7,16 @@
|
|||
.fields-group
|
||||
= f.input :locale, collection: I18n.available_locales, wrapper: :with_label, include_blank: false, label_method: lambda { |locale| human_locale(locale) }
|
||||
|
||||
= f.input :allowed_languages,
|
||||
collection: I18n.available_locales,
|
||||
wrapper: :with_label,
|
||||
include_blank: false,
|
||||
label_method: lambda { |locale| human_locale(locale) },
|
||||
required: false,
|
||||
as: :check_boxes,
|
||||
collection_wrapper_tag: 'ul',
|
||||
item_wrapper_tag: 'li'
|
||||
|
||||
= f.input :setting_default_privacy, collection: Status.visibilities.keys - ['direct'], wrapper: :with_label, include_blank: false, label_method: lambda { |visibility| safe_join([I18n.t("statuses.visibilities.#{visibility}"), content_tag(:span, I18n.t("statuses.visibilities.#{visibility}_long"), class: 'hint')]) }, required: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li'
|
||||
|
||||
.fields-group
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue