Add local setting toggle to move media attachments outside CWs
Fixes #1812
This commit is contained in:
parent
2a4464caef
commit
406b7d972b
4 changed files with 55 additions and 14 deletions
|
@ -508,8 +508,21 @@ class Status extends ImmutablePureComponent {
|
||||||
const { isExpanded, isCollapsed, forceFilter } = this.state;
|
const { isExpanded, isCollapsed, forceFilter } = this.state;
|
||||||
let background = null;
|
let background = null;
|
||||||
let attachments = null;
|
let attachments = null;
|
||||||
let media = [];
|
|
||||||
let mediaIcons = [];
|
// Depending on user settings, some media are considered as parts of the
|
||||||
|
// contents (affected by CW) while other will be displayed outside of the
|
||||||
|
// CW.
|
||||||
|
let contentMedia = [];
|
||||||
|
let contentMediaIcons = [];
|
||||||
|
let extraMedia = [];
|
||||||
|
let extraMediaIcons = [];
|
||||||
|
let media = contentMedia;
|
||||||
|
let mediaIcons = contentMediaIcons;
|
||||||
|
|
||||||
|
if (settings.getIn(['content_warnings', 'media_outside'])) {
|
||||||
|
media = extraMedia;
|
||||||
|
mediaIcons = extraMediaIcons;
|
||||||
|
}
|
||||||
|
|
||||||
if (status === null) {
|
if (status === null) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -681,8 +694,8 @@ class Status extends ImmutablePureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status.get('poll')) {
|
if (status.get('poll')) {
|
||||||
media.push(<PollContainer pollId={status.get('poll')} />);
|
contentMedia.push(<PollContainer pollId={status.get('poll')} />);
|
||||||
mediaIcons.push('tasks');
|
contentMediaIcons.push('tasks');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Here we prepare extra data-* attributes for CSS selectors.
|
// Here we prepare extra data-* attributes for CSS selectors.
|
||||||
|
@ -748,7 +761,7 @@ class Status extends ImmutablePureComponent {
|
||||||
</span>
|
</span>
|
||||||
<StatusIcons
|
<StatusIcons
|
||||||
status={status}
|
status={status}
|
||||||
mediaIcons={mediaIcons}
|
mediaIcons={contentMediaIcons.concat(extraMediaIcons)}
|
||||||
collapsible={settings.getIn(['collapsed', 'enabled'])}
|
collapsible={settings.getIn(['collapsed', 'enabled'])}
|
||||||
collapsed={isCollapsed}
|
collapsed={isCollapsed}
|
||||||
setCollapsed={setCollapsed}
|
setCollapsed={setCollapsed}
|
||||||
|
@ -757,8 +770,8 @@ class Status extends ImmutablePureComponent {
|
||||||
</header>
|
</header>
|
||||||
<StatusContent
|
<StatusContent
|
||||||
status={status}
|
status={status}
|
||||||
media={media}
|
media={contentMedia}
|
||||||
mediaIcons={mediaIcons}
|
mediaIcons={contentMediaIcons}
|
||||||
expanded={isExpanded}
|
expanded={isExpanded}
|
||||||
onExpandedToggle={this.handleExpandedToggle}
|
onExpandedToggle={this.handleExpandedToggle}
|
||||||
parseClick={parseClick}
|
parseClick={parseClick}
|
||||||
|
@ -766,6 +779,9 @@ class Status extends ImmutablePureComponent {
|
||||||
tagLinks={settings.get('tag_misleading_links')}
|
tagLinks={settings.get('tag_misleading_links')}
|
||||||
rewriteMentions={settings.get('rewrite_mentions')}
|
rewriteMentions={settings.get('rewrite_mentions')}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{extraMedia}
|
||||||
|
|
||||||
{!isCollapsed || !(muted || !settings.getIn(['collapsed', 'show_action_bar'])) ? (
|
{!isCollapsed || !(muted || !settings.getIn(['collapsed', 'show_action_bar'])) ? (
|
||||||
<StatusActionBar
|
<StatusActionBar
|
||||||
{...other}
|
{...other}
|
||||||
|
|
|
@ -303,6 +303,15 @@ class LocalSettingsPage extends React.PureComponent {
|
||||||
({ intl, onChange, settings }) => (
|
({ intl, onChange, settings }) => (
|
||||||
<div className='glitch local-settings__page content_warnings'>
|
<div className='glitch local-settings__page content_warnings'>
|
||||||
<h1><FormattedMessage id='settings.content_warnings' defaultMessage='Content warnings' /></h1>
|
<h1><FormattedMessage id='settings.content_warnings' defaultMessage='Content warnings' /></h1>
|
||||||
|
<LocalSettingsPageItem
|
||||||
|
settings={settings}
|
||||||
|
item={['content_warnings', 'media_outside']}
|
||||||
|
id='mastodon-settings--content_warnings-media_outside'
|
||||||
|
onChange={onChange}
|
||||||
|
>
|
||||||
|
<FormattedMessage id='settings.content_warnings_media_outside' defaultMessage='Display media attachments outside content warnings' />
|
||||||
|
<span className='hint'><FormattedMessage id='settings.content_warnings_media_outside_hint' defaultMessage='Reproduce upstream Mastodon behavior by having the Content Warning toggle not affect media attachments' /></span>
|
||||||
|
</LocalSettingsPageItem>
|
||||||
<DeprecatedLocalSettingsPageItem
|
<DeprecatedLocalSettingsPageItem
|
||||||
id='mastodon-settings--content_warnings-auto_unfold'
|
id='mastodon-settings--content_warnings-auto_unfold'
|
||||||
value={expandSpoilers}
|
value={expandSpoilers}
|
||||||
|
|
|
@ -122,14 +122,27 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
let media = [];
|
|
||||||
let mediaIcons = [];
|
|
||||||
let applicationLink = '';
|
let applicationLink = '';
|
||||||
let reblogLink = '';
|
let reblogLink = '';
|
||||||
let reblogIcon = 'retweet';
|
let reblogIcon = 'retweet';
|
||||||
let favouriteLink = '';
|
let favouriteLink = '';
|
||||||
let edited = '';
|
let edited = '';
|
||||||
|
|
||||||
|
// Depending on user settings, some media are considered as parts of the
|
||||||
|
// contents (affected by CW) while other will be displayed outside of the
|
||||||
|
// CW.
|
||||||
|
let contentMedia = [];
|
||||||
|
let contentMediaIcons = [];
|
||||||
|
let extraMedia = [];
|
||||||
|
let extraMediaIcons = [];
|
||||||
|
let media = contentMedia;
|
||||||
|
let mediaIcons = contentMediaIcons;
|
||||||
|
|
||||||
|
if (settings.getIn(['content_warnings', 'media_outside'])) {
|
||||||
|
media = extraMedia;
|
||||||
|
mediaIcons = extraMediaIcons;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.props.measureHeight) {
|
if (this.props.measureHeight) {
|
||||||
outerStyle.height = `${this.state.height}px`;
|
outerStyle.height = `${this.state.height}px`;
|
||||||
}
|
}
|
||||||
|
@ -199,8 +212,8 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status.get('poll')) {
|
if (status.get('poll')) {
|
||||||
media.push(<PollContainer pollId={status.get('poll')} />);
|
contentMedia.push(<PollContainer pollId={status.get('poll')} />);
|
||||||
mediaIcons.push('tasks');
|
contentMediaIcons.push('tasks');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status.get('application')) {
|
if (status.get('application')) {
|
||||||
|
@ -282,8 +295,8 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
|
|
||||||
<StatusContent
|
<StatusContent
|
||||||
status={status}
|
status={status}
|
||||||
media={media}
|
media={contentMedia}
|
||||||
mediaIcons={mediaIcons}
|
mediaIcons={contentMediaIcons}
|
||||||
expanded={expanded}
|
expanded={expanded}
|
||||||
collapsed={false}
|
collapsed={false}
|
||||||
onExpandedToggle={onToggleHidden}
|
onExpandedToggle={onToggleHidden}
|
||||||
|
@ -294,6 +307,8 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
disabled
|
disabled
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{extraMedia}
|
||||||
|
|
||||||
<div className='detailed-status__meta'>
|
<div className='detailed-status__meta'>
|
||||||
<a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'>
|
<a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'>
|
||||||
<FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />
|
<FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />
|
||||||
|
|
|
@ -26,6 +26,7 @@ const initialState = ImmutableMap({
|
||||||
rewrite_mentions: 'no',
|
rewrite_mentions: 'no',
|
||||||
content_warnings : ImmutableMap({
|
content_warnings : ImmutableMap({
|
||||||
filter : null,
|
filter : null,
|
||||||
|
media_outside: false,
|
||||||
}),
|
}),
|
||||||
collapsed : ImmutableMap({
|
collapsed : ImmutableMap({
|
||||||
enabled : true,
|
enabled : true,
|
||||||
|
|
Loading…
Reference in a new issue