Add feature hide preview card
This commit is contained in:
parent
53db1fcf24
commit
b38f375d99
14 changed files with 73 additions and 3 deletions
|
@ -119,6 +119,9 @@ class Settings::PreferencesController < Settings::BaseController
|
||||||
:setting_hide_personal_from_timeline,
|
:setting_hide_personal_from_timeline,
|
||||||
:setting_hide_personal_from_account,
|
:setting_hide_personal_from_account,
|
||||||
:setting_hide_privacy_meta,
|
:setting_hide_privacy_meta,
|
||||||
|
:setting_hide_link_preview,
|
||||||
|
:setting_hide_photo_preview,
|
||||||
|
:setting_hide_video_preview,
|
||||||
setting_prohibited_visibilities: [],
|
setting_prohibited_visibilities: [],
|
||||||
notification_emails: %i(follow follow_request reblog favourite emoji_reaction status_reference mention digest report pending_account trending_tag),
|
notification_emails: %i(follow follow_request reblog favourite emoji_reaction status_reference mention digest report pending_account trending_tag),
|
||||||
interactions: %i(must_be_follower must_be_following must_be_following_dm must_be_dm_to_send_email must_be_following_reference)
|
interactions: %i(must_be_follower must_be_following must_be_following_dm must_be_dm_to_send_email must_be_following_reference)
|
||||||
|
|
|
@ -20,7 +20,7 @@ import classNames from 'classnames';
|
||||||
import Icon from 'mastodon/components/icon';
|
import Icon from 'mastodon/components/icon';
|
||||||
import EmojiReactionsBar from 'mastodon/components/emoji_reactions_bar';
|
import EmojiReactionsBar from 'mastodon/components/emoji_reactions_bar';
|
||||||
import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';
|
import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';
|
||||||
import { displayMedia, enableReaction, compactReaction, show_reply_tree_button, enableStatusReference, disableRelativeTime } from 'mastodon/initial_state';
|
import { displayMedia, enableReaction, compactReaction, show_reply_tree_button, enableStatusReference, disableRelativeTime, hideLinkPreview, hidePhotoPreview, hideVideoPreview } from 'mastodon/initial_state';
|
||||||
import { List as ImmutableList } from 'immutable';
|
import { List as ImmutableList } from 'immutable';
|
||||||
|
|
||||||
// We use the component (and not the container) since we do not want
|
// We use the component (and not the container) since we do not want
|
||||||
|
@ -79,6 +79,19 @@ export const defaultMediaVisibility = (status) => {
|
||||||
return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');
|
return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const isHideCard = (type) => {
|
||||||
|
switch(type) {
|
||||||
|
case 'link':
|
||||||
|
return hideLinkPreview;
|
||||||
|
case 'photo':
|
||||||
|
return hidePhotoPreview;
|
||||||
|
case 'video':
|
||||||
|
return hideVideoPreview;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||||
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||||
|
@ -554,7 +567,7 @@ class Status extends ImmutablePureComponent {
|
||||||
</Bundle>
|
</Bundle>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (showCard && status.get('spoiler_text').length === 0 && status.get('card')) {
|
} else if (showCard && status.get('spoiler_text').length === 0 && status.get('card') && !isHideCard(status.getIn(['card', 'type']))) {
|
||||||
media = (
|
media = (
|
||||||
<Card
|
<Card
|
||||||
onOpenMedia={this.handleOpenMedia}
|
onOpenMedia={this.handleOpenMedia}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import Avatar from '../../../components/avatar';
|
import Avatar from '../../../components/avatar';
|
||||||
import DisplayName from '../../../components/display_name';
|
import DisplayName from '../../../components/display_name';
|
||||||
import StatusContent from '../../../components/status_content';
|
import StatusContent from '../../../components/status_content';
|
||||||
|
import { isHideCard } from '../../../components/status';
|
||||||
import MediaGallery from '../../../components/media_gallery';
|
import MediaGallery from '../../../components/media_gallery';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { injectIntl, defineMessages, FormattedDate, FormattedMessage } from 'react-intl';
|
import { injectIntl, defineMessages, FormattedDate, FormattedMessage } from 'react-intl';
|
||||||
|
@ -342,7 +343,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (status.get('spoiler_text').length === 0) {
|
} else if (status.get('spoiler_text').length === 0 && !isHideCard(status.getIn(['card', 'type']))) {
|
||||||
media = <Card sensitive={status.get('sensitive')} onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;
|
media = <Card sensitive={status.get('sensitive')} onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,9 @@ export const hideDirectFromTimeline = getMeta('hide_direct_from_timeline');
|
||||||
export const hidePersonalFromTimeline = getMeta('hide_personal_from_timeline');
|
export const hidePersonalFromTimeline = getMeta('hide_personal_from_timeline');
|
||||||
export const hidePersonalFromAccount = getMeta('hide_personal_from_account');
|
export const hidePersonalFromAccount = getMeta('hide_personal_from_account');
|
||||||
export const hidePrivacyMeta = getMeta('hide_privacy_meta');
|
export const hidePrivacyMeta = getMeta('hide_privacy_meta');
|
||||||
|
export const hideLinkPreview = getMeta('hide_link_preview');
|
||||||
|
export const hidePhotoPreview = getMeta('hide_photo_preview');
|
||||||
|
export const hideVideoPreview = getMeta('hide_video_preview');
|
||||||
|
|
||||||
export const maxChars = initialState?.max_toot_chars ?? 500;
|
export const maxChars = initialState?.max_toot_chars ?? 500;
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,9 @@ class UserSettingsDecorator
|
||||||
hide_personal_from_timeline
|
hide_personal_from_timeline
|
||||||
hide_personal_from_account
|
hide_personal_from_account
|
||||||
hide_privacy_meta
|
hide_privacy_meta
|
||||||
|
hide_link_preview
|
||||||
|
hide_photo_preview
|
||||||
|
hide_video_preview
|
||||||
).freeze
|
).freeze
|
||||||
|
|
||||||
STRING_KEYS = %w(
|
STRING_KEYS = %w(
|
||||||
|
|
|
@ -146,6 +146,7 @@ class User < ApplicationRecord
|
||||||
:disable_post, :disable_reactions, :disable_follow, :disable_unfollow, :disable_block, :disable_domain_block, :disable_clear_all_notifications, :disable_account_delete,
|
:disable_post, :disable_reactions, :disable_follow, :disable_unfollow, :disable_block, :disable_domain_block, :disable_clear_all_notifications, :disable_account_delete,
|
||||||
:prohibited_visibilities, :prohibited_words,
|
:prohibited_visibilities, :prohibited_words,
|
||||||
:disable_relative_time, :hide_direct_from_timeline, :hide_personal_from_timeline, :hide_personal_from_account, :hide_privacy_meta,
|
:disable_relative_time, :hide_direct_from_timeline, :hide_personal_from_timeline, :hide_personal_from_account, :hide_privacy_meta,
|
||||||
|
:hide_link_preview, :hide_photo_preview, :hide_video_preview,
|
||||||
|
|
||||||
to: :settings, prefix: :setting, allow_nil: false
|
to: :settings, prefix: :setting, allow_nil: false
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,9 @@ class InitialStateSerializer < ActiveModel::Serializer
|
||||||
store[:hide_personal_from_timeline] = object.current_account.user.setting_hide_personal_from_timeline
|
store[:hide_personal_from_timeline] = object.current_account.user.setting_hide_personal_from_timeline
|
||||||
store[:hide_personal_from_account] = object.current_account.user.setting_hide_personal_from_account
|
store[:hide_personal_from_account] = object.current_account.user.setting_hide_personal_from_account
|
||||||
store[:hide_privacy_meta] = object.current_account.user.setting_hide_privacy_meta
|
store[:hide_privacy_meta] = object.current_account.user.setting_hide_privacy_meta
|
||||||
|
store[:hide_link_preview] = object.current_account.user.setting_hide_link_preview
|
||||||
|
store[:hide_photo_preview] = object.current_account.user.setting_hide_photo_preview
|
||||||
|
store[:hide_video_preview] = object.current_account.user.setting_hide_video_preview
|
||||||
else
|
else
|
||||||
store[:auto_play_gif] = Setting.auto_play_gif
|
store[:auto_play_gif] = Setting.auto_play_gif
|
||||||
store[:display_media] = Setting.display_media
|
store[:display_media] = Setting.display_media
|
||||||
|
|
|
@ -43,6 +43,21 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
||||||
|
|
||||||
delegate :quote?, to: :object
|
delegate :quote?, to: :object
|
||||||
|
|
||||||
|
def preview_card
|
||||||
|
object.preview_card unless hide_preview_card?
|
||||||
|
end
|
||||||
|
|
||||||
|
def hide_preview_card?
|
||||||
|
case object&.preview_card&.type
|
||||||
|
when 'link'
|
||||||
|
current_user&.setting_hide_link_preview
|
||||||
|
when 'photo'
|
||||||
|
current_user&.setting_hide_photo_preview
|
||||||
|
when 'video'
|
||||||
|
current_user&.setting_hide_video_preview
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def id
|
def id
|
||||||
object.id.to_s
|
object.id.to_s
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,5 +99,16 @@
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :setting_expand_spoilers, as: :boolean, wrapper: :with_label
|
= f.input :setting_expand_spoilers, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
|
%h4= t 'appearance.preview_card'
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :setting_hide_link_preview, as: :boolean, wrapper: :with_label, fedibird_features: true
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :setting_hide_photo_preview, as: :boolean, wrapper: :with_label, fedibird_features: true
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :setting_hide_video_preview, as: :boolean, wrapper: :with_label, fedibird_features: true
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
= f.button :button, t('generic.save_changes'), type: :submit
|
= f.button :button, t('generic.save_changes'), type: :submit
|
||||||
|
|
|
@ -792,6 +792,7 @@ en:
|
||||||
body: Mastodon is translated by volunteers.
|
body: Mastodon is translated by volunteers.
|
||||||
guide_link: https://crowdin.com/project/mastodon
|
guide_link: https://crowdin.com/project/mastodon
|
||||||
guide_link_text: Everyone can contribute.
|
guide_link_text: Everyone can contribute.
|
||||||
|
preview_card: Preview Card
|
||||||
sensitive_content: Sensitive content
|
sensitive_content: Sensitive content
|
||||||
themes: Themes
|
themes: Themes
|
||||||
toot_layout: Post layout
|
toot_layout: Post layout
|
||||||
|
|
|
@ -771,6 +771,7 @@ ja:
|
||||||
body: Mastodonは有志によって翻訳されています。
|
body: Mastodonは有志によって翻訳されています。
|
||||||
guide_link: https://ja.crowdin.com/project/mastodon
|
guide_link: https://ja.crowdin.com/project/mastodon
|
||||||
guide_link_text: 誰でも参加することができます。
|
guide_link_text: 誰でも参加することができます。
|
||||||
|
preview_card: プレビューカード
|
||||||
sensitive_content: 閲覧注意コンテンツ
|
sensitive_content: 閲覧注意コンテンツ
|
||||||
themes: テーマ
|
themes: テーマ
|
||||||
toot_layout: 投稿のレイアウト
|
toot_layout: 投稿のレイアウト
|
||||||
|
|
|
@ -96,11 +96,14 @@ en:
|
||||||
setting_hide_direct_from_timeline: Hide direct messages from the home and list timelines
|
setting_hide_direct_from_timeline: Hide direct messages from the home and list timelines
|
||||||
setting_hide_followers_count: The number of followers will be hidden in your profile
|
setting_hide_followers_count: The number of followers will be hidden in your profile
|
||||||
setting_hide_following_count: The number of following will be hidden in your profile
|
setting_hide_following_count: The number of following will be hidden in your profile
|
||||||
|
setting_hide_link_preview: Hide the content preview card linked to the post
|
||||||
setting_hide_network: Who you follow and who follows you will be hidden on your profile
|
setting_hide_network: Who you follow and who follows you will be hidden on your profile
|
||||||
setting_hide_personal_from_account: Hide personal posts from the account post lists
|
setting_hide_personal_from_account: Hide personal posts from the account post lists
|
||||||
setting_hide_personal_from_timeline: Hide personal posts from the home and list timelines
|
setting_hide_personal_from_timeline: Hide personal posts from the home and list timelines
|
||||||
|
setting_hide_photo_preview: Hide the photo preview card linked to the post
|
||||||
setting_hide_privacy_meta: Hide the description from the drop-down menu for selecting visibility, showing only the name
|
setting_hide_privacy_meta: Hide the description from the drop-down menu for selecting visibility, showing only the name
|
||||||
setting_hide_statuses_count: The number of post will be hidden in your profile
|
setting_hide_statuses_count: The number of post will be hidden in your profile
|
||||||
|
setting_hide_video_preview: Hide the video preview card linked to the post
|
||||||
setting_match_visibility_of_references: If the referenced post is private, default the visibility of the post to private behavior accordingly
|
setting_match_visibility_of_references: If the referenced post is private, default the visibility of the post to private behavior accordingly
|
||||||
setting_new_features_policy: Set the acceptance policy when new features are added to Fedibird. The recommended setting will enable many new features, so set it to disabled if it is not desirable
|
setting_new_features_policy: Set the acceptance policy when new features are added to Fedibird. The recommended setting will enable many new features, so set it to disabled if it is not desirable
|
||||||
setting_noindex: Affects your public profile and post pages
|
setting_noindex: Affects your public profile and post pages
|
||||||
|
@ -290,11 +293,14 @@ en:
|
||||||
setting_hide_direct_from_timeline: Hide direct messages from the timeline
|
setting_hide_direct_from_timeline: Hide direct messages from the timeline
|
||||||
setting_hide_followers_count: Hide your followers count
|
setting_hide_followers_count: Hide your followers count
|
||||||
setting_hide_following_count: Hide your following count
|
setting_hide_following_count: Hide your following count
|
||||||
|
setting_hide_link_preview: Hide preview card (link)
|
||||||
setting_hide_network: Hide your social graph
|
setting_hide_network: Hide your social graph
|
||||||
setting_hide_personal_from_account: Hide personal posts from account posts
|
setting_hide_personal_from_account: Hide personal posts from account posts
|
||||||
setting_hide_personal_from_timeline: Hide personal posts from the timeline
|
setting_hide_personal_from_timeline: Hide personal posts from the timeline
|
||||||
|
setting_hide_photo_preview: Hide preview card (photo)
|
||||||
setting_hide_privacy_meta: Hide visibility description
|
setting_hide_privacy_meta: Hide visibility description
|
||||||
setting_hide_statuses_count: Hide your post count
|
setting_hide_statuses_count: Hide your post count
|
||||||
|
setting_hide_video_preview: Hide preview card (video)
|
||||||
setting_info_font_size: Information header font size
|
setting_info_font_size: Information header font size
|
||||||
setting_match_visibility_of_references: Match the visibility of the post to the references
|
setting_match_visibility_of_references: Match the visibility of the post to the references
|
||||||
setting_new_features_policy: Policy for new features
|
setting_new_features_policy: Policy for new features
|
||||||
|
|
|
@ -92,11 +92,14 @@ ja:
|
||||||
setting_hide_direct_from_timeline: ホームとリストタイムラインからダイレクトメッセージを隠します
|
setting_hide_direct_from_timeline: ホームとリストタイムラインからダイレクトメッセージを隠します
|
||||||
setting_hide_followers_count: フォロワー数をプロフィールページで見られないようにします
|
setting_hide_followers_count: フォロワー数をプロフィールページで見られないようにします
|
||||||
setting_hide_following_count: フォロー数をプロフィールページで見られないようにします
|
setting_hide_following_count: フォロー数をプロフィールページで見られないようにします
|
||||||
|
setting_hide_link_preview: 投稿にリンクされたコンテンツのプレビューカードを隠します
|
||||||
setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします
|
setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします
|
||||||
setting_hide_personal_from_account: アカウントの投稿一覧から個人限定投稿を隠します
|
setting_hide_personal_from_account: アカウントの投稿一覧から個人限定投稿を隠します
|
||||||
setting_hide_personal_from_timeline: ホームとリストタイムラインから個人限定投稿を隠します
|
setting_hide_personal_from_timeline: ホームとリストタイムラインから個人限定投稿を隠します
|
||||||
|
setting_hide_photo_preview: 投稿にリンクされた画像のプレビューカードを隠します
|
||||||
setting_hide_privacy_meta: 公開範囲を選択するドロップダウンメニューから説明を隠し、名称のみ表示します
|
setting_hide_privacy_meta: 公開範囲を選択するドロップダウンメニューから説明を隠し、名称のみ表示します
|
||||||
setting_hide_statuses_count: 投稿数をプロフィールページで見られないようにします
|
setting_hide_statuses_count: 投稿数をプロフィールページで見られないようにします
|
||||||
|
setting_hide_video_preview: 投稿にリンクされた動画のプレビューカードを隠します
|
||||||
setting_match_visibility_of_references: 参照先の投稿がフォロワー限定の場合、投稿の公開範囲をそれに合わせてフォロワー限定とする動作をデフォルトにします
|
setting_match_visibility_of_references: 参照先の投稿がフォロワー限定の場合、投稿の公開範囲をそれに合わせてフォロワー限定とする動作をデフォルトにします
|
||||||
setting_new_features_policy: Fedibirdに新しい機能が追加された時の受け入れポリシーを設定します。推奨設定は多くの新機能を有効にするので、望ましくない場合は無効に設定してください
|
setting_new_features_policy: Fedibirdに新しい機能が追加された時の受け入れポリシーを設定します。推奨設定は多くの新機能を有効にするので、望ましくない場合は無効に設定してください
|
||||||
setting_noindex: 公開プロフィールおよび各投稿ページに影響します
|
setting_noindex: 公開プロフィールおよび各投稿ページに影響します
|
||||||
|
@ -286,11 +289,14 @@ ja:
|
||||||
setting_hide_direct_from_timeline: ダイレクトメッセージをタイムラインから隠す
|
setting_hide_direct_from_timeline: ダイレクトメッセージをタイムラインから隠す
|
||||||
setting_hide_followers_count: フォロワー数を隠す
|
setting_hide_followers_count: フォロワー数を隠す
|
||||||
setting_hide_following_count: フォロー数を隠す
|
setting_hide_following_count: フォロー数を隠す
|
||||||
|
setting_hide_link_preview: プレビューカード(リンク)を隠す
|
||||||
setting_hide_network: 繋がりを隠す
|
setting_hide_network: 繋がりを隠す
|
||||||
setting_hide_personal_from_account: 自分限定投稿をアカウントの投稿一覧から隠す
|
setting_hide_personal_from_account: 自分限定投稿をアカウントの投稿一覧から隠す
|
||||||
setting_hide_personal_from_timeline: 自分限定投稿をタイムラインから隠す
|
setting_hide_personal_from_timeline: 自分限定投稿をタイムラインから隠す
|
||||||
|
setting_hide_photo_preview: プレビューカード(画像)を隠す
|
||||||
setting_hide_privacy_meta: 公開範囲の説明を隠す
|
setting_hide_privacy_meta: 公開範囲の説明を隠す
|
||||||
setting_hide_statuses_count: 投稿数を隠す
|
setting_hide_statuses_count: 投稿数を隠す
|
||||||
|
setting_hide_video_preview: プレビューカード(動画)を隠す
|
||||||
setting_info_font_size: 情報ヘッダのフォントサイズ
|
setting_info_font_size: 情報ヘッダのフォントサイズ
|
||||||
setting_match_visibility_of_references: 投稿の公開範囲を参照先に合わせる
|
setting_match_visibility_of_references: 投稿の公開範囲を参照先に合わせる
|
||||||
setting_new_features_policy: 新機能へのポリシー
|
setting_new_features_policy: 新機能へのポリシー
|
||||||
|
|
|
@ -135,6 +135,9 @@ defaults: &defaults
|
||||||
hide_direct_from_timeline: false
|
hide_direct_from_timeline: false
|
||||||
hide_personal_from_timeline: false
|
hide_personal_from_timeline: false
|
||||||
hide_privacy_meta: false
|
hide_privacy_meta: false
|
||||||
|
hide_link_preview: false
|
||||||
|
hide_photo_preview: false
|
||||||
|
hide_video_preview: false
|
||||||
|
|
||||||
development:
|
development:
|
||||||
<<: *defaults
|
<<: *defaults
|
||||||
|
|
Loading…
Reference in a new issue