Add a per-user setting to hide followers count
This is only available if the instance-wide setting isn't set and allows people to hide their own followers count. This does not hide others' to them.
This commit is contained in:
		
							parent
							
								
									9e04b2e8a4
								
							
						
					
					
						commit
						bd23288a52
					
				
					 10 changed files with 18 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -37,7 +37,7 @@ class FollowerAccountsController < ApplicationController
 | 
			
		|||
 | 
			
		||||
  def collection_presenter
 | 
			
		||||
    options = { type: :ordered }
 | 
			
		||||
    options[:size] = @account.followers_count unless Setting.hide_followers_count
 | 
			
		||||
    options[:size] = @account.followers_count unless Setting.hide_followers_count || @account.user&.setting_hide_followers_count
 | 
			
		||||
    if params[:page].present?
 | 
			
		||||
      ActivityPub::CollectionPresenter.new(
 | 
			
		||||
        id: account_followers_url(@account, page: params.fetch(:page, 1)),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@ class Settings::PreferencesController < Settings::BaseController
 | 
			
		|||
      :setting_system_font_ui,
 | 
			
		||||
      :setting_noindex,
 | 
			
		||||
      :setting_hide_network,
 | 
			
		||||
      :setting_hide_followers_count,
 | 
			
		||||
      :setting_aggregate_reblogs,
 | 
			
		||||
      notification_emails: %i(follow follow_request reblog favourite mention digest report),
 | 
			
		||||
      interactions: %i(must_be_follower must_be_following)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ module StreamEntriesHelper
 | 
			
		|||
      ].join(' '),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    unless Setting.hide_followers_count
 | 
			
		||||
    unless Setting.hide_followers_count || account.user&.setting_hide_followers_count
 | 
			
		||||
      prepend_stats << [
 | 
			
		||||
        number_to_human(account.followers_count, strip_insignificant_zeros: true),
 | 
			
		||||
        I18n.t('accounts.followers', count: account.followers_count),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ class UserSettingsDecorator
 | 
			
		|||
    user.settings['reduce_motion']       = reduce_motion_preference if change?('setting_reduce_motion')
 | 
			
		||||
    user.settings['system_font_ui']      = system_font_ui_preference if change?('setting_system_font_ui')
 | 
			
		||||
    user.settings['noindex']             = noindex_preference if change?('setting_noindex')
 | 
			
		||||
    user.settings['hide_followers_count']= hide_followers_count_preference if change?('setting_hide_followers_count')
 | 
			
		||||
    user.settings['flavour']             = flavour_preference if change?('setting_flavour')
 | 
			
		||||
    user.settings['skin']                = skin_preference if change?('setting_skin')
 | 
			
		||||
    user.settings['hide_network']        = hide_network_preference if change?('setting_hide_network')
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +93,10 @@ class UserSettingsDecorator
 | 
			
		|||
    boolean_cast_setting 'setting_noindex'
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def hide_followers_count_preference
 | 
			
		||||
    boolean_cast_setting 'setting_hide_followers_count'
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def flavour_preference
 | 
			
		||||
    settings['setting_flavour']
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ class User < ApplicationRecord
 | 
			
		|||
  has_many :session_activations, dependent: :destroy
 | 
			
		||||
 | 
			
		||||
  delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal,
 | 
			
		||||
           :reduce_motion, :system_font_ui, :noindex, :flavour, :skin, :display_media, :hide_network,
 | 
			
		||||
           :reduce_motion, :system_font_ui, :noindex, :flavour, :skin, :display_media, :hide_network, :hide_followers_count,
 | 
			
		||||
           :expand_spoilers, :default_language, :aggregate_reblogs, to: :settings, prefix: :setting, allow_nil: false
 | 
			
		||||
 | 
			
		||||
  attr_reader :invite_code
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,6 +53,6 @@ class REST::AccountSerializer < ActiveModel::Serializer
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def followers_count
 | 
			
		||||
    Setting.hide_followers_count ? -1 : object.followers_count
 | 
			
		||||
    (Setting.hide_followers_count || object.user&.setting_hide_followers_count) ? -1 : object.followers_count
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,8 +24,8 @@
 | 
			
		|||
              %span.counter-label= t('accounts.following', count: account.following_count)
 | 
			
		||||
 | 
			
		||||
          .counter{ class: active_nav_class(account_followers_url(account)) }
 | 
			
		||||
            = link_to account_followers_url(account), title: Setting.hide_followers_count ? nil : number_with_delimiter(account.followers_count) do
 | 
			
		||||
              %span.counter-number= Setting.hide_followers_count ? '-' : (number_to_human account.followers_count, strip_insignificant_zeros: true)
 | 
			
		||||
            = link_to account_followers_url(account), title: (Setting.hide_followers_count || account.user&.setting_hide_followers_count) ? nil : number_with_delimiter(account.followers_count) do
 | 
			
		||||
              %span.counter-number= (Setting.hide_followers_count || account.user&.setting_hide_followers_count) ? '-' : (number_to_human account.followers_count, strip_insignificant_zeros: true)
 | 
			
		||||
              %span.counter-label= t('accounts.followers', count: account.followers_count)
 | 
			
		||||
        .spacer
 | 
			
		||||
        .public-account-header__tabs__tabs__buttons
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@
 | 
			
		|||
                  = number_to_human account.statuses_count, strip_insignificant_zeros: true
 | 
			
		||||
                  %small= t('accounts.posts', count: account.statuses_count).downcase
 | 
			
		||||
                %td.accounts-table__count.optional
 | 
			
		||||
                  = Setting.hide_followers_count ? '-' : (number_to_human account.followers_count, strip_insignificant_zeros: true)
 | 
			
		||||
                  = (Setting.hide_followers_count || account.user&.setting_hide_followers_count) ? '-' : (number_to_human account.followers_count, strip_insignificant_zeros: true)
 | 
			
		||||
                  %small= t('accounts.followers', count: account.followers_count).downcase
 | 
			
		||||
                %td.accounts-table__count
 | 
			
		||||
                  - if account.last_status_at.present?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,10 @@
 | 
			
		|||
  .fields-group
 | 
			
		||||
    = f.input :setting_hide_network, as: :boolean, wrapper: :with_label
 | 
			
		||||
 | 
			
		||||
  - unless Setting.hide_followers_count
 | 
			
		||||
    .fields-group
 | 
			
		||||
      = f.input :setting_hide_followers_count, as: :boolean, wrapper: :with_label
 | 
			
		||||
 | 
			
		||||
  %hr#settings_web/
 | 
			
		||||
 | 
			
		||||
  .fields-group
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,6 +79,7 @@ en:
 | 
			
		|||
        setting_display_media_show_all: Show all
 | 
			
		||||
        setting_expand_spoilers: Always expand toots marked with content warnings
 | 
			
		||||
        setting_favourite_modal: Show confirmation dialog before favouriting (applies to Glitch flavour only)
 | 
			
		||||
        setting_hide_followers_count: Hide your followers count
 | 
			
		||||
        setting_hide_network: Hide your network
 | 
			
		||||
        setting_noindex: Opt-out of search engine indexing
 | 
			
		||||
        setting_reduce_motion: Reduce motion in animations
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue