Add option to opt out of search engines on public profile/status pages (#4199)
This commit is contained in:
parent
999170d898
commit
c42092ba7a
|
@ -39,6 +39,7 @@ class Settings::PreferencesController < ApplicationController
|
||||||
:setting_delete_modal,
|
:setting_delete_modal,
|
||||||
:setting_auto_play_gif,
|
:setting_auto_play_gif,
|
||||||
:setting_system_font_ui,
|
:setting_system_font_ui,
|
||||||
|
:setting_noindex,
|
||||||
notification_emails: %i(follow follow_request reblog favourite mention digest),
|
notification_emails: %i(follow follow_request reblog favourite mention digest),
|
||||||
interactions: %i(must_be_follower must_be_following)
|
interactions: %i(must_be_follower must_be_following)
|
||||||
)
|
)
|
||||||
|
|
|
@ -23,6 +23,7 @@ class UserSettingsDecorator
|
||||||
user.settings['delete_modal'] = delete_modal_preference
|
user.settings['delete_modal'] = delete_modal_preference
|
||||||
user.settings['auto_play_gif'] = auto_play_gif_preference
|
user.settings['auto_play_gif'] = auto_play_gif_preference
|
||||||
user.settings['system_font_ui'] = system_font_ui_preference
|
user.settings['system_font_ui'] = system_font_ui_preference
|
||||||
|
user.settings['noindex'] = noindex_preference
|
||||||
end
|
end
|
||||||
|
|
||||||
def merged_notification_emails
|
def merged_notification_emails
|
||||||
|
@ -57,6 +58,10 @@ class UserSettingsDecorator
|
||||||
boolean_cast_setting 'setting_auto_play_gif'
|
boolean_cast_setting 'setting_auto_play_gif'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def noindex_preference
|
||||||
|
boolean_cast_setting 'setting_noindex'
|
||||||
|
end
|
||||||
|
|
||||||
def boolean_cast_setting(key)
|
def boolean_cast_setting(key)
|
||||||
settings[key] == '1'
|
settings[key] == '1'
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,6 +99,10 @@ class User < ApplicationRecord
|
||||||
settings.system_font_ui
|
settings.system_font_ui
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setting_noindex
|
||||||
|
settings.noindex
|
||||||
|
end
|
||||||
|
|
||||||
def activate_session(request)
|
def activate_session(request)
|
||||||
session_activations.activate(session_id: SecureRandom.hex,
|
session_activations.activate(session_id: SecureRandom.hex,
|
||||||
user_agent: request.user_agent,
|
user_agent: request.user_agent,
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
= display_name(@account)
|
= display_name(@account)
|
||||||
|
|
||||||
- content_for :header_tags do
|
- content_for :header_tags do
|
||||||
|
- if @account.user&.setting_noindex
|
||||||
|
%meta{ name: 'robots', content: 'noindex' }/
|
||||||
|
|
||||||
%link{ rel: 'salmon', href: api_salmon_url(@account.id) }/
|
%link{ rel: 'salmon', href: api_salmon_url(@account.id) }/
|
||||||
%link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/
|
%link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
= t('accounts.people_who_follow', name: display_name(@account))
|
= t('accounts.people_who_follow', name: display_name(@account))
|
||||||
|
|
||||||
- content_for :header_tags do
|
- content_for :header_tags do
|
||||||
|
- if @account.user&.setting_noindex
|
||||||
|
%meta{ name: 'robots', content: 'noindex' }/
|
||||||
|
|
||||||
= render 'accounts/og', account: @account, url: account_followers_url(@account, only_path: false)
|
= render 'accounts/og', account: @account, url: account_followers_url(@account, only_path: false)
|
||||||
|
|
||||||
= render 'accounts/header', account: @account
|
= render 'accounts/header', account: @account
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
= t('accounts.people_followed_by', name: display_name(@account))
|
= t('accounts.people_followed_by', name: display_name(@account))
|
||||||
|
|
||||||
- content_for :header_tags do
|
- content_for :header_tags do
|
||||||
|
- if @account.user&.setting_noindex
|
||||||
|
%meta{ name: 'robots', content: 'noindex' }/
|
||||||
|
|
||||||
= render 'accounts/og', account: @account, url: account_followers_url(@account, only_path: false)
|
= render 'accounts/og', account: @account, url: account_followers_url(@account, only_path: false)
|
||||||
|
|
||||||
= render 'accounts/header', account: @account
|
= render 'accounts/header', account: @account
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
%html{ lang: I18n.locale }
|
%html{ lang: I18n.locale }
|
||||||
%head
|
%head
|
||||||
%meta{ charset: 'utf-8' }/
|
%meta{ charset: 'utf-8' }/
|
||||||
|
%meta{ name: 'robots', content: 'noindex' }/
|
||||||
|
|
||||||
= stylesheet_pack_tag 'common', media: 'all'
|
= stylesheet_pack_tag 'common', media: 'all'
|
||||||
= javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous'
|
= javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous'
|
||||||
= javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous'
|
= javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous'
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
= ff.input :must_be_follower, as: :boolean, wrapper: :with_label
|
= ff.input :must_be_follower, as: :boolean, wrapper: :with_label
|
||||||
= ff.input :must_be_following, as: :boolean, wrapper: :with_label
|
= ff.input :must_be_following, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :setting_noindex, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :setting_boost_modal, as: :boolean, wrapper: :with_label
|
= f.input :setting_boost_modal, as: :boolean, wrapper: :with_label
|
||||||
= f.input :setting_delete_modal, as: :boolean, wrapper: :with_label
|
= f.input :setting_delete_modal, as: :boolean, wrapper: :with_label
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
- content_for :header_tags do
|
- content_for :header_tags do
|
||||||
|
- if @account.user&.setting_noindex
|
||||||
|
%meta{ name: 'robots', content: 'noindex' }/
|
||||||
|
|
||||||
%link{ rel: 'alternate', type: 'application/atom+xml', href: account_stream_entry_url(@account, @stream_entry, format: 'atom') }/
|
%link{ rel: 'alternate', type: 'application/atom+xml', href: account_stream_entry_url(@account, @stream_entry, format: 'atom') }/
|
||||||
%link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: account_stream_entry_url(@account, @stream_entry), format: 'json') }/
|
%link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: account_stream_entry_url(@account, @stream_entry), format: 'json') }/
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ en:
|
||||||
note:
|
note:
|
||||||
one: <span class="note-counter">1</span> character left
|
one: <span class="note-counter">1</span> character left
|
||||||
other: <span class="note-counter">%{count}</span> characters left
|
other: <span class="note-counter">%{count}</span> characters left
|
||||||
|
setting_noindex: Affects your public profile and status pages
|
||||||
imports:
|
imports:
|
||||||
data: CSV file exported from another Mastodon instance
|
data: CSV file exported from another Mastodon instance
|
||||||
sessions:
|
sessions:
|
||||||
|
@ -41,6 +42,7 @@ en:
|
||||||
setting_default_sensitive: Always mark media as sensitive
|
setting_default_sensitive: Always mark media as sensitive
|
||||||
setting_delete_modal: Show confirmation dialog before deleting a toot
|
setting_delete_modal: Show confirmation dialog before deleting a toot
|
||||||
setting_system_font_ui: Use system's default font
|
setting_system_font_ui: Use system's default font
|
||||||
|
setting_noindex: Opt-out of search engine indexing
|
||||||
severity: Severity
|
severity: Severity
|
||||||
type: Import type
|
type: Import type
|
||||||
username: Username
|
username: Username
|
||||||
|
|
|
@ -21,6 +21,7 @@ defaults: &defaults
|
||||||
auto_play_gif: false
|
auto_play_gif: false
|
||||||
delete_modal: true
|
delete_modal: true
|
||||||
system_font_ui: false
|
system_font_ui: false
|
||||||
|
noindex: false
|
||||||
notification_emails:
|
notification_emails:
|
||||||
follow: false
|
follow: false
|
||||||
reblog: false
|
reblog: false
|
||||||
|
|
Loading…
Reference in New Issue