import IconButton from './icon_button';
import VisibilityIcon from './status_visibility_icon';
import Icon from 'flavours/glitch/components/icon';
+import { languages } from 'flavours/glitch/util/initial_state';
// Messages for use with internationalization stuff.
const messages = defineMessages({
localOnly: { id: 'status.local_only', defaultMessage: 'Only visible from your instance' },
});
+const LanguageIcon = ({ language }) => {
+ if (!languages) return null;
+
+ const lang = languages.find((lang) => lang[0] === language);
+ if (!lang) return null;
+
+ return (
+ <span className='text-icon' title={`${lang[2]} (${lang[1]})`} aria-hidden='true'>
+ {lang[0].toUpperCase()}
+ </span>
+ );
+};
+
+LanguageIcon.propTypes = {
+ language: PropTypes.string.isRequired,
+};
+
export default @injectIntl
class StatusIcons extends React.PureComponent {
directMessage: PropTypes.bool,
setCollapsed: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
+ settings: ImmutablePropTypes.map.isRequired,
};
// Handles clicks on collapsed button
collapsible,
collapsed,
directMessage,
+ settings,
intl,
} = this.props;
return (
<div className='status__info__icons'>
- {status.get('in_reply_to_id', null) !== null ? (
+ {settings.get('language') && status.get('language') && <LanguageIcon language={status.get('language')} />}
+ {settings.get('reply') && status.get('in_reply_to_id', null) !== null ? (
<Icon
className='status__reply-icon'
fixedWidth
title={intl.formatMessage(messages.inReplyTo)}
/>
) : null}
- {status.get('local_only') &&
+ {settings.get('local_only') && status.get('local_only') &&
<Icon
fixedWidth
id='home'
aria-hidden='true'
title={intl.formatMessage(messages.localOnly)}
/>}
- { !!mediaIcons && mediaIcons.map(icon => this.renderIcon(icon)) }
- {!directMessage && <VisibilityIcon visibility={status.get('visibility')} />}
- {collapsible ? (
+ {settings.get('media') && !!mediaIcons && mediaIcons.map(icon => this.renderIcon(icon))}
+ {settings.get('visibility') && !directMessage && <VisibilityIcon visibility={status.get('visibility')} />}
+ {collapsible && (
<IconButton
className='status__collapse-button'
animate
icon='angle-double-up'
onClick={this.handleCollapsedClick}
/>
- ) : null}
+ )}
</div>
);
}
<span className='hint'><FormattedMessage id='settings.notifications.favicon_badge.hint' defaultMessage="Add a badge for unread notifications to the favicon" /></span>
</LocalSettingsPageItem>
</section>
+
+ <section>
+ <h2><FormattedMessage id='settings.status_icons' defaultMessage='Toot icons' /></h2>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['status_icons', 'language']}
+ id='mastodon-settings--status-icons-language'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.status_icons_language' defaultMessage='Language indicator' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['status_icons', 'reply']}
+ id='mastodon-settings--status-icons-reply'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.status_icons_reply' defaultMessage='Reply indicator' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['status_icons', 'local_only']}
+ id='mastodon-settings--status-icons-local_only'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.status_icons_local_only' defaultMessage='Local-only indicator' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['status_icons', 'media']}
+ id='mastodon-settings--status-icons-media'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.status_icons_media' defaultMessage='Media and poll indicators' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['status_icons', 'visibility']}
+ id='mastodon-settings--status-icons-visibility'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.status_icons_visibility' defaultMessage='Toot privacy indicator' />
+ </LocalSettingsPageItem>
+ </section>
<section>
<h2><FormattedMessage id='settings.layout_opts' defaultMessage='Layout options' /></h2>
<LocalSettingsPageItem