Use upstream's settings for CW auto-expand and column swiping (#1770)
* Use Mastodon server-side settings for automatically expanding toots with CWs * Add modal warning about settings changes * Use Mastodon server-side settings for disabling swiping
This commit is contained in:
@ -0,0 +1,83 @@
|
||||
// Package imports
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
export default class LocalSettingsPageItem extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
id: PropTypes.string.isRequired,
|
||||
options: PropTypes.arrayOf(PropTypes.shape({
|
||||
value: PropTypes.string.isRequired,
|
||||
message: PropTypes.string.isRequired,
|
||||
hint: PropTypes.string,
|
||||
})),
|
||||
value: PropTypes.any,
|
||||
placeholder: PropTypes.string,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { id, options, children, placeholder, value } = this.props;
|
||||
|
||||
if (options && options.length > 0) {
|
||||
const currentValue = value;
|
||||
const optionElems = options && options.length > 0 && options.map((opt) => {
|
||||
let optionId = `${id}--${opt.value}`;
|
||||
return (
|
||||
<label htmlFor={optionId}>
|
||||
<input
|
||||
type='radio'
|
||||
name={id}
|
||||
id={optionId}
|
||||
value={opt.value}
|
||||
checked={currentValue === opt.value}
|
||||
disabled
|
||||
/>
|
||||
{opt.message}
|
||||
{opt.hint && <span className='hint'>{opt.hint}</span>}
|
||||
</label>
|
||||
);
|
||||
});
|
||||
return (
|
||||
<div className='glitch local-settings__page__item radio_buttons'>
|
||||
<fieldset>
|
||||
<legend>{children}</legend>
|
||||
{optionElems}
|
||||
</fieldset>
|
||||
</div>
|
||||
);
|
||||
} else if (placeholder) {
|
||||
return (
|
||||
<div className='glitch local-settings__page__item string'>
|
||||
<label htmlFor={id}>
|
||||
<p>{children}</p>
|
||||
<p>
|
||||
<input
|
||||
id={id}
|
||||
type='text'
|
||||
value={value}
|
||||
placeholder={placeholder}
|
||||
disabled
|
||||
/>
|
||||
</p>
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
} else return (
|
||||
<div className='glitch local-settings__page__item boolean'>
|
||||
<label htmlFor={id}>
|
||||
<input
|
||||
id={id}
|
||||
type='checkbox'
|
||||
checked={value}
|
||||
disabled
|
||||
/>
|
||||
{children}
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -5,7 +5,10 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
|
||||
|
||||
// Our imports
|
||||
import { expandSpoilers, disableSwiping } from 'flavours/glitch/util/initial_state';
|
||||
import { preferenceLink } from 'flavours/glitch/util/backend_links';
|
||||
import LocalSettingsPageItem from './item';
|
||||
import DeprecatedLocalSettingsPageItem from './deprecated_item';
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
@ -146,14 +149,28 @@ class LocalSettingsPage extends React.PureComponent {
|
||||
>
|
||||
<FormattedMessage id='settings.navbar_under' defaultMessage='Navbar at the bottom (Mobile only)' />
|
||||
</LocalSettingsPageItem>
|
||||
<LocalSettingsPageItem
|
||||
settings={settings}
|
||||
item={['swipe_to_change_columns']}
|
||||
<DeprecatedLocalSettingsPageItem
|
||||
id='mastodon-settings--swipe_to_change_columns'
|
||||
onChange={onChange}
|
||||
value={!disableSwiping}
|
||||
>
|
||||
<FormattedMessage id='settings.swipe_to_change_columns' defaultMessage='Allow swiping to change columns (Mobile only)' />
|
||||
</LocalSettingsPageItem>
|
||||
<span className='hint'>
|
||||
<FormattedMessage
|
||||
id='settings.deprecated_setting'
|
||||
defaultMessage="This setting is now controlled from Mastodon's {settings_page_link}"
|
||||
values={{
|
||||
settings_page_link: (
|
||||
<a href={preferenceLink('user_setting_disable_swiping')}>
|
||||
<FormattedMessage
|
||||
id='settings.shared_settings_link'
|
||||
defaultMessage='user preferences'
|
||||
/>
|
||||
</a>
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</span>
|
||||
</DeprecatedLocalSettingsPageItem>
|
||||
</section>
|
||||
</div>
|
||||
),
|
||||
@ -242,21 +259,35 @@ class LocalSettingsPage extends React.PureComponent {
|
||||
({ intl, onChange, settings }) => (
|
||||
<div className='glitch local-settings__page content_warnings'>
|
||||
<h1><FormattedMessage id='settings.content_warnings' defaultMessage='Content warnings' /></h1>
|
||||
<LocalSettingsPageItem
|
||||
settings={settings}
|
||||
item={['content_warnings', 'auto_unfold']}
|
||||
<DeprecatedLocalSettingsPageItem
|
||||
id='mastodon-settings--content_warnings-auto_unfold'
|
||||
onChange={onChange}
|
||||
value={expandSpoilers}
|
||||
>
|
||||
<FormattedMessage id='settings.enable_content_warnings_auto_unfold' defaultMessage='Automatically unfold content-warnings' />
|
||||
</LocalSettingsPageItem>
|
||||
<span className='hint'>
|
||||
<FormattedMessage
|
||||
id='settings.deprecated_setting'
|
||||
defaultMessage="This setting is now controlled from Mastodon's {settings_page_link}"
|
||||
values={{
|
||||
settings_page_link: (
|
||||
<a href={preferenceLink('user_setting_expand_spoilers')}>
|
||||
<FormattedMessage
|
||||
id='settings.shared_settings_link'
|
||||
defaultMessage='user preferences'
|
||||
/>
|
||||
</a>
|
||||
)
|
||||
}}
|
||||
/>
|
||||
</span>
|
||||
</DeprecatedLocalSettingsPageItem>
|
||||
<LocalSettingsPageItem
|
||||
settings={settings}
|
||||
item={['content_warnings', 'filter']}
|
||||
id='mastodon-settings--content_warnings-auto_unfold'
|
||||
onChange={onChange}
|
||||
dependsOn={[['content_warnings', 'auto_unfold']]}
|
||||
placeholder={intl.formatMessage(messages.regexp)}
|
||||
disabled={!expandSpoilers}
|
||||
>
|
||||
<FormattedMessage id='settings.content_warnings_filter' defaultMessage='Content warnings to not automatically unfold:' />
|
||||
</LocalSettingsPageItem>
|
||||
|
@ -21,6 +21,7 @@ export default class LocalSettingsPageItem extends React.PureComponent {
|
||||
})),
|
||||
settings: ImmutablePropTypes.map.isRequired,
|
||||
placeholder: PropTypes.string,
|
||||
disabled: PropTypes.bool,
|
||||
};
|
||||
|
||||
handleChange = e => {
|
||||
@ -33,8 +34,8 @@ export default class LocalSettingsPageItem extends React.PureComponent {
|
||||
|
||||
render () {
|
||||
const { handleChange } = this;
|
||||
const { settings, item, id, options, children, dependsOn, dependsOnNot, placeholder } = this.props;
|
||||
let enabled = true;
|
||||
const { settings, item, id, options, children, dependsOn, dependsOnNot, placeholder, disabled } = this.props;
|
||||
let enabled = !disabled;
|
||||
|
||||
if (dependsOn) {
|
||||
for (let i = 0; i < dependsOn.length; i++) {
|
||||
|
Reference in New Issue
Block a user